diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java index df6f45ea8c92..57088c72c084 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/DaemonRespondToChangesTest.java @@ -671,7 +671,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { final int[] count = {0}; MarkupModelEx modelEx = (MarkupModelEx)DocumentMarkupModel.forDocument(getDocument(getFile()), getProject(), true); - modelEx.addMarkupModelListener(getTestRootDisposable(), new MarkupModelListener() { + modelEx.addMarkupModelListener(getTestRootDisposable(), new MarkupModelListener.Adapter() { @Override public void afterAdded(@NotNull RangeHighlighterEx highlighter) { count[0]++; @@ -681,10 +681,6 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) { count[0]++; } - - @Override - public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { - } }); type(' '); @@ -718,7 +714,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { } @Override - public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { + public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) { changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("changed"))); } @@ -769,7 +765,7 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase { } @Override - public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { + public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) { changed(highlighter, ExceptionUtil.getThrowableText(new Throwable("changed"))); } diff --git a/platform/editor-ui-ex/src/com/intellij/injected/editor/MarkupModelWindow.java b/platform/editor-ui-ex/src/com/intellij/injected/editor/MarkupModelWindow.java index f95c47e6b998..2addb6cd0396 100644 --- a/platform/editor-ui-ex/src/com/intellij/injected/editor/MarkupModelWindow.java +++ b/platform/editor-ui-ex/src/com/intellij/injected/editor/MarkupModelWindow.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -151,7 +151,7 @@ public class MarkupModelWindow extends UserDataHolderBase implements MarkupModel } @Override - public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) { + public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) { } diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/ex/MarkupModelEx.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/ex/MarkupModelEx.java index 6b848f40e0b2..5416607e12f2 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/ex/MarkupModelEx.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/ex/MarkupModelEx.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -35,7 +35,7 @@ public interface MarkupModelEx extends MarkupModel { @Nullable RangeHighlighterEx addPersistentLineHighlighter(int lineNumber, int layer, TextAttributes textAttributes); - void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged); + void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged); void fireAfterAdded(@NotNull RangeHighlighterEx segmentHighlighter); diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/EmptyMarkupModel.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/EmptyMarkupModel.java index 17a19df56ca9..d6177dbdf13e 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/EmptyMarkupModel.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/EmptyMarkupModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -144,7 +144,7 @@ public class EmptyMarkupModel implements MarkupModelEx { } @Override - public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) { + public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) { } diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java index d5a0d8795fa2..c999f5618936 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/MarkupModelImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -144,9 +144,11 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx public void changeAttributesInBatch(@NotNull RangeHighlighterEx highlighter, @NotNull Consumer changeAttributesAction) { ApplicationManager.getApplication().assertIsDispatchThread(); - RangeHighlighterImpl.ChangeResult changed = ((RangeHighlighterImpl)highlighter).changeAttributesNoEvents(changeAttributesAction); - if (changed != RangeHighlighterImpl.ChangeResult.NOT_CHANGED) { - fireAttributesChanged(highlighter, changed == RangeHighlighterImpl.ChangeResult.RENDERERS_CHANGED); + byte changeStatus = ((RangeHighlighterImpl)highlighter).changeAttributesNoEvents(changeAttributesAction); + if ((changeStatus & RangeHighlighterImpl.CHANGED_MASK) != 0) { + fireAttributesChanged(highlighter, + (changeStatus & RangeHighlighterImpl.RENDERERS_CHANGED_MASK) != 0, + (changeStatus & RangeHighlighterImpl.FONT_STYLE_CHANGED_MASK) != 0); } } @@ -225,9 +227,9 @@ public class MarkupModelImpl extends UserDataHolderBase implements MarkupModelEx } @Override - public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) { + public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) { for (MarkupModelListener listener : myListeners) { - listener.attributesChanged(segmentHighlighter, renderersChanged); + listener.attributesChanged(segmentHighlighter, renderersChanged, fontStyleChanged); } } diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java index f1d86d7fa394..c54c9e36756c 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/RangeHighlighterImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -57,12 +57,17 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx private static final byte ERROR_STRIPE_IS_THIN_MASK = 2; private static final byte TARGET_AREA_IS_EXACT_MASK = 4; private static final byte IN_BATCH_CHANGE_MASK = 8; - private static final byte CHANGED_MASK = 16; - private static final byte RENDERERS_CHANGED_MASK = 32; + static final byte CHANGED_MASK = 16; + static final byte RENDERERS_CHANGED_MASK = 32; + static final byte FONT_STYLE_CHANGED_MASK = 64; - @MagicConstant(intValues = {AFTER_END_OF_LINE_MASK, ERROR_STRIPE_IS_THIN_MASK, TARGET_AREA_IS_EXACT_MASK, IN_BATCH_CHANGE_MASK, CHANGED_MASK, RENDERERS_CHANGED_MASK}) + @MagicConstant(intValues = {AFTER_END_OF_LINE_MASK, ERROR_STRIPE_IS_THIN_MASK, TARGET_AREA_IS_EXACT_MASK, IN_BATCH_CHANGE_MASK, + CHANGED_MASK, RENDERERS_CHANGED_MASK, FONT_STYLE_CHANGED_MASK}) private @interface FlagConstant {} + @MagicConstant(flags = {CHANGED_MASK, RENDERERS_CHANGED_MASK, FONT_STYLE_CHANGED_MASK}) + private @interface ChangeStatus {} + RangeHighlighterImpl(@NotNull MarkupModel model, int start, int end, @@ -98,9 +103,13 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx TextAttributes old = myTextAttributes; myTextAttributes = textAttributes; if (!Comparing.equal(old, textAttributes)) { - fireChanged(false); + fireChanged(false, getFontStyle(old) != getFontStyle(textAttributes)); } } + + private static int getFontStyle(TextAttributes textAttributes) { + return textAttributes == null ? Font.PLAIN : textAttributes.getFontType(); + } @Override @NotNull @@ -118,7 +127,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx LineMarkerRenderer old = myLineMarkerRenderer; myLineMarkerRenderer = renderer; if (!Comparing.equal(old, renderer)) { - fireChanged(true); + fireChanged(true, false); } } @@ -132,7 +141,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx CustomHighlighterRenderer old = myCustomRenderer; myCustomRenderer = renderer; if (!Comparing.equal(old, renderer)) { - fireChanged(true); + fireChanged(true, false); } } @@ -146,7 +155,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx GutterMark old = myGutterIconRenderer; myGutterIconRenderer = renderer; if (!Comparing.equal(old, renderer)) { - fireChanged(true); + fireChanged(true, false); } } @@ -164,7 +173,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx Color old = myErrorStripeColor; myErrorStripeColor = color; if (!Comparing.equal(old, color)) { - fireChanged(false); + fireChanged(false, false); } } @@ -179,7 +188,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx Object old = myErrorStripeTooltip; myErrorStripeTooltip = tooltipObject; if (!Comparing.equal(old, tooltipObject)) { - fireChanged(false); + fireChanged(false, false); } } @@ -194,7 +203,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx boolean old = isThinErrorStripeMark(); setFlag(ERROR_STRIPE_IS_THIN_MASK, value); if (old != value) { - fireChanged(false); + fireChanged(false, false); } } @@ -208,7 +217,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx Color old = myLineSeparatorColor; myLineSeparatorColor = color; if (!Comparing.equal(old, color)) { - fireChanged(false); + fireChanged(false, false); } } @@ -222,14 +231,14 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx SeparatorPlacement old = mySeparatorPlacement; mySeparatorPlacement = placement; if (!Comparing.equal(old, placement)) { - fireChanged(false); + fireChanged(false, false); } } @Override public void setEditorFilter(@NotNull MarkupEditorFilter filter) { myFilter = filter; - fireChanged(false); + fireChanged(false, false); } @Override @@ -248,20 +257,19 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx boolean old = isAfterEndOfLine(); setFlag(AFTER_END_OF_LINE_MASK, afterEndOfLine); if (old != afterEndOfLine) { - fireChanged(false); + fireChanged(false, false); } } - private void fireChanged(boolean renderersChanged) { + private void fireChanged(boolean renderersChanged, boolean fontStyleChanged) { if (myModel instanceof MarkupModelEx) { if (isFlagSet(IN_BATCH_CHANGE_MASK)) { setFlag(CHANGED_MASK, true); - if (renderersChanged) { - setFlag(RENDERERS_CHANGED_MASK, true); - } + if (renderersChanged) setFlag(RENDERERS_CHANGED_MASK, true); + if (fontStyleChanged) setFlag(FONT_STYLE_CHANGED_MASK, true); } else { - ((MarkupModelEx)myModel).fireAttributesChanged(this, renderersChanged); + ((MarkupModelEx)myModel).fireAttributesChanged(this, renderersChanged, fontStyleChanged); } } } @@ -299,24 +307,27 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx } - enum ChangeResult { NOT_CHANGED, MINOR_CHANGE, RENDERERS_CHANGED } - @NotNull - ChangeResult changeAttributesNoEvents(@NotNull Consumer change) { + @ChangeStatus + byte changeAttributesNoEvents(@NotNull Consumer change) { assert !isFlagSet(IN_BATCH_CHANGE_MASK); assert !isFlagSet(CHANGED_MASK); setFlag(IN_BATCH_CHANGE_MASK, true); setFlag(RENDERERS_CHANGED_MASK, false); - ChangeResult result; + setFlag(FONT_STYLE_CHANGED_MASK, false); + byte result = 0; try { change.consume(this); } finally { setFlag(IN_BATCH_CHANGE_MASK, false); - boolean changed = isFlagSet(CHANGED_MASK); - boolean renderersChanged = isFlagSet(RENDERERS_CHANGED_MASK); - result = changed ? renderersChanged ? ChangeResult.RENDERERS_CHANGED : ChangeResult.MINOR_CHANGE : ChangeResult.NOT_CHANGED; + if (isFlagSet(CHANGED_MASK)) { + result |= CHANGED_MASK; + if (isFlagSet(RENDERERS_CHANGED_MASK)) result |= RENDERERS_CHANGED_MASK; + if (isFlagSet(FONT_STYLE_CHANGED_MASK)) result |= FONT_STYLE_CHANGED_MASK; + } setFlag(CHANGED_MASK, false); setFlag(RENDERERS_CHANGED_MASK, false); + setFlag(FONT_STYLE_CHANGED_MASK, false); } return result; } @@ -330,7 +341,7 @@ class RangeHighlighterImpl extends RangeMarkerImpl implements RangeHighlighterEx LineSeparatorRenderer old = myLineSeparatorRenderer; myLineSeparatorRenderer = renderer; if (!Comparing.equal(old, renderer)) { - fireChanged(true); + fireChanged(true, false); } } diff --git a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/event/MarkupModelListener.java b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/event/MarkupModelListener.java index 83368bfd228a..f938717a65e4 100644 --- a/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/event/MarkupModelListener.java +++ b/platform/editor-ui-ex/src/com/intellij/openapi/editor/impl/event/MarkupModelListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -27,7 +27,7 @@ public interface MarkupModelListener extends EventListener { void beforeRemoved(@NotNull RangeHighlighterEx highlighter); - void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged); + void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged); abstract class Adapter implements MarkupModelListener { @Override @@ -39,7 +39,7 @@ public interface MarkupModelListener extends EventListener { } @Override - public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { + public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) { } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFilteringMarkupModelEx.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFilteringMarkupModelEx.java index a575fdfa786f..eb89620cc9fb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFilteringMarkupModelEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorFilteringMarkupModelEx.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -128,8 +128,8 @@ public class EditorFilteringMarkupModelEx implements MarkupModelEx { } @Override - public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged) { - myDelegate.fireAttributesChanged(segmentHighlighter, renderersChanged); + public void fireAttributesChanged(@NotNull RangeHighlighterEx segmentHighlighter, boolean renderersChanged, boolean fontStyleChanged) { + myDelegate.fireAttributesChanged(segmentHighlighter, renderersChanged, fontStyleChanged); } @Override 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 edc2c9414e60..348c81238857 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 @@ -374,16 +374,16 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } @Override public void afterAdded(@NotNull RangeHighlighterEx highlighter) { - attributesChanged(highlighter, areRenderersInvolved(highlighter)); + attributesChanged(highlighter, areRenderersInvolved(highlighter), false); } @Override public void beforeRemoved(@NotNull RangeHighlighterEx highlighter) { - attributesChanged(highlighter, areRenderersInvolved(highlighter)); + attributesChanged(highlighter, areRenderersInvolved(highlighter), false); } @Override - public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged) { + public void attributesChanged(@NotNull RangeHighlighterEx highlighter, boolean renderersChanged, boolean fontStyleChanged) { if (myDocument.isInBulkUpdate()) return; // bulkUpdateFinished() will repaint anything if (myUseNewRendering && renderersChanged) { @@ -5497,7 +5497,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi for (RangeHighlighter highlighter : myDocumentMarkupModel.getDelegate().getAllHighlighters()) { boolean oldAvailable = oldFilter == null || oldFilter.value(highlighter); boolean newAvailable = filter == null || filter.value(highlighter); - if (oldAvailable != newAvailable) myMarkupModelListener.attributesChanged((RangeHighlighterEx)highlighter, true); + if (oldAvailable != newAvailable) myMarkupModelListener.attributesChanged((RangeHighlighterEx)highlighter, true, false); } } 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 87c1896d57b0..0985daa20b6b 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 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 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. @@ -134,7 +134,7 @@ public class XLineBreakpointImpl

extends XBreak markupModel = (MarkupModelEx)DocumentMarkupModel.forDocument(document, getProject(), false); if (markupModel != null) { // renderersChanged false - we don't change gutter size - markupModel.fireAttributesChanged((RangeHighlighterEx)highlighter, false); + markupModel.fireAttributesChanged((RangeHighlighterEx)highlighter, false, false); } } }