From 11675322eeaaf63bc0c39de4a6420f12e2233284 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 27 Mar 2015 16:23:22 +0300 Subject: [PATCH] Find Usages: Fix exception in the search of class with default parameters in primary constructor --- .../findUsages/handlers/KotlinFindClassUsagesHandler.kt | 2 ++ .../primaryConstructorWithDefaultParams.0.kt | 8 ++++++++ .../primaryConstructorWithDefaultParams.results.txt | 2 ++ .../kotlin/findUsages/JetFindUsagesTestGenerated.java | 6 ++++++ 4 files changed, 18 insertions(+) create mode 100644 idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt create mode 100644 idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.results.txt diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index bfe02c2a785..37933bbd722 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -43,6 +43,7 @@ import com.intellij.find.findUsages.JavaFindUsagesHandlerFactory import com.intellij.psi.PsiMethod import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.util.CommonProcessors +import org.jetbrains.kotlin.asJava.KotlinLightMethod import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages @@ -93,6 +94,7 @@ public class KotlinFindClassUsagesHandler( if (kotlinOptions.searchConstructorUsages) { val constructors = classOrObject.toLightClass()?.getConstructors() ?: PsiMethod.EMPTY_ARRAY for (constructor in constructors) { + if (constructor !is KotlinLightMethod) continue constructor.processDelegationCallConstructorUsages(constructor.getUseScope()) { it.getCalleeExpression()?.getReference()?.let { KotlinFindUsagesHandler.processUsage(uniqueProcessor, it) } } diff --git a/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt b/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt new file mode 100644 index 00000000000..4971773a259 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt @@ -0,0 +1,8 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.JetClass +// OPTIONS: usages, constructorUsages +class A(a: Int = 1) + +fun test() { + A(0) + A() +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.results.txt new file mode 100644 index 00000000000..6c922e196f9 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.results.txt @@ -0,0 +1,2 @@ +New instance creation (6: 5) A(0) +New instance creation (7: 5) A() \ 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 9a7e260a0e8..9d3fab5c629 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java @@ -527,6 +527,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/kotlinTraitDerivedTraits.0.kt"); doTest(fileName); } + + @TestMetadata("primaryConstructorWithDefaultParams.0.kt") + public void testPrimaryConstructorWithDefaultParams() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findClassUsages/primaryConstructorWithDefaultParams.0.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/findUsages/kotlin/findFunctionUsages")