Don't disable popup on Ctrl+hover for non-navigatable items, just don't change their... appcode/146.357 clion/146.356
authorDmitry Batrak <Dmitry.Batrak@jetbrains.com>
Fri, 4 Mar 2016 08:44:17 +0000 (11:44 +0300)
committerDmitry Batrak <Dmitry.Batrak@jetbrains.com>
Fri, 4 Mar 2016 08:44:17 +0000 (11:44 +0300)
This also restores a condition defining non-navigatable elements created for WEB-4470, which was partially removed for IDEA-108939

platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java
platform/lang-impl/src/com/intellij/codeInsight/navigation/NavigationUtil.java

index 5f08e3f34543e61b7dae348dd4f0494b34fe624d..a1249a0b15640949f86c1b123220e5b5fc8c4ad7 100644 (file)
@@ -416,6 +416,8 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     public abstract DocInfo getInfo();
 
     public abstract boolean isValid(@NotNull Document document);
+    
+    public abstract boolean isNavigatable();
 
     public abstract void showDocInfo(@NotNull DocumentationManager docManager);
 
@@ -467,11 +469,15 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     public boolean isValid(@NotNull Document document) {
       if (!myTargetElement.isValid()) return false;
       if (!myElementAtPointer.isValid()) return false;
-      if (myTargetElement == myElementAtPointer) return false;
 
       return rangesAreCorrect(document);
     }
 
+    @Override
+    public boolean isNavigatable() {
+      return myTargetElement != myElementAtPointer && myTargetElement != myElementAtPointer.getParent();
+    }
+
     @Override
     public void showDocInfo(@NotNull DocumentationManager docManager) {
       docManager.showJavaDocInfo(myTargetElement, myElementAtPointer, null);
@@ -499,6 +505,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
       return rangesAreCorrect(document);
     }
 
+    @Override
+    public boolean isNavigatable() {
+      return true;
+    }
+
     @Override
     public void showDocInfo(@NotNull DocumentationManager docManager) {
       // Do nothing
@@ -612,6 +623,11 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
           public boolean isValid(@NotNull Document document) {
             return element.isValid();
           }
+
+          @Override
+          public boolean isNavigatable() {
+            return true;
+          }
         };
       }
     }
@@ -871,7 +887,9 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
         }
         else {
           // highlighter already set
-          internalComponent.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+          if (info.isNavigatable()) {
+            internalComponent.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+          }
           return;
         }
       }
@@ -960,11 +978,15 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
     internalComponent.addKeyListener(myEditorKeyListener);
     editor.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener);
     final Cursor cursor = internalComponent.getCursor();
-    internalComponent.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+    if (info.isNavigatable()) {
+      internalComponent.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+    }
     myFileEditorManager.addFileEditorManagerListener(myFileEditorManagerListener);
 
     List<RangeHighlighter> highlighters = new ArrayList<RangeHighlighter>();
-    TextAttributes attributes = myEditorColorsManager.getGlobalScheme().getAttributes(EditorColors.REFERENCE_HYPERLINK_COLOR);
+    TextAttributes attributes = info.isNavigatable() 
+                                ? myEditorColorsManager.getGlobalScheme().getAttributes(EditorColors.REFERENCE_HYPERLINK_COLOR) 
+                                : new TextAttributes(null, HintUtil.INFORMATION_COLOR, null, null, Font.PLAIN);
     for (TextRange range : info.getRanges()) {
       TextAttributes attr = NavigationUtil.patchAttributesColor(attributes, range, editor);
       final RangeHighlighter highlighter = editor.getMarkupModel().addRangeHighlighter(range.getStartOffset(), range.getEndOffset(),
index 187bfa349cece42ee9f9c043c145950a208faaff..749331eba30a79074672b980fbb8e8673eeefd88 100644 (file)
@@ -225,6 +225,7 @@ public final class NavigationUtil {
    */
   @SuppressWarnings("UseJBColor")
   public static TextAttributes patchAttributesColor(TextAttributes attributes, @NotNull TextRange range, @NotNull Editor editor) {
+    if (attributes.getForegroundColor() == null && attributes.getEffectColor() == null) return attributes;
     MarkupModel model = DocumentMarkupModel.forDocument(editor.getDocument(), editor.getProject(), false);
     if (model != null) {
       if (!((MarkupModelEx)model).processRangeHighlightersOverlappingWith(range.getStartOffset(), range.getEndOffset(),