From f4515a9c7df0e0128d975174c0983f1e1f6256d3 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Wed, 29 Jun 2016 15:29:14 +0300 Subject: [PATCH] inspection toolwindow: do not merge ProblemDescriptor-s with the same getLineNumber() IDEA-157966 --- .../ui/InspectionResultsViewComparator.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsViewComparator.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsViewComparator.java index 06b0efb87738..24b1f3087b40 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsViewComparator.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/InspectionResultsViewComparator.java @@ -93,8 +93,21 @@ public class InspectionResultsViewComparator implements Comparator { final CommonProblemDescriptor descriptor1 = ((ProblemDescriptionNode)node1).getDescriptor(); final CommonProblemDescriptor descriptor2 = ((ProblemDescriptionNode)node2).getDescriptor(); if (descriptor1 instanceof ProblemDescriptor && descriptor2 instanceof ProblemDescriptor) { - //TODO: Do not materialise lazy pointers - return ((ProblemDescriptor)descriptor1).getLineNumber() - ((ProblemDescriptor)descriptor2).getLineNumber(); + int diff = ((ProblemDescriptor)descriptor1).getLineNumber() - ((ProblemDescriptor)descriptor2).getLineNumber(); + if (diff != 0) { + return diff; + } + diff = ((ProblemDescriptor)descriptor1).getHighlightType().compareTo(((ProblemDescriptor)descriptor2).getHighlightType()); + if (diff != 0) { + return diff; + } + diff = PsiUtilCore.compareElementsByPosition(((ProblemDescriptor)descriptor1).getStartElement(), + ((ProblemDescriptor)descriptor2).getStartElement()); + if (diff != 0) { + return diff; + } + return PsiUtilCore.compareElementsByPosition(((ProblemDescriptor)descriptor2).getEndElement(), + ((ProblemDescriptor)descriptor1).getEndElement()); } if (descriptor1 != null && descriptor2 != null) { return descriptor1.getDescriptionTemplate().compareToIgnoreCase(descriptor2.getDescriptionTemplate());