aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 14:20:28 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 14:20:28 +0000
commit7aab63194508275630fccb667c75293585d62d21 (patch)
treedc04ebc1f8282edcfadf28e538b3e9abddbac3df /src/main
parent8de7c1256cbda6c210d1a74b2cfc97261a9cb9cb (diff)
Throw exception if parsing has any problems
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
index 5602434..a436bd7 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -2,6 +2,7 @@ package org.zwobble.couscous.frontends.java;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
+import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.dom.*;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.ast.sugar.AnonymousClass;
@@ -16,7 +17,7 @@ import java.util.Optional;
import java.util.function.Function;
import static com.google.common.collect.Iterables.concat;
-import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Iterables.*;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static org.zwobble.couscous.ast.AnnotationNode.annotation;
@@ -33,14 +34,25 @@ import static org.zwobble.couscous.util.ExtraLists.*;
public class JavaReader {
public static List<ClassNode> readClassFromFile(List<Path> sourcePaths, Path sourcePath) throws IOException {
CompilationUnit ast = new JavaParser().parseCompilationUnit(sourcePaths, sourcePath);
- System.out.println(sourcePath);
- for (Message message : ast.getMessages()) {
- System.out.println(message.getMessage());
+
+ ImmutableList<IProblem> errors = ImmutableList.copyOf(filter(asList(ast.getProblems()), problem -> problem.isError()));
+ if (!errors.isEmpty()) {
+ throw new RuntimeException("Errors during parsing:\n\n" + describe(errors));
}
JavaReader reader = new JavaReader();
return cons(reader.readCompilationUnit(ast), reader.classes.build());
}
+ private static String describe(List<IProblem> errors) {
+ return String.join("\n\n", transform(errors, JavaReader::describe));
+ }
+
+ private static String describe(IProblem error) {
+ return "File: " + String.copyValueOf(error.getOriginatingFileName()) + "\n" +
+ "Line number: " + error.getSourceLineNumber() + "\n" +
+ error.getMessage();
+ }
+
private final ImmutableList.Builder<ClassNode> classes;
private int anonymousClassCount = 0;