Refine INSTANCE_ACCESS_BEFORE_SUPER_CALL check
- Detect usages of unitialized `this` as extension receiver argument - Make it work within object literal created before super call #KT-9120 Fixed #KT-8289 Fixed
This commit is contained in:
Vendored
+15
@@ -0,0 +1,15 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun A.foobar() = 3
|
||||
|
||||
class A {
|
||||
fun foo() = 1
|
||||
constructor(x: () -> Int)
|
||||
constructor() : this(
|
||||
{
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foo<!>() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this<!>.foo() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this@A<!>.foo() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foobar<!>()
|
||||
})
|
||||
}
|
||||
Vendored
+12
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
public fun A.foobar(): kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
public constructor A(/*0*/ x: () -> kotlin.Int)
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun A.foobar() = 3
|
||||
|
||||
class A {
|
||||
fun foo() = 1
|
||||
constructor(x: Any?)
|
||||
constructor() : this(object {
|
||||
fun bar() = <!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foo<!>() + <!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this@A<!>.foo() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foobar<!>() + <!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>super@A<!>.hashCode()
|
||||
})
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
public fun A.foobar(): kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
public constructor A(/*0*/ x: kotlin.Any?)
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun A.foobar() = 3
|
||||
|
||||
class A {
|
||||
fun foo() = 1
|
||||
constructor( x: Any = object {
|
||||
fun bar() = <!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foo<!>() + <!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this@A<!>.foo() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foobar<!>()
|
||||
})
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
package
|
||||
|
||||
public fun A.foobar(): kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A(/*0*/ x: kotlin.Any = ...)
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
fun A.foobar() = 1
|
||||
val A.prop: Int get() = 2
|
||||
|
||||
class A {
|
||||
constructor(x: Int)
|
||||
constructor() : this(
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>foobar<!>() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this<!>.foobar() +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>prop<!> +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this<!>.prop +
|
||||
<!INSTANCE_ACCESS_BEFORE_SUPER_CALL!>this@A<!>.prop
|
||||
)
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package
|
||||
|
||||
public val A.prop: kotlin.Int
|
||||
public fun A.foobar(): kotlin.Int
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
public constructor A(/*0*/ 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
|
||||
}
|
||||
Reference in New Issue
Block a user