From abbfea357acbbbb1f84d5ebd185d09329c06ff77 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 20 Jun 2018 18:16:08 +0300 Subject: [PATCH] Add find usages option: search expected --- .../dialogs/KotlinFindClassUsagesDialog.java | 37 ++++++++++++++++--- .../KotlinFindFunctionUsagesDialog.java | 35 ++++++++++++++++++ .../KotlinFindPropertyUsagesDialog.java | 14 +++++++ .../idea/findUsages/findUsagesOptions.kt | 13 ++++++- 4 files changed, 92 insertions(+), 7 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindClassUsagesDialog.java b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindClassUsagesDialog.java index 79165721912..cdfa2c438e6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindClassUsagesDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindClassUsagesDialog.java @@ -30,6 +30,7 @@ import com.intellij.psi.PsiModifier; import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.StateRestoringCheckBox; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.asJava.LightClassUtilsKt; import org.jetbrains.kotlin.idea.KotlinBundle; import org.jetbrains.kotlin.idea.core.PsiModificationUtilsKt; @@ -37,6 +38,8 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinClassFindUsagesOptions; import org.jetbrains.kotlin.idea.refactoring.RenderingUtilsKt; import org.jetbrains.kotlin.psi.KtClass; import org.jetbrains.kotlin.psi.KtClassOrObject; +import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt; + import javax.swing.*; import static org.jetbrains.kotlin.asJava.LightClassUtilsKt.toLightClass; @@ -45,6 +48,7 @@ public class KotlinFindClassUsagesDialog extends FindClassUsagesDialog { private StateRestoringCheckBox constructorUsages; private StateRestoringCheckBox derivedClasses; private StateRestoringCheckBox derivedTraits; + private StateRestoringCheckBox expectedUsages; public KotlinFindClassUsagesDialog( KtClassOrObject classOrObject, @@ -144,14 +148,36 @@ public class KotlinFindClassUsagesDialog extends FindClassUsagesDialog { return (KotlinClassFindUsagesOptions) super.getFindUsagesOptions(); } - @Override - public void configureLabelComponent(@NotNull SimpleColoredComponent coloredComponent) { + @Nullable + private KtClassOrObject getOriginalClass() { PsiElement klass = LightClassUtilsKt.getUnwrapped(getPsiElement()); //noinspection ConstantConditions - KtClassOrObject originalClass = klass instanceof KtClassOrObject - ? (KtClassOrObject) klass - : klass.getUserData(ORIGINAL_CLASS); + return klass instanceof KtClassOrObject + ? (KtClassOrObject) klass + : klass.getUserData(ORIGINAL_CLASS); + } + @Override + protected void addUsagesOptions(JPanel optionsPanel) { + super.addUsagesOptions(optionsPanel); + + KtClassOrObject klass = getOriginalClass(); + boolean isActual = klass != null && PsiUtilsKt.hasActualModifier(klass); + KotlinClassFindUsagesOptions options = getFindUsagesOptions(); + if (isActual) { + expectedUsages = addCheckboxToPanel( + "Expected classes", + options.getSearchExpected(), + optionsPanel, + false + ); + } + + } + + @Override + public void configureLabelComponent(@NotNull SimpleColoredComponent coloredComponent) { + KtClassOrObject originalClass = getOriginalClass(); if (originalClass != null) { coloredComponent.append(RenderingUtilsKt.formatClass(originalClass)); } @@ -173,5 +199,6 @@ public class KotlinFindClassUsagesDialog extends FindClassUsagesDialog { kotlinOptions.setSearchConstructorUsages(constructorUsages.isSelected()); kotlinOptions.isDerivedClasses = derivedClasses.isSelected(); kotlinOptions.isDerivedInterfaces = derivedTraits.isSelected(); + kotlinOptions.setSearchExpected(isSelected(expectedUsages)); } } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindFunctionUsagesDialog.java b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindFunctionUsagesDialog.java index 3994177d595..7d521642897 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindFunctionUsagesDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindFunctionUsagesDialog.java @@ -20,17 +20,27 @@ import com.intellij.find.FindBundle; import com.intellij.find.FindSettings; import com.intellij.find.findUsages.FindMethodUsagesDialog; import com.intellij.find.findUsages.FindUsagesHandler; +import com.intellij.find.findUsages.JavaMethodFindUsagesOptions; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.ui.SimpleColoredComponent; +import com.intellij.ui.StateRestoringCheckBox; import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.asJava.LightClassUtilsKt; +import org.jetbrains.kotlin.asJava.elements.KtLightMethod; import org.jetbrains.kotlin.idea.KotlinBundle; import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions; import org.jetbrains.kotlin.idea.refactoring.RenderingUtilsKt; +import org.jetbrains.kotlin.psi.KtDeclaration; +import org.jetbrains.kotlin.psi.KtNamedDeclaration; +import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt; import javax.swing.*; public class KotlinFindFunctionUsagesDialog extends FindMethodUsagesDialog { + private StateRestoringCheckBox expectedUsages; + public KotlinFindFunctionUsagesDialog( PsiMethod method, Project project, @@ -43,6 +53,7 @@ public class KotlinFindFunctionUsagesDialog extends FindMethodUsagesDialog { super(method, project, findUsagesOptions, toShowInNewTab, mustOpenInNewTab, isSingleFile, handler); } + @NotNull @Override protected KotlinFunctionFindUsagesOptions getFindUsagesOptions() { return (KotlinFunctionFindUsagesOptions) myFindUsagesOptions; @@ -89,5 +100,29 @@ public class KotlinFindFunctionUsagesDialog extends FindMethodUsagesDialog { false ); } + PsiElement element = LightClassUtilsKt.getUnwrapped(getPsiElement()); + //noinspection ConstantConditions + KtDeclaration function = element instanceof KtNamedDeclaration + ? (KtNamedDeclaration) element + : ((KtLightMethod) element).getKotlinOrigin(); + + boolean isActual = function != null && PsiUtilsKt.hasActualModifier(function); + KotlinFunctionFindUsagesOptions options = getFindUsagesOptions(); + if (isActual) { + expectedUsages = addCheckboxToPanel( + "Expected functions", + options.getSearchExpected(), + optionsPanel, + false + ); + } + } + + @Override + public void calcFindUsagesOptions(JavaMethodFindUsagesOptions options) { + super.calcFindUsagesOptions(options); + + KotlinFunctionFindUsagesOptions kotlinOptions = (KotlinFunctionFindUsagesOptions) options; + kotlinOptions.setSearchExpected(isSelected(expectedUsages)); } } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindPropertyUsagesDialog.java b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindPropertyUsagesDialog.java index b103b4a01f5..c414af38a53 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindPropertyUsagesDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/dialogs/KotlinFindPropertyUsagesDialog.java @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.idea.KotlinBundle; import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.KtNamedDeclaration; +import org.jetbrains.kotlin.psi.psiUtil.PsiUtilsKt; import javax.swing.*; @@ -49,7 +50,9 @@ public class KotlinFindPropertyUsagesDialog extends JavaFindUsagesDialog