mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
when in doubt, distinguish lambdas by offset (IDEA-180742)
This commit is contained in:
@@ -375,7 +375,7 @@ public class MarkerType {
|
||||
private final PsiClass myClass;
|
||||
|
||||
private SubclassUpdater(@NotNull PsiClass aClass, @NotNull PsiElementListCellRenderer<NavigatablePsiElement> renderer) {
|
||||
super(aClass.getProject(), SEARCHING_FOR_OVERRIDDEN_METHODS, ((Comparator)renderer.getComparator()));
|
||||
super(aClass.getProject(), SEARCHING_FOR_OVERRIDDEN_METHODS, createComparatorWrapper((Comparator)renderer.getComparator()));
|
||||
myClass = aClass;
|
||||
}
|
||||
|
||||
@@ -433,7 +433,7 @@ public class MarkerType {
|
||||
private final PsiMethod myMethod;
|
||||
|
||||
private OverridingMethodsUpdater(@NotNull PsiMethod method, @NotNull PsiElementListCellRenderer renderer) {
|
||||
super(method.getProject(), SEARCHING_FOR_OVERRIDING_METHODS, renderer.getComparator());
|
||||
super(method.getProject(), SEARCHING_FOR_OVERRIDING_METHODS, createComparatorWrapper(renderer.getComparator()));
|
||||
myMethod = method;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,11 +17,13 @@ package com.intellij.codeInsight.navigation;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.ui.popup.AbstractPopup;
|
||||
import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usages.UsageInfo2UsageAdapter;
|
||||
@@ -70,6 +72,17 @@ public abstract class BackgroundUpdaterTask<T> extends Task.Backgroundable {
|
||||
|
||||
public abstract String getCaption(int size);
|
||||
protected abstract void replaceModel(@NotNull List<PsiElement> data);
|
||||
|
||||
public static Comparator<PsiElement> createComparatorWrapper(@NotNull Comparator<PsiElement> comparator) {
|
||||
return (o1, o2) -> {
|
||||
int diff = comparator.compare(o1, o2);
|
||||
if (diff == 0) {
|
||||
return ReadAction.compute(() -> PsiUtilCore.compareElementsByPosition(o1, o2));
|
||||
}
|
||||
return diff;
|
||||
};
|
||||
}
|
||||
|
||||
protected abstract void paintBusy(boolean paintBusy);
|
||||
|
||||
public boolean setCanceled() {
|
||||
|
||||
+9
-1
@@ -35,6 +35,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class GotoImplementationHandler extends GotoTargetHandler {
|
||||
@Override
|
||||
@@ -138,7 +140,13 @@ public class GotoImplementationHandler extends GotoTargetHandler {
|
||||
private final PsiReference myReference;
|
||||
|
||||
ImplementationsUpdaterTask(@NotNull GotoData gotoData, @NotNull Editor editor, int offset, final PsiReference reference) {
|
||||
super(gotoData.source.getProject(), ImplementationSearcher.SEARCHING_FOR_IMPLEMENTATIONS, createComparator(gotoData));
|
||||
super(gotoData.source.getProject(), ImplementationSearcher.SEARCHING_FOR_IMPLEMENTATIONS,
|
||||
createComparatorWrapper(Comparator.comparing(new Function<PsiElement, Comparable>() {
|
||||
@Override
|
||||
public Comparable apply(PsiElement e1) {
|
||||
return getRenderer(e1, gotoData).getComparingObject(e1);
|
||||
}
|
||||
})));
|
||||
myEditor = editor;
|
||||
myOffset = offset;
|
||||
myGotoData = gotoData;
|
||||
|
||||
@@ -40,7 +40,6 @@ import com.intellij.pom.Navigatable;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiNamedElement;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.ui.CollectionListModel;
|
||||
import com.intellij.ui.components.JBList;
|
||||
import com.intellij.ui.popup.AbstractPopup;
|
||||
@@ -211,7 +210,7 @@ public abstract class GotoTargetHandler implements CodeInsightActionHandler {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PsiElementListCellRenderer getRenderer(Object value, @NotNull GotoData gotoData) {
|
||||
protected PsiElementListCellRenderer getRenderer(Object value, @NotNull GotoData gotoData) {
|
||||
PsiElementListCellRenderer renderer = gotoData.getRenderer(value);
|
||||
return renderer != null ? renderer : myDefaultTargetElementRenderer;
|
||||
}
|
||||
@@ -221,11 +220,7 @@ public abstract class GotoTargetHandler implements CodeInsightActionHandler {
|
||||
return new Comparator<PsiElement>() {
|
||||
@Override
|
||||
public int compare(PsiElement o1, PsiElement o2) {
|
||||
int diff = getComparingObject(o1).compareTo(getComparingObject(o2));
|
||||
if (diff == 0) {
|
||||
return ReadAction.compute(() -> PsiUtilCore.compareElementsByPosition(o1, o2));
|
||||
}
|
||||
return diff;
|
||||
return getComparingObject(o1).compareTo(getComparingObject(o2));
|
||||
}
|
||||
|
||||
private Comparable getComparingObject(PsiElement o1) {
|
||||
|
||||
@@ -325,7 +325,7 @@ public class GroovyMarkerTypes {
|
||||
private final GrMethod myMethod;
|
||||
|
||||
public OverridingMethodsUpdater(GrMethod method, PsiElementListCellRenderer renderer) {
|
||||
super(method.getProject(), MarkerType.SEARCHING_FOR_OVERRIDING_METHODS, renderer.getComparator());
|
||||
super(method.getProject(), MarkerType.SEARCHING_FOR_OVERRIDING_METHODS, createComparatorWrapper(renderer.getComparator()));
|
||||
myMethod = method;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user