annoying green-to-red icon color change fixed
authorAlexey Kudravtsev <cdr@intellij.com>
Mon, 13 Sep 2010 12:10:27 +0000 (16:10 +0400)
committerAlexey Kudravtsev <cdr@intellij.com>
Mon, 13 Sep 2010 12:16:31 +0000 (16:16 +0400)
platform/lang-impl/src/com/intellij/application/options/colors/FontEditorPreview.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficTooltipRendererImpl.java
platform/platform-api/src/com/intellij/codeHighlighting/HighlightDisplayLevel.java
xml/dom-impl/src/com/intellij/util/xml/highlighting/DomElementsErrorPanel.java

index 33add956d0d499077196c973929787dca11ab908..1b303ff6e681041b331bdcf9481c5907bf9b9098 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.intellij.application.options.colors;
 
+import com.intellij.codeInsight.daemon.impl.SeverityRegistrar;
 import com.intellij.codeInsight.daemon.impl.TrafficLightRenderer;
 import com.intellij.openapi.application.ApplicationNamesInfo;
 import com.intellij.openapi.editor.*;
@@ -56,7 +57,7 @@ public class FontEditorPreview implements PreviewPanel{
 
   static void installTrafficLights(EditorEx editor) {
     ErrorStripeRenderer renderer = new TrafficLightRenderer(null,null,null,null){
-      protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount) {
+      protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount, SeverityRegistrar severityRegistrar) {
         DaemonCodeAnalyzerStatus status = new DaemonCodeAnalyzerStatus();
         status.errorAnalyzingFinished = true;
         status.errorCount = new int[]{1, 2};
index a743397e0ebfb61edb45e6300bcf7e6a10e0654e..ec066fa6aa4fe22403fe39a460188997d32df27d 100644 (file)
@@ -16,7 +16,6 @@
 
 package com.intellij.codeInsight.daemon.impl;
 
-import com.intellij.codeHighlighting.HighlightDisplayLevel;
 import com.intellij.codeHighlighting.TextEditorHighlightingPass;
 import com.intellij.codeInsight.daemon.DaemonBundle;
 import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil;
@@ -33,6 +32,7 @@ import com.intellij.util.ArrayUtil;
 import com.intellij.util.Processor;
 import com.intellij.util.ui.EmptyIcon;
 import com.intellij.util.ui.UIUtil;
+import gnu.trove.TIntArrayList;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.Nullable;
 
@@ -40,7 +40,6 @@ import javax.swing.*;
 import java.awt.*;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 public class TrafficLightRenderer implements ErrorStripeRenderer {
@@ -58,12 +57,14 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
   @NonNls private static final String HTML_FOOTER = "</body></html>";
   @NonNls private static final String BR = "<br>";
   @NonNls private static final String NO_PASS_FOR_MESSAGE_KEY_SUFFIX = ".for";
+  private final SeverityRegistrar mySeverityRegistrar;
 
   public TrafficLightRenderer(Project project, DaemonCodeAnalyzerImpl highlighter, Document document, PsiFile file) {
     myProject = project;
     myDaemonCodeAnalyzer = highlighter;
     myDocument = document;
     myFile = file;
+    mySeverityRegistrar = SeverityRegistrar.getInstance(myProject);
   }
 
   public static class DaemonCodeAnalyzerStatus {
@@ -80,12 +81,13 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
       for (ProgressableTextEditorHighlightingPass passStatus : passStati) {
         s += String.format("(%s %2.0f%% %b)", passStatus.getPresentableName(), passStatus.getProgress() *100, passStatus.isFinished());
       }
+      s += "; error count: "+errorCount.length + ": "+new TIntArrayList(errorCount);
       return s;
     }
   }
 
   @Nullable
-  protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount) {
+  protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount, SeverityRegistrar severityRegistrar) {
     if (myFile == null || myProject.isDisposed() || !myDaemonCodeAnalyzer.isHighlightingAvailable(myFile)) return null;
 
     List<String> noInspectionRoots = new ArrayList<String>();
@@ -103,7 +105,6 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
     status.noInspectionRoots = noInspectionRoots.isEmpty() ? null : ArrayUtil.toStringArray(noInspectionRoots);
     status.noHighlightingRoots = noHighlightingRoots.isEmpty() ? null : ArrayUtil.toStringArray(noHighlightingRoots);
 
-    final SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(myProject);
     status.errorCount = new int[severityRegistrar.getSeveritiesCount()];
     status.rootsNumber = roots.length;
     fillDaemonCodeAnalyzerErrorsStatus(status, fillErrorsCount, severityRegistrar);
@@ -123,7 +124,6 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
   protected void fillDaemonCodeAnalyzerErrorsStatus(final DaemonCodeAnalyzerStatus status,
                                                     final boolean fillErrorsCount,
                                                     final SeverityRegistrar severityRegistrar) {
-    if (fillErrorsCount) Arrays.fill(status.errorCount, 0);
     final int count = severityRegistrar.getSeveritiesCount() - 1;
     final HighlightSeverity maxPossibleSeverity = severityRegistrar.getSeverityByIndex(count);
     final HighlightSeverity[] maxFoundSeverity = {null};
@@ -138,13 +138,12 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
           }
         }
         else {
+          if (maxFoundSeverity[0] == null || severityRegistrar.compare(maxFoundSeverity[0], infoSeverity) < 0) {
+            maxFoundSeverity[0] = infoSeverity;
+          }
           if (infoSeverity == maxPossibleSeverity) {
-            status.errorCount[count] = 1;
             return false;
           }
-          if (maxFoundSeverity[0] == null || severityRegistrar.compare(maxFoundSeverity[0], infoSeverity) <= 0) {
-            maxFoundSeverity[0] = infoSeverity;
-          }
         }
         return true;
       }
@@ -162,7 +161,7 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
   }
 
   public String getTooltipMessage() {
-    DaemonCodeAnalyzerStatus status = getDaemonCodeAnalyzerStatus(true);
+    DaemonCodeAnalyzerStatus status = getDaemonCodeAnalyzerStatus(true, mySeverityRegistrar);
 
     if (status == null) return null;
     @NonNls String text = HTML_HEADER;
@@ -193,7 +192,7 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
     int currentSeverityErrors = 0;
     for (int i = status.errorCount.length - 1; i >= 0; i--) {
       if (status.errorCount[i] > 0) {
-        final HighlightSeverity severity = SeverityRegistrar.getInstance(myProject).getSeverityByIndex(i);
+        final HighlightSeverity severity = mySeverityRegistrar.getSeverityByIndex(i);
         text += BR;
         String name = status.errorCount[i] > 1 ? StringUtil.pluralize(severity.toString().toLowerCase()) : severity.toString().toLowerCase();
         text += status.errorAnalyzingFinished
@@ -255,7 +254,7 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
   }
 
   private Icon getIcon() {
-    DaemonCodeAnalyzerStatus status = getDaemonCodeAnalyzerStatus(false);
+    DaemonCodeAnalyzerStatus status = getDaemonCodeAnalyzerStatus(false, mySeverityRegistrar);
 
     if (status == null) {
       return NO_ICON;
@@ -264,18 +263,11 @@ public class TrafficLightRenderer implements ErrorStripeRenderer {
       return NO_ANALYSIS_ICON;
     }
 
-    boolean atLeastOnePassFinished = status.errorAnalyzingFinished;
-    for (ProgressableTextEditorHighlightingPass passStatus : status.passStati) {
-      atLeastOnePassFinished |= passStatus.isFinished();
-    }
-    Icon icon = HighlightDisplayLevel.DO_NOT_SHOW.getIcon();
-    if (atLeastOnePassFinished) {
-      SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(myProject);
-      for (int i = status.errorCount.length - 1; i >= 0; i--) {
-        if (status.errorCount[i] != 0) {
-          icon = severityRegistrar.getRendererIconByIndex(i);
-          break;
-        }
+    Icon icon = NO_ANALYSIS_ICON;//HighlightDisplayLevel.DO_NOT_SHOW.getIcon();
+    for (int i = status.errorCount.length - 1; i >= 0; i--) {
+      if (status.errorCount[i] != 0) {
+        icon = mySeverityRegistrar.getRendererIconByIndex(i);
+        break;
       }
     }
 
index dd79df6486962223202dd1cdfb3a2f82e2a332ec..255fec49dda06a6a7e893f48e802edac1a9c63f1 100644 (file)
@@ -42,7 +42,9 @@ public class TrafficTooltipRendererImpl implements TrafficTooltipRenderer {
   @Override
   public void repaintTooltipWindow() {
     if (myPanel != null) {
-      myPanel.updatePanel(myTrafficLightRenderer.getDaemonCodeAnalyzerStatus(true));
+      myPanel.updatePanel(myTrafficLightRenderer.getDaemonCodeAnalyzerStatus(true,
+                                                                             SeverityRegistrar.getInstance(
+                                                                               myTrafficLightRenderer.getProject())));
     }
   }
 
index 3dfca1588ecb72b005aca3a53c057eda7494e126..8ca4d2f6d9cb0e59f47aeb46c285ab0ceadc7257 100644 (file)
@@ -20,14 +20,12 @@ import com.intellij.openapi.editor.colors.CodeInsightColors;
 import com.intellij.openapi.util.Comparing;
 import com.intellij.util.ImageLoader;
 import com.intellij.util.containers.HashMap;
-import com.intellij.util.ui.EmptyIcon;
 
 import javax.swing.*;
 import java.awt.*;
 import java.util.Map;
 
 public class HighlightDisplayLevel {
-  private static final Icon EMPTY = new EmptyIcon(12, 12);
   private static final Map<HighlightSeverity, HighlightDisplayLevel> ourMap = new HashMap<HighlightSeverity, HighlightDisplayLevel>();
 
   public static final HighlightDisplayLevel GENERIC_SERVER_ERROR_OR_WARNING = new HighlightDisplayLevel(HighlightSeverity.GENERIC_SERVER_ERROR_OR_WARNING,
@@ -88,6 +86,7 @@ public class HighlightDisplayLevel {
     private static final Image ourErrorMaskImage = ImageLoader.loadFromResource("/general/errorMask.png");
   }
 
+  private static final int EMPTY_ICON_DIM = 12;
   public static Icon createIconByMask(final Color renderColor) {
     return new Icon() {
       public void paintIcon(Component c, Graphics g, int x, int y) {
@@ -97,12 +96,12 @@ public class HighlightDisplayLevel {
 
 
       public int getIconWidth() {
-        return EMPTY.getIconWidth();
+        return EMPTY_ICON_DIM;
       }
 
 
       public int getIconHeight() {
-        return EMPTY.getIconHeight();
+        return EMPTY_ICON_DIM;
       }
     };
   }
index 3b06fbe2420f629c9b1a20371d9ebfe921371f39..b44844623aceac8d0e2aed2df0a2b19fa18c5eb4 100644 (file)
@@ -150,8 +150,8 @@ public class DomElementsErrorPanel extends JPanel implements CommittablePanel, H
             PsiDocumentManager.getInstance(xmlFile.getProject()).getDocument(xmlFile), xmlFile);
     }
 
-    protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount) {
-      final DaemonCodeAnalyzerStatus status = super.getDaemonCodeAnalyzerStatus(fillErrorsCount);
+    protected DaemonCodeAnalyzerStatus getDaemonCodeAnalyzerStatus(boolean fillErrorsCount, SeverityRegistrar severityRegistrar) {
+      final DaemonCodeAnalyzerStatus status = super.getDaemonCodeAnalyzerStatus(fillErrorsCount, severityRegistrar);
       if (status != null && isInspectionCompleted()) {
         status.errorAnalyzingFinished = true;
       }