Add find usages option: search expected

This commit is contained in:
Mikhail Glukhikh
2018-06-20 18:16:08 +03:00
parent 69e420991a
commit abbfea357a
4 changed files with 92 additions and 7 deletions
@@ -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));
}
}
@@ -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));
}
}
@@ -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<KotlinP
private StateRestoringCheckBox cbReaders;
private StateRestoringCheckBox cbWriters;
private StateRestoringCheckBox cbOverrides;
private StateRestoringCheckBox cbExpected;
@NotNull
@Override
protected KotlinPropertyFindUsagesOptions getFindUsagesOptions() {
return (KotlinPropertyFindUsagesOptions) myFindUsagesOptions;
@@ -67,6 +70,7 @@ public class KotlinFindPropertyUsagesDialog extends JavaFindUsagesDialog<KotlinP
options.isReadAccess = isSelected(cbReaders);
options.isWriteAccess = isSelected(cbWriters);
options.setSearchOverrides(isSelected(cbOverrides));
options.setSearchExpected(isSelected(cbExpected));
}
@Override
@@ -116,6 +120,16 @@ public class KotlinFindPropertyUsagesDialog extends JavaFindUsagesDialog<KotlinP
false
);
}
boolean isActual = PsiUtilsKt.hasActualModifier(property);
KotlinPropertyFindUsagesOptions options = getFindUsagesOptions();
if (isActual) {
cbExpected = addCheckboxToPanel(
"Expected properties",
options.getSearchExpected(),
optionsPanel,
false
);
}
}
@Override
@@ -22,7 +22,13 @@ import com.intellij.find.findUsages.JavaMethodFindUsagesOptions
import com.intellij.find.findUsages.JavaVariableFindUsagesOptions
import com.intellij.openapi.project.Project
class KotlinClassFindUsagesOptions(project: Project) : JavaClassFindUsagesOptions(project) {
interface KotlinMemberFindUsagesOptions {
var searchExpected: Boolean
}
class KotlinClassFindUsagesOptions(project: Project) : KotlinMemberFindUsagesOptions, JavaClassFindUsagesOptions(project) {
override var searchExpected: Boolean = true
var searchConstructorUsages: Boolean = true
override fun equals(other: Any?): Boolean {
@@ -34,13 +40,15 @@ class KotlinClassFindUsagesOptions(project: Project) : JavaClassFindUsagesOption
}
}
interface KotlinCallableFindUsagesOptions {
interface KotlinCallableFindUsagesOptions : KotlinMemberFindUsagesOptions {
var searchOverrides: Boolean
fun toJavaOptions(project: Project): FindUsagesOptions?
}
class KotlinFunctionFindUsagesOptions(project: Project) : KotlinCallableFindUsagesOptions, JavaMethodFindUsagesOptions(project) {
override var searchExpected: Boolean = true
override var searchOverrides: Boolean
get() = isOverridingMethods
set(value) {
@@ -67,6 +75,7 @@ class KotlinFunctionFindUsagesOptions(project: Project) : KotlinCallableFindUsag
class KotlinPropertyFindUsagesOptions(
project: Project
) : KotlinCallableFindUsagesOptions, JavaVariableFindUsagesOptions(project) {
override var searchExpected: Boolean = true
var isReadWriteAccess: Boolean = true
override var searchOverrides: Boolean = false