diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesHandlerFactory.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesHandlerFactory.kt index ebd02a0103e..e55fc55928a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesHandlerFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/KotlinFindUsagesHandlerFactory.kt @@ -29,6 +29,7 @@ import com.intellij.find.findUsages.JavaFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.handlers.DelegatingFindMemberUsagesHandler import org.jetbrains.kotlin.plugin.findUsages.handlers.KotlinFindUsagesHandlerDecorator import com.intellij.openapi.extensions.Extensions +import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.psi.* public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() { @@ -57,7 +58,19 @@ public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandle if (forHighlightUsages) return KotlinFindMemberUsagesHandler.getInstance(declaration, this) JetRefactoringUtil.checkSuperMethods(declaration, null, "super.methods.action.key.find.usages")?.let { callables -> - if (callables.empty) FindUsagesHandler.NULL_HANDLER else DelegatingFindMemberUsagesHandler(declaration, callables, this) + when (callables.size()) { + 0 -> FindUsagesHandler.NULL_HANDLER + 1 -> { + val target = callables.first().unwrapped ?: return FindUsagesHandler.NULL_HANDLER + if (target is JetNamedDeclaration) { + KotlinFindMemberUsagesHandler.getInstance(target, this) + } + else { + javaHandlerFactory.createFindUsagesHandler(target, false) + } + } + else -> DelegatingFindMemberUsagesHandler(declaration, callables, this) + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt index ed591d294a4..cabf7ccef53 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt @@ -16,24 +16,20 @@ package org.jetbrains.kotlin.idea.findUsages.handlers +import com.intellij.find.findUsages.AbstractFindUsagesDialog import com.intellij.find.findUsages.FindUsagesHandler +import com.intellij.find.findUsages.FindUsagesOptions +import com.intellij.find.findUsages.JavaFindUsagesHandler +import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement +import com.intellij.psi.PsiMethod import com.intellij.usageView.UsageInfo import com.intellij.util.Processor -import com.intellij.find.findUsages.FindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory -import kotlin.properties.Delegates -import org.jetbrains.kotlin.psi.JetNamedDeclaration -import com.intellij.psi.PsiMethod -import com.intellij.find.findUsages.JavaFindUsagesHandler import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.toJavaMethodOptions -import com.intellij.openapi.actionSystem.DataContext -import com.intellij.openapi.components.ServiceManager -import com.intellij.psi.xml.XmlAttribute -import org.jetbrains.kotlin.psi.JetProperty -import com.intellij.find.findUsages.JavaVariableFindUsagesOptions -import java.util.ArrayList +import org.jetbrains.kotlin.psi.JetNamedDeclaration +import kotlin.properties.Delegates class DelegatingFindMemberUsagesHandler( val declaration: JetNamedDeclaration, @@ -42,10 +38,6 @@ class DelegatingFindMemberUsagesHandler( ) : FindUsagesHandler(declaration) { private val kotlinHandler = KotlinFindMemberUsagesHandler.getInstance(declaration, elementsToSearch, factory) - private val javaHandler: JavaFindUsagesHandler by Delegates.lazy { - JavaFindUsagesHandler(declaration, elementsToSearch.copyToArray(), factory.javaHandlerFactory) - } - private fun getHandler(element: PsiElement): FindUsagesHandler? = when (element) { is JetNamedDeclaration -> @@ -57,6 +49,11 @@ class DelegatingFindMemberUsagesHandler( else -> null } + override fun getFindUsagesDialog(isSingleFile: Boolean, toShowInNewTab: Boolean, mustOpenInNewTab: Boolean): AbstractFindUsagesDialog { + return getHandler(getPsiElement())?.getFindUsagesDialog(isSingleFile, toShowInNewTab, mustOpenInNewTab) + ?: super.getFindUsagesDialog(isSingleFile, toShowInNewTab, mustOpenInNewTab) + } + override fun getPrimaryElements(): Array { return kotlinHandler.getPrimaryElements() }