diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/LeakingThisInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/LeakingThisInspection.kt index 09cf91c4ee6..4171dcf2d9e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/LeakingThisInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/LeakingThisInspection.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject +import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.resolve.BindingContext.LEAKING_THIS import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils @@ -35,7 +36,7 @@ class LeakingThisInspection : AbstractKotlinInspection() { if (leakingThisDescriptor.classOrObject != klass) continue@these val description = when (leakingThisDescriptor) { is NonFinalClass -> - if (expression is KtThisExpression) + if (expression is KtThisExpression && expression.getStrictParentOfType() == null) "Leaking 'this' in constructor of non-final class ${leakingThisDescriptor.klass.name}" else continue@these // Not supported yet diff --git a/idea/testData/inspectionsLocal/leakingThis/inClassLiteral.kt b/idea/testData/inspectionsLocal/leakingThis/inClassLiteral.kt new file mode 100644 index 00000000000..76b0223d21c --- /dev/null +++ b/idea/testData/inspectionsLocal/leakingThis/inClassLiteral.kt @@ -0,0 +1,20 @@ +// PROBLEM: none + +import kotlin.reflect.KClass + +open class Foo { + init { + test(this::class) + } +} + +private fun test(c: KClass) { +// println(c) +} + +class Bar : Foo() + +fun main(args: Array) { + Foo() + Bar() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 4c0ed40d124..94c9a6d9b84 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2587,6 +2587,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/inspectionsLocal/leakingThis"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), TargetBackend.ANY, true); } + @TestMetadata("inClassLiteral.kt") + public void testInClassLiteral() throws Exception { + runTest("idea/testData/inspectionsLocal/leakingThis/inClassLiteral.kt"); + } + @TestMetadata("noOpenForInterface.kt") public void testNoOpenForInterface() throws Exception { runTest("idea/testData/inspectionsLocal/leakingThis/noOpenForInterface.kt");