diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java index e8dff17807f2..6fbb60a63e53 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java @@ -34,6 +34,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -499,7 +500,7 @@ public abstract class BreakpointWithHighlighter extends Breakpoint { EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme(); TextAttributes attributes = scheme.getAttributes(DebuggerColors.BREAKPOINT_ATTRIBUTES); - RangeHighlighter highlighter = ((MarkupModelEx)document.getMarkupModel(project)).addPersistentLineHighlighter( + RangeHighlighter highlighter = ((MarkupModelEx)DocumentMarkupModel.forDocument(document, project, true)).addPersistentLineHighlighter( lineIndex, DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER, attributes); if (!highlighter.isValid()) { return null; diff --git a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java index 39de54903a52..165cfa8eab5c 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceParameter/InplaceIntroduceParameterPopup.java @@ -19,9 +19,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.HighlighterColors; -import com.intellij.openapi.editor.colors.EditorColors; -import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.HighlighterTargetArea; import com.intellij.openapi.editor.markup.MarkupModel; @@ -29,22 +27,17 @@ import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; -import com.intellij.ui.SimpleTextAttributes; import com.intellij.usageView.UsageInfo; -import com.intellij.util.Function; -import com.intellij.util.ui.UIUtil; import gnu.trove.TIntArrayList; import gnu.trove.TIntProcedure; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.font.TextAttribute; import java.util.ArrayList; import java.util.List; @@ -251,7 +244,7 @@ public class InplaceIntroduceParameterPopup extends AbstractJavaInplaceIntroduce buf.append(")"); setPreviewText(buf.toString()); - final MarkupModel markupModel = getPreviewEditor().getDocument().getMarkupModel(myProject); + final MarkupModel markupModel = DocumentMarkupModel.forDocument(getPreviewEditor().getDocument(), myProject, true); for (TextRange textRange : ranges2Remove) { markupModel.addRangeHighlighter(textRange.getStartOffset(), textRange.getEndOffset(), 0, getTestAttributesForRemoval(), HighlighterTargetArea.EXACT_RANGE); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index a68600110cc4..05af637c1a10 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -39,6 +39,7 @@ import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.ex.EditorMarkupModel; import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.ex.RangeHighlighterEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.extensions.Extensions; @@ -496,7 +497,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx LOG.assertTrue(ApplicationManager.getApplication().isReadAccessAllowed()); final SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(project); - MarkupModelEx model = (MarkupModelEx)document.getMarkupModel(project); + MarkupModelEx model = (MarkupModelEx)DocumentMarkupModel.forDocument(document, project, true); return model.processRangeHighlightersOverlappingWith(startOffset, endOffset, new Processor() { public boolean process(RangeHighlighterEx marker) { Object tt = marker.getErrorStripeTooltip(); @@ -518,7 +519,7 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx LOG.assertTrue(ApplicationManager.getApplication().isReadAccessAllowed()); final SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(project); - MarkupModelEx model = (MarkupModelEx)document.getMarkupModel(project); + MarkupModelEx model = (MarkupModelEx)DocumentMarkupModel.forDocument(document, project, true); return model.processRangeHighlightersOutside(startOffset, endOffset, new Processor() { public boolean process(RangeHighlighterEx marker) { Object tt = marker.getErrorStripeTooltip(); @@ -634,13 +635,13 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx @Nullable public static List getLineMarkers(Document document, Project project) { ApplicationManager.getApplication().assertIsDispatchThread(); - MarkupModel markup = document.getMarkupModel(project); + MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); return markup.getUserData(MARKERS_IN_EDITOR_DOCUMENT_KEY); } public static void setLineMarkers(@NotNull Document document, List lineMarkers, Project project) { ApplicationManager.getApplication().assertIsDispatchThread(); - MarkupModel markup = document.getMarkupModel(project); + MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); markup.putUserData(MARKERS_IN_EDITOR_DOCUMENT_KEY, lineMarkers); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java index a209d1552f2e..ccf8fc8d88b6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java @@ -40,6 +40,7 @@ import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.extensions.Extensions; @@ -132,7 +133,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP myApplyCommand = new Runnable() { public void run() { ProperTextRange range = new ProperTextRange(myStartOffset, myEndOffset); - MarkupModel model = myDocument.getMarkupModel(myProject); + MarkupModel model = DocumentMarkupModel.forDocument(myDocument, myProject, true); UpdateHighlightersUtil.cleanFileLevelHighlights(myProject, Pass.UPDATE_ALL,myFile); final EditorColorsScheme colorsScheme = getColorsScheme(); UpdateHighlightersUtil.setHighlightersInRange(myProject, myDocument, range, colorsScheme, myHighlights, (MarkupModelEx)model, Pass.UPDATE_ALL); @@ -239,7 +240,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP @Override public void run() { if (myProject.isDisposed() || modificationStamp != myDocument.getModificationStamp()) return; - MarkupModel markupModel = myDocument.getMarkupModel(myProject); + MarkupModel markupModel = DocumentMarkupModel.forDocument(myDocument, myProject, true); UpdateHighlightersUtil.setHighlightersInRange(myProject, myDocument, priorityIntersection, getColorsScheme(), toApplyInside, (MarkupModelEx)markupModel, Pass.UPDATE_ALL); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java index bfa9492d395e..ca204e350299 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java @@ -27,6 +27,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.colors.EditorColors; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.progress.ProgressIndicator; @@ -153,7 +154,7 @@ public class IdentifierHighlighterPass extends TextEditorHighlightingPass { } public static void clearMyHighlights(Document document, Project project) { - MarkupModel markupModel = document.getMarkupModel(project); + MarkupModel markupModel = DocumentMarkupModel.forDocument(document, project, true); for (RangeHighlighter highlighter : markupModel.getAllHighlighters()) { Object tooltip = highlighter.getErrorStripeTooltip(); if (!(tooltip instanceof HighlightInfo)) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java index 07656f149120..13b221899b84 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java @@ -26,6 +26,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.ex.EditorMarkupModel; import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.ex.RangeHighlighterEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.impl.EditorMarkupModelImpl; import com.intellij.openapi.editor.impl.event.MarkupModelListener; import com.intellij.openapi.editor.markup.ErrorStripeRenderer; @@ -76,7 +77,7 @@ public class TrafficLightRenderer implements ErrorStripeRenderer { errorCount = new int[mySeverityRegistrar.getSeverityMaxIndex()]; if (project != null) { - MarkupModelEx model = (MarkupModelEx)document.getMarkupModel(project); + MarkupModelEx model = (MarkupModelEx)DocumentMarkupModel.forDocument(document, project, true); model.addMarkupModelListener(new MarkupModelListener() { @Override public void afterAdded(@NotNull RangeHighlighterEx highlighter) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java index 325959fd1d2a..815ee1d370fb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java @@ -28,6 +28,7 @@ import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.MarkupModelEx; import com.intellij.openapi.editor.ex.RangeHighlighterEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.impl.RangeMarkerTree; import com.intellij.openapi.editor.impl.RedBlackTree; import com.intellij.openapi.editor.markup.*; @@ -164,7 +165,7 @@ public class UpdateHighlightersUtil { ApplicationManager.getApplication().assertIsDispatchThread(); if (info.isFileLevelAnnotation || info.getGutterIconRenderer() != null) return; - MarkupModel markup = document.getMarkupModel(project); + MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); Processor otherHighlightInTheWayProcessor = new Processor() { public boolean process(HighlightInfo oldInfo) { return oldInfo.group != group || !oldInfo.equalsByActualOffset(info); @@ -198,7 +199,7 @@ public class UpdateHighlightersUtil { PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document); cleanFileLevelHighlights(project, group, psiFile); - MarkupModel markup = document.getMarkupModel(project); + MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); assertMarkupConsistent(markup, project); setHighlightersInRange(project, document, range, colorsScheme, new ArrayList(highlights), (MarkupModelEx)markup, group); @@ -229,7 +230,7 @@ public class UpdateHighlightersUtil { final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document); cleanFileLevelHighlights(project, group, psiFile); - final MarkupModel markup = document.getMarkupModel(project); + final MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); assertMarkupConsistent(markup, project); final SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(project); @@ -519,7 +520,7 @@ public class UpdateHighlightersUtil { List oldMarkers = DaemonCodeAnalyzerImpl.getLineMarkers(document, project); List array = new ArrayList(oldMarkers == null ? markers.size() : oldMarkers.size()); - MarkupModel markupModel = document.getMarkupModel(project); + MarkupModel markupModel = DocumentMarkupModel.forDocument(document, project, true); HighlightersRecycler toReuse = new HighlightersRecycler(); if (oldMarkers != null) { for (LineMarkerInfo info : oldMarkers) { @@ -593,7 +594,7 @@ public class UpdateHighlightersUtil { final Document document = e.getDocument(); if (document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate()) return; - final MarkupModel markup = document.getMarkupModel(project); + final MarkupModel markup = DocumentMarkupModel.forDocument(document, project, true); assertMarkupConsistent(markup, project); final int start = e.getOffset() - 1; diff --git a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java index 28e2dfc6219d..13e9950ff67c 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java @@ -36,6 +36,7 @@ import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory; import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.impl.EditorFactoryImpl; import com.intellij.openapi.editor.impl.EditorImpl; import com.intellij.openapi.editor.markup.*; @@ -355,7 +356,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider { text = StringUtil.convertLineSeparators(text); final boolean scrollToEnd = shouldScrollHistoryToEnd(); final Document history = myHistoryViewer.getDocument(); - final MarkupModel markupModel = history.getMarkupModel(myProject); + final MarkupModel markupModel = DocumentMarkupModel.forDocument(history, myProject, true); final int offset = history.getTextLength(); appendToHistoryDocument(history, text); markupModel.addRangeHighlighter(offset, @@ -406,7 +407,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider { protected String addTextRangeToHistory(TextRange textRange, final EditorEx consoleEditor, boolean preserveMarkup) { final DocumentImpl history = (DocumentImpl)myHistoryViewer.getDocument(); - final MarkupModel markupModel = history.getMarkupModel(myProject); + final MarkupModel markupModel = DocumentMarkupModel.forDocument(history, myProject, true); appendToHistoryDocument(history, myPrompt); markupModel.addRangeHighlighter(history.getTextLength() - myPrompt.length(), history.getTextLength(), HighlighterLayer.SYNTAX, ConsoleViewContentType.USER_INPUT.getAttributes(), @@ -432,7 +433,7 @@ public class LanguageConsoleImpl implements Disposable, TypeSafeDataProvider { iterator.advance(); } if (preserveMarkup) { - duplicateHighlighters(markupModel, consoleEditor.getDocument().getMarkupModel(myProject), offset, textRange); + duplicateHighlighters(markupModel, DocumentMarkupModel.forDocument(consoleEditor.getDocument(), myProject, true), offset, textRange); duplicateHighlighters(markupModel, consoleEditor.getMarkupModel(), offset, textRange); } if (!text.endsWith("\n")) { diff --git a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java index 190f6905b624..00c4d39ce851 100644 --- a/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java +++ b/platform/lang-impl/src/com/intellij/ide/bookmarks/Bookmark.java @@ -26,6 +26,7 @@ import com.intellij.navigation.NavigationItem; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.editor.markup.HighlighterLayer; import com.intellij.openapi.editor.markup.RangeHighlighter; @@ -73,7 +74,7 @@ public class Bookmark { myHighlighter = null; } else { - MarkupModelEx markup = (MarkupModelEx)document.getMarkupModel(myProject); + MarkupModelEx markup = (MarkupModelEx)DocumentMarkupModel.forDocument(document, myProject, true); myHighlighter = markup.addPersistentLineHighlighter(line, HighlighterLayer.ERROR + 1, null); diff --git a/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java b/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java index 1ae675473ff8..a5392a045d51 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/DocumentWindowImpl.java @@ -24,10 +24,11 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.event.DocumentListener; -import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.editor.ex.DocumentEx; +import com.intellij.openapi.editor.ex.EditReadOnlyListener; +import com.intellij.openapi.editor.ex.LineIterator; +import com.intellij.openapi.editor.ex.RangeMarkerEx; import com.intellij.openapi.editor.impl.DocumentImpl; -import com.intellij.openapi.editor.markup.MarkupModel; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.ProperTextRange; import com.intellij.openapi.util.TextRange; @@ -411,11 +412,6 @@ public class DocumentWindowImpl extends UserDataHolderBase implements Disposable return new RangeMarkerWindow(this, (RangeMarkerEx)hostMarker); } - @NotNull - public MarkupModel getMarkupModel(final Project project) { - return new MarkupModelWindow((MarkupModelEx)myDelegate.getMarkupModel(project), this); - } - public void addPropertyChangeListener(@NotNull final PropertyChangeListener listener) { myDelegate.addPropertyChangeListener(listener); } diff --git a/platform/platform-api/src/com/intellij/openapi/editor/Document.java b/platform/platform-api/src/com/intellij/openapi/editor/Document.java index 9ddef9afaee4..6ac09fcad6bd 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/Document.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/Document.java @@ -17,8 +17,6 @@ package com.intellij.openapi.editor; import com.intellij.openapi.Disposable; import com.intellij.openapi.editor.event.DocumentListener; -import com.intellij.openapi.editor.markup.MarkupModel; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.UserDataHolder; import org.jetbrains.annotations.NonNls; @@ -205,19 +203,6 @@ public interface Document extends UserDataHolder { */ @NotNull RangeMarker createRangeMarker(int startOffset, int endOffset, boolean surviveOnExternalChange); - /** - * Returns the markup model for the specified project. A document can have multiple markup - * models for different projects if the file to which it corresponds belongs to multiple projects - * opened in different IDEA frames at the same time. - * - * @param project the project for which the markup model is requested, or null if the default markup - * model is requested. - * @return the markup model instance. - * @see Editor#getMarkupModel() - */ - @NotNull - MarkupModel getMarkupModel(@Nullable Project project); - /** * Adds a listener for receiving notifications about changes in the properties of the document * (for example, its read-only state). diff --git a/platform/lang-impl/src/com/intellij/injected/editor/MarkupModelWindow.java b/platform/platform-impl/src/com/intellij/injected/editor/MarkupModelWindow.java similarity index 98% rename from platform/lang-impl/src/com/intellij/injected/editor/MarkupModelWindow.java rename to platform/platform-impl/src/com/intellij/injected/editor/MarkupModelWindow.java index 2852f61eda6c..d6c63cc21bc8 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/MarkupModelWindow.java +++ b/platform/platform-impl/src/com/intellij/injected/editor/MarkupModelWindow.java @@ -35,7 +35,7 @@ import java.util.Iterator; /** * @author cdr */ -class MarkupModelWindow extends UserDataHolderBase implements MarkupModelEx { +public class MarkupModelWindow extends UserDataHolderBase implements MarkupModelEx { private final DocumentWindow myDocument; private final MarkupModelEx myHostModel; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java index 59f0ec1a973e..541053eaed13 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java @@ -33,14 +33,11 @@ import com.intellij.openapi.editor.ex.*; import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter; import com.intellij.openapi.editor.highlighter.EditorHighlighter; import com.intellij.openapi.editor.impl.event.DocumentEventImpl; -import com.intellij.openapi.editor.markup.MarkupModel; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.util.LocalTimeCounter; import com.intellij.util.Processor; -import com.intellij.util.containers.ConcurrentHashMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; @@ -53,7 +50,6 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.CopyOnWriteArrayList; public class DocumentImpl extends UserDataHolderBase implements DocumentEx { @@ -70,10 +66,8 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { private boolean myIsReadOnly = false; private boolean isStripTrailingSpacesEnabled = true; private volatile long myModificationStamp; - private final ConcurrentMap myProjectToMarkupModelMap = new ConcurrentHashMap(); private final PropertyChangeSupport myPropertyChangeSupport = new PropertyChangeSupport(this); - private volatile MarkupModelEx myMarkupModel; private DocumentListener[] myCachedDocumentListeners; private final List myReadOnlyListeners = ContainerUtil.createEmptyCOWList(); @@ -357,7 +351,7 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { } public void replaceString(int startOffset, int endOffset, @NotNull CharSequence s) { - replaceString(startOffset, endOffset, s, LocalTimeCounter.currentTime(), startOffset==0 && endOffset==getTextLength()); + replaceString(startOffset, endOffset, s, LocalTimeCounter.currentTime(), startOffset == 0 && endOffset == getTextLength()); } private void replaceString(int startOffset, int endOffset, CharSequence s, final long newModificationStamp, boolean wholeTextReplaced) { @@ -678,10 +672,6 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { myReadOnlyListeners.remove(listener); } - @NotNull - public MarkupModel getMarkupModel(@Nullable Project project) { - return getMarkupModel(project, true); - } public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) { myPropertyChangeSupport.addPropertyChangeListener(listener); @@ -691,48 +681,6 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { myPropertyChangeSupport.removePropertyChangeListener(listener); } - private final Object lock = new Object(); - public MarkupModel getMarkupModel(@Nullable final Project project, boolean create) { - if (project == null) { - MarkupModelEx markupModel = myMarkupModel; - if (create && markupModel == null) { - synchronized (lock) { - markupModel = myMarkupModel; - if (markupModel == null) { - myMarkupModel = markupModel = new MarkupModelImpl(this); - } - } - } - return markupModel; - } - - final DocumentMarkupModelManager documentMarkupModelManager = project.isDisposed() ? null : DocumentMarkupModelManager.getInstance(project); - if (documentMarkupModelManager == null || documentMarkupModelManager.isDisposed() || project.isDisposed()) { - return new EmptyMarkupModel(this); - } - - MarkupModelImpl model = myProjectToMarkupModelMap.get(project); - if (create && model == null) { - synchronized (lock) { - model = myProjectToMarkupModelMap.get(project); - if (model == null) { - model = new MarkupModelImpl(this); - myProjectToMarkupModelMap.put(project, model); - documentMarkupModelManager.registerDocument(this); - } - } - } - - return model; - } - - void removeMarkupModel(@NotNull Project project) { - MarkupModelImpl removed = myProjectToMarkupModelMap.remove(project); - if (removed != null) { - removed.dispose(); - } - } - public void setCyclicBufferSize(int bufferSize) { myText.setBufferSize(bufferSize); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModel.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModel.java new file mode 100644 index 000000000000..01fa1b3cf035 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModel.java @@ -0,0 +1,121 @@ +/* + * Copyright 2000-2011 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.openapi.editor.impl; + +import com.intellij.injected.editor.DocumentWindow; +import com.intellij.injected.editor.MarkupModelWindow; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.markup.MarkupModel; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; +import com.intellij.util.containers.ConcurrentHashMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.concurrent.ConcurrentMap; + +/** + * Manages per-project markup models of documents. + * + * @author yole + */ +public class DocumentMarkupModel { + private static final Object lock = new Object(); + + private static final Key MARKUP_MODEL_KEY = Key.create("DocumentMarkupModel.MarkupModel"); + private static final Key> MARKUP_MODEL_MAP_KEY = Key.create("DocumentMarkupModel.MarkupModelMap"); + + private DocumentMarkupModel() { + } + + /** + * Returns the markup model for the specified project. A document can have multiple markup + * models for different projects if the file to which it corresponds belongs to multiple projects + * opened in different IDEA frames at the same time. + * + * @param document the document for which the markup model is requested. + * @param project the project for which the markup model is requested, or null if the default markup + * model is requested. + * @return the markup model instance. + * @see Editor#getMarkupModel() + */ + public static MarkupModel forDocument(Document document, @Nullable Project project, boolean create) { + if (document instanceof DocumentWindow) { + final Document delegate = ((DocumentWindow)document).getDelegate(); + final MarkupModelEx baseMarkupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(delegate, project, true); + return new MarkupModelWindow(baseMarkupModel, (DocumentWindow) document); + } + + if (project == null) { + MarkupModelEx markupModel = document.getUserData(MARKUP_MODEL_KEY); + if (create && markupModel == null) { + synchronized (lock) { + markupModel = document.getUserData(MARKUP_MODEL_KEY); + if (markupModel == null) { + markupModel = new MarkupModelImpl((DocumentImpl)document); + document.putUserData(MARKUP_MODEL_KEY, markupModel); + } + } + } + return markupModel; + } + + final DocumentMarkupModelManager documentMarkupModelManager = + project.isDisposed() ? null : DocumentMarkupModelManager.getInstance(project); + if (documentMarkupModelManager == null || documentMarkupModelManager.isDisposed() || project.isDisposed()) { + return new EmptyMarkupModel(document); + } + + ConcurrentMap markupModelMap = getMarkupModelMap(document); + + MarkupModelImpl model = markupModelMap.get(project); + if (create && model == null) { + synchronized (lock) { + model = markupModelMap.get(project); + if (model == null) { + model = new MarkupModelImpl((DocumentImpl)document); + markupModelMap.put(project, model); + documentMarkupModelManager.registerDocument((DocumentImpl)document); + } + } + } + + return model; + } + + private static ConcurrentMap getMarkupModelMap(Document document) { + ConcurrentMap markupModelMap = document.getUserData(MARKUP_MODEL_MAP_KEY); + if (markupModelMap == null) { + synchronized (lock) { + markupModelMap = document.getUserData(MARKUP_MODEL_MAP_KEY); + if (markupModelMap == null) { + markupModelMap = new ConcurrentHashMap(); + document.putUserData(MARKUP_MODEL_MAP_KEY, markupModelMap); + } + + } + } + return markupModelMap; + } + + static void removeMarkupModel(@NotNull Document document, @NotNull Project project) { + MarkupModelImpl removed = getMarkupModelMap(document).remove(project); + if (removed != null) { + removed.dispose(); + } + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModelManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModelManager.java index 1cdc183a8370..deb03faf7e0f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModelManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/DocumentMarkupModelManager.java @@ -59,7 +59,7 @@ public class DocumentMarkupModelManager extends AbstractProjectComponent { if (!myDisposed) { myDisposed = true; for (DocumentImpl document : myDocumentSet.toStrongList()) { - document.removeMarkupModel(myProject); + DocumentMarkupModel.removeMarkupModel(document, myProject); } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index 8b37cd91e1a3..b3065b702b5f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -387,7 +387,7 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse private void processRangeHighlighters(int startOffset, int endOffset, RangeHighlighterProcessor processor) { Document document = myEditor.getDocument(); - final MarkupModelEx docMarkup = (MarkupModelEx)document.getMarkupModel(myEditor.getProject()); + final MarkupModelEx docMarkup = (MarkupModelEx)DocumentMarkupModel.forDocument(document, myEditor.getProject(), true); // we limit highlighters to process to between line starting at startOffset and line ending at endOffset int docLength = document.getTextLength(); int patchedStartOffset = startOffset < docLength ? document.getLineStartOffset(document.getLineNumber(startOffset)) : docLength; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 6fda36ffd617..469c12bd11f1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -337,7 +337,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } }; - ((MarkupModelEx)myDocument.getMarkupModel(myProject)).addMarkupModelListener(myMarkupModelListener); + ((MarkupModelEx)DocumentMarkupModel.forDocument(myDocument, myProject, true)).addMarkupModelListener(myMarkupModelListener); ((MarkupModelEx)getMarkupModel()).addMarkupModelListener(myMarkupModelListener); myDocument.addDocumentListener(myFoldingModel); @@ -630,7 +630,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi mySoftWrapModel.release(); - MarkupModelEx markupModel = (MarkupModelEx)myDocument.getMarkupModel(myProject, false); + MarkupModelEx markupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(myDocument, myProject, false); if (markupModel instanceof MarkupModelImpl) { markupModel.removeMarkupModelListener(myMarkupModelListener); } @@ -1619,7 +1619,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi paintRectangularSelection(g); paintRightMargin(g, clip); paintCustomRenderers((Graphics2D)g, clipStartOffset, clipEndOffset); - MarkupModelEx docMarkup = (MarkupModelEx)myDocument.getMarkupModel(myProject); + MarkupModelEx docMarkup = (MarkupModelEx)DocumentMarkupModel.forDocument(myDocument, myProject, true); paintLineMarkersSeparators(g, clip, docMarkup, clipStartOffset, clipEndOffset); paintLineMarkersSeparators(g, clip, myMarkupModel, clipStartOffset, clipEndOffset); paintText(g, clip, clipStartPosition, clipStartOffset, clipEndOffset); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java index b3f00a66c913..5da274786426 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java @@ -147,7 +147,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark Set highlighters = new THashSet(); getNearestHighlighters(this, me, width, highlighters); - getNearestHighlighters((MarkupModelEx)myEditor.getDocument().getMarkupModel(getEditor().getProject()), me, width, highlighters); + getNearestHighlighters((MarkupModelEx)DocumentMarkupModel.forDocument(myEditor.getDocument(), getEditor().getProject(), true), me, width, highlighters); if (highlighters.isEmpty()) return false; @@ -178,7 +178,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark private RangeHighlighter getNearestRangeHighlighter(final MouseEvent e, final int width) { List highlighters = new ArrayList(); getNearestHighlighters(this, e, width, highlighters); - getNearestHighlighters((MarkupModelEx)myEditor.getDocument().getMarkupModel(myEditor.getProject()), e, width, highlighters); + getNearestHighlighters((MarkupModelEx)DocumentMarkupModel.forDocument(myEditor.getDocument(), myEditor.getProject(), true), e, width, highlighters); RangeHighlighter nearestMarker = null; int yPos = 0; for (RangeHighlighter highlighter : highlighters) { @@ -439,7 +439,8 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark endOffset = yPositionToOffset(clip.y + clip.height, false); drawMarkup(g, stripeWidth, startOffset, endOffset, EditorMarkupModelImpl.this); - drawMarkup(g, stripeWidth, startOffset, endOffset, (MarkupModelEx)document.getMarkupModel(myEditor.getProject())); + drawMarkup(g, stripeWidth, startOffset, endOffset, (MarkupModelEx)DocumentMarkupModel + .forDocument(document, myEditor.getProject(), true)); } private void drawMarkup(final Graphics g, final int width, int startOffset, int endOffset, MarkupModelEx markup) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java index 6d39bc8cdfa8..23467fe83aaf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java @@ -23,10 +23,7 @@ import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.ex.*; import com.intellij.openapi.editor.highlighter.HighlighterIterator; -import com.intellij.openapi.editor.markup.EffectType; -import com.intellij.openapi.editor.markup.HighlighterLayer; -import com.intellij.openapi.editor.markup.HighlighterTargetArea; -import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.util.Comparing; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -109,7 +106,7 @@ public final class IterationState { MarkupModelEx editorMarkup = (MarkupModelEx)editor.getMarkupModel(); myView.init(editorMarkup, start, myEnd); - final MarkupModelEx docMarkup = (MarkupModelEx)editor.getDocument().getMarkupModel(editor.getProject()); + final MarkupModelEx docMarkup = (MarkupModelEx)DocumentMarkupModel.forDocument(editor.getDocument(), editor.getProject(), true); myDoc.init(docMarkup, start, myEnd); myEndOffset = myStartOffset; diff --git a/platform/platform-impl/testSrc/com/intellij/openapi/editor/RangeMarkerTest.java b/platform/platform-impl/testSrc/com/intellij/openapi/editor/RangeMarkerTest.java index f01102832220..1dba670d2112 100644 --- a/platform/platform-impl/testSrc/com/intellij/openapi/editor/RangeMarkerTest.java +++ b/platform/platform-impl/testSrc/com/intellij/openapi/editor/RangeMarkerTest.java @@ -11,6 +11,7 @@ import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.RangeMarkerEx; import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.impl.RedBlackTree; import com.intellij.openapi.editor.markup.HighlighterTargetArea; import com.intellij.openapi.editor.markup.MarkupModel; @@ -1014,7 +1015,7 @@ public class RangeMarkerTest extends LightPlatformTestCase { public void testRangeHighlightersRecreateBug() throws Exception { Document document = EditorFactory.getInstance().createDocument("[xxxxxxxxxxxxxx]"); - MarkupModel markupModel = document.getMarkupModel(ourProject); + MarkupModel markupModel = DocumentMarkupModel.forDocument(document, ourProject, true); for (int i=0; i<2; i++) { RangeMarker m = markupModel.addRangeHighlighter(1, 6, 0, null, HighlighterTargetArea.EXACT_RANGE); RangeMarker m2 = markupModel.addRangeHighlighter(2, 7, 0, null, HighlighterTargetArea.EXACT_RANGE); diff --git a/platform/testFramework/src/com/intellij/mock/MockDocument.java b/platform/testFramework/src/com/intellij/mock/MockDocument.java index 5f49e38021f2..2ccc4c9a2704 100644 --- a/platform/testFramework/src/com/intellij/mock/MockDocument.java +++ b/platform/testFramework/src/com/intellij/mock/MockDocument.java @@ -22,9 +22,6 @@ import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.EditReadOnlyListener; import com.intellij.openapi.editor.ex.LineIterator; import com.intellij.openapi.editor.ex.RangeMarkerEx; -import com.intellij.openapi.editor.impl.EmptyMarkupModel; -import com.intellij.openapi.editor.markup.MarkupModel; -import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; import com.intellij.util.LocalTimeCounter; @@ -167,12 +164,6 @@ public class MockDocument implements DocumentEx { return null; } - @Override - @NotNull - public MarkupModel getMarkupModel(Project project) { - return new EmptyMarkupModel(this); - } - @Override public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) { } diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 5d49bffc3fd5..d6feb428c226 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -65,6 +65,7 @@ import com.intellij.openapi.editor.actionSystem.EditorActionManager; import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.util.EditorUtil; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.extensions.ExtensionPoint; @@ -803,7 +804,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig } } } - RangeHighlighter[] highlighters = myEditor.getDocument().getMarkupModel(getProject()).getAllHighlighters(); + RangeHighlighter[] highlighters = DocumentMarkupModel.forDocument(myEditor.getDocument(), getProject(), true).getAllHighlighters(); for (RangeHighlighter highlighter : highlighters) { if (highlighter.getEndOffset() >= offset && highlighter.getStartOffset() <= offset) { GutterIconRenderer renderer = highlighter.getGutterIconRenderer(); @@ -827,7 +828,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig addGutterIconRenderer(info.getGutterIconRenderer(), info.startOffset, result); } - for (final RangeHighlighter highlighter : myEditor.getDocument().getMarkupModel(project).getAllHighlighters()) { + for (final RangeHighlighter highlighter : DocumentMarkupModel.forDocument(myEditor.getDocument(), project, true).getAllHighlighters()) { if (!highlighter.isValid()) continue; addGutterIconRenderer(highlighter.getGutterIconRenderer(), highlighter.getStartOffset(), result); } diff --git a/platform/testFramework/testFramework.iml b/platform/testFramework/testFramework.iml index 4182d8a35f18..5cdf90425796 100644 --- a/platform/testFramework/testFramework.iml +++ b/platform/testFramework/testFramework.iml @@ -22,6 +22,7 @@ + diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java index a51da92a46e8..a428700039ed 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTracker.java @@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; @@ -167,7 +168,7 @@ public class LineStatusTracker { int second = range.getOffset2() >= myDocument.getLineCount() ? myDocument.getTextLength() : myDocument.getLineStartOffset(range.getOffset2()); - final RangeHighlighter highlighter = myDocument.getMarkupModel(myProject) + final RangeHighlighter highlighter = DocumentMarkupModel.forDocument(myDocument, myProject, true) .addRangeHighlighter(first, second, HighlighterLayer.FIRST - 1, null, HighlighterTargetArea.LINES_IN_RANGE); final TextAttributes attr = LineStatusTrackerDrawing.getAttributesFor(range); highlighter.setErrorStripeMarkColor(attr.getErrorStripeColor()); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java index 92221ccca399..4e4158543d49 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointImpl.java @@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.GutterDraggableObject; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.editor.markup.TextAttributes; @@ -79,7 +80,7 @@ public class XLineBreakpointImpl

extends XBreak TextAttributes attributes = scheme.getAttributes(DebuggerColors.BREAKPOINT_ATTRIBUTES); removeHighlighter(); - MarkupModelEx markupModel = (MarkupModelEx)document.getMarkupModel(getProject()); + MarkupModelEx markupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(document, getProject(), true); RangeHighlighter highlighter = markupModel.addPersistentLineHighlighter(getLine(), DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER, attributes); if (highlighter != null) { diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java index 253b70e60156..3ebb823b3841 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataHighlightingPass.java @@ -17,6 +17,7 @@ package com.intellij.testAssistant; import com.intellij.codeHighlighting.TextEditorHighlightingPass; import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; @@ -27,7 +28,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; /** * @author Konstantin Bulenkov @@ -54,7 +54,7 @@ public class TestDataHighlightingPass extends TextEditorHighlightingPass { public void doApplyInformationToEditor() { removeHighlighters(); - final MarkupModel model = myDocument.getMarkupModel(myProject); + final MarkupModel model = DocumentMarkupModel.forDocument(myDocument, myProject, true); final String text = myDocument.getText(); if (text != null) { @@ -72,7 +72,7 @@ public class TestDataHighlightingPass extends TextEditorHighlightingPass { } private void removeHighlighters() { - final MarkupModel model = myDocument.getMarkupModel(myProject); + final MarkupModel model = DocumentMarkupModel.forDocument(myDocument, myProject, true); for (RangeHighlighter highlighter : model.getAllHighlighters()) { if (highlighter.getUserData(KEY) == VALUE) { highlighter.dispose(); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java index 171f38435ee1..37d28f29e7c8 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/tagTreeHighlighting/XmlTagTreeHighlightingPass.java @@ -27,6 +27,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.MarkupModelEx; +import com.intellij.openapi.editor.impl.DocumentMarkupModel; import com.intellij.openapi.editor.markup.*; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; @@ -277,7 +278,7 @@ public class XmlTagTreeHighlightingPass extends TextEditorHighlightingPass { } public static void clearHighlightingAndLineMarkers(final Editor editor, @NotNull Project project) { - final MarkupModel markupModel = editor.getDocument().getMarkupModel(project); + final MarkupModel markupModel = DocumentMarkupModel.forDocument(editor.getDocument(), project, true); for (RangeHighlighter highlighter : markupModel.getAllHighlighters()) { Object tooltip = highlighter.getErrorStripeTooltip();