Move sortDiagnostics to DiagnosticUtils and convert to sortedDiagnostics.
This commit is contained in:
+3
-29
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.jetbrains.jet.cli.common.messages;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -36,9 +34,8 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import static org.jetbrains.jet.lang.diagnostics.DiagnosticUtils.sortedDiagnostics;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
@@ -116,35 +113,12 @@ public final class AnalyzerWithCompilerReport {
|
||||
|
||||
public static boolean reportDiagnostics(@NotNull BindingContext bindingContext, @NotNull MessageCollector messageCollector) {
|
||||
boolean hasErrors = false;
|
||||
List<Diagnostic> diagnostics = Lists.newArrayList(bindingContext.getDiagnostics());
|
||||
sortDiagnostics(diagnostics);
|
||||
for (Diagnostic diagnostic : diagnostics) {
|
||||
for (Diagnostic diagnostic : sortedDiagnostics(bindingContext.getDiagnostics())) {
|
||||
hasErrors |= reportDiagnostic(diagnostic, messageCollector);
|
||||
}
|
||||
return hasErrors;
|
||||
}
|
||||
|
||||
private static void sortDiagnostics(@NotNull List<Diagnostic> diagnostics) {
|
||||
Comparator<Diagnostic> diagnosticComparator = new Comparator<Diagnostic>() {
|
||||
@Override
|
||||
public int compare(Diagnostic d1, Diagnostic d2) {
|
||||
String path1 = d1.getPsiFile().getViewProvider().getVirtualFile().getPath();
|
||||
String path2 = d2.getPsiFile().getViewProvider().getVirtualFile().getPath();
|
||||
if (!path1.equals(path2)) return path1.compareTo(path2);
|
||||
|
||||
TextRange range1 = DiagnosticUtils.firstRange(d1.getTextRanges());
|
||||
TextRange range2 = DiagnosticUtils.firstRange(d2.getTextRanges());
|
||||
|
||||
if (!range1.equals(range2)) {
|
||||
return DiagnosticUtils.TEXT_RANGE_COMPARATOR.compare(range1, range2);
|
||||
}
|
||||
|
||||
return d1.getFactory().getName().compareTo(d2.getFactory().getName());
|
||||
}
|
||||
};
|
||||
Collections.sort(diagnostics, diagnosticComparator);
|
||||
}
|
||||
|
||||
private void reportSyntaxErrors(@NotNull Collection<JetFile> files) {
|
||||
for (JetFile file : files) {
|
||||
reportSyntaxErrors(file, messageCollectorWrapper);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.jet.lang.diagnostics;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
@@ -30,6 +31,7 @@ import org.jetbrains.jet.lang.psi.JetExpression;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
@@ -39,7 +41,7 @@ import java.util.List;
|
||||
*/
|
||||
public class DiagnosticUtils {
|
||||
@NotNull
|
||||
public static final Comparator<TextRange> TEXT_RANGE_COMPARATOR = new Comparator<TextRange>() {
|
||||
private static final Comparator<TextRange> TEXT_RANGE_COMPARATOR = new Comparator<TextRange>() {
|
||||
@Override
|
||||
public int compare(TextRange o1, TextRange o2) {
|
||||
if (o1.getStartOffset() != o2.getStartOffset()) {
|
||||
@@ -155,10 +157,34 @@ public class DiagnosticUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static TextRange firstRange(@NotNull List<TextRange> ranges) {
|
||||
private static TextRange firstRange(@NotNull List<TextRange> ranges) {
|
||||
return Collections.min(ranges, TEXT_RANGE_COMPARATOR);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static List<Diagnostic> sortedDiagnostics(@NotNull Collection<Diagnostic> diagnostics) {
|
||||
Comparator<Diagnostic> diagnosticComparator = new Comparator<Diagnostic>() {
|
||||
@Override
|
||||
public int compare(Diagnostic d1, Diagnostic d2) {
|
||||
String path1 = d1.getPsiFile().getViewProvider().getVirtualFile().getPath();
|
||||
String path2 = d2.getPsiFile().getViewProvider().getVirtualFile().getPath();
|
||||
if (!path1.equals(path2)) return path1.compareTo(path2);
|
||||
|
||||
TextRange range1 = firstRange(d1.getTextRanges());
|
||||
TextRange range2 = firstRange(d2.getTextRanges());
|
||||
|
||||
if (!range1.equals(range2)) {
|
||||
return TEXT_RANGE_COMPARATOR.compare(range1, range2);
|
||||
}
|
||||
|
||||
return d1.getFactory().getName().compareTo(d2.getFactory().getName());
|
||||
}
|
||||
};
|
||||
List<Diagnostic> result = Lists.newArrayList(diagnostics);
|
||||
Collections.sort(result, diagnosticComparator);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static final class LineAndColumn {
|
||||
|
||||
public static final LineAndColumn NONE = new LineAndColumn(-1, -1);
|
||||
|
||||
Reference in New Issue
Block a user