From 8563043ac203b6bb2c764133dd643bf4897aca38 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 10 Aug 2015 08:18:01 +0200 Subject: [PATCH] smart pointer cleanup --- .../SmartPsiElementPointersTest.java | 31 ---------- .../impl/smartPointers/AnchorElementInfo.java | 5 +- .../impl/smartPointers/ClsElementInfo.java | 24 +------- .../impl/smartPointers/FileElementInfo.java | 21 +------ .../impl/smartPointers/HardElementInfo.java | 21 +------ .../InjectedSelfElementInfo.java | 13 +---- .../impl/smartPointers/SelfElementInfo.java | 10 +--- .../SmartPointerElementInfo.java | 30 +++++----- .../impl/smartPointers/SmartPointerEx.java | 6 +- .../SmartPointerManagerImpl.java | 56 +------------------ .../SmartPsiElementPointerImpl.java | 10 +--- .../tree/MarkersHolderFileViewProvider.java | 25 --------- .../impl/SmartPointerEditorTracker.java | 28 +--------- .../psi/impl/file/impl/PsiVFSListener.java | 3 +- .../injected/InjectedFileViewProvider.java | 18 +----- 15 files changed, 35 insertions(+), 266 deletions(-) delete mode 100644 platform/core-impl/src/com/intellij/psi/impl/source/tree/MarkersHolderFileViewProvider.java 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 e653f3f26147..9eaae9dbfa58 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 @@ -28,8 +28,6 @@ import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.DocumentListener; import com.intellij.openapi.editor.event.EditorEventMulticaster; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.util.Segment; @@ -672,35 +670,6 @@ public class SmartPsiElementPointersTest extends CodeInsightTestCase { assertNotNull(node); } - public void testSmartPointersForOpenFilesAreFastened() { - PsiJavaFile file = (PsiJavaFile)myJavaFacade.findClass("AClass", GlobalSearchScope.allScope(getProject())).getContainingFile(); - - SmartPointerManagerImpl manager = (SmartPointerManagerImpl)SmartPointerManager.getInstance(myProject); - VirtualFile virtualFile = file.getVirtualFile(); - - assertFalse(manager.areBeltsFastened(virtualFile)); - FileEditor[] editors = FileEditorManager.getInstance(myProject).openFile(virtualFile, true); - assertTrue(editors.length != 0); - - assertTrue(manager.areBeltsFastened(virtualFile)); - - FileEditorManager.getInstance(myProject).closeFile(virtualFile); - assertFalse(manager.areBeltsFastened(virtualFile)); - - SmartPsiElementPointer pointer = manager.createSmartPsiElementPointer(file.getClasses()[0]); - - assertFalse(manager.areBeltsFastened(virtualFile)); - editors = FileEditorManager.getInstance(myProject).openFile(virtualFile, true); - assertTrue(editors.length != 0); - - assertTrue(manager.areBeltsFastened(virtualFile)); - - FileEditorManager.getInstance(myProject).closeFile(virtualFile); - assertFalse(manager.areBeltsFastened(virtualFile)); - - assertEquals(file.getClasses()[0], pointer.getElement()); // retain pointer from gc - } - public void testLargeFileWithManyChanges() { configureByText(PlainTextFileType.INSTANCE, StringUtil.repeat("foo foo \n", 50000)); final TextRange range = TextRange.from(10, 10); 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 0a7bdd6f12a5..2c6d23fd1727 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 @@ -18,7 +18,6 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.LanguageUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.util.*; import com.intellij.psi.PsiAnchor; import com.intellij.psi.PsiElement; @@ -110,11 +109,11 @@ class AnchorElementInfo extends SelfElementInfo { } @Override - public void fastenBelt(int offset, RangeMarker[] cachedRangeMarker) { + public void fastenBelt() { if (getStubId() != -1) { switchToTree(); } - super.fastenBelt(offset, cachedRangeMarker); + super.fastenBelt(); } private void switchToTree() { diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/ClsElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/ClsElementInfo.java index adb5206dc6e6..4d947cb83f3e 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/ClsElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/ClsElementInfo.java @@ -15,8 +15,6 @@ */ package com.intellij.psi.impl.smartPointers; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Segment; @@ -29,28 +27,13 @@ import org.jetbrains.annotations.NotNull; /** * User: cdr */ -public class ClsElementInfo implements SmartPointerElementInfo { +public class ClsElementInfo extends SmartPointerElementInfo { private final PsiAnchor.StubIndexReference myStubIndexReference; public ClsElementInfo(@NotNull PsiAnchor.StubIndexReference stubReference) { myStubIndexReference = stubReference; } - @Override - public Document getDocumentToSynchronize() { - return null; - } - - // before change - @Override - public void fastenBelt(int offset, RangeMarker[] cachedRangeMarker) { - } - - // after change - @Override - public void unfastenBelt(int offset) { - } - @Override public PsiElement restoreElement() { return myStubIndexReference.retrieve(); @@ -85,11 +68,6 @@ public class ClsElementInfo implements SmartPointerElementInfo { return myStubIndexReference.getProject(); } - @Override - public void cleanup() { - - } - @Override public PsiFile restoreFile() { return myStubIndexReference.getFile(); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java index 5f99cb3c4df8..e7da9a06dc73 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java @@ -16,8 +16,6 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.Language; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Segment; @@ -30,7 +28,7 @@ import org.jetbrains.annotations.NotNull; /** * User: cdr */ -class FileElementInfo implements SmartPointerElementInfo { +class FileElementInfo extends SmartPointerElementInfo { protected final VirtualFile myVirtualFile; protected final Project myProject; protected final Language myLanguage; @@ -48,19 +46,6 @@ class FileElementInfo implements SmartPointerElementInfo { myLanguage = lang; } - @Override - public Document getDocumentToSynchronize() { - return null; - } - - @Override - public void fastenBelt(int offset, RangeMarker[] cachedRangeMarker) { - } - - @Override - public void unfastenBelt(int offset) { - } - @Override public PsiElement restoreElement() { return SelfElementInfo.restoreFileFromVirtual(myVirtualFile, myProject, myLanguage); @@ -105,8 +90,4 @@ class FileElementInfo implements SmartPointerElementInfo { return myProject; } - @Override - public void cleanup() { - - } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java index 8bbf00ed563d..395375e750d4 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/HardElementInfo.java @@ -15,8 +15,6 @@ */ package com.intellij.psi.impl.smartPointers; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Segment; @@ -29,7 +27,7 @@ import org.jetbrains.annotations.NotNull; /** * User: cdr */ -class HardElementInfo implements SmartPointerElementInfo { +class HardElementInfo extends SmartPointerElementInfo { @NotNull private final PsiElement myElement; @NotNull @@ -40,19 +38,6 @@ class HardElementInfo implements SmartPointerElementInfo { myProject = project; } - @Override - public Document getDocumentToSynchronize() { - return null; - } - - @Override - public void fastenBelt(int offset, RangeMarker[] cachedRangeMarker) { - } - - @Override - public void unfastenBelt(int offset) { - } - @Override public PsiElement restoreElement() { return myElement; @@ -89,8 +74,4 @@ class HardElementInfo implements SmartPointerElementInfo { return myProject; } - @Override - public void cleanup() { - - } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java index e16ec5ab5ff7..8c2091c71062 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java @@ -20,7 +20,6 @@ import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.ProperTextRange; @@ -39,7 +38,7 @@ import java.util.List; /** * User: cdr */ -class InjectedSelfElementInfo implements SmartPointerElementInfo { +class InjectedSelfElementInfo extends SmartPointerElementInfo { private final SmartPsiFileRange myInjectedFileRangeInHostFile; private final Class anchorClass; private final Language anchorLanguage; @@ -193,16 +192,6 @@ class InjectedSelfElementInfo implements SmartPointerElementInfo { return ((SmartPsiElementPointerImpl)myHostContext).getElementInfo().getDocumentToSynchronize(); } - @Override - public void fastenBelt(int offset, RangeMarker[] cachedRangeMarkers) { - - } - - @Override - public void unfastenBelt(int offset) { - - } - @Override public int elementHashCode() { return ((SmartPsiElementPointerImpl)myHostContext).getElementInfo().elementHashCode(); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 66dcee8daec7..1bb7c8c76f4e 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -18,7 +18,6 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.Language; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.impl.FrozenDocument; import com.intellij.openapi.editor.impl.ManualRangeMarker; @@ -38,7 +37,7 @@ import java.util.Set; /** * User: cdr */ -public class SelfElementInfo implements SmartPointerElementInfo { +public class SelfElementInfo extends SmartPointerElementInfo { private final VirtualFile myVirtualFile; private final Class myType; private final Project myProject; @@ -81,7 +80,7 @@ public class SelfElementInfo implements SmartPointerElementInfo { // before change @Override - public void fastenBelt(int offset, @Nullable RangeMarker[] cachedRangeMarkers) { + public void fastenBelt() { if (myRangeMarker != null) return; // already tracks changes if (myPsiRange == null) return; // invalid @@ -96,11 +95,6 @@ public class SelfElementInfo implements SmartPointerElementInfo { setRange(myPsiRange, document); } - // after change - @Override - public void unfastenBelt(int offset) { - } - @Override public PsiElement restoreElement() { Segment segment = getPsiRange(); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerElementInfo.java index e0bf6b2eb10c..c975a59a959c 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerElementInfo.java @@ -17,7 +17,6 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Segment; import com.intellij.openapi.vfs.VirtualFile; @@ -26,27 +25,30 @@ import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -interface SmartPointerElementInfo { +abstract class SmartPointerElementInfo { @Nullable - Document getDocumentToSynchronize(); + public Document getDocumentToSynchronize() { + return null; + } - void fastenBelt(int offset, @Nullable RangeMarker[] cachedRangeMarkers); - - void unfastenBelt(int offset); + public void fastenBelt() { + } @Nullable - PsiElement restoreElement(); + public abstract PsiElement restoreElement(); - PsiFile restoreFile(); + public abstract PsiFile restoreFile(); - int elementHashCode(); // must be immutable - boolean pointsToTheSameElementAs(@NotNull SmartPointerElementInfo other); + public abstract int elementHashCode(); // must be immutable + public abstract boolean pointsToTheSameElementAs(@NotNull SmartPointerElementInfo other); - VirtualFile getVirtualFile(); + public abstract VirtualFile getVirtualFile(); @Nullable - Segment getRange(); - @NotNull Project getProject(); + public abstract Segment getRange(); + @NotNull + public abstract Project getProject(); - void cleanup(); + public void cleanup() { + } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerEx.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerEx.java index df0ca95ae7d0..160f6f064356 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerEx.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerEx.java @@ -15,15 +15,13 @@ */ package com.intellij.psi.impl.smartPointers; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.psi.PsiElement; import com.intellij.psi.SmartPsiElementPointer; import org.jetbrains.annotations.Nullable; interface SmartPointerEx extends SmartPsiElementPointer { - void fastenBelt(int offset, @Nullable RangeMarker[] cachedRangeMarkers); - - void unfastenBelt(int offset); + void fastenBelt(); + @Nullable PsiElement getCachedElement(); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java index be4e9bf53e89..c5501035c154 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java @@ -16,12 +16,9 @@ package com.intellij.psi.impl.smartPointers; -import com.intellij.injected.editor.DocumentWindow; -import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.impl.FrozenDocument; import com.intellij.openapi.editor.impl.ManualRangeMarker; @@ -34,7 +31,6 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerBase; -import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.util.PsiUtilCore; import com.intellij.reference.SoftReference; import com.intellij.util.ArrayUtil; @@ -65,12 +61,10 @@ public class SmartPointerManagerImpl extends SmartPointerManager { private final Project myProject; private final Key POINTERS_KEY; - private final Key POINTERS_ARE_FASTENED_KEY; public SmartPointerManagerImpl(Project project) { myProject = project; POINTERS_KEY = Key.create("SMART_POINTERS for "+project); - POINTERS_ARE_FASTENED_KEY = Key.create("SMART_POINTERS_ARE_FASTENED for "+project); } private static void processQueue() { @@ -89,50 +83,22 @@ public class SmartPointerManagerImpl extends SmartPointerManager { } } - public void fastenBelts(@NotNull VirtualFile file, int offset, @Nullable RangeMarker[] cachedRangeMarkers) { + public void fastenBelts(@NotNull VirtualFile file) { ApplicationManager.getApplication().assertIsDispatchThread(); processQueue(); synchronized (lock) { - if (getAndFasten(file)) return; FilePointersList pointers = getPointers(file); if (pointers != null && !pointers.isEmpty()) { for (PointerReference ref : pointers.references) { SmartPointerEx pointer = SoftReference.dereference(ref); if (pointer != null) { - pointer.fastenBelt(offset, cachedRangeMarkers); + pointer.fastenBelt(); } } } } } - public void unfastenBelts(@NotNull VirtualFile file, int offset) { - ApplicationManager.getApplication().assertIsDispatchThread(); - processQueue(); - synchronized (lock) { - if (!getAndUnfasten(file)) return; - FilePointersList pointers = getPointers(file); - if (pointers != null && !pointers.isEmpty()) { - for (PointerReference ref : pointers.references) { - SmartPointerEx pointer = SoftReference.dereference(ref); - if (pointer != null) { - pointer.unfastenBelt(offset); - } - } - } - - PsiFile psiFile = ((PsiManagerEx)PsiManager.getInstance(myProject)).getFileManager().getCachedPsiFile(file); - if (psiFile != null) { - PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(myProject); - for (DocumentWindow injectedDoc : InjectedLanguageManager.getInstance(myProject).getCachedInjectedDocuments(psiFile)) { - PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc); - if (injectedFile == null) continue; - unfastenBelts(injectedFile.getViewProvider().getVirtualFile(), 0); - } - } - } - } - private static final Key> CACHED_SMART_POINTER_KEY = Key.create("CACHED_SMART_POINTER_KEY"); @Override @NotNull @@ -158,11 +124,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { element.putUserData(CACHED_SMART_POINTER_KEY, new SoftReference(pointer)); } else { - containingFile = containingFile == null ? element.getContainingFile() : containingFile; synchronized (lock) { - if (containingFile != null && areBeltsFastened(containingFile.getViewProvider().getVirtualFile())) { - pointer.fastenBelt(0, null); - } if (pointer instanceof SmartPsiElementPointerImpl) { ((SmartPsiElementPointerImpl)pointer).incrementAndGetReferenceCount(1); } @@ -273,20 +235,6 @@ public class SmartPointerManagerImpl extends SmartPointerManager { } } - private boolean getAndFasten(@NotNull VirtualFile file) { - boolean fastened = areBeltsFastened(file); - file.putUserData(POINTERS_ARE_FASTENED_KEY, Boolean.TRUE); - return fastened; - } - private boolean getAndUnfasten(@NotNull VirtualFile file) { - boolean fastened = areBeltsFastened(file); - file.putUserData(POINTERS_ARE_FASTENED_KEY, null); - return fastened; - } - boolean areBeltsFastened(@NotNull VirtualFile file) { - return file.getUserData(POINTERS_ARE_FASTENED_KEY) == Boolean.TRUE; - } - @Override public boolean pointToTheSameElement(@NotNull SmartPsiElementPointer pointer1, @NotNull SmartPsiElementPointer pointer2) { return SmartPsiElementPointerImpl.pointsToTheSameElementAs(pointer1, pointer2); diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java index 2ea0695a08f0..b516188dce6a 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java @@ -20,7 +20,6 @@ import com.intellij.lang.LanguageUtil; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; @@ -178,13 +177,8 @@ class SmartPsiElementPointerImpl implements SmartPointerEx } @Override - public void unfastenBelt(int offset) { - myElementInfo.unfastenBelt(offset); - } - - @Override - public void fastenBelt(int offset, @Nullable RangeMarker[] cachedRangeMarkers) { - myElementInfo.fastenBelt(offset, cachedRangeMarkers); + public void fastenBelt() { + myElementInfo.fastenBelt(); } @NotNull diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/tree/MarkersHolderFileViewProvider.java b/platform/core-impl/src/com/intellij/psi/impl/source/tree/MarkersHolderFileViewProvider.java deleted file mode 100644 index 03f7e62fca3a..000000000000 --- a/platform/core-impl/src/com/intellij/psi/impl/source/tree/MarkersHolderFileViewProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2000-2013 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.psi.impl.source.tree; - -import com.intellij.openapi.editor.RangeMarker; -import org.jetbrains.annotations.NotNull; - -public interface MarkersHolderFileViewProvider { - - @NotNull - RangeMarker[] getCachedMarkers(); -} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/SmartPointerEditorTracker.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/SmartPointerEditorTracker.java index fcaaf35293df..8066ee86d669 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/SmartPointerEditorTracker.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/SmartPointerEditorTracker.java @@ -60,20 +60,12 @@ public class SmartPointerEditorTracker extends AbstractProjectComponent implemen boolean isRelevant = virtualFile != null && isRelevant(virtualFile); if (!isBulk && isRelevant && shouldNotifySmartPointers(virtualFile)) { - mySmartPointerManager.fastenBelts(virtualFile, event.getOffset(), null); + mySmartPointerManager.fastenBelts(virtualFile); } } @Override public void documentChanged(DocumentEvent event) { - final Document document = event.getDocument(); - VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document); - boolean isBulk = document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate(); - - boolean isRelevant = virtualFile != null && isRelevant(virtualFile); - if (!isBulk && isRelevant && shouldNotifySmartPointers(virtualFile)) { - mySmartPointerManager.unfastenBelts(virtualFile, event.getOffset()); - } } @Override @@ -86,22 +78,12 @@ public class SmartPointerEditorTracker extends AbstractProjectComponent implemen final VirtualFile virtualFile = psiFile.getVirtualFile(); // materialize all range markers and do not let them to be collected to improve responsiveness if (virtualFile != null) { - mySmartPointerManager.fastenBelts(virtualFile, 0, null); + mySmartPointerManager.fastenBelts(virtualFile); } } @Override public void editorReleased(@NotNull EditorFactoryEvent event) { - final Editor editor = event.getEditor(); - if (editor.getProject() != null && editor.getProject() != myProject || myProject.isDisposed()) return; - final PsiFile psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(editor.getDocument()); - if (psiFile == null) return; - final VirtualFile virtualFile = psiFile.getVirtualFile(); - // allow range markers in smart pointers to be collected - // beware there maybe other editors still open for that file - if (virtualFile != null && virtualFile.isValid() && shouldNotifySmartPointers(virtualFile)) { - mySmartPointerManager.unfastenBelts(virtualFile, 0); - } } private boolean shouldNotifySmartPointers(@NotNull VirtualFile virtualFile) { @@ -116,16 +98,12 @@ public class SmartPointerEditorTracker extends AbstractProjectComponent implemen public void updateStarted(@NotNull Document document) { final VirtualFile virtualFile = getVirtualFile(document); if (virtualFile != null && isRelevant(virtualFile) && shouldNotifySmartPointers(virtualFile)) { - mySmartPointerManager.fastenBelts(virtualFile, 0, null); + mySmartPointerManager.fastenBelts(virtualFile); } } @Override public void updateFinished(@NotNull Document document) { - final VirtualFile virtualFile = getVirtualFile(document); - if (virtualFile != null && isRelevant(virtualFile) && shouldNotifySmartPointers(virtualFile)) { - mySmartPointerManager.unfastenBelts(virtualFile, 0); - } } private static VirtualFile getVirtualFile(@NotNull Document document) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java index 91fc23c52f69..5a0fc06a21cb 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java @@ -42,7 +42,6 @@ import com.intellij.psi.*; import com.intellij.psi.impl.PsiManagerImpl; import com.intellij.psi.impl.PsiTreeChangeEventImpl; import com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl; -import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.util.FileContentUtilCore; import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NotNull; @@ -365,7 +364,7 @@ public class PsiVFSListener extends VirtualFileAdapter { } } - ((SmartPointerManagerImpl)SmartPointerManager.getInstance(myManager.getProject())).fastenBelts(vFile, 0, null); + ((SmartPointerManagerImpl)SmartPointerManager.getInstance(myManager.getProject())).fastenBelts(vFile); ApplicationManager.getApplication().runWriteAction( new ExternalChangeAction() { @Override diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java index ff7fa6c865ed..1dec8e119186 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java @@ -22,7 +22,6 @@ import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; @@ -32,8 +31,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.FreeThreadedFileViewProvider; -import com.intellij.psi.impl.source.tree.MarkersHolderFileViewProvider; -import com.intellij.util.SmartList; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -42,8 +39,7 @@ import java.util.List; /** * @author cdr */ -public class InjectedFileViewProvider extends SingleRootFileViewProvider implements FreeThreadedFileViewProvider, - MarkersHolderFileViewProvider { +public class InjectedFileViewProvider extends SingleRootFileViewProvider implements FreeThreadedFileViewProvider { private Project myProject; private final Object myLock = new Object(); private final DocumentWindowImpl myDocumentWindow; @@ -205,16 +201,4 @@ public class InjectedFileViewProvider extends SingleRootFileViewProvider impleme myPatchingLeaves = patchingLeaves; } - @Override - @NotNull - public RangeMarker[] getCachedMarkers() { - List markers = new SmartList(); - for (PsiLanguageInjectionHost.Shred shred : myDocumentWindow.getShreds()) { - RangeMarker marker = (RangeMarker)shred.getHostRangeMarker(); - if (marker != null) { - markers.add(marker); - } - } - return markers.toArray(new RangeMarker[markers.size()]); - } }