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.idea.findUsages.handlers.DelegatingFindMemberUsagesHandler
|
||||||
import org.jetbrains.kotlin.plugin.findUsages.handlers.KotlinFindUsagesHandlerDecorator
|
import org.jetbrains.kotlin.plugin.findUsages.handlers.KotlinFindUsagesHandlerDecorator
|
||||||
import com.intellij.openapi.extensions.Extensions
|
import com.intellij.openapi.extensions.Extensions
|
||||||
|
import org.jetbrains.kotlin.asJava.unwrapped
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() {
|
public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandlerFactory() {
|
||||||
@@ -57,7 +58,19 @@ public class KotlinFindUsagesHandlerFactory(project: Project) : FindUsagesHandle
|
|||||||
|
|
||||||
if (forHighlightUsages) return KotlinFindMemberUsagesHandler.getInstance(declaration, this)
|
if (forHighlightUsages) return KotlinFindMemberUsagesHandler.getInstance(declaration, this)
|
||||||
JetRefactoringUtil.checkSuperMethods(declaration, null, "super.methods.action.key.find.usages")?.let { callables ->
|
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
|
package org.jetbrains.kotlin.idea.findUsages.handlers
|
||||||
|
|
||||||
|
import com.intellij.find.findUsages.AbstractFindUsagesDialog
|
||||||
import com.intellij.find.findUsages.FindUsagesHandler
|
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.PsiElement
|
||||||
|
import com.intellij.psi.PsiMethod
|
||||||
import com.intellij.usageView.UsageInfo
|
import com.intellij.usageView.UsageInfo
|
||||||
import com.intellij.util.Processor
|
import com.intellij.util.Processor
|
||||||
import com.intellij.find.findUsages.FindUsagesOptions
|
|
||||||
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
|
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.KotlinFunctionFindUsagesOptions
|
||||||
import org.jetbrains.kotlin.idea.findUsages.toJavaMethodOptions
|
import org.jetbrains.kotlin.idea.findUsages.toJavaMethodOptions
|
||||||
import com.intellij.openapi.actionSystem.DataContext
|
import org.jetbrains.kotlin.psi.JetNamedDeclaration
|
||||||
import com.intellij.openapi.components.ServiceManager
|
import kotlin.properties.Delegates
|
||||||
import com.intellij.psi.xml.XmlAttribute
|
|
||||||
import org.jetbrains.kotlin.psi.JetProperty
|
|
||||||
import com.intellij.find.findUsages.JavaVariableFindUsagesOptions
|
|
||||||
import java.util.ArrayList
|
|
||||||
|
|
||||||
class DelegatingFindMemberUsagesHandler(
|
class DelegatingFindMemberUsagesHandler(
|
||||||
val declaration: JetNamedDeclaration,
|
val declaration: JetNamedDeclaration,
|
||||||
@@ -42,10 +38,6 @@ class DelegatingFindMemberUsagesHandler(
|
|||||||
) : FindUsagesHandler(declaration) {
|
) : FindUsagesHandler(declaration) {
|
||||||
private val kotlinHandler = KotlinFindMemberUsagesHandler.getInstance(declaration, elementsToSearch, factory)
|
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? =
|
private fun getHandler(element: PsiElement): FindUsagesHandler? =
|
||||||
when (element) {
|
when (element) {
|
||||||
is JetNamedDeclaration ->
|
is JetNamedDeclaration ->
|
||||||
@@ -57,6 +49,11 @@ class DelegatingFindMemberUsagesHandler(
|
|||||||
else -> null
|
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> {
|
override fun getPrimaryElements(): Array<PsiElement> {
|
||||||
return kotlinHandler.getPrimaryElements()
|
return kotlinHandler.getPrimaryElements()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user