Find Usages: Properly select primary element for Find Usages Dialog. Avoid delegating handler when there is only one primary element
#KT-7048 Fixed
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
-15
@@ -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<PsiElement> {
|
||||
return kotlinHandler.getPrimaryElements()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user