diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/IconLineMarkerProvider.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/IconLineMarkerProvider.java index 551791a6cd82..d8cce7a9e081 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/IconLineMarkerProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/IconLineMarkerProvider.java @@ -56,7 +56,7 @@ public class IconLineMarkerProvider implements LineMarkerProvider { private final HashMap> iconsCache = new HashMap>(); @Override - public LineMarkerInfo getLineMarkerInfo(PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) { if (! DaemonCodeAnalyzerSettings.getInstance().SHOW_SMALL_ICONS_IN_GUTTER) return null; if (element instanceof PsiAssignmentExpression) { @@ -171,7 +171,7 @@ public class IconLineMarkerProvider implements LineMarkerProvider { } @Override - public void collectSlowLineMarkers(List elements, Collection result) { + public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { } private static boolean hasProperSize(Icon icon) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java index 5be530e36e8b..4a26b2c25866 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaLineMarkerProvider.java @@ -19,6 +19,7 @@ import com.intellij.codeHighlighting.Pass; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings; import com.intellij.codeInsight.daemon.LineMarkerInfo; import com.intellij.codeInsight.daemon.LineMarkerProvider; +import com.intellij.codeInsight.daemon.MergeableLineMarkerInfo; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.colors.CodeInsightColors; import com.intellij.openapi.editor.colors.EditorColorsManager; @@ -37,10 +38,12 @@ import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; import com.intellij.psi.util.PsiUtil; +import com.intellij.util.Function; import com.intellij.util.FunctionUtil; import com.intellij.util.Processor; import com.intellij.util.containers.HashSet; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -50,7 +53,7 @@ import java.util.Set; public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { protected static final Icon OVERRIDING_METHOD_ICON = IconLoader.getIcon("/gutter/overridingMethod.png"); - protected static final Icon IMPLEMENTING_METHOD_ICON = IconLoader.getIcon("/gutter/implementingMethod.png"); + protected static final Icon IMPLEMENTING_METHOD_ICON = IconLoader.getIcon("/gutter/implementingMethod.png"); protected static final Icon OVERRIDEN_METHOD_MARKER_RENDERER = IconLoader.getIcon("/gutter/overridenMethod.png"); protected static final Icon IMPLEMENTED_METHOD_MARKER_RENDERER = IconLoader.getIcon("/gutter/implementedMethod.png"); @@ -67,7 +70,7 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { @Override @Nullable - public LineMarkerInfo getLineMarkerInfo(final PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { if (element instanceof PsiIdentifier && element.getParent() instanceof PsiMethod) { PsiMethod method = (PsiMethod)element.getParent(); MethodSignatureBackedByPsiMethod superSignature = null; @@ -83,7 +86,7 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { final Icon icon = overrides ? OVERRIDING_METHOD_ICON : IMPLEMENTING_METHOD_ICON; final MarkerType type = MarkerType.OVERRIDING_METHOD; - return new LineMarkerInfo(element, element.getTextRange(), icon, Pass.UPDATE_ALL, type.getTooltip(), type.getNavigationHandler(), GutterIconRenderer.Alignment.LEFT); + return new ArrowUpLineMarkerInfo(element, icon, type); } } @@ -108,7 +111,9 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { } if (drawSeparator) { - LineMarkerInfo info = new LineMarkerInfo(element, element.getTextRange(), null, Pass.UPDATE_ALL, FunctionUtil.nullConstant(), null, GutterIconRenderer.Alignment.RIGHT); + LineMarkerInfo info = new LineMarkerInfo(element, element.getTextRange(), null, Pass.UPDATE_ALL, + FunctionUtil.nullConstant(), null, + GutterIconRenderer.Alignment.RIGHT); EditorColorsScheme scheme = myColorsManager.getGlobalScheme(); info.separatorColor = scheme.getColor(CodeInsightColors.METHOD_SEPARATORS_COLOR); info.separatorPlacement = SeparatorPlacement.TOP; @@ -139,7 +144,7 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { } @Override - public void collectSlowLineMarkers(final List elements, final Collection result) { + public void collectSlowLineMarkers(@NotNull final List elements, @NotNull final Collection result) { ApplicationManager.getApplication().assertReadAccessAllowed(); if (elements.isEmpty() || DumbService.getInstance(elements.get(0).getProject()).isDumb()) { @@ -178,8 +183,10 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { PsiElement range = aClass.getNameIdentifier(); if (range == null) range = aClass; MarkerType type = MarkerType.SUBCLASSED_CLASS; - LineMarkerInfo info = new LineMarkerInfo(range, range.getTextRange(), icon, Pass.UPDATE_OVERRIDEN_MARKERS, type.getTooltip(), type.getNavigationHandler(), - GutterIconRenderer.Alignment.RIGHT); + LineMarkerInfo info = new LineMarkerInfo(range, range.getTextRange(), + icon, Pass.UPDATE_OVERRIDEN_MARKERS, type.getTooltip(), + type.getNavigationHandler(), + GutterIconRenderer.Alignment.RIGHT); result.add(info); } } @@ -212,11 +219,15 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { } for (PsiMethod method : overridden) { + ProgressManager.checkCanceled(); boolean overrides = !method.hasModifierProperty(PsiModifier.ABSTRACT); final Icon icon = overrides ? OVERRIDEN_METHOD_MARKER_RENDERER : IMPLEMENTED_METHOD_MARKER_RENDERER; PsiElement range; - if (!method.isPhysical()) { + if (method.isPhysical()) { + range = method.getNameIdentifier(); + } + else { final PsiElement navigationElement = method.getNavigationElement(); if (navigationElement instanceof PsiNameIdentifierOwner) { range = ((PsiNameIdentifierOwner)navigationElement).getNameIdentifier(); @@ -225,14 +236,44 @@ public class JavaLineMarkerProvider implements LineMarkerProvider, DumbAware { range = navigationElement; } } - else { - range = method.getNameIdentifier(); - } if (range == null) range = method; final MarkerType type = MarkerType.OVERRIDEN_METHOD; - LineMarkerInfo info = new LineMarkerInfo(range, range.getTextRange(), icon, Pass.UPDATE_OVERRIDEN_MARKERS, type.getTooltip(), type.getNavigationHandler(), - GutterIconRenderer.Alignment.RIGHT); + LineMarkerInfo info = new LineMarkerInfo(range, range.getTextRange(), + icon, Pass.UPDATE_OVERRIDEN_MARKERS, type.getTooltip(), + type.getNavigationHandler(), + GutterIconRenderer.Alignment.RIGHT); result.add(info); } } + + private static class ArrowUpLineMarkerInfo extends MergeableLineMarkerInfo { + private ArrowUpLineMarkerInfo(@NotNull PsiElement element, Icon icon, @NotNull MarkerType markerType) { + super(element, element.getTextRange(), icon, Pass.UPDATE_ALL, markerType.getTooltip(), + markerType.getNavigationHandler(), GutterIconRenderer.Alignment.LEFT); + } + + @Override + public boolean canMergeWith(@NotNull MergeableLineMarkerInfo info) { + if (!(info instanceof ArrowUpLineMarkerInfo)) return false; + PsiElement otherElement = info.getElement(); + PsiElement myElement = getElement(); + return otherElement != null && myElement != null; + } + + + @Override + public Icon getCommonIcon(@NotNull List infos) { + return myIcon; + } + + @Override + public Function getCommonTooltip(@NotNull List infos) { + return new Function() { + @Override + public String fun(PsiElement element) { + return "Multiple method overrides"; + } + }; + } + } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java index c2817d2f8672..b12ab5e29c81 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java @@ -209,7 +209,7 @@ public class MarkerType { private final GutterIconNavigationHandler handler; private final Function myTooltip; - public MarkerType(Function tooltip, final LineMarkerNavigator navigator) { + public MarkerType(@NotNull Function tooltip, @NotNull final LineMarkerNavigator navigator) { myTooltip = tooltip; handler = new GutterIconNavigationHandler() { @Override @@ -219,10 +219,12 @@ public class MarkerType { }; } + @NotNull public GutterIconNavigationHandler getNavigationHandler() { return handler; } + @NotNull public Function getTooltip() { return myTooltip; } diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java index 454e396c268a..fd2f3ba012d8 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java @@ -75,7 +75,7 @@ public class LineMarkerInfo { endOffset = range.getEndOffset(); } - public LineMarkerInfo(T element, + public LineMarkerInfo(@NotNull T element, int startOffset, Icon icon, int updatePass, @@ -104,6 +104,7 @@ public class LineMarkerInfo { } private class NavigateAction extends AnAction { + @Override public void actionPerformed(AnActionEvent e) { if (myNavigationHandler != null) { MouseEvent mouseEvent = (MouseEvent)e.getInputEvent(); @@ -131,19 +132,23 @@ public class LineMarkerInfo { return myInfo; } + @Override @NotNull public Icon getIcon() { return myInfo.myIcon; } + @Override public AnAction getClickAction() { return myInfo.new NavigateAction(); } + @Override public boolean isNavigateAction() { return myInfo.myNavigationHandler != null; } + @Override public String getTooltipText() { try { return myInfo.getLineMarkerTooltip(); @@ -153,6 +158,7 @@ public class LineMarkerInfo { } } + @Override public Alignment getAlignment() { return myInfo.myIconAlignment; } diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerProvider.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerProvider.java index dab6b51afb86..6165561ae1f1 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerProvider.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerProvider.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.daemon; import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -27,7 +28,7 @@ import java.util.List; */ public interface LineMarkerProvider { @Nullable - LineMarkerInfo getLineMarkerInfo(PsiElement element); + LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element); - void collectSlowLineMarkers(final List elements, final Collection result); + void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java index 669a555ea49e..f4659f5dca5d 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/MergeableLineMarkerInfo.java @@ -15,34 +15,33 @@ */ package com.intellij.codeInsight.daemon; -import com.intellij.openapi.application.AccessToken; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBList; import com.intellij.util.Function; -import com.intellij.util.FunctionUtil; import com.intellij.util.NotNullFunction; +import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.MouseEvent; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; /** * @author Konstantin Bulenkov */ public abstract class MergeableLineMarkerInfo extends LineMarkerInfo { - public MergeableLineMarkerInfo(@NotNull T element, - TextRange textRange, + @NotNull TextRange textRange, Icon icon, int updatePass, @Nullable Function tooltipProvider, @@ -50,27 +49,29 @@ public abstract class MergeableLineMarkerInfo extends Line GutterIconRenderer.Alignment alignment) { super(element, textRange, icon, updatePass, tooltipProvider, navHandler, alignment); } - - public abstract boolean canMergeWith(MergeableLineMarkerInfo info); - - public abstract Icon getCommonIcon(List infos); - - public static List merge(List markers) { - final List result = new ArrayList(); - final HashSet processed = new HashSet(); - for (MergeableLineMarkerInfo marker : markers) { - if (processed.contains(marker)) continue; - processed.add(marker); - final List toMerge = new ArrayList(); - for (MergeableLineMarkerInfo current : markers) { - if (!processed.contains(current) && marker.canMergeWith(current)) { + + public abstract boolean canMergeWith(@NotNull MergeableLineMarkerInfo info); + + public abstract Icon getCommonIcon(@NotNull List infos); + public abstract Function getCommonTooltip(@NotNull List infos); + + @NotNull + public static List merge(@NotNull List markers) { + List result = new SmartList(); + for (int i = 0; i < markers.size(); i++) { + MergeableLineMarkerInfo marker = markers.get(i); + List toMerge = new SmartList(); + for (int k = markers.size() - 1; k > i; k--) { + MergeableLineMarkerInfo current = markers.get(k); + if (marker.canMergeWith(current)) { toMerge.add(current); - processed.add(current); + markers.remove(k); } } if (toMerge.isEmpty()) { result.add(marker); - } else { + } + else { toMerge.add(marker); result.add(new MyLineMarkerInfo(toMerge)); } @@ -78,16 +79,16 @@ public abstract class MergeableLineMarkerInfo extends Line return result; } - private static class MyLineMarkerInfo extends LineMarkerInfo { - public MyLineMarkerInfo(List markers) { - //noinspection unchecked,ConstantConditions + private static class MyLineMarkerInfo extends LineMarkerInfo { + public MyLineMarkerInfo(@NotNull List markers) { + //noinspection ConstantConditions super(markers.get(0).getElement(), getCommonTextRange(markers), markers.get(0).getCommonIcon(markers), 4, //TODO move Pass to lang-api and make it enum - FunctionUtil.nullConstant(), + markers.get(0).getCommonTooltip(markers), getCommonNavigationHandler(markers), - GutterIconRenderer.Alignment.RIGHT); + GutterIconRenderer.Alignment.LEFT); } private static TextRange getCommonTextRange(List markers) { @@ -100,8 +101,8 @@ public abstract class MergeableLineMarkerInfo extends Line return TextRange.create(startOffset, endOffset); } - private static GutterIconNavigationHandler getCommonNavigationHandler(final List markers) { - return new GutterIconNavigationHandler() { + private static GutterIconNavigationHandler getCommonNavigationHandler(@NotNull final List markers) { + return new GutterIconNavigationHandler() { @Override public void navigate(final MouseEvent e, PsiElement elt) { final List infos = new ArrayList(markers); @@ -123,13 +124,13 @@ public abstract class MergeableLineMarkerInfo extends Line if (renderer != null) { icon = renderer.getIcon(); } - final PsiElement element = ((LineMarkerInfo)dom).getElement(); + PsiElement element = ((LineMarkerInfo)dom).getElement(); assert element != null; - final String text = StringUtil.first(element.getText(), 100, true).replace('\n', ' '); + String text = StringUtil.first(element.getText(), 100, true).replace('\n', ' '); return new JBLabel(text, icon, SwingConstants.LEFT); } - + return new JBLabel(); } }); @@ -150,27 +151,5 @@ public abstract class MergeableLineMarkerInfo extends Line } }; } - //private static int getCommonStartOffset(List markers) { - // int startOffset = Integer.MAX_VALUE; - // for (MergeableLineMarkerInfo marker : markers) { - // startOffset = Math.min(startOffset, marker.startOffset); - // } - // return startOffset; - //} - // - private static PsiElement getCommonElement(List markers) { - final List elements = new ArrayList(); - for (MergeableLineMarkerInfo marker : markers) { - elements.add(marker.getElement()); - } - final AccessToken token = ApplicationManager.getApplication().acquireReadActionLock(); - try { - final PsiElement parent = PsiTreeUtil.findCommonParent(elements); - return parent == null ? elements.get(0) : parent; - } - finally { - token.finish(); - } - } } } diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/RelatedItemLineMarkerProvider.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/RelatedItemLineMarkerProvider.java index 97cb73dd936d..ccda13a1dda5 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/RelatedItemLineMarkerProvider.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/RelatedItemLineMarkerProvider.java @@ -30,12 +30,12 @@ import java.util.List; */ public abstract class RelatedItemLineMarkerProvider implements LineMarkerProvider { @Override - public RelatedItemLineMarkerInfo getLineMarkerInfo(PsiElement element) { + public RelatedItemLineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) { return null; } @Override - public final void collectSlowLineMarkers(List elements, Collection result) { + public final void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { collectNavigationMarkers(elements, result, false); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java index 0e9b8d0fed42..a6851fcd940d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java @@ -51,6 +51,7 @@ import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; import com.intellij.util.Function; import com.intellij.util.FunctionUtil; import gnu.trove.THashSet; +import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -136,18 +137,19 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl if (forMerge.isEmpty() || myEditor == null) return markers; final List result = new ArrayList(markers); - final HashMap> map = new HashMap>(); + TIntObjectHashMap> sameLineMarkers = new TIntObjectHashMap>(); for (MergeableLineMarkerInfo info : forMerge) { final LogicalPosition position = myEditor.offsetToLogicalPosition(info.startOffset); - List infos = map.get(position.line); + List infos = sameLineMarkers.get(position.line); if (infos == null) { infos = new ArrayList(); - map.put(position.line, infos); + sameLineMarkers.put(position.line, infos); } infos.add(info); } - for (List infos : map.values()) { + for (Object v : sameLineMarkers.getValues()) { + List infos = (List)v; result.addAll(MergeableLineMarkerInfo.merge(infos)); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java index 1f0d80bc1f16..06ebe3b1ac39 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java @@ -324,7 +324,7 @@ public class ShowImplementationsAction extends AnAction implements PopupAction { } @Override - protected void replaceModel(List data) { + protected void replaceModel(@NotNull List data) { final PsiElement[] elements = myComponent.getElements(); final int includeSelfIdx = myElement instanceof PomTargetPsiElement ? 0 : 1; final int startIdx = elements.length - includeSelfIdx; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java index 4c1dd1bf8777..f885378ff16d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java @@ -74,7 +74,7 @@ public abstract class BackgroundUpdaterTask extends Task.Backgroundable { } public abstract String getCaption(int size); - protected abstract void replaceModel(List data); + protected abstract void replaceModel(@NotNull List data); protected abstract void paintBusy(boolean paintBusy); public boolean setCanceled() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/ListBackgroundUpdaterTask.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/ListBackgroundUpdaterTask.java index 30b1db8e47d0..56ce15b1a8c2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/ListBackgroundUpdaterTask.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/ListBackgroundUpdaterTask.java @@ -15,7 +15,6 @@ */ package com.intellij.codeInsight.navigation; -import com.intellij.openapi.progress.PerformInBackgroundOption; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.ui.components.JBList; @@ -26,21 +25,9 @@ import org.jetbrains.annotations.Nullable; import java.util.List; /** -* User: anna -*/ + * User: anna + */ public abstract class ListBackgroundUpdaterTask extends BackgroundUpdaterTask { - - public ListBackgroundUpdaterTask(@Nullable final Project project, - @NotNull final String title, - final boolean canBeCancelled, - @Nullable final PerformInBackgroundOption backgroundOption) { - super(project, title, canBeCancelled, backgroundOption); - } - - public ListBackgroundUpdaterTask(@Nullable final Project project, @NotNull final String title, final boolean canBeCancelled) { - super(project, title, canBeCancelled); - } - public ListBackgroundUpdaterTask(@Nullable final Project project, @NotNull final String title) { super(project, title); } @@ -51,13 +38,14 @@ public abstract class ListBackgroundUpdaterTask extends BackgroundUpdaterTask data) { + protected void replaceModel(@NotNull List data) { final Object selectedValue = myComponent.getSelectedValue(); final int index = myComponent.getSelectedIndex(); ((NameFilteringListModel)myComponent.getModel()).replaceAll(data); if (index == 0) { myComponent.setSelectedIndex(0); - } else { + } + else { myComponent.setSelectedValue(selectedValue, true); } } diff --git a/platform/lang-impl/src/com/intellij/ui/ColorLineMarkerProvider.java b/platform/lang-impl/src/com/intellij/ui/ColorLineMarkerProvider.java index 0d8e29e0cc6f..9801f0d5c26f 100644 --- a/platform/lang-impl/src/com/intellij/ui/ColorLineMarkerProvider.java +++ b/platform/lang-impl/src/com/intellij/ui/ColorLineMarkerProvider.java @@ -28,6 +28,7 @@ import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.util.IconLoader; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiUtilBase; +import com.intellij.util.Function; import com.intellij.util.FunctionUtil; import com.intellij.util.ui.ColorIcon; import org.jetbrains.annotations.NotNull; @@ -45,7 +46,7 @@ public final class ColorLineMarkerProvider implements LineMarkerProvider { private final ElementColorProvider[] myExtensions = ElementColorProvider.EP_NAME.getExtensions(); @Override - public LineMarkerInfo getLineMarkerInfo(PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) { for (ElementColorProvider colorProvider : myExtensions) { final Color color = colorProvider.getColorFrom(element); if (color != null) { @@ -56,7 +57,7 @@ public final class ColorLineMarkerProvider implements LineMarkerProvider { } @Override - public void collectSlowLineMarkers(List elements, Collection result) { + public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { } private static class MyInfo extends MergeableLineMarkerInfo { @@ -90,13 +91,18 @@ public final class ColorLineMarkerProvider implements LineMarkerProvider { } @Override - public boolean canMergeWith(MergeableLineMarkerInfo info) { + public boolean canMergeWith(@NotNull MergeableLineMarkerInfo info) { return info instanceof MyInfo; } @Override - public Icon getCommonIcon(List infos) { + public Icon getCommonIcon(@NotNull List infos) { return IconLoader.getIcon("/gutter/colors.png"); } + + @Override + public Function getCommonTooltip(@NotNull List infos) { + return FunctionUtil.nullConstant(); + } } } diff --git a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataLineMarkerProvider.java b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataLineMarkerProvider.java index c0dd5237a87b..4f881e676653 100644 --- a/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataLineMarkerProvider.java +++ b/plugins/IdeaTestAssistant/src/com/intellij/testAssistant/TestDataLineMarkerProvider.java @@ -38,7 +38,7 @@ import java.util.List; * @author yole */ public class TestDataLineMarkerProvider implements LineMarkerProvider { - public LineMarkerInfo getLineMarkerInfo(PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) { if (ApplicationManager.getApplication().isUnitTestMode()) { return null; } @@ -75,7 +75,7 @@ public class TestDataLineMarkerProvider implements LineMarkerProvider { return fileNames != null && !fileNames.isEmpty(); } - public void collectSlowLineMarkers(List elements, Collection result) { + public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { } @Nullable diff --git a/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java b/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java index 159f3e23db90..a0c9497b5c38 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java +++ b/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java @@ -60,11 +60,11 @@ import java.util.Map; public class AndroidResourcesLineMarkerProvider implements LineMarkerProvider { private static final Icon ICON = IconLoader.getIcon("/icons/navigate.png"); - public LineMarkerInfo getLineMarkerInfo(PsiElement psiElement) { + public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement psiElement) { return null; } - public void collectSlowLineMarkers(List psiElements, Collection lineMarkerInfos) { + public void collectSlowLineMarkers(@NotNull List psiElements, @NotNull Collection lineMarkerInfos) { //noinspection ForLoopReplaceableByForEach for (int i = 0; i < psiElements.size(); i++) { PsiElement element = psiElements.get(i); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyLineMarkerProvider.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyLineMarkerProvider.java index 28c90d1270fd..90193e99cc5a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyLineMarkerProvider.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyLineMarkerProvider.java @@ -38,6 +38,7 @@ import com.intellij.util.FunctionUtil; import com.intellij.util.Processor; import com.intellij.util.containers.HashSet; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocComment; import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; @@ -68,7 +69,7 @@ public class GroovyLineMarkerProvider extends JavaLineMarkerProvider { } @Override - public LineMarkerInfo getLineMarkerInfo(final PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { final PsiElement parent = element.getParent(); if (parent instanceof PsiNameIdentifierOwner) { if (parent instanceof GrField && element == ((GrField)parent).getNameIdentifierGroovy()) { @@ -166,7 +167,7 @@ public class GroovyLineMarkerProvider extends JavaLineMarkerProvider { } @Override - public void collectSlowLineMarkers(final List elements, final Collection result) { + public void collectSlowLineMarkers(@NotNull final List elements, @NotNull final Collection result) { Set methods = new HashSet(); for (PsiElement element : elements) { ProgressManager.checkCanceled(); @@ -197,6 +198,7 @@ public class GroovyLineMarkerProvider extends JavaLineMarkerProvider { for (final PsiClass aClass : classes) { try { AllOverridingMethodsSearch.search(aClass).forEach(new Processor>() { + @Override public boolean process(final Pair pair) { ProgressManager.checkCanceled(); @@ -219,10 +221,10 @@ public class GroovyLineMarkerProvider extends JavaLineMarkerProvider { for (PsiElement element : overridden) { final Icon icon = OVERRIDEN_METHOD_MARKER_RENDERER; - PsiElement range; - + element = PsiImplUtil.handleMirror(element); + PsiElement range; if (element instanceof GrNamedElement) { range = ((GrNamedElement)element).getNameIdentifierGroovy(); } diff --git a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java index dafaabb126f7..a9c9a3324a34 100644 --- a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java +++ b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java @@ -23,6 +23,7 @@ import com.intellij.lang.xml.XMLLanguage; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; import gnu.trove.THashMap; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collection; @@ -37,7 +38,7 @@ import java.util.Map; public class HtmlLineMarkerProvider implements LineMarkerProvider { private final Map embeddedLanguagesLineMarkerProviders = new THashMap(); - public LineMarkerInfo getLineMarkerInfo(final PsiElement element) { + public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { if (element instanceof PsiWhiteSpace) return null; final Language language = element.getLanguage(); @@ -61,7 +62,7 @@ public class HtmlLineMarkerProvider implements LineMarkerProvider { return markerProvider; } - public void collectSlowLineMarkers(final List elements, final Collection result) { + public void collectSlowLineMarkers(@NotNull final List elements, @NotNull final Collection result) { Map localEmbeddedLanguagesLineMarkerProviders = null; Map> embeddedLineMarkersWorkItems = null;