mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't let context be gc-ed while goto popup is active (fixes one case of ChooseByNameTest blinking)
This commit is contained in:
@@ -323,9 +323,11 @@ class Intf {
|
||||
myPopup.close(false)
|
||||
}
|
||||
|
||||
def popup = myPopup = ChooseByNamePopup.createPopup(project, model, (PsiElement)context, "")
|
||||
Disposer.register(testRootDisposable, { popup.close(false) } as Disposable)
|
||||
popup
|
||||
edt {
|
||||
def popup = myPopup = ChooseByNamePopup.createPopup(project, model, (PsiElement)context, "")
|
||||
Disposer.register(testRootDisposable, { popup.close(false) } as Disposable)
|
||||
}
|
||||
myPopup
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+8
-6
@@ -26,6 +26,8 @@ import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiCompiledElement;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.SmartPointerManager;
|
||||
import com.intellij.psi.SmartPsiElementPointer;
|
||||
import com.intellij.psi.codeStyle.MinusculeMatcher;
|
||||
import com.intellij.psi.codeStyle.NameUtil;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
@@ -38,16 +40,14 @@ import com.intellij.util.indexing.IdFilter;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.*;
|
||||
|
||||
public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.gotoByName.ChooseByNameIdea");
|
||||
private final Reference<PsiElement> myContext;
|
||||
private final SmartPsiElementPointer myContext;
|
||||
|
||||
public DefaultChooseByNameItemProvider(PsiElement context) {
|
||||
myContext = new WeakReference<PsiElement>(context);
|
||||
public DefaultChooseByNameItemProvider(@Nullable PsiElement context) {
|
||||
myContext = context == null ? null : SmartPointerManager.getInstance(context.getProject()).createSmartPsiElementPointer(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -110,7 +110,9 @@ public class DefaultChooseByNameItemProvider implements ChooseByNameItemProvider
|
||||
final Map<Object, MatchResult> qualifierMatchResults = ContainerUtil.newIdentityTroveMap();
|
||||
|
||||
Comparator<Object> weightComparator = new Comparator<Object>() {
|
||||
Comparator<Object> modelComparator = model instanceof Comparator ? (Comparator<Object>)model : new PathProximityComparator(myContext.get());
|
||||
Comparator<Object> modelComparator = model instanceof Comparator
|
||||
? (Comparator<Object>)model
|
||||
: new PathProximityComparator(myContext == null ? null :myContext.getElement());
|
||||
|
||||
@Override
|
||||
public int compare(Object o1, Object o2) {
|
||||
|
||||
Reference in New Issue
Block a user