diff options
author | Tor Norbye <tnorbye@google.com> | 2014-08-21 00:31:02 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-08-16 04:55:08 +0000 |
commit | 9cde0e3c015174898df8b8f3672185941fad4786 (patch) | |
tree | 80a55c7b59c38377216daaada4e8bc47b69ceb9a /platform/platform-impl/src/com/intellij/openapi/editor | |
parent | 3b37877a2561bf9fbe072253a18688807d523505 (diff) | |
parent | d76e3920c56d37c942092b7dca20fcaded81c0a5 (diff) | |
download | idea-9cde0e3c015174898df8b8f3672185941fad4786.tar.gz |
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/editor')
12 files changed, 157 insertions, 31 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/EditorLinePainter.java b/platform/platform-impl/src/com/intellij/openapi/editor/EditorLinePainter.java new file mode 100644 index 000000000000..420a0fdf23a7 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/editor/EditorLinePainter.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2014 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; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +/** + * @author Konstantin Bulenkov + */ +public abstract class EditorLinePainter { + public static final ExtensionPointName<EditorLinePainter> EP_NAME = ExtensionPointName.create("com.intellij.editor.linePainter"); + + public abstract Collection<LineExtensionInfo> getLineExtensions(@NotNull Project project, @NotNull VirtualFile file, int lineNumber); +} diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/LineExtensionInfo.java b/platform/platform-impl/src/com/intellij/openapi/editor/LineExtensionInfo.java new file mode 100644 index 000000000000..f84502097b10 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/editor/LineExtensionInfo.java @@ -0,0 +1,71 @@ +/* + * Copyright 2000-2014 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; + +import com.intellij.openapi.editor.markup.EffectType; +import org.intellij.lang.annotations.JdkConstants; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.awt.*; + +/** + * @author Konstantin Bulenkov + */ +public class LineExtensionInfo { + @NotNull private final String myText; + @Nullable private final Color myColor; + @Nullable private final EffectType myEffectType; + @Nullable private final Color myEffectColor; + @JdkConstants.FontStyle private final int myFontType; + + public LineExtensionInfo(@NotNull String text, + @Nullable Color color, + @Nullable EffectType effectType, + @Nullable Color effectColor, + @JdkConstants.FontStyle int fontType) { + myText = text; + myColor = color; + myEffectType = effectType; + myEffectColor = effectColor; + myFontType = fontType; + } + + @NotNull + public String getText() { + return myText; + } + + @Nullable + public Color getColor() { + return myColor; + } + + @Nullable + public EffectType getEffectType() { + return myEffectType; + } + + @Nullable + public Color getEffectColor() { + return myEffectColor; + } + + @JdkConstants.FontStyle + public int getFontType() { + return myFontType; + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EnterAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EnterAction.java index cc7b2177cd91..ea2107632122 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/EnterAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/EnterAction.java @@ -30,6 +30,8 @@ import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.actionSystem.EditorAction; import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler; import com.intellij.util.ui.MacUIUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class EnterAction extends EditorAction { public EnterAction() { @@ -43,13 +45,13 @@ public class EnterAction extends EditorAction { } @Override - public void executeWriteAction(Editor editor, DataContext dataContext) { + public void executeWriteAction(Editor editor, @Nullable Caret caret, DataContext dataContext) { CommandProcessor.getInstance().setCurrentCommandName(EditorBundle.message("typing.command.name")); insertNewLineAtCaret(editor); } @Override - public boolean isEnabled(Editor editor, DataContext dataContext) { + public boolean isEnabledForCaret(@NotNull Editor editor, @NotNull Caret caret, DataContext dataContext) { return !editor.isOneLineMode(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/IndentSelectionAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/IndentSelectionAction.java index 92f025685891..76eff2bd7a54 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/IndentSelectionAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/IndentSelectionAction.java @@ -57,7 +57,7 @@ public class IndentSelectionAction extends EditorAction { @Override public void executeWriteAction(Editor editor, @Nullable Caret caret, DataContext dataContext) { Project project = CommonDataKeys.PROJECT.getData(dataContext); - if (isEnabled(editor, dataContext)) { + if (isEnabled(editor, caret, dataContext)) { indentSelection(editor, project); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/SplitLineAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/SplitLineAction.java index 7716a9001b7e..1583bd423ff7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/SplitLineAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/SplitLineAction.java @@ -18,10 +18,7 @@ package com.intellij.openapi.editor.actions; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.IdeActions; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.RangeMarker; -import com.intellij.openapi.editor.ScrollType; +import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.actionSystem.EditorAction; import com.intellij.openapi.editor.actionSystem.EditorActionHandler; import com.intellij.openapi.editor.actionSystem.EditorActionManager; @@ -30,6 +27,7 @@ import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.util.Key; import com.intellij.util.text.CharArrayUtil; +import org.jetbrains.annotations.NotNull; /** * @author max @@ -48,13 +46,13 @@ public class SplitLineAction extends EditorAction { } @Override - public boolean isEnabled(Editor editor, DataContext dataContext) { - return getEnterHandler().isEnabled(editor, dataContext) && + public boolean isEnabledForCaret(@NotNull Editor editor, @NotNull Caret caret, DataContext dataContext) { + return getEnterHandler().isEnabled(editor, caret, dataContext) && !((EditorEx)editor).isEmbeddedIntoDialogWrapper(); } @Override - public void executeWriteAction(Editor editor, DataContext dataContext) { + public void executeWriteAction(Editor editor, Caret caret, DataContext dataContext) { CopyPasteManager.getInstance().stopKillRings(); final Document document = editor.getDocument(); final RangeMarker rangeMarker = @@ -77,7 +75,7 @@ public class SplitLineAction extends EditorAction { } else { DataManager.getInstance().saveInDataContext(dataContext, SPLIT_LINE_KEY, true); try { - getEnterHandler().execute(editor, dataContext); + getEnterHandler().execute(editor, caret, dataContext); } finally { DataManager.getInstance().saveInDataContext(dataContext, SPLIT_LINE_KEY, null); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineAction.java index 0302e484d00d..b2f43bf4458f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineAction.java @@ -17,6 +17,7 @@ package com.intellij.openapi.editor.actions; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.IdeActions; +import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.actionSystem.EditorAction; @@ -24,6 +25,7 @@ import com.intellij.openapi.editor.actionSystem.EditorActionHandler; import com.intellij.openapi.editor.actionSystem.EditorActionManager; import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler; import com.intellij.openapi.ide.CopyPasteManager; +import org.jetbrains.annotations.NotNull; /** * @author max @@ -39,12 +41,12 @@ public class StartNewLineAction extends EditorAction { } @Override - public boolean isEnabled(Editor editor, DataContext dataContext) { - return getEnterHandler().isEnabled(editor, dataContext); + public boolean isEnabledForCaret(@NotNull Editor editor, @NotNull Caret caret, DataContext dataContext) { + return getEnterHandler().isEnabled(editor, caret, dataContext); } @Override - public void executeWriteAction(Editor editor, DataContext dataContext) { + public void executeWriteAction(Editor editor, Caret caret, DataContext dataContext) { CopyPasteManager.getInstance().stopKillRings(); if (editor.getDocument().getLineCount() != 0) { editor.getSelectionModel().removeSelection(); @@ -53,7 +55,7 @@ public class StartNewLineAction extends EditorAction { editor.getCaretModel().moveToOffset(lineEndOffset); } - getEnterHandler().execute(editor, dataContext); + getEnterHandler().execute(editor, caret, dataContext); } private static EditorActionHandler getEnterHandler() { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineBeforeAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineBeforeAction.java index fc2ae4031ca3..4d8c6ff2f465 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineBeforeAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineBeforeAction.java @@ -42,8 +42,8 @@ public class StartNewLineBeforeAction extends EditorAction { } @Override - public boolean isEnabled(Editor editor, DataContext dataContext) { - return getHandler(IdeActions.ACTION_EDITOR_ENTER).isEnabled(editor, dataContext); + public boolean isEnabledForCaret(@NotNull Editor editor, @NotNull Caret caret, DataContext dataContext) { + return getHandler(IdeActions.ACTION_EDITOR_ENTER).isEnabled(editor, caret, dataContext); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/UnselectWordAtCaretAction.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/UnselectWordAtCaretAction.java index a1ae088a89e2..2d7e3945ee6e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/UnselectWordAtCaretAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/UnselectWordAtCaretAction.java @@ -24,11 +24,13 @@ */ package com.intellij.openapi.editor.actions; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.editor.Caret; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.actionSystem.EditorAction; import com.intellij.openapi.editor.actionSystem.EditorActionHandler; -import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.DumbAware; +import org.jetbrains.annotations.Nullable; public class UnselectWordAtCaretAction extends EditorAction implements DumbAware { public UnselectWordAtCaretAction() { @@ -42,7 +44,7 @@ public class UnselectWordAtCaretAction extends EditorAction implements DumbAware } @Override - public void execute(Editor editor, DataContext dataContext) { + public void doExecute(Editor editor, @Nullable Caret caret, DataContext dataContext) { } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java index 5da1077baf5c..71dee99c3514 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -28,7 +28,7 @@ public interface EditorMarkupModel extends MarkupModel { void setErrorStripeVisible(boolean val); - void setErrorStripeRenderer(ErrorStripeRenderer renderer); + void setErrorStripeRenderer(@NotNull ErrorStripeRenderer renderer); ErrorStripeRenderer getErrorStripeRenderer(); void addErrorMarkerListener(@NotNull ErrorStripeListener listener, @NotNull Disposable parent); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHeaderComponent.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHeaderComponent.java index fc1f9048d31f..31b3a56d2317 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHeaderComponent.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHeaderComponent.java @@ -46,13 +46,8 @@ public class EditorHeaderComponent extends JPanel { paintGradient(g, this); } - @NotNull - protected JBColor getBaseBackgroundColor() { - return new JBColor(getBackground(), JBColor.background()); - } - private void paintGradient(Graphics g, JComponent c) { - Color GRADIENT_C1 = getBaseBackgroundColor(); + Color GRADIENT_C1 = isBackgroundSet() ? getBackground() : new JBColor(getBackground(), JBColor.background()); Color GRADIENT_C2 = new JBColor(new Color(Math.max(0, GRADIENT_C1.getRed() - 0x18), Math.max(0, GRADIENT_C1.getGreen() - 0x18), Math.max(0, GRADIENT_C1.getBlue() - 0x18)), Gray._75); 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 c0ffbd10aca4..6160ea58dcdf 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 @@ -2765,8 +2765,25 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (hEnd >= lEnd) { FoldRegion collapsedFolderAt = myFoldingModel.getCollapsedRegionAtOffset(start); if (collapsedFolderAt == null) { - drawStringWithSoftWraps(g, chars, start, lEnd - lIterator.getSeparatorLength(), position, clip, effectColor, - effectType, fontType, currentColor, logicalPosition); + int i = drawStringWithSoftWraps(g, chars, start, lEnd - lIterator.getSeparatorLength(), position, clip, effectColor, + effectType, fontType, currentColor, logicalPosition); + final VirtualFile file = getVirtualFile(); + if (myProject != null && file != null && !isOneLineMode()) { + for (EditorLinePainter painter : EditorLinePainter.EP_NAME.getExtensions()) { + Collection<LineExtensionInfo> extensions = painter.getLineExtensions(myProject, file, lIterator.getLineNumber()); + if (extensions != null && !extensions.isEmpty()) { + for (LineExtensionInfo info : extensions) { + drawStringWithSoftWraps(g, info.getText(), 0, info.getText().length(), position, clip, + info.getEffectColor() == null ? effectColor : info.getEffectColor(), + info.getEffectType() == null ? effectType : info.getEffectType(), + info.getFontType(), + info.getColor() == null ? currentColor : info.getColor(), + logicalPosition); + } + } + } + } + position.x = 0; if (position.y > clip.y + clip.height) { break; @@ -6749,10 +6766,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi public Insets getBorderInsets(Component c) { Container splitters = SwingUtilities.getAncestorOfClass(EditorsSplitters.class, c); boolean thereIsSomethingAbove = !SystemInfo.isMac || UISettings.getInstance().SHOW_MAIN_TOOLBAR || UISettings.getInstance().SHOW_NAVIGATION_BAR || - myProject != null && !ToolWindowManagerEx.getInstanceEx(myProject).getIdsOn(ToolWindowAnchor.TOP).isEmpty(); + toolWindowIsNotEmpty(); return splitters == null ? super.getBorderInsets(c) : new Insets(thereIsSomethingAbove ? 1 : 0, 0, 0, 0); } + public boolean toolWindowIsNotEmpty() { + if (myProject == null) return false; + ToolWindowManagerEx m = ToolWindowManagerEx.getInstanceEx(myProject); + if (m == null) return false; + return !m.getIdsOn(ToolWindowAnchor.TOP).isEmpty(); + } + @Override public boolean isBorderOpaque() { return true; 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 6ec29e58dc0b..20c08ec4ec99 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 @@ -368,7 +368,7 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark } @Override - public void setErrorStripeRenderer(ErrorStripeRenderer renderer) { + public void setErrorStripeRenderer(@NotNull ErrorStripeRenderer renderer) { assertIsDispatchThread(); if (myErrorStripeRenderer instanceof Disposable) { Disposer.dispose((Disposable)myErrorStripeRenderer); |