From a0a39a154d0d05f7428d79759bd029b5bbb36fb7 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Wed, 16 Aug 2017 16:41:16 +0300 Subject: [PATCH] [vcs-log] refactor hardcoded colors to color-keys --- .../editor/colors/EditorColorsUtil.java | 3 +- .../src/messages/OptionsBundle.properties | 6 ++ .../src/META-INF/VcsExtensionPoints.xml | 4 +- .../com/intellij/vcs/VcsColorsProvider.java | 42 ++++++++++++++ platform/vcs-api/vcs-api.iml | 1 + .../vcs/actions/VcsColorsPageFactory.java | 20 ++++++- .../com/intellij/vcs/log/VcsLogColors.java | 34 +++++++++++ .../src/com/intellij/vcs/log/VcsRefType.java | 5 +- .../vcs/log/VcsLogStandardColors.java | 30 ---------- .../intellij/vcs/log/impl/SimpleRefGroup.java | 8 ++- .../vcs/log/impl/SingletonRefGroup.java | 4 +- .../vcs/log/ui/frame/ReferencesPanel.java | 3 +- .../highlighters/MergeCommitsHighlighter.java | 12 ++-- .../log/ui/render/TooltipReferencesPanel.java | 3 +- .../vcs/log/impl/TestVcsLogProvider.java | 8 +-- plugins/git4idea/src/META-INF/plugin.xml | 1 + plugins/git4idea/src/git4idea/GitColors.java | 49 ++++++++++++++++ .../src/git4idea/branch/DeepComparator.java | 34 ++++------- .../src/git4idea/log/GitRefManager.java | 42 ++++++++------ plugins/hg4idea/src/META-INF/plugin.xml | 1 + .../src/org/zmlx/hg4idea/HgColors.java | 58 +++++++++++++++++++ .../org/zmlx/hg4idea/log/HgRefManager.java | 35 ++++++----- 22 files changed, 292 insertions(+), 111 deletions(-) create mode 100644 platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java create mode 100644 platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java delete mode 100644 platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java create mode 100644 plugins/git4idea/src/git4idea/GitColors.java create mode 100644 plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java index af1db57ed68b..dac4e5599ff1 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/colors/EditorColorsUtil.java @@ -41,7 +41,8 @@ public class EditorColorsUtil { @Nullable public static Color getGlobalOrDefaultColor(@NotNull ColorKey colorKey) { - return getColorSchemeForBackground(null).getColor(colorKey); + Color color = getColorSchemeForBackground(null).getColor(colorKey); + return color != null? color : colorKey.getDefaultColor(); } /** diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties index 902f1ecc8911..714aa9f02ebe 100644 --- a/platform/platform-resources-en/src/messages/OptionsBundle.properties +++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties @@ -135,6 +135,12 @@ options.general.color.descriptor.indent.guide.selected=Code//Selected vertical i options.general.color.descriptor.line.number=Code//Line number options.general.color.descriptor.vcs.annotations=VCS Annotations//Foreground options.general.color.descriptor.vcs.annotations.color.n=VCS Annotations//Background color #{0} +options.general.color.descriptor.vcs.log.merged.commit=VCS Log//Common//Merged commit +options.general.color.descriptor.vcs.log.refs.head=VCS Log//Common//Current +options.general.color.descriptor.vcs.log.refs.leaf=VCS Log//Common//Leaf +options.general.color.descriptor.vcs.log.refs.branch=VCS Log//Common//Branch +options.general.color.descriptor.vcs.log.refs.branch.tag=VCS Log//Common//Branch tag +options.general.color.descriptor.vcs.log.refs.tag=VCS Log//Common//Tag options.general.color.descriptor.tearline=Editor//Tear line options.general.color.descriptor.tearline.selected=Editor//Tear line selection options.general.color.descriptor.separator.above=Editor//Separator line above diff --git a/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml b/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml index 48a34a79ae3f..b5df6f11d022 100644 --- a/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/VcsExtensionPoints.xml @@ -63,7 +63,9 @@ interface="com.intellij.openapi.vcs.actions.VcsQuickListContentProvider"/> - + + diff --git a/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java b/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java new file mode 100644 index 000000000000..41d1dc7ff45c --- /dev/null +++ b/platform/vcs-api/src/com/intellij/vcs/VcsColorsProvider.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2017 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.vcs; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.options.colors.AttributesDescriptor; +import com.intellij.openapi.options.colors.ColorDescriptor; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +/** + * @author gregsh + */ +public abstract class VcsColorsProvider { + + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.vcsColorsProvider"); + + @NotNull + public List getAttributeDescriptors() { + return Collections.emptyList(); + } + + @NotNull + public List getColorDescriptors() { + return Collections.emptyList(); + } +} diff --git a/platform/vcs-api/vcs-api.iml b/platform/vcs-api/vcs-api.iml index da82a1193bd1..6d66050a0e94 100644 --- a/platform/vcs-api/vcs-api.iml +++ b/platform/vcs-api/vcs-api.iml @@ -8,6 +8,7 @@ + diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java index f0e1d9d3e235..ecc9e6609898 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/actions/VcsColorsPageFactory.java @@ -19,6 +19,7 @@ import com.intellij.application.options.colors.*; import com.intellij.openapi.application.ApplicationBundle; import com.intellij.openapi.editor.colors.ColorKey; import com.intellij.openapi.editor.colors.EditorColors; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorAndFontDescriptorsProvider; @@ -26,6 +27,8 @@ import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.psi.codeStyle.DisplayPriority; import com.intellij.psi.codeStyle.DisplayPrioritySortable; import com.intellij.util.ArrayUtil; +import com.intellij.vcs.VcsColorsProvider; +import com.intellij.vcs.log.VcsLogColors; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -55,7 +58,11 @@ public class VcsColorsPageFactory implements ColorAndFontPanelFactory, ColorAndF @Override @NotNull public AttributesDescriptor[] getAttributeDescriptors() { - return new AttributesDescriptor[0]; + List descriptors = new ArrayList<>(); + for (VcsColorsProvider provider : Extensions.getExtensions(VcsColorsProvider.EP_NAME)) { + descriptors.addAll(provider.getAttributeDescriptors()); + } + return ArrayUtil.toObjectArray(descriptors, AttributesDescriptor.class); } @Override @@ -76,6 +83,17 @@ public class VcsColorsPageFactory implements ColorAndFontPanelFactory, ColorAndF descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.annotations.color.n", i + 1), colorKeys.get(i), ColorDescriptor.Kind.BACKGROUND)); } + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.merged.commit"), VcsLogColors.MERGED_COMMIT, ColorDescriptor.Kind.FOREGROUND)); + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.head"), VcsLogColors.REFS_HEAD, ColorDescriptor.Kind.FOREGROUND)); + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.leaf"), VcsLogColors.REFS_LEAF, ColorDescriptor.Kind.FOREGROUND)); + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.branch"), VcsLogColors.REFS_BRANCH, ColorDescriptor.Kind.FOREGROUND)); + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.branch.tag"), VcsLogColors.REFS_BRANCH_REF, ColorDescriptor.Kind.FOREGROUND)); + descriptors.add(new ColorDescriptor(OptionsBundle.message("options.general.color.descriptor.vcs.log.refs.tag"), VcsLogColors.REFS_TAG, ColorDescriptor.Kind.FOREGROUND)); + + for (VcsColorsProvider provider : Extensions.getExtensions(VcsColorsProvider.EP_NAME)) { + descriptors.addAll(provider.getColorDescriptors()); + } + return ArrayUtil.toObjectArray(descriptors, ColorDescriptor.class); } diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java new file mode 100644 index 000000000000..c0eb2474ec90 --- /dev/null +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogColors.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2017 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.vcs.log; + +import com.intellij.openapi.editor.colors.ColorKey; +import com.intellij.ui.Gray; +import com.intellij.ui.JBColor; + +import java.awt.*; + +public interface VcsLogColors { + + ColorKey MERGED_COMMIT = ColorKey.createColorKey("VCS_MERGED_COMMIT", new JBColor(Gray._128, Gray._96)); + + ColorKey REFS_HEAD = ColorKey.createColorKey("VCS_REFS_HEAD", new JBColor(new Color(0xffd100), new Color(0xe1c731))); + ColorKey REFS_LEAF = ColorKey.createColorKey("VCS_REFS_LEAF", new JBColor(new Color(0x8a2d6b), new Color(0xc31e8c))); + ColorKey REFS_BRANCH = ColorKey.createColorKey("VCS_REFS_BRANCH", new JBColor(new Color(0x3cb45c), new Color(0x3cb45c))); + ColorKey REFS_BRANCH_REF = ColorKey.createColorKey("VCS_REFS_BRANCH_REF", new JBColor(new Color(0x9f79b5), new Color(0x9f79b5))); + ColorKey REFS_TAG = ColorKey.createColorKey("VCS_REFS_TAG", new JBColor(new Color(0x7a7a7a), new Color(0x999999))); + +} diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java index a8acae6592da..97fc32051923 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsRefType.java @@ -1,9 +1,8 @@ package com.intellij.vcs.log; +import com.intellij.openapi.editor.colors.ColorKey; import org.jetbrains.annotations.NotNull; -import java.awt.*; - /** * @author Kirill Likhodedov */ @@ -31,5 +30,5 @@ public interface VcsRefType { * TODO maybe this is not the right place for color */ @NotNull - Color getBackgroundColor(); + ColorKey getBgColorKey(); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java deleted file mode 100644 index 55f823989132..000000000000 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/VcsLogStandardColors.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2000-2015 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.vcs.log; - -import com.intellij.ui.JBColor; - -import java.awt.*; - -public class VcsLogStandardColors { - public static class Refs { - public static final Color TIP = new JBColor(new Color(0xffd100), new Color(0xe1c731)); - public static final Color LEAF = new JBColor(new Color(0x8a2d6b), new Color(0xc31e8c)); - public static final Color BRANCH = new JBColor(new Color(0x3cb45c), new Color(0x3cb45c)); - public static final Color BRANCH_REF = new JBColor(new Color(0x9f79b5), new Color(0x9f79b5)); - public static final Color TAG = new JBColor(new Color(0x7a7a7a), new Color(0x999999)); - } -} diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java index 7881a485162a..2e7677ab2941 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SimpleRefGroup.java @@ -15,6 +15,7 @@ */ package com.intellij.vcs.log.impl; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; @@ -66,16 +67,17 @@ public class SimpleRefGroup implements RefGroup { Map.Entry> firstItem = ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(referencesByType.entrySet())); boolean multiple = firstItem.getValue().size() > 1; - Color color = firstItem.getKey().getBackgroundColor(); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(firstItem.getKey().getBgColorKey()); return multiple ? Arrays.asList(color, color) : Collections.singletonList(color); } else { List colorsList = ContainerUtil.newArrayList(); for (VcsRefType type : referencesByType.keySet()) { + Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey()); if (referencesByType.get(type).size() > 1) { - colorsList.add(type.getBackgroundColor()); + colorsList.add(color); } - colorsList.add(type.getBackgroundColor()); + colorsList.add(color); } return colorsList; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java index 5fa6e35c09b5..af6f174813ca 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/SingletonRefGroup.java @@ -15,6 +15,7 @@ */ package com.intellij.vcs.log.impl; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.vcs.log.RefGroup; import com.intellij.vcs.log.VcsRef; import org.jetbrains.annotations.NotNull; @@ -53,6 +54,7 @@ public class SingletonRefGroup implements RefGroup { @NotNull @Override public List getColors() { - return Collections.singletonList(myRef.getType().getBackgroundColor()); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(myRef.getType().getBgColorKey()); + return Collections.singletonList(color); } } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java index eecbe7131228..d609066dd19c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/ReferencesPanel.java @@ -15,6 +15,7 @@ */ package com.intellij.vcs.log.ui.frame; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.panels.Wrapper; import com.intellij.util.ObjectUtils; @@ -118,7 +119,7 @@ public class ReferencesPanel extends JPanel { @NotNull Collection refs, int refIndex, int height) { if (refIndex == 0) { - Color color = type.getBackgroundColor(); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey()); return new LabelIcon(height, getBackground(), refs.size() > 1 ? new Color[]{color, color} : new Color[]{color}); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java index ee97b73725f8..c20c45c6401c 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/highlighters/MergeCommitsHighlighter.java @@ -15,14 +15,15 @@ */ package com.intellij.vcs.log.ui.highlighters; -import com.intellij.ui.Gray; -import com.intellij.ui.JBColor; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogData; import org.jetbrains.annotations.NotNull; +import java.awt.*; + public class MergeCommitsHighlighter implements VcsLogHighlighter { - public static final JBColor MERGE_COMMIT_FOREGROUND = new JBColor(Gray._128, Gray._96); + @NotNull private final VcsLogUi myLogUi; public MergeCommitsHighlighter(@NotNull VcsLogUi logUi) { @@ -33,7 +34,10 @@ public class MergeCommitsHighlighter implements VcsLogHighlighter { @Override public VcsCommitStyle getStyle(@NotNull VcsShortCommitDetails details, boolean isSelected) { if (isSelected || !myLogUi.isHighlighterEnabled(Factory.ID)) return VcsCommitStyle.DEFAULT; - if (details.getParents().size() >= 2) return VcsCommitStyleFactory.foreground(MERGE_COMMIT_FOREGROUND); + if (details.getParents().size() >= 2) { + Color color = EditorColorsUtil.getGlobalOrDefaultColor(VcsLogColors.MERGED_COMMIT); + return VcsCommitStyleFactory.foreground(color); + } return VcsCommitStyle.DEFAULT; } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java index 08ff19f8221c..9233d8aff00e 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TooltipReferencesPanel.java @@ -15,6 +15,7 @@ */ package com.intellij.vcs.log.ui.render; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.ColorUtil; @@ -71,7 +72,7 @@ class TooltipReferencesPanel extends ReferencesPanel { @Override protected Icon createIcon(@NotNull VcsRefType type, @NotNull Collection refs, int refIndex, int height) { if (refIndex == 0) { - Color color = type.getBackgroundColor(); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(type.getBgColorKey()); return new LabelIcon(height, getBackground(), refs.size() > 1 ? new Color[]{color, color} : new Color[]{color}) { @Override diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java index 4b45a6cced30..6ecd817b09ea 100644 --- a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java +++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java @@ -17,10 +17,10 @@ package com.intellij.vcs.log.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.colors.ColorKey; import com.intellij.openapi.vcs.VcsKey; import com.intellij.openapi.vcs.changes.committed.MockAbstractVcs; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.JBColor; import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; @@ -28,11 +28,9 @@ import com.intellij.vcs.log.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.awt.*; import java.io.DataInput; import java.io.DataOutput; import java.util.*; -import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.atomic.AtomicInteger; @@ -50,8 +48,8 @@ public class TestVcsLogProvider implements VcsLogProvider { @NotNull @Override - public Color getBackgroundColor() { - return JBColor.WHITE; + public ColorKey getBgColorKey() { + return VcsLogColors.REFS_BRANCH; } }; private static final String SAMPLE_SUBJECT = "Sample subject"; diff --git a/plugins/git4idea/src/META-INF/plugin.xml b/plugins/git4idea/src/META-INF/plugin.xml index 384b1bc97edc..7a4d775d2942 100644 --- a/plugins/git4idea/src/META-INF/plugin.xml +++ b/plugins/git4idea/src/META-INF/plugin.xml @@ -159,6 +159,7 @@ + diff --git a/plugins/git4idea/src/git4idea/GitColors.java b/plugins/git4idea/src/git4idea/GitColors.java new file mode 100644 index 000000000000..7c2ee5979498 --- /dev/null +++ b/plugins/git4idea/src/git4idea/GitColors.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2017 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 git4idea; + +import com.intellij.openapi.editor.colors.ColorKey; +import com.intellij.openapi.options.colors.ColorDescriptor; +import com.intellij.vcs.VcsColorsProvider; +import com.intellij.vcs.log.VcsLogColors; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.List; + +/** + * @author gregsh + */ +public class GitColors extends VcsColorsProvider { + + public static final ColorKey REFS_HEAD = ColorKey.createColorKey("GIT_REFS_HEAD", VcsLogColors.REFS_HEAD); + public static final ColorKey REFS_LOCAL_BRANCH = ColorKey.createColorKey("GIT_REFS_BRANCH", VcsLogColors.REFS_BRANCH); + public static final ColorKey REFS_REMOTE_BRANCH = ColorKey.createColorKey("GIT_REFS_BRANCH_REF", VcsLogColors.REFS_BRANCH_REF); + public static final ColorKey REFS_TAG = ColorKey.createColorKey("GIT_REFS_TAG", VcsLogColors.REFS_TAG); + public static final ColorKey REFS_OTHER = ColorKey.createColorKey("GIT_REFS_OTHER", VcsLogColors.REFS_TAG); + + @NotNull + @Override + public List getColorDescriptors() { + return Arrays.asList( + new ColorDescriptor("VCS Log//Git//Head", REFS_HEAD, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Git//Local branch", REFS_LOCAL_BRANCH, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Git//Remote branch", REFS_REMOTE_BRANCH, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Git//Tag", REFS_TAG, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Git//Other", REFS_OTHER, ColorDescriptor.Kind.FOREGROUND) + ); + } +} diff --git a/plugins/git4idea/src/git4idea/branch/DeepComparator.java b/plugins/git4idea/src/git4idea/branch/DeepComparator.java index 97282bff2c44..d8f2c451e945 100644 --- a/plugins/git4idea/src/git4idea/branch/DeepComparator.java +++ b/plugins/git4idea/src/git4idea/branch/DeepComparator.java @@ -19,20 +19,18 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; -import com.intellij.openapi.vcs.VcsException; -import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.impl.HashImpl; import com.intellij.vcs.log.impl.VcsLogUtil; -import com.intellij.vcs.log.ui.highlighters.MergeCommitsHighlighter; import com.intellij.vcs.log.ui.highlighters.VcsLogHighlighterFactory; import git4idea.GitBranch; import git4idea.commands.GitCommand; @@ -128,9 +126,8 @@ public class DeepComparator implements VcsLogHighlighter, Disposable { @Override public VcsLogHighlighter.VcsCommitStyle getStyle(@NotNull VcsShortCommitDetails commitDetails, boolean isSelected) { if (myNonPickedCommits == null) return VcsCommitStyle.DEFAULT; - return VcsCommitStyleFactory.foreground(!myNonPickedCommits.contains(new CommitId(commitDetails.getId(), commitDetails.getRoot())) - ? MergeCommitsHighlighter.MERGE_COMMIT_FOREGROUND - : null); + boolean inNonPicked = myNonPickedCommits.contains(new CommitId(commitDetails.getId(), commitDetails.getRoot())); + return VcsCommitStyleFactory.foreground(inNonPicked ? null : EditorColorsUtil.getGlobalOrDefaultColor(VcsLogColors.MERGED_COMMIT)); } @Override @@ -199,7 +196,6 @@ public class DeepComparator implements VcsLogHighlighter, Disposable { @NotNull private final String myComparedBranch; @NotNull private final Set myCollectedNonPickedCommits = ContainerUtil.newHashSet(); - @Nullable private VcsException myException; private boolean myCancelled; public MyTask(@NotNull Project project, @@ -215,17 +211,11 @@ public class DeepComparator implements VcsLogHighlighter, Disposable { @Override public void run(@NotNull ProgressIndicator indicator) { - try { - for (Map.Entry entry : myRepositoriesWithCurrentBranches.entrySet()) { - GitRepository repo = entry.getKey(); - GitBranch currentBranch = entry.getValue(); - myCollectedNonPickedCommits - .addAll(getNonPickedCommitsFromGit(myProject, repo.getRoot(), currentBranch.getName(), myComparedBranch)); - } - } - catch (VcsException e) { - LOG.warn(e); - myException = e; + for (Map.Entry entry : myRepositoriesWithCurrentBranches.entrySet()) { + GitRepository repo = entry.getKey(); + GitBranch currentBranch = entry.getValue(); + myCollectedNonPickedCommits + .addAll(getNonPickedCommitsFromGit(myProject, repo.getRoot(), currentBranch.getName(), myComparedBranch)); } } @@ -237,10 +227,6 @@ public class DeepComparator implements VcsLogHighlighter, Disposable { removeHighlighting(); - if (myException != null) { - VcsNotifier.getInstance(myProject).notifyError("Couldn't compare with branch " + myComparedBranch, myException.getMessage()); - return; - } myNonPickedCommits = myCollectedNonPickedCommits; } @@ -250,9 +236,9 @@ public class DeepComparator implements VcsLogHighlighter, Disposable { @NotNull private Set getNonPickedCommitsFromGit(@NotNull Project project, - @NotNull final VirtualFile root, + @NotNull VirtualFile root, @NotNull String currentBranch, - @NotNull String comparedBranch) throws VcsException { + @NotNull String comparedBranch) { GitLineHandler handler = new GitLineHandler(project, root, GitCommand.CHERRY); handler.addParameters(currentBranch, comparedBranch); // upstream - current branch; head - compared branch diff --git a/plugins/git4idea/src/git4idea/log/GitRefManager.java b/plugins/git4idea/src/git4idea/log/GitRefManager.java index 43a185828ffb..9fe6640336df 100644 --- a/plugins/git4idea/src/git4idea/log/GitRefManager.java +++ b/plugins/git4idea/src/git4idea/log/GitRefManager.java @@ -2,17 +2,23 @@ package git4idea.log; import com.intellij.dvcs.repo.RepositoryManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.colors.ColorKey; +import com.intellij.openapi.editor.colors.EditorColorsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; -import com.intellij.vcs.log.*; +import com.intellij.vcs.log.RefGroup; +import com.intellij.vcs.log.VcsLogRefManager; +import com.intellij.vcs.log.VcsRef; +import com.intellij.vcs.log.VcsRefType; import com.intellij.vcs.log.impl.SimpleRefGroup; import com.intellij.vcs.log.impl.SingletonRefGroup; import com.intellij.vcs.log.impl.VcsLogUtil; import git4idea.GitBranch; +import git4idea.GitColors; import git4idea.GitRemoteBranch; import git4idea.GitTag; import git4idea.repo.GitBranchTrackInfo; @@ -32,11 +38,11 @@ import java.util.List; * @author Kirill Likhodedov */ public class GitRefManager implements VcsLogRefManager { - public static final VcsRefType HEAD = new SimpleRefType(true, VcsLogStandardColors.Refs.TIP, "HEAD"); - public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH, "LOCAL_BRANCH"); - public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, VcsLogStandardColors.Refs.BRANCH_REF, "REMOTE_BRANCH"); - public static final VcsRefType TAG = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "TAG"); - public static final VcsRefType OTHER = new SimpleRefType(false, VcsLogStandardColors.Refs.TAG, "OTHER"); + public static final VcsRefType HEAD = new SimpleRefType(true, GitColors.REFS_HEAD); + public static final VcsRefType LOCAL_BRANCH = new SimpleRefType(true, GitColors.REFS_LOCAL_BRANCH); + public static final VcsRefType REMOTE_BRANCH = new SimpleRefType(true, GitColors.REFS_REMOTE_BRANCH); + public static final VcsRefType TAG = new SimpleRefType(false, GitColors.REFS_TAG); + public static final VcsRefType OTHER = new SimpleRefType(false, GitColors.REFS_OTHER); private static final List REF_TYPE_INDEX = Arrays.asList(HEAD, LOCAL_BRANCH, REMOTE_BRANCH, TAG, OTHER); @@ -313,13 +319,11 @@ public class GitRefManager implements VcsLogRefManager { private static class SimpleRefType implements VcsRefType { private final boolean myIsBranch; - @NotNull private final Color myColor; - @NotNull private final String myName; + private final ColorKey myColorKey; - public SimpleRefType(boolean isBranch, @NotNull Color color, @NotNull String typeName) { + public SimpleRefType(boolean isBranch, @NotNull ColorKey colorKey) { myIsBranch = isBranch; - myColor = color; - myName = typeName; + myColorKey = colorKey; } @Override @@ -329,13 +333,13 @@ public class GitRefManager implements VcsLogRefManager { @NotNull @Override - public Color getBackgroundColor() { - return myColor; + public ColorKey getBgColorKey() { + return myColorKey; } @Override public String toString() { - return myName; + return myColorKey.getExternalName(); } @Override @@ -343,12 +347,12 @@ public class GitRefManager implements VcsLogRefManager { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SimpleRefType type = (SimpleRefType)o; - return myIsBranch == type.myIsBranch && Objects.equals(myName, type.myName); + return myIsBranch == type.myIsBranch && myColorKey == type.myColorKey; } @Override public int hashCode() { - return Objects.hash(myIsBranch, myName); + return Objects.hash(myIsBranch, myColorKey); } } @@ -381,7 +385,8 @@ public class GitRefManager implements VcsLogRefManager { @NotNull @Override public List getColors() { - return Collections.singletonList(VcsLogStandardColors.Refs.TIP); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(GitColors.REFS_HEAD); + return Collections.singletonList(color); } } @@ -414,7 +419,8 @@ public class GitRefManager implements VcsLogRefManager { @NotNull @Override public List getColors() { - return Collections.singletonList(VcsLogStandardColors.Refs.BRANCH_REF); + Color color = EditorColorsUtil.getGlobalOrDefaultColor(GitColors.REFS_REMOTE_BRANCH); + return Collections.singletonList(color); } } diff --git a/plugins/hg4idea/src/META-INF/plugin.xml b/plugins/hg4idea/src/META-INF/plugin.xml index 8ef76262ce1f..f2e203c8003c 100644 --- a/plugins/hg4idea/src/META-INF/plugin.xml +++ b/plugins/hg4idea/src/META-INF/plugin.xml @@ -32,6 +32,7 @@ + diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java b/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java new file mode 100644 index 000000000000..bfb45adc98fa --- /dev/null +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/HgColors.java @@ -0,0 +1,58 @@ +/* + * Copyright 2000-2017 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 org.zmlx.hg4idea; + +import com.intellij.openapi.editor.colors.ColorKey; +import com.intellij.openapi.options.colors.ColorDescriptor; +import com.intellij.ui.JBColor; +import com.intellij.vcs.VcsColorsProvider; +import com.intellij.vcs.log.VcsLogColors; +import org.jetbrains.annotations.NotNull; + +import java.awt.*; +import java.util.Arrays; +import java.util.List; + +/** + * @author gregsh + */ +public class HgColors extends VcsColorsProvider { + public static final ColorKey REFS_TIP = ColorKey.createColorKey("HG_REFS_TIP", VcsLogColors.REFS_HEAD); + public static final ColorKey REFS_HEAD = ColorKey.createColorKey("HG_REFS_HEAD", VcsLogColors.REFS_LEAF); + public static final ColorKey REFS_BRANCH = ColorKey.createColorKey("HG_REFS_BRANCH", VcsLogColors.REFS_BRANCH); + public static final ColorKey REFS_BOOKMARK = ColorKey.createColorKey("HG_REFS_BOOKMARK", VcsLogColors.REFS_BRANCH_REF); + public static final ColorKey REFS_TAG = ColorKey.createColorKey("HG_REFS_TAG", VcsLogColors.REFS_TAG); + + public static final ColorKey CLOSED_BRANCH = ColorKey.createColorKey("HG_CLOSED_BRANCH", new JBColor(new Color(0x823139), new Color(0xff5f6f))); + public static final ColorKey LOCAL_TAG = ColorKey.createColorKey("HG_LOCAL_TAG", new JBColor(new Color(0x009090), new Color(0x00f3f3))); + public static final ColorKey MQ_TAG = ColorKey.createColorKey("HG_MQ_TAG", new JBColor(new Color(0x002f90), new Color(0x0055ff))); + + @NotNull + @Override + public List getColorDescriptors() { + return Arrays.asList( + new ColorDescriptor("VCS Log//Mercurial//Tip", REFS_TIP, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//Head", REFS_HEAD, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//Branch", REFS_BRANCH, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//Bookmark", REFS_BOOKMARK, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//Tag", REFS_TAG, ColorDescriptor.Kind.FOREGROUND), + + new ColorDescriptor("VCS Log//Mercurial//Closed branch", CLOSED_BRANCH, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//Local tag", LOCAL_TAG, ColorDescriptor.Kind.FOREGROUND), + new ColorDescriptor("VCS Log//Mercurial//MQ tag", MQ_TAG, ColorDescriptor.Kind.FOREGROUND) + ); + } +} diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java index 3b6f50812c61..d44b33f33065 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgRefManager.java @@ -15,35 +15,34 @@ */ package org.zmlx.hg4idea.log; -import com.intellij.ui.JBColor; +import com.intellij.openapi.editor.colors.ColorKey; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; -import com.intellij.vcs.log.*; +import com.intellij.vcs.log.RefGroup; +import com.intellij.vcs.log.VcsLogRefManager; +import com.intellij.vcs.log.VcsRef; +import com.intellij.vcs.log.VcsRefType; import com.intellij.vcs.log.impl.SimpleRefGroup; import com.intellij.vcs.log.impl.SingletonRefGroup; import com.intellij.vcs.log.impl.VcsLogUtil; import org.jetbrains.annotations.NotNull; +import org.zmlx.hg4idea.HgColors; -import java.awt.*; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.*; -import java.util.List; public class HgRefManager implements VcsLogRefManager { - private static final Color CLOSED_BRANCH_COLOR = new JBColor(new Color(0x823139), new Color(0xff5f6f)); - private static final Color LOCAL_TAG_COLOR = new JBColor(new Color(0x009090), new Color(0x00f3f3)); - private static final Color MQ_TAG_COLOR = new JBColor(new Color(0x002f90), new Color(0x0055ff)); - public static final VcsRefType TIP = new SimpleRefType("TIP", true, VcsLogStandardColors.Refs.TIP); - public static final VcsRefType HEAD = new SimpleRefType("HEAD", true, VcsLogStandardColors.Refs.LEAF); - public static final VcsRefType BRANCH = new SimpleRefType("BRANCH", true, VcsLogStandardColors.Refs.BRANCH); - public static final VcsRefType CLOSED_BRANCH = new SimpleRefType("CLOSED_BRANCH", false, CLOSED_BRANCH_COLOR); - public static final VcsRefType BOOKMARK = new SimpleRefType("BOOKMARK", true, VcsLogStandardColors.Refs.BRANCH_REF); - public static final VcsRefType TAG = new SimpleRefType("TAG", false, VcsLogStandardColors.Refs.TAG); - public static final VcsRefType LOCAL_TAG = new SimpleRefType("LOCAL_TAG", false, LOCAL_TAG_COLOR); - public static final VcsRefType MQ_APPLIED_TAG = new SimpleRefType("MQ_TAG", false, MQ_TAG_COLOR); + public static final VcsRefType TIP = new SimpleRefType("TIP", true, HgColors.REFS_TIP); + public static final VcsRefType HEAD = new SimpleRefType("HEAD", true, HgColors.REFS_HEAD); + public static final VcsRefType BRANCH = new SimpleRefType("BRANCH", true, HgColors.REFS_BRANCH); + public static final VcsRefType CLOSED_BRANCH = new SimpleRefType("CLOSED_BRANCH", false, HgColors.CLOSED_BRANCH); + public static final VcsRefType BOOKMARK = new SimpleRefType("BOOKMARK", true, HgColors.REFS_BOOKMARK); + public static final VcsRefType TAG = new SimpleRefType("TAG", false, HgColors.REFS_TAG); + public static final VcsRefType LOCAL_TAG = new SimpleRefType("LOCAL_TAG", false, HgColors.LOCAL_TAG); + public static final VcsRefType MQ_APPLIED_TAG = new SimpleRefType("MQ_TAG", false, HgColors.MQ_TAG); // first has the highest priority private static final List REF_TYPE_PRIORITIES = Arrays.asList(TIP, HEAD, BRANCH, BOOKMARK, TAG); @@ -155,9 +154,9 @@ public class HgRefManager implements VcsLogRefManager { private static class SimpleRefType implements VcsRefType { @NotNull private final String myName; private final boolean myIsBranch; - @NotNull private final Color myColor; + @NotNull private final ColorKey myColor; - public SimpleRefType(@NotNull String name, boolean isBranch, @NotNull Color color) { + public SimpleRefType(@NotNull String name, boolean isBranch, @NotNull ColorKey color) { myName = name; myIsBranch = isBranch; myColor = color; @@ -170,7 +169,7 @@ public class HgRefManager implements VcsLogRefManager { @NotNull @Override - public Color getBackgroundColor() { + public ColorKey getBgColorKey() { return myColor; }