Skip to content

Commit f0337cb

Browse files
committed
sort issues according to files and line numbers, for better reporting to user
1 parent 2526bad commit f0337cb

File tree

3 files changed

+27
-7
lines changed

3 files changed

+27
-7
lines changed

compilers/framework/src/main/java/org/thingml/compilers/utils/OpaqueThingMLCompiler.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,13 @@ public boolean compile(Configuration cfg, Logger log, String... options) {
9797
return true;
9898
}
9999
} else {
100+
String location = "";
100101
for (Issue error : checker.getErrors()) {
101-
// TODO: Some line information as well!
102-
log.error("Error [l" + error.getLineNumber() + " in " + error.getUriToProblem().toFileString() + "]: " + error.getMessage());
102+
if (!location.equals(error.getUriToProblem().toFileString())) {
103+
log.error("Error(s) in " + error.getUriToProblem().toFileString());
104+
location = error.getUriToProblem().toFileString();
105+
}
106+
log.error("\t[line " + error.getLineNumber() + "]: " + error.getMessage());
103107
}
104108
}
105109
// Failed

language/thingml.ui/src/org/thingml/eclipse/ui/commands/CompileThingFile.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,9 +244,13 @@ public Object execute(ExecutionEvent event) throws ExecutionException {
244244
ThingMLConsole.getInstance().printDebug("Configuration " + cfg.getName() + " compiled successfully [" + new Date() + "]. Took " + (System.currentTimeMillis() - start) + " ms.\n");
245245
} else {
246246
ThingMLConsole.getInstance().printError("Configuration " + cfg.getName() + " could not be compiled because of errors [" + new Date() + "].\n");
247+
String location = "";
247248
for (Issue error : checker.getErrors()) {
248-
// TODO: Some line information as well!
249-
ThingMLConsole.getInstance().printError("\tError [l" + error.getLineNumber() + " in " + error.getUriToProblem().toFileString() + "]: " + error.getMessage() + "\n");
249+
if (!location.equals(error.getUriToProblem().toFileString())) {
250+
ThingMLConsole.getInstance().printError("Error(s) in " + error.getUriToProblem().toFileString() + "\n");
251+
location = error.getUriToProblem().toFileString();
252+
}
253+
ThingMLConsole.getInstance().printError("\t[line " + error.getLineNumber() + "]: " + error.getMessage() + "\n");
250254
}
251255
}
252256
}

language/thingml/src/org/thingml/xtext/validation/Checker.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package org.thingml.xtext.validation;
1818

19+
import java.util.Comparator;
1920
import java.util.LinkedList;
2021
import java.util.List;
2122

@@ -34,6 +35,11 @@
3435
public class Checker {
3536
private List<Issue> issues;
3637

38+
private final Comparator<Issue> issueComparator = Comparator
39+
.comparing(Issue::getUriToProblem, (uri1, uri2) -> {
40+
return uri1.toFileString().compareTo(uri2.toFileString());
41+
}).thenComparing(Issue::getLineNumber);
42+
3743
public Checker() {
3844
issues = new LinkedList<Issue>();
3945
// TODO: Add a constructor that accepts compiler-specific validators as well
@@ -72,15 +78,21 @@ private List<Issue> getIssueBySeverity(Severity severity) {
7278
}
7379

7480
public List<Issue> getErrors() {
75-
return getIssueBySeverity(Severity.ERROR);
81+
final List<Issue> sorted = getIssueBySeverity(Severity.ERROR);
82+
sorted.sort(issueComparator);
83+
return sorted;
7684
}
7785

7886
public List<Issue> getWarnings() {
79-
return getIssueBySeverity(Severity.WARNING);
87+
final List<Issue> sorted = getIssueBySeverity(Severity.WARNING);
88+
sorted.sort(issueComparator);
89+
return sorted;
8090
}
8191

8292
public List<Issue> getInfos() {
83-
return getIssueBySeverity(Severity.INFO);
93+
final List<Issue> sorted = getIssueBySeverity(Severity.INFO);
94+
sorted.sort(issueComparator);
95+
return sorted;
8496
}
8597

8698
public boolean hasErrors() {

0 commit comments

Comments
 (0)