summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/editor
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-08-21 00:31:02 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-08-16 04:55:08 +0000
commit9cde0e3c015174898df8b8f3672185941fad4786 (patch)
tree80a55c7b59c38377216daaada4e8bc47b69ceb9a /platform/platform-impl/src/com/intellij/openapi/editor
parent3b37877a2561bf9fbe072253a18688807d523505 (diff)
parentd76e3920c56d37c942092b7dca20fcaded81c0a5 (diff)
downloadidea-9cde0e3c015174898df8b8f3672185941fad4786.tar.gz
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/editor')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/EditorLinePainter.java32
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/LineExtensionInfo.java71
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/EnterAction.java6
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/IndentSelectionAction.java2
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/SplitLineAction.java14
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineAction.java10
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/StartNewLineBeforeAction.java4
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/actions/UnselectWordAtCaretAction.java6
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorMarkupModel.java4
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorHeaderComponent.java7
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java30
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java2
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);