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 1054d41ae66..bf43cae4aeb 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -24,6 +24,7 @@ import com.intellij.psi.PsiClass import com.intellij.psi.PsiElement import com.intellij.psi.search.PsiElementProcessor import com.intellij.psi.search.PsiElementProcessorAdapter +import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.usageView.UsageInfo import com.intellij.util.FilteredQuery @@ -34,7 +35,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.findUsages.KotlinClassFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindClassUsagesDialog -import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.searchInheritors import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions @@ -42,7 +42,6 @@ import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchPar import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.search.usagesSearch.isConstructorUsage import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage -import org.jetbrains.kotlin.idea.search.usagesSearch.buildProcessDelegationCallConstructorUsagesTask import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType @@ -99,10 +98,11 @@ class KotlinFindClassUsagesHandler( if (kotlinOptions.searchConstructorUsages) { classOrObject.toLightClass()?.constructors?.filterIsInstance()?.forEach { constructor -> val scope = constructor.useScope.intersectWith(options.searchScope) - val task = constructor.buildProcessDelegationCallConstructorUsagesTask(scope) { - it.calleeExpression?.mainReference?.let { referenceProcessor.process(it) } ?: false + var query = MethodReferencesSearch.search(constructor, scope, true) + if (kotlinOptions.isSkipImportStatements) { + query = FilteredQuery(query) { !it.isImportUsage() } } - addTask(task) + addTask { query.forEach(Processor { referenceProcessor.process(it) }) } } } diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinDeeplyNestedClassAllUsages.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinDeeplyNestedClassAllUsages.results.txt index 193330fb709..20f563717bd 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinDeeplyNestedClassAllUsages.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinDeeplyNestedClassAllUsages.results.txt @@ -18,4 +18,5 @@ [kotlinDeeplyNestedClassAllUsages.1.kt] Usage in cast target type 41 return if (this is Inner.A) this as Inner.A else null [kotlinDeeplyNestedClassAllUsages.2.java] Field declaration 6 Inner.A next = new Inner.A(); [kotlinDeeplyNestedClassAllUsages.2.java] New instance creation 6 Inner.A next = new Inner.A(); -[kotlinDeeplyNestedClassAllUsages.2.java] Usage in extends/implements clause 5 public class X extends Inner.A { +[kotlinDeeplyNestedClassAllUsages.2.java] Unclassified usage 5 public class X extends Inner.A { +[kotlinDeeplyNestedClassAllUsages.2.java] Usage in extends/implements clause 5 public class X extends Inner.A { \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinInnerClassAllUsages.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinInnerClassAllUsages.results.txt index c338c8804a2..c7469eb4c43 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinInnerClassAllUsages.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinInnerClassAllUsages.results.txt @@ -18,4 +18,5 @@ [kotlinInnerClassAllUsages.1.kt] Usage in cast target type 38 return if (this is Outer.A) this as Outer.A else null [kotlinInnerClassAllUsages.2.java] Field declaration 10 A next = new A(); [kotlinInnerClassAllUsages.2.java] New instance creation 10 A next = new A(); -[kotlinInnerClassAllUsages.2.java] Usage in extends/implements clause 6 class Y extends A { +[kotlinInnerClassAllUsages.2.java] Unclassified usage 6 class Y extends A { +[kotlinInnerClassAllUsages.2.java] Usage in extends/implements clause 6 class Y extends A { \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findClassUsages/kotlinNestedClassAllUsages.results.txt b/idea/testData/findUsages/kotlin/findClassUsages/kotlinNestedClassAllUsages.results.txt index 257513f4caa..8bcd8e54fa9 100644 --- a/idea/testData/findUsages/kotlin/findClassUsages/kotlinNestedClassAllUsages.results.txt +++ b/idea/testData/findUsages/kotlin/findClassUsages/kotlinNestedClassAllUsages.results.txt @@ -18,4 +18,5 @@ [kotlinNestedClassAllUsages.1.kt] Usage in cast target type 41 return if (this is Outer.A) this as Outer.A else null [kotlinNestedClassAllUsages.2.java] Field declaration 6 Outer.A next = new Outer.A(); [kotlinNestedClassAllUsages.2.java] New instance creation 6 Outer.A next = new Outer.A(); -[kotlinNestedClassAllUsages.2.java] Usage in extends/implements clause 5 public class X extends Outer.A { +[kotlinNestedClassAllUsages.2.java] Unclassified usage 5 public class X extends Outer.A { +[kotlinNestedClassAllUsages.2.java] Usage in extends/implements clause 5 public class X extends Outer.A { \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/unresolvedAnnotation/unresolvedAnnotation.results.txt b/idea/testData/findUsages/kotlin/unresolvedAnnotation/unresolvedAnnotation.results.txt index 6c930f16f5c..f9f7443023c 100644 --- a/idea/testData/findUsages/kotlin/unresolvedAnnotation/unresolvedAnnotation.results.txt +++ b/idea/testData/findUsages/kotlin/unresolvedAnnotation/unresolvedAnnotation.results.txt @@ -1 +1,2 @@ -Usage in extends/implements clause 1 public class Client extends Foo {} +Unclassified usage 1 public class Client extends Foo {} +Usage in extends/implements clause 1 public class Client extends Foo {} \ No newline at end of file diff --git a/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryClassUsages.results.txt b/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryClassUsages.results.txt index 565f83f031c..d3521910b2c 100644 --- a/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryClassUsages.results.txt +++ b/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryClassUsages.results.txt @@ -7,6 +7,7 @@ [LibraryClassUsages.1.java] Local variable declaration 12 A aa = new A(1); [LibraryClassUsages.1.java] New instance creation 11 A a = new A(); [LibraryClassUsages.1.java] New instance creation 12 A aa = new A(1); +[LibraryClassUsages.1.java] Unclassified usage 7 super(n); [LibraryClassUsages.1.java] Usage in extends/implements clause 5 class J extends A { [library.kt] Nested class/object 63 val t = A.T(1) [library.kt] Nested class/object 64 val tt = A.T() @@ -21,4 +22,4 @@ [library.kt] Supertype 34 class UU: A.T { [library.kt] Supertype 39 class CC(): A() { [library.kt] Supertype 40 class VV(): A.T() -[library.kt] Unclassified usage 61 val ff = A::foo +[library.kt] Unclassified usage 61 val ff = A::foo \ No newline at end of file diff --git a/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryNestedClassUsages.results.txt b/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryNestedClassUsages.results.txt index 02b7f6cc36e..513a893c40e 100644 --- a/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryNestedClassUsages.results.txt +++ b/idea/testData/findUsages/libraryUsages/kotlinLibrary/LibraryNestedClassUsages.results.txt @@ -7,6 +7,7 @@ [LibraryNestedClassUsages.1.java] Local variable declaration 12 A.T tt = new A.T(1); [LibraryNestedClassUsages.1.java] New instance creation 11 A.T t = new A.T(); [LibraryNestedClassUsages.1.java] New instance creation 12 A.T tt = new A.T(1); +[LibraryNestedClassUsages.1.java] Unclassified usage 7 super(n); [LibraryNestedClassUsages.1.java] Usage in extends/implements clause 5 class J extends A.T { [library.kt] New instance creation 63 val t = A.T(1) [library.kt] New instance creation 64 val tt = A.T() @@ -14,4 +15,4 @@ [library.kt] Supertype 28 class V(): A.T(1) [library.kt] Supertype 34 class UU: A.T { [library.kt] Supertype 40 class VV(): A.T() -[library.kt] Unclassified usage 66 val fff = A.T::bar +[library.kt] Unclassified usage 66 val fff = A.T::bar \ No newline at end of file