mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fix restoring smart pointers to empty siblings of empty elements
This commit is contained in:
+17
@@ -783,6 +783,23 @@ public class SmartPsiElementPointersTest extends CodeInsightTestCase {
|
||||
assertInstanceOf(pointer.getElement(), PsiTypeElement.class);
|
||||
}
|
||||
|
||||
public void testPointerToEmptyElement2() {
|
||||
PsiFile file = configureByText(JavaFileType.INSTANCE, "class Foo {\n" +
|
||||
" void foo() {}\n" +
|
||||
"}");
|
||||
PsiMethod method = PsiTreeUtil.findElementOfClassAtOffset(file, file.getText().indexOf("void"), PsiMethod.class, false);
|
||||
SmartPointerEx pointer1 = (SmartPointerEx)SmartPointerManager.getInstance(myProject).createSmartPsiElementPointer(method.getModifierList());
|
||||
SmartPointerEx pointer2 = (SmartPointerEx)SmartPointerManager.getInstance(myProject).createSmartPsiElementPointer(method.getTypeParameterList());
|
||||
method = null;
|
||||
|
||||
PlatformTestUtil.tryGcSoftlyReachableObjects();
|
||||
assertNull(pointer1.getCachedElement());
|
||||
assertNull(pointer2.getCachedElement());
|
||||
|
||||
assertInstanceOf(pointer1.getElement(), PsiModifierList.class);
|
||||
assertInstanceOf(pointer2.getElement(), PsiTypeParameterList.class);
|
||||
}
|
||||
|
||||
public void testPointerToReferenceSurvivesRename() {
|
||||
PsiFile file = configureByText(JavaFileType.INSTANCE, "class Foo extends Bar {}");
|
||||
PsiJavaCodeReferenceElement ref = PsiTreeUtil.findElementOfClassAtOffset(file, file.getText().indexOf("Bar"), PsiJavaCodeReferenceElement.class, false);
|
||||
|
||||
@@ -135,9 +135,11 @@ public class SelfElementInfo extends SmartPointerElementInfo {
|
||||
if (anchor == null) return null;
|
||||
|
||||
PsiElement result = findParent(syncStartOffset, syncEndOffset, type, anchor);
|
||||
if (result == null && syncEndOffset == syncStartOffset && anchor.getTextRange().getStartOffset() == syncEndOffset) {
|
||||
anchor = PsiTreeUtil.prevLeaf(anchor, false);
|
||||
if (anchor != null) {
|
||||
if (syncEndOffset == syncStartOffset) {
|
||||
while (result == null && anchor.getTextRange().getStartOffset() == syncEndOffset) {
|
||||
anchor = PsiTreeUtil.prevLeaf(anchor, false);
|
||||
if (anchor == null) break;
|
||||
|
||||
result = findParent(syncStartOffset, syncEndOffset, type, anchor);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user