From 799368386b772975335691d69aabeb6bfd0c5fa4 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 10 Jul 2015 18:54:35 +0300 Subject: [PATCH] KT-6877 Wrong unused function inspection on anonymous object member #KT-6877 fixed --- .../org/jetbrains/kotlin/psi/JetPsiUtil.java | 5 ++- .../objectExpressionMemberInClass.0.kt | 12 ++++++ .../objectExpressionMemberInClass.results.txt | 1 + .../function/membersOfAnonymousInClass.kt | 43 +++++++++++++++++++ .../JetFindUsagesTestGenerated.java | 6 +++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.0.kt create mode 100644 idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.results.txt create mode 100644 idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java index 1d0cb2e82d9..9585d4f0b45 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiUtil.java @@ -805,9 +805,12 @@ public class JetPsiUtil { return ((JetClassInitializer) current).getBody(); } if (current instanceof JetProperty || current instanceof JetFunction) { - if (parent instanceof JetFile || (parent instanceof JetClassBody && !isMemberOfObjectExpression((JetCallableDeclaration) current))) { + if (parent instanceof JetFile) { return (JetElement) current; } + else if (parent instanceof JetClassBody && !isMemberOfObjectExpression((JetCallableDeclaration) current)) { + return (JetElement) parent; + } } if (current instanceof JetBlockExpression || current instanceof JetParameter) { return (JetElement) current; diff --git a/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.0.kt b/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.0.kt new file mode 100644 index 00000000000..1d5ae207e0c --- /dev/null +++ b/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.0.kt @@ -0,0 +1,12 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.JetNamedFunction +// OPTIONS: usages +class Foo { + private val localObject = object : Any() { + fun f() { + } + } + + fun bar() { + localObject.f() + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.results.txt b/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.results.txt new file mode 100644 index 00000000000..f54c371735d --- /dev/null +++ b/idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.results.txt @@ -0,0 +1 @@ +Function call (10: 21) localObject.f() \ No newline at end of file diff --git a/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt new file mode 100644 index 00000000000..7f03e71a59b --- /dev/null +++ b/idea/testData/inspections/unusedSymbol/function/membersOfAnonymousInClass.kt @@ -0,0 +1,43 @@ +class Klass { + private val localObject = object { + fun f() { + } + + val p = 5 + } + + init { + localObject.f() + localObject.p + } + + + private fun localObject2() = object { + fun f() { + } + + val p = 5 + } + + init { + localObject2().f() + localObject2().p + } + + + private val a = object { + val b = object { + val c = object { + val d = 5 + } + } + } + + init { + a.b.c.d + } +} + +fun main(args: Array) { + Klass() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java index 38e4ed55ed6..81593666055 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java @@ -648,6 +648,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { doTest(fileName); } + @TestMetadata("objectExpressionMemberInClass.0.kt") + public void testObjectExpressionMemberInClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/objectExpressionMemberInClass.0.kt"); + doTest(fileName); + } + @TestMetadata("synthesizedFunction.0.kt") public void testSynthesizedFunction() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/synthesizedFunction.0.kt");