Add labels for extension properties
#KT-2824 Fixed
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
val Int.getter: Int
|
||||
get() {
|
||||
return this@getter
|
||||
}
|
||||
|
||||
var Int.setter1: Int = 2
|
||||
get() {
|
||||
return this@setter1
|
||||
}
|
||||
set(i: Int) {
|
||||
$setter1 = this@setter1
|
||||
}
|
||||
|
||||
var Int.setter2: Int = 2
|
||||
set(i: Int) {
|
||||
$setter2 = this@setter2
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val i = 1
|
||||
if (i.getter != 1) return "getter failed"
|
||||
|
||||
i.setter1 = 2
|
||||
if (i.setter1 != 1) return "setter1 failed"
|
||||
i.setter2 = 2
|
||||
if (i.setter2 != 1) return "setter2 failed"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
val Int.getter: Int
|
||||
get() {
|
||||
return {
|
||||
this@getter
|
||||
}.invoke()
|
||||
}
|
||||
|
||||
var Int.setter: Int = 1
|
||||
set(i: Int) {
|
||||
$setter = {
|
||||
this@setter
|
||||
}.invoke()
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val i = 1
|
||||
if (i.getter != 1) return "getter failed"
|
||||
|
||||
i.setter = 2
|
||||
if (i.setter != 1) return "setter failed"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
val Int.getter: Int
|
||||
get() {
|
||||
val extFun = { Int.() ->
|
||||
this@getter
|
||||
}
|
||||
return this@getter.extFun()
|
||||
}
|
||||
|
||||
|
||||
var Int.setter: Int = 1
|
||||
set(i: Int) {
|
||||
val extFun = { Int.() ->
|
||||
this@setter
|
||||
}
|
||||
this@setter.extFun()
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
val i = 1
|
||||
if (i.getter != 1) return "getter failed"
|
||||
|
||||
i.setter = 1
|
||||
if (i.setter != 1) return "setter failed"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
trait Base {
|
||||
fun foo(): Int
|
||||
}
|
||||
|
||||
val Int.getter: Int
|
||||
get() {
|
||||
return object: Base {
|
||||
override fun foo(): Int {
|
||||
return this@getter
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
|
||||
var Int.setter1: Int = 2
|
||||
set(i: Int) {
|
||||
$setter1 = object: Base {
|
||||
override fun foo(): Int {
|
||||
this@setter1
|
||||
return 1
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
|
||||
|
||||
var Int.setter2: Int = 2
|
||||
get() {
|
||||
return object: Base {
|
||||
override fun foo(): Int {
|
||||
return this@setter2
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
set(i: Int) {
|
||||
$setter2 = object: Base {
|
||||
override fun foo(): Int {
|
||||
this@setter2
|
||||
return 1
|
||||
}
|
||||
}.foo()
|
||||
}
|
||||
|
||||
|
||||
fun box(): String {
|
||||
val i = 1
|
||||
if (i.getter != 1) return "getter failed"
|
||||
|
||||
i.setter1 = 2
|
||||
if (i.setter1 != 1) return "setter1 failed"
|
||||
i.setter2 = 2
|
||||
if (i.setter2 != 1) return "setter2 failed"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
class Test {
|
||||
val Int.innerGetter: Int
|
||||
get() {
|
||||
return this@innerGetter
|
||||
}
|
||||
|
||||
fun test(): Int {
|
||||
val i = 1
|
||||
if (i.innerGetter != 1) return 0
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
if (Test().test() != 1) return "inner getter or setter failed"
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
trait Base {
|
||||
fun foo()
|
||||
}
|
||||
val String.test: Base = object: Base {
|
||||
override fun foo() {
|
||||
this<!UNRESOLVED_REFERENCE!>@test<!>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
trait Base {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
val ~getter1~Int.getter1: Int
|
||||
get() {
|
||||
return `getter1`this@getter1
|
||||
}
|
||||
|
||||
val ~getter2~Int.getter2: Base
|
||||
get() {
|
||||
return object: Base {
|
||||
override fun foo() {
|
||||
`getter2`this@getter2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val ~getter3~Int.getter3: Base
|
||||
get() = object: Base {
|
||||
override fun foo() {
|
||||
`getter3`this@getter3
|
||||
}
|
||||
}
|
||||
|
||||
val ~getter4~Int.getter4: Int
|
||||
get() {
|
||||
return {
|
||||
`getter4`this@getter4
|
||||
}.invoke()
|
||||
}
|
||||
|
||||
val ~getter5~Int.getter5: Int
|
||||
get() {
|
||||
val extFun = { Int.() ->
|
||||
`getter5`this@getter5
|
||||
}
|
||||
return `getter5`this@getter5.extFun()
|
||||
}
|
||||
|
||||
|
||||
class Test {
|
||||
val ~innerGetter1~Int.innerGetter1: Int
|
||||
get() {
|
||||
return `innerGetter1`this@innerGetter1
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
trait Base {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
var ~setter1~Int.setter1: Int = 2
|
||||
set(i: Int) {
|
||||
$setter1 = `setter1`this@setter1
|
||||
}
|
||||
|
||||
var ~setter2~Int.setter2: Base? = null
|
||||
set(i: Base?) {
|
||||
$setter2 = object: Base {
|
||||
override fun foo() {
|
||||
`setter2`this@setter2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var ~setter3~Int.setter3: Int = 1
|
||||
set(i: Int) {
|
||||
{
|
||||
`setter3`this@setter3
|
||||
}.invoke()
|
||||
}
|
||||
|
||||
var ~setter4~Int.setter4: Int = 1
|
||||
set(i: Int) {
|
||||
val extFun = { Int.() ->
|
||||
`setter4`this@setter4
|
||||
}
|
||||
`setter4`this@setter4.extFun()
|
||||
}
|
||||
Reference in New Issue
Block a user