Secondary constructors delegation calls and body resolve

This commit is contained in:
Denis Zharkov
2015-02-03 14:14:37 +03:00
parent b2cecf1dd0
commit 1555eec954
71 changed files with 1093 additions and 50 deletions
@@ -0,0 +1,4 @@
class A<T> {
constructor(x: T) {}
<caret>constructor(block: () -> T): this(block()) {}
}
@@ -0,0 +1,18 @@
class A<T> {
constructor(x: T) {}
<caret>constructor(block: () -> T): this(block()) {}
}
Resolved call:
Candidate descriptor: constructor A<T>(x: T) defined in A
Resulting descriptor: constructor A<T>(x: T) defined in A
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : T = block()
@@ -0,0 +1,7 @@
open class B<T> {
constructor(x: T = null!!) {}
}
class A : B<Int> {
<caret>constructor() {}
}
@@ -0,0 +1,17 @@
open class B<T> {
constructor(x: T = null!!) {}
}
class A : B<Int> {
<caret>constructor() {}
}
Resolved call:
Candidate descriptor: constructor B<T>(x: T = ...) defined in B
Resulting descriptor: constructor B<T>(x: Int = ...) defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,5 @@
class A {
inner class B(arg: String) {
<caret>constructor (arg: Int): this("") {}
}
}
@@ -0,0 +1,18 @@
class A {
inner class B(arg: String) {
<caret>constructor (arg: Int): this("") {}
}
}
Resolved call:
Resulting descriptor: constructor B(arg: String) defined in A.B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = Class{A}
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS arg : String = ""
@@ -0,0 +1,6 @@
class A {
inner class B {
constructor(x: String) {}
<caret>constructor (arg: Int): this("") {}
}
}
@@ -0,0 +1,19 @@
class A {
inner class B {
constructor(x: String) {}
<caret>constructor (arg: Int): this("") {}
}
}
Resolved call:
Resulting descriptor: constructor B(x: String) defined in A.B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = Class{A}
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : String = ""
@@ -0,0 +1,3 @@
class A {
<caret>constructor(): super() { }
}
@@ -0,0 +1,12 @@
class A {
<caret>constructor(): super() { }
}
Resolved call:
Resulting descriptor: constructor Any() defined in kotlin.Any
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,3 @@
class A {
<caret>constructor() { }
}
@@ -0,0 +1,12 @@
class A {
<caret>constructor() { }
}
Resolved call:
Resulting descriptor: constructor Any() defined in kotlin.Any
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,5 @@
open class B(x: Int)
trait C
class A : B, C {
<caret>constructor(): super(1) { }
}
@@ -0,0 +1,18 @@
open class B(x: Int)
trait C
class A : B, C {
<caret>constructor(): super(1) { }
}
Resolved call:
Resulting descriptor: constructor B(x: Int) defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : Int = 1
@@ -0,0 +1,5 @@
open class B
trait C
class A : B, C {
<caret>constructor(): super() { }
}
@@ -0,0 +1,14 @@
open class B
trait C
class A : B, C {
<caret>constructor(): super() { }
}
Resolved call:
Resulting descriptor: constructor B() defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,5 @@
open class B
trait C
class A : B, C {
<caret>constructor() { }
}
@@ -0,0 +1,14 @@
open class B
trait C
class A : B, C {
<caret>constructor() { }
}
Resolved call:
Resulting descriptor: constructor B() defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,7 @@
open class B {
constructor(x: Int) {}
}
trait C
class A : B, C {
<caret>constructor(): super(1) { }
}
@@ -0,0 +1,20 @@
open class B {
constructor(x: Int) {}
}
trait C
class A : B, C {
<caret>constructor(): super(1) { }
}
Resolved call:
Resulting descriptor: constructor B(x: Int) defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : Int = 1
@@ -0,0 +1,7 @@
open class B {
constructor() {}
}
trait C
class A : B, C {
<caret>constructor() { }
}
@@ -0,0 +1,16 @@
open class B {
constructor() {}
}
trait C
class A : B, C {
<caret>constructor() { }
}
Resolved call:
Resulting descriptor: constructor B() defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
@@ -0,0 +1,8 @@
open class B(x: Double) {
constructor(x: Int) {}
constructor(x: String) {}
}
trait C
class A : B, C {
<caret>constructor(): super("abc") { }
}
@@ -0,0 +1,21 @@
open class B(x: Double) {
constructor(x: Int) {}
constructor(x: String) {}
}
trait C
class A : B, C {
<caret>constructor(): super("abc") { }
}
Resolved call:
Resulting descriptor: constructor B(x: String) defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : String = "abc"
@@ -0,0 +1,3 @@
class A(x: Int) {
<caret>constructor(): this(1) {}
}
@@ -0,0 +1,16 @@
class A(x: Int) {
<caret>constructor(): this(1) {}
}
Resolved call:
Resulting descriptor: constructor A(x: Int) defined in A
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : Int = 1
@@ -0,0 +1,3 @@
class A() {
<caret>constructor(): this() {}
}
@@ -0,0 +1,6 @@
class A() {
<caret>constructor(): this() {}
}
null
@@ -0,0 +1,4 @@
class A {
constructor(x: Int) {}
<caret>constructor(): this(1) {}
}
@@ -0,0 +1,17 @@
class A {
constructor(x: Int) {}
<caret>constructor(): this(1) {}
}
Resolved call:
Resulting descriptor: constructor A(x: Int) defined in A
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : Int = 1
@@ -0,0 +1,5 @@
class A(x: Double) {
constructor(x: Int) {}
constructor(x: String) {}
<caret>constructor(): this("abc") {}
}
@@ -0,0 +1,18 @@
class A(x: Double) {
constructor(x: Int) {}
constructor(x: String) {}
<caret>constructor(): this("abc") {}
}
Resolved call:
Resulting descriptor: constructor A(x: String) defined in A
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : String = "abc"
@@ -0,0 +1,7 @@
open class B {
constructor(vararg x: Int) {}
}
class A : B {
<caret>constructor(vararg x: Int): super(*x, *intArray(1, 2, 3), 4) {}
}
@@ -0,0 +1,22 @@
open class B {
constructor(vararg x: Int) {}
}
class A : B {
<caret>constructor(vararg x: Int): super(*x, *intArray(1, 2, 3), 4) {}
}
Resolved call:
Resulting descriptor: constructor B(vararg x: Int) defined in B
Explicit receiver kind = NO_EXPLICIT_RECEIVER
Dispatch receiver = NO_RECEIVER
Extension receiver = NO_RECEIVER
Value arguments mapping:
SUCCESS x : IntArray = x
SUCCESS x : IntArray = intArray(1, 2, 3)
SUCCESS x : IntArray = 4