diff --git a/source/com/intellij/application/options/ErrorHighlightingPanel.form b/source/com/intellij/application/options/ErrorHighlightingPanel.form index 2a26789d30bd..71f4ed42d101 100644 --- a/source/com/intellij/application/options/ErrorHighlightingPanel.form +++ b/source/com/intellij/application/options/ErrorHighlightingPanel.form @@ -11,7 +11,7 @@ - + @@ -20,27 +20,16 @@ - - + + - - - - - - - - - - - - + @@ -49,21 +38,32 @@ + + + + + + - - + + - + - - + + + + - + + + + diff --git a/source/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java b/source/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java index 2f76a97ad766..ad2a109699c5 100644 --- a/source/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java +++ b/source/com/intellij/openapi/editor/impl/EditorMarkupModelImpl.java @@ -239,12 +239,10 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark } private void showTooltip(MouseEvent e, final TooltipRenderer tooltipObject) { - if (tooltipObject != null) { - final TooltipController tooltipController = HintManager.getInstance().getTooltipController(); - tooltipController.showTooltipByMouseMove(myEditor, e, tooltipObject, - myEditor.getVerticalScrollbarOrientation() == EditorEx.VERTICAL_SCROLLBAR_RIGHT, - ERROR_STRIPE_TOOLTIP_GROUP); - } + final TooltipController tooltipController = HintManager.getInstance().getTooltipController(); + tooltipController.showTooltipByMouseMove(myEditor, e, tooltipObject, + myEditor.getVerticalScrollbarOrientation() == EditorEx.VERTICAL_SCROLLBAR_RIGHT, + ERROR_STRIPE_TOOLTIP_GROUP); } private int visibleLineToYPosition(int lineNumber, int scrollBarHeight) { @@ -438,27 +436,37 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark } public boolean doClick(final MouseEvent e, final double width) { - if (inside(e, width)) { - RangeHighlighter marker = markers.get(0); - final int offset = marker.getStartOffset(); - final Document doc = myEditor.getDocument(); - if (doc.getLineCount() > 0) { - // Necessary to expand folded block even if naviagting just before one - // Very useful when navigating to first unused import statement. - int lineEnd = doc.getLineEndOffset(doc.getLineNumber(offset)); - myEditor.getCaretModel().moveToOffset(lineEnd); - } - - myEditor.getCaretModel().moveToOffset(offset); - myEditor.getSelectionModel().removeSelection(); - ScrollingModel scrollingModel = myEditor.getScrollingModel(); - scrollingModel.disableAnimation(); - scrollingModel.scrollToCaret(ScrollType.CENTER); - scrollingModel.enableAnimation(); - fireErrorMarkerClicked(marker, e); - return true; + if (!inside(e, width)) { + return false; } - return false; + final int y = e.getY(); + RangeHighlighter marker = markers.get(0); + int offset = marker.getStartOffset(); + for (int i = 0; i< paintingEndOffsets.size(); i++) { + final int endY = paintingEndOffsets.get(i); + if (y < endY) { + marker = markers.get(i); + offset = marker.getStartOffset(); + break; + } + } + + final Document doc = myEditor.getDocument(); + if (doc.getLineCount() > 0) { + // Necessary to expand folded block even if naviagting just before one + // Very useful when navigating to first unused import statement. + int lineEnd = doc.getLineEndOffset(doc.getLineNumber(offset)); + myEditor.getCaretModel().moveToOffset(lineEnd); + } + + myEditor.getCaretModel().moveToOffset(offset); + myEditor.getSelectionModel().removeSelection(); + ScrollingModel scrollingModel = myEditor.getScrollingModel(); + scrollingModel.disableAnimation(); + scrollingModel.scrollToCaret(ScrollType.CENTER); + scrollingModel.enableAnimation(); + fireErrorMarkerClicked(marker, e); + return true; } private boolean inside(MouseEvent e, double width) { @@ -491,9 +499,10 @@ public class EditorMarkupModelImpl extends MarkupModelImpl implements EditorMark } } if (infos.size() != 0) { + // show errors first Collections.sort(infos, new Comparator() { public int compare(final HighlightInfo o1, final HighlightInfo o2) { - return o1.getSeverity().compareTo(o2.getSeverity()); + return o2.getSeverity().compareTo(o1.getSeverity()); } }); final HighlightInfoComposite composite = new HighlightInfoComposite(infos); diff --git a/source/com/intellij/ui/LightweightHint.java b/source/com/intellij/ui/LightweightHint.java index eda48d72ffe4..3e3e228403b8 100644 --- a/source/com/intellij/ui/LightweightHint.java +++ b/source/com/intellij/ui/LightweightHint.java @@ -14,13 +14,14 @@ import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.util.EventListener; import java.util.EventObject; +import java.util.Map; public class LightweightHint implements Hint, UserDataHolder { private static final Logger LOG = Logger.getInstance("#com.intellij.ui.LightweightHint"); private final JComponent myComponent; private JComponent myFocusBackComponent; - private final THashMap myUserMap = new THashMap(1); + private final Map myUserMap = new THashMap(1); private final EventListenerList myListenerList = new EventListenerList(); private MyEscListener myEscListener; diff --git a/util/src/com/intellij/openapi/util/UserDataHolderBase.java b/util/src/com/intellij/openapi/util/UserDataHolderBase.java index fb3c516c7e12..6a5dc4dd1074 100644 --- a/util/src/com/intellij/openapi/util/UserDataHolderBase.java +++ b/util/src/com/intellij/openapi/util/UserDataHolderBase.java @@ -8,21 +8,24 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.util.containers.HashMap; import gnu.trove.THashMap; +import java.util.Map; + public class UserDataHolderBase implements UserDataHolder, Cloneable{ private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.util.UserDataHolderBase"); - private THashMap myUserMap = null; + private Map myUserMap = null; private static final Object USER_MAP_LOCK = new Object(); - protected static final Key COPYABLE_USER_MAP_KEY = Key.create("COPYABLE_USER_MAP_KEY"); + protected static final Key> COPYABLE_USER_MAP_KEY = Key.create("COPYABLE_USER_MAP_KEY"); protected Object clone(){ try{ UserDataHolderBase clone = (UserDataHolderBase)super.clone(); - HashMap copyableMap = (HashMap)clone.getUserData(COPYABLE_USER_MAP_KEY); + HashMap copyableMap = clone.getUserData(COPYABLE_USER_MAP_KEY); clone.myUserMap = null; if (copyableMap != null){ - clone.putUserData(COPYABLE_USER_MAP_KEY, (HashMap)copyableMap.clone()); + final HashMap mapclone = (HashMap)copyableMap.clone(); + clone.putUserData(COPYABLE_USER_MAP_KEY, mapclone); } return clone; } @@ -60,7 +63,7 @@ public class UserDataHolderBase implements UserDataHolder, Cloneable{ synchronized(USER_MAP_LOCK){ if (myUserMap == null){ if (value == null) return; - myUserMap = new THashMap(4); + myUserMap = new THashMap(4); } if (value != null){ myUserMap.put(key, value); @@ -80,7 +83,7 @@ public class UserDataHolderBase implements UserDataHolder, Cloneable{ protected T getCopyableUserDataImpl(Key key) { synchronized(USER_MAP_LOCK){ - HashMap map = (HashMap)getUserData(COPYABLE_USER_MAP_KEY); + HashMap map = getUserData(COPYABLE_USER_MAP_KEY); if (map == null) return null; return (T)map.get(key); } @@ -92,10 +95,10 @@ public class UserDataHolderBase implements UserDataHolder, Cloneable{ protected void putCopyableUserDataImpl(Key key, T value) { synchronized(USER_MAP_LOCK){ - HashMap map = (HashMap)getUserData(COPYABLE_USER_MAP_KEY); + HashMap map = getUserData(COPYABLE_USER_MAP_KEY); if (map == null){ if (value == null) return; - map = new HashMap(4); + map = new HashMap(4); putUserData(COPYABLE_USER_MAP_KEY, map); } if (value != null){ diff --git a/util/src/com/intellij/util/SmartList.java b/util/src/com/intellij/util/SmartList.java index 8d6c24b80eff..fce494f99415 100644 --- a/util/src/com/intellij/util/SmartList.java +++ b/util/src/com/intellij/util/SmartList.java @@ -30,7 +30,7 @@ public class SmartList extends AbstractList { } public E get(int index) { - if (index < 2) { + if (mySize <= 2) { return myArray2[index]; } else {