Disallow extension properties with backing fields
#KT-1682 Fixed
This commit is contained in:
@@ -2,7 +2,7 @@ enum class E {
|
||||
entry
|
||||
}
|
||||
|
||||
val Int.entry = 42
|
||||
val Long.entry = 239
|
||||
val Int.entry: Int get() = 42
|
||||
val Long.entry: Int get() = 239
|
||||
|
||||
val e = E.entry
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
package outer
|
||||
|
||||
fun Int?.optint() : Unit {}
|
||||
val Int?.optval : Unit = Unit.VALUE
|
||||
val Int?.optval : Unit get() = Unit.VALUE
|
||||
|
||||
fun <T: Any, E> T.foo(<!UNUSED_PARAMETER!>x<!> : E, y : A) : T {
|
||||
y.plus(1)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
//KT-819 Redeclaration error for extension properties with the same name and different receivers
|
||||
|
||||
import java.io.*
|
||||
@@ -15,16 +14,20 @@ open class A() {
|
||||
open fun String.foo() {}
|
||||
open fun Int.foo() {}
|
||||
|
||||
open val String.foo = 0
|
||||
open val Int.foo = 1
|
||||
open val String.foo: Int
|
||||
get() = 0
|
||||
open val Int.foo: Int
|
||||
get() = 1
|
||||
}
|
||||
|
||||
class B() : A() {
|
||||
override fun String.foo() {}
|
||||
override fun Int.foo() {}
|
||||
|
||||
override val String.foo = 0
|
||||
override val Int.foo = 0
|
||||
override val String.foo: Int
|
||||
get() = 0
|
||||
override val Int.foo: Int
|
||||
get() = 0
|
||||
|
||||
fun use(s: String) {
|
||||
s.foo
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
object O
|
||||
|
||||
fun Any.foo() = 42
|
||||
val Any?.bar = 239
|
||||
val Any?.bar: Int get() = 239
|
||||
|
||||
val x = O.foo() + O.bar
|
||||
|
||||
@@ -10,4 +10,5 @@ object A {
|
||||
|
||||
class B
|
||||
|
||||
val B.c : String = "test"
|
||||
val B.c : String
|
||||
get() = "test"
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package foo
|
||||
|
||||
val Int.<!REDECLARATION!>foo<!> = 2
|
||||
val Int.<!REDECLARATION!>foo<!> = 3
|
||||
val Int.<!REDECLARATION!>foo<!>: Int get() = 2
|
||||
val Int.<!REDECLARATION!>foo<!>: Int get() = 3
|
||||
|
||||
@@ -26,5 +26,5 @@ class C {
|
||||
|
||||
//KT-1728 Can't invoke extension property as a function
|
||||
|
||||
val Int.ext : () -> Int = { 5 }
|
||||
val x = 1.ext()
|
||||
val Int.ext : () -> Int get() = { 5 }
|
||||
val x = 1.ext()
|
||||
|
||||
@@ -24,7 +24,8 @@ fun test(a: A) {
|
||||
//variable as extension
|
||||
trait B {
|
||||
}
|
||||
val B.foo = Foo()
|
||||
val B.foo: Foo
|
||||
get() = Foo()
|
||||
|
||||
fun test(b: B) {
|
||||
b.foo()
|
||||
|
||||
@@ -22,7 +22,8 @@ fun test(a: A) {
|
||||
|
||||
//variable as extension
|
||||
trait B {}
|
||||
val B.foo = Foo()
|
||||
val B.foo: Foo
|
||||
get() = Foo()
|
||||
|
||||
|
||||
fun test(b: B) {
|
||||
|
||||
@@ -40,7 +40,8 @@ fun test(c: C, b: B) {
|
||||
//variable as extension,
|
||||
trait D {
|
||||
}
|
||||
val D.foo = Foo()
|
||||
val D.foo: Foo
|
||||
get() = Foo()
|
||||
|
||||
class E {
|
||||
fun Foo.invoke() {}
|
||||
|
||||
@@ -10,10 +10,12 @@ class B {
|
||||
}
|
||||
|
||||
open class C
|
||||
val C.attr = A()
|
||||
val C.attr: A
|
||||
get() = A()
|
||||
|
||||
open class D: C()
|
||||
val D.attr = B()
|
||||
val D.attr: B
|
||||
get() = B()
|
||||
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package i
|
||||
|
||||
val <T> List<T>.length = <!UNRESOLVED_REFERENCE!>size<!>()
|
||||
val <T> List<T>.length = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!UNRESOLVED_REFERENCE!>size<!>()<!>
|
||||
|
||||
val <T> List<T>.length1 : Int get() = size()
|
||||
|
||||
val String.bd = <!NO_THIS!>this<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> "!"
|
||||
val String.bd = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!NO_THIS!>this<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> "!"<!>
|
||||
|
||||
val String.bd1 : String get() = this + "!"
|
||||
|
||||
@@ -13,7 +13,7 @@ class A {
|
||||
val ii : Int = 1
|
||||
}
|
||||
|
||||
val A.foo = <!UNRESOLVED_REFERENCE!>ii<!>
|
||||
val A.foo = <!UNRESOLVED_REFERENCE, EXTENSION_PROPERTY_WITH_BACKING_FIELD!>ii<!>
|
||||
|
||||
val A.foo1 : Int get() = ii
|
||||
|
||||
@@ -22,8 +22,8 @@ class C {
|
||||
inner class D {}
|
||||
}
|
||||
|
||||
val C.foo : C.D = <!UNRESOLVED_REFERENCE!>D<!>()
|
||||
val C.foo : C.D = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!UNRESOLVED_REFERENCE!>D<!>()<!>
|
||||
|
||||
val C.bar : C.D = C().D()
|
||||
val C.bar : C.D = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>C().D()<!>
|
||||
|
||||
val C.foo1 : C.D get() = D()
|
||||
val C.foo1 : C.D get() = D()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
trait Base {
|
||||
fun foo()
|
||||
}
|
||||
val String.test: Base = object: Base {
|
||||
val String.test: Base = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>object: Base<!> {
|
||||
override fun foo() {
|
||||
this<!UNRESOLVED_REFERENCE!>@test<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user