From de752703c620b295a3c41d44eb1e0b3ded1800ce Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 15 Sep 2015 18:36:18 +0200 Subject: [PATCH] anchor-based smart pointers: restore correctly when anchor is the element itself --- .../SmartPsiElementPointersTest.java | 20 +++++++++++++++++++ .../impl/smartPointers/AnchorElementInfo.java | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java index 3086308c76bf..21883175fbf6 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java @@ -814,4 +814,24 @@ public class SmartPsiElementPointersTest extends CodeInsightTestCase { assertNotNull(pointer.getElement()); } + public void testNonAnchoredStubbedElement() { + PsiFile file = configureByText(JavaFileType.INSTANCE, "class Foo { { @NotNull String foo; } }"); + StubTree stubTree = ((PsiFileImpl)file).getStubTree(); + assertNotNull(stubTree); + PsiElement anno = stubTree.getPlainList().stream().map(element -> element.getPsi()).filter(psiElement -> psiElement instanceof PsiAnnotation).findFirst().get(); + + SmartPsiElementPointer pointer = SmartPointerManager.getInstance(myProject).createSmartPsiElementPointer(anno); + assertNotNull(((PsiFileImpl)file).getStubTree()); + + stubTree = null; + anno = null; + PlatformTestUtil.tryGcSoftlyReachableObjects(); + assertNull(((SmartPointerEx) pointer).getCachedElement()); + + file.getViewProvider().getDocument().insertString(0, " "); + PsiDocumentManager.getInstance(myProject).commitAllDocuments(); + + assertNotNull(pointer.getElement()); + } + } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java index eb1eeb48bbc7..edb8d93ad026 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/AnchorElementInfo.java @@ -93,7 +93,7 @@ class AnchorElementInfo extends SelfElementInfo { final PsiElement element = provider.restoreElement(anchor); if (element != null) return element; } - return null; + return anchor; } @Override