KT-12152 : leaking this inspection: accessing non-final member / this in non-final class
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
class First {
|
||||
val x: String
|
||||
|
||||
init {
|
||||
use(<!DEBUG_INFO_LEAKING_THIS!>this<!>) // NPE! Leaking this
|
||||
x = <!DEBUG_INFO_LEAKING_THIS!>foo<!>() // NPE! Own function
|
||||
}
|
||||
|
||||
fun foo() = x
|
||||
}
|
||||
|
||||
fun use(first: First) = first.x.hashCode()
|
||||
|
||||
abstract class Second {
|
||||
val x: String
|
||||
|
||||
init {
|
||||
use(<!DEBUG_INFO_LEAKING_THIS!>this<!>) // Leaking this in non-final
|
||||
x = <!DEBUG_INFO_LEAKING_THIS!>bar<!>() // Own function in non-final
|
||||
<!DEBUG_INFO_LEAKING_THIS!>foo<!>() // Non-final function call
|
||||
}
|
||||
|
||||
private fun bar() = foo()
|
||||
|
||||
abstract fun foo(): String
|
||||
}
|
||||
|
||||
fun use(second: Second) = second.x
|
||||
|
||||
class SecondDerived : Second() {
|
||||
val y = x // null!
|
||||
|
||||
override fun foo() = y
|
||||
}
|
||||
|
||||
open class Third {
|
||||
open var x: String
|
||||
|
||||
constructor() {
|
||||
<!DEBUG_INFO_LEAKING_THIS!>x<!> = "X" // Non-final property access
|
||||
}
|
||||
}
|
||||
|
||||
class ThirdDerived : Third() {
|
||||
override var x: String = "Y"
|
||||
set(arg) { field = "$arg$y" }
|
||||
|
||||
val y = ""
|
||||
}
|
||||
|
||||
class Fourth {
|
||||
val x: String
|
||||
get() = y
|
||||
|
||||
val y = <!DEBUG_INFO_LEAKING_THIS!>x<!> // null!
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package
|
||||
|
||||
public fun use(/*0*/ first: First): kotlin.Int
|
||||
public fun use(/*0*/ second: Second): kotlin.String
|
||||
|
||||
public final class First {
|
||||
public constructor First()
|
||||
public final val x: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class Fourth {
|
||||
public constructor Fourth()
|
||||
public final val x: kotlin.String
|
||||
public final val y: 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 abstract class Second {
|
||||
public constructor Second()
|
||||
public final val x: kotlin.String
|
||||
private final fun bar(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class SecondDerived : Second {
|
||||
public constructor SecondDerived()
|
||||
public final override /*1*/ /*fake_override*/ val x: kotlin.String
|
||||
public final val y: kotlin.String
|
||||
invisible_fake final override /*1*/ /*fake_override*/ fun bar(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class Third {
|
||||
public constructor Third()
|
||||
public open var x: 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 ThirdDerived : Third {
|
||||
public constructor ThirdDerived()
|
||||
public open override /*1*/ var x: kotlin.String
|
||||
public final val y: 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
|
||||
}
|
||||
Reference in New Issue
Block a user