K1: add use-site diagnostic about property shadowing by a field
Related to KT-50082
This commit is contained in:
committed by
teamcity
parent
59bafedd8a
commit
6234da4c86
+48
@@ -0,0 +1,48 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: Base.java
|
||||
|
||||
public class Base {
|
||||
public String regular = "a";
|
||||
|
||||
public String withGetter = "b";
|
||||
|
||||
public String lateInit = "c";
|
||||
|
||||
public String lazyProp = "d";
|
||||
|
||||
public String withSetter = "e";
|
||||
|
||||
public String openProp = "f";
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
open class Derived : Base() {
|
||||
val regular = "aa"
|
||||
|
||||
val withGetter get() = "bb"
|
||||
|
||||
lateinit var lateInit: String
|
||||
|
||||
val lazyProp by lazy { "dd" }
|
||||
|
||||
var withSetter: String = "ee"
|
||||
set(value) {
|
||||
println(value)
|
||||
field = value
|
||||
}
|
||||
|
||||
open val openProp = "ff"
|
||||
}
|
||||
|
||||
fun test(d: Derived) {
|
||||
d.regular
|
||||
d.withGetter
|
||||
d.lateInit
|
||||
d.lazyProp
|
||||
d.withSetter = ""
|
||||
d.openProp
|
||||
|
||||
d::withGetter
|
||||
Derived::withGetter
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// WITH_STDLIB
|
||||
// FILE: Base.java
|
||||
|
||||
public class Base {
|
||||
public String regular = "a";
|
||||
|
||||
public String withGetter = "b";
|
||||
|
||||
public String lateInit = "c";
|
||||
|
||||
public String lazyProp = "d";
|
||||
|
||||
public String withSetter = "e";
|
||||
|
||||
public String openProp = "f";
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
open class Derived : Base() {
|
||||
val regular = "aa"
|
||||
|
||||
val withGetter get() = "bb"
|
||||
|
||||
lateinit var lateInit: String
|
||||
|
||||
val lazyProp by lazy { "dd" }
|
||||
|
||||
var withSetter: String = "ee"
|
||||
set(value) {
|
||||
println(value)
|
||||
field = value
|
||||
}
|
||||
|
||||
open val openProp = "ff"
|
||||
}
|
||||
|
||||
fun test(d: Derived) {
|
||||
d.regular
|
||||
d.<!BASE_CLASS_FIELD_SHADOWS_DERIVED_CLASS_PROPERTY("Base; Derived")!>withGetter<!>
|
||||
d.<!BACKING_FIELD_ACCESSED_DUE_TO_PROPERTY_FIELD_CONFLICT("Base; Derived")!>lateInit<!>
|
||||
d.<!BASE_CLASS_FIELD_SHADOWS_DERIVED_CLASS_PROPERTY("Base; Derived")!>lazyProp<!>
|
||||
d.<!BACKING_FIELD_ACCESSED_DUE_TO_PROPERTY_FIELD_CONFLICT("Base; Derived")!>withSetter<!> = ""
|
||||
d.<!BASE_CLASS_FIELD_MAY_SHADOW_DERIVED_CLASS_PROPERTY("Base; Derived")!>openProp<!>
|
||||
|
||||
d::<!BASE_CLASS_FIELD_SHADOWS_DERIVED_CLASS_PROPERTY!>withGetter<!>
|
||||
Derived::<!BASE_CLASS_FIELD_SHADOWS_DERIVED_CLASS_PROPERTY!>withGetter<!>
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package
|
||||
|
||||
public fun test(/*0*/ d: Derived): kotlin.Unit
|
||||
|
||||
public open class Base {
|
||||
public constructor Base()
|
||||
public final var lateInit: kotlin.String!
|
||||
public final var lazyProp: kotlin.String!
|
||||
public final var openProp: kotlin.String!
|
||||
public final var regular: kotlin.String!
|
||||
public final var withGetter: kotlin.String!
|
||||
public final var withSetter: kotlin.String!
|
||||
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 Derived : Base {
|
||||
public constructor Derived()
|
||||
public final lateinit var lateInit: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var lateInit: kotlin.String!
|
||||
public final val lazyProp: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var lazyProp: kotlin.String!
|
||||
public open val openProp: kotlin.String = "ff"
|
||||
public final override /*1*/ /*fake_override*/ var openProp: kotlin.String!
|
||||
public final val regular: kotlin.String = "aa"
|
||||
public final override /*1*/ /*fake_override*/ var regular: kotlin.String!
|
||||
public final val withGetter: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var withGetter: kotlin.String!
|
||||
public final var withSetter: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var withSetter: kotlin.String!
|
||||
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
|
||||
}
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: -PreferJavaFieldOverload
|
||||
// WITH_STDLIB
|
||||
// FILE: Base.java
|
||||
|
||||
public class Base {
|
||||
public String a = "a";
|
||||
|
||||
public String b = "b";
|
||||
|
||||
public String c = "c";
|
||||
|
||||
public String d = "d";
|
||||
|
||||
public String e = "e";
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
class Derived : Base() {
|
||||
val a = "aa"
|
||||
|
||||
val b get() = "bb"
|
||||
|
||||
lateinit var c: String
|
||||
|
||||
val d by lazy { "dd" }
|
||||
|
||||
var e: String = "ee"
|
||||
set(value) {
|
||||
println(value)
|
||||
field = value
|
||||
}
|
||||
}
|
||||
|
||||
fun test(d: Derived) {
|
||||
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>a<!>
|
||||
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>b<!>
|
||||
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>c<!>
|
||||
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>d<!>
|
||||
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>e<!> = ""
|
||||
}
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package
|
||||
|
||||
public fun test(/*0*/ d: Derived): kotlin.Unit
|
||||
|
||||
public open class Base {
|
||||
public constructor Base()
|
||||
public final var a: kotlin.String!
|
||||
public final var b: kotlin.String!
|
||||
public final var c: kotlin.String!
|
||||
public final var d: kotlin.String!
|
||||
public final var e: kotlin.String!
|
||||
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 Derived : Base {
|
||||
public constructor Derived()
|
||||
public final val a: kotlin.String = "aa"
|
||||
public final override /*1*/ /*fake_override*/ var a: kotlin.String!
|
||||
public final val b: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var b: kotlin.String!
|
||||
public final lateinit var c: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var c: kotlin.String!
|
||||
public final val d: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var d: kotlin.String!
|
||||
public final var e: kotlin.String
|
||||
public final override /*1*/ /*fake_override*/ var e: kotlin.String!
|
||||
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,21 @@
|
||||
// !LANGUAGE: +PreferJavaFieldOverload
|
||||
|
||||
// FILE: B.java
|
||||
|
||||
public abstract class B implements A {
|
||||
public int size = 1;
|
||||
}
|
||||
|
||||
// FILE: main.kt
|
||||
|
||||
interface A {
|
||||
val size: Int
|
||||
}
|
||||
|
||||
class C : B() {
|
||||
override val size: Int get() = 1
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
C().size
|
||||
}
|
||||
@@ -1,4 +1,3 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +PreferJavaFieldOverload
|
||||
|
||||
// FILE: B.java
|
||||
@@ -18,5 +17,5 @@ class C : B() {
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
C().size
|
||||
}
|
||||
C().<!BASE_CLASS_FIELD_SHADOWS_DERIVED_CLASS_PROPERTY!>size<!>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user