2 * Copyright 2000-2015 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.codeHighlighting;
18 import com.intellij.icons.AllIcons;
19 import com.intellij.lang.annotation.HighlightSeverity;
20 import com.intellij.openapi.editor.colors.CodeInsightColors;
21 import com.intellij.openapi.editor.colors.EditorColorsManager;
22 import com.intellij.openapi.editor.colors.TextAttributesKey;
23 import com.intellij.openapi.editor.markup.TextAttributes;
24 import com.intellij.openapi.util.Comparing;
25 import com.intellij.ui.JBColor;
26 import com.intellij.util.IconUtil;
27 import com.intellij.util.ObjectUtils;
28 import com.intellij.util.containers.HashMap;
29 import com.intellij.util.ui.ColorIcon;
30 import com.intellij.util.ui.JBUI;
31 import org.jetbrains.annotations.NotNull;
32 import org.jetbrains.annotations.Nullable;
38 public class HighlightDisplayLevel {
39 private static final Map<HighlightSeverity, HighlightDisplayLevel> ourMap = new HashMap<HighlightSeverity, HighlightDisplayLevel>();
41 public static final HighlightDisplayLevel GENERIC_SERVER_ERROR_OR_WARNING = new HighlightDisplayLevel(HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING,
42 createIconByKey(CodeInsightColors.GENERIC_SERVER_ERROR_OR_WARNING));
43 public static final HighlightDisplayLevel ERROR = new HighlightDisplayLevel(HighlightSeverity.ERROR, createErrorIcon());
46 private static Icon createErrorIcon() {
47 return new SingleColorIcon(CodeInsightColors.ERRORS_ATTRIBUTES) {
49 public void paintIcon(Component c, Graphics g, int x, int y) {
50 IconUtil.colorize(AllIcons.General.InspectionsError, getColor()).paintIcon(c, g, x, y);
55 public static final HighlightDisplayLevel WARNING = new HighlightDisplayLevel(HighlightSeverity.WARNING, createIconByKey(CodeInsightColors.WARNINGS_ATTRIBUTES));
56 private static final TextAttributesKey DO_NOT_SHOW_KEY = TextAttributesKey.createTextAttributesKey("DO_NOT_SHOW");
57 public static final HighlightDisplayLevel DO_NOT_SHOW = new HighlightDisplayLevel(HighlightSeverity.INFORMATION, createIconByKey(DO_NOT_SHOW_KEY));
59 * use #WEAK_WARNING instead
62 public static final HighlightDisplayLevel INFO = new HighlightDisplayLevel(HighlightSeverity.INFO, DO_NOT_SHOW.getIcon());
63 public static final HighlightDisplayLevel WEAK_WARNING = new HighlightDisplayLevel(HighlightSeverity.WEAK_WARNING, createIconByKey(CodeInsightColors.WEAK_WARNING_ATTRIBUTES));
65 public static final HighlightDisplayLevel NON_SWITCHABLE_ERROR = new HighlightDisplayLevel(HighlightSeverity.ERROR);
68 private final HighlightSeverity mySeverity;
71 public static HighlightDisplayLevel find(String name) {
72 for (Map.Entry<HighlightSeverity, HighlightDisplayLevel> entry : ourMap.entrySet()) {
73 HighlightSeverity severity = entry.getKey();
74 HighlightDisplayLevel displayLevel = entry.getValue();
75 if (Comparing.strEqual(severity.getName(), name)) {
82 public static HighlightDisplayLevel find(HighlightSeverity severity) {
83 return ourMap.get(severity);
86 public HighlightDisplayLevel(@NotNull HighlightSeverity severity, @NotNull Icon icon) {
89 ourMap.put(mySeverity, this);
92 public HighlightDisplayLevel(@NotNull HighlightSeverity severity) {
93 mySeverity = severity;
97 public String toString() {
98 return mySeverity.toString();
102 public String getName() {
103 return mySeverity.getName();
106 public Icon getIcon() {
111 public HighlightSeverity getSeverity(){
115 public static void registerSeverity(@NotNull HighlightSeverity severity, @NotNull TextAttributesKey key, @Nullable Icon icon) {
116 Icon severityIcon = icon != null ? icon : createIconByKey(key);
117 final HighlightDisplayLevel level = ourMap.get(severity);
119 new HighlightDisplayLevel(severity, severityIcon);
122 level.myIcon = severityIcon;
126 public static int getEmptyIconDim() {
127 return JBUI.scale(14);
130 public static Icon createIconByKey(@NotNull TextAttributesKey key) {
131 return new SingleColorIcon(key);
135 public static Icon createIconByMask(final Color renderColor) {
136 return new MyColorIcon(getEmptyIconDim(), renderColor);
139 private static class MyColorIcon extends ColorIcon implements ColoredIcon {
140 public MyColorIcon(int size, @NotNull Color color) {
145 public Color getColor() {
146 return getIconColor();
150 public interface ColoredIcon {
154 public static class SingleColorIcon implements Icon, ColoredIcon {
155 private final TextAttributesKey myKey;
157 public SingleColorIcon(@NotNull TextAttributesKey key) {
162 public Color getColor() {
163 return ObjectUtils.notNull(getColorInner(), JBColor.GRAY);
167 public Color getColorInner() {
168 final EditorColorsManager manager = EditorColorsManager.getInstance();
169 if (manager != null) {
170 TextAttributes attributes = manager.getGlobalScheme().getAttributes(myKey);
171 Color stripe = attributes.getErrorStripeColor();
172 if (stripe != null) return stripe;
173 return attributes.getEffectColor();
175 TextAttributes defaultAttributes = myKey.getDefaultAttributes();
176 if (defaultAttributes == null) defaultAttributes = TextAttributes.ERASE_MARKER;
177 return defaultAttributes.getErrorStripeColor();
181 public void paintIcon(Component c, Graphics g, int x, int y) {
182 g.setColor(getColor());
183 g.fillRect(x + 2, y + 2, 10, 10);
187 public int getIconWidth() {
188 return getEmptyIconDim();
192 public int getIconHeight() {
193 return getEmptyIconDim();