"field": synthetic variable creation in accessors, codegen changed accordingly, a set of tests, relevant code fix (j2k)

This commit is contained in:
Mikhail Glukhikh
2015-09-16 11:12:33 +03:00
parent 6282a16013
commit 9f640b00d9
26 changed files with 315 additions and 8 deletions
@@ -0,0 +1,9 @@
class My(val field: Int) {
// Backing field, initializer
val second: Int = 0
get() = field
// No backing field, no initializer
val third: Int
get() = this.field
}
@@ -0,0 +1,11 @@
package
public final class My {
public constructor My(/*0*/ field: kotlin.Int)
public final val field: kotlin.Int
public final val second: kotlin.Int = 0
public final val third: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,18 @@
open class Base {
open val x: Int = 1
get() = field - 1
}
class Other: Base() {
override val x = 2
}
class Another: Base() {
override val x = 3
get() = field + 1
}
class NoBackingField: Base() {
override val x: Int
get() = 5
}
@@ -0,0 +1,33 @@
package
public final class Another : Base {
public constructor Another()
public open override /*1*/ val x: kotlin.Int = 3
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class Base {
public constructor Base()
public open val x: kotlin.Int = 1
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class NoBackingField : Base {
public constructor NoBackingField()
public open override /*1*/ val x: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Other : Base {
public constructor Other()
public open override /*1*/ val x: kotlin.Int = 2
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,4 @@
interface My {
<!BACKING_FIELD_IN_TRAIT!>val x: Int<!> = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>
get() = field
}
@@ -0,0 +1,8 @@
package
public interface My {
public open val x: kotlin.Int = 0
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,11 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
fun foo() {
open class Local {
val my: Int = 2
get() = field
}
val your = object: Local() {
val your: Int = 3
get() = field
}
}
@@ -0,0 +1,3 @@
package
public fun foo(): kotlin.Unit
@@ -0,0 +1,2 @@
val my: Int = 21
get() = field * 2
@@ -0,0 +1,3 @@
package
public val my: kotlin.Int = 21
@@ -0,0 +1,5 @@
var my: Int = 0
get() = -field
set(arg) {
field = arg
}
@@ -0,0 +1,3 @@
package
public var my: kotlin.Int
@@ -0,0 +1,8 @@
class My {
// No initialization needed because no backing field
val two: Int
get() {
val <!NAME_SHADOWING!>field<!> = 2
return field
}
}
@@ -0,0 +1,9 @@
package
public final class My {
public constructor My()
public final val two: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}