diff --git a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy index 5e1de973f184..b7c7643ed65f 100644 --- a/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy +++ b/java/java-tests/testSrc/com/intellij/navigation/ChooseByNameTest.groovy @@ -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 diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java index 0f9540af8d76..2c029b745ac6 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/DefaultChooseByNameItemProvider.java @@ -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 myContext; + private final SmartPsiElementPointer myContext; - public DefaultChooseByNameItemProvider(PsiElement context) { - myContext = new WeakReference(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 qualifierMatchResults = ContainerUtil.newIdentityTroveMap(); Comparator weightComparator = new Comparator() { - Comparator modelComparator = model instanceof Comparator ? (Comparator)model : new PathProximityComparator(myContext.get()); + Comparator modelComparator = model instanceof Comparator + ? (Comparator)model + : new PathProximityComparator(myContext == null ? null :myContext.getElement()); @Override public int compare(Object o1, Object o2) {