Просмотр исходного кода

Modernize the remaining Java frontend classes.

Timur Sağlam 4 лет назад
Родитель
Сommit
7a643fb469

+ 1 - 1
jplag.frontend-utils/src/main/java/de/jplag/AbstractParser.java

@@ -24,7 +24,7 @@ public abstract class AbstractParser {
         return errorConsumer;
     }
 
-    public void setProgram(ErrorConsumer errorConsumer) {
+    public void setErrorConsumer(ErrorConsumer errorConsumer) {
         this.errorConsumer = errorConsumer;
     }
 }

+ 1 - 1
jplag.frontend.chars/src/main/java/de/jplag/chars/Language.java

@@ -13,7 +13,7 @@ public class Language implements de.jplag.Language {
     private final de.jplag.chars.Parser parser = new Parser();
 
     public Language(ErrorConsumer program) {
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(program);
     }
 
     @Override

+ 1 - 1
jplag.frontend.cpp/src/main/java/de/jplag/cpp/Language.java

@@ -10,7 +10,7 @@ public class Language implements de.jplag.Language {
 
     public Language(ErrorConsumer program) {
         this.scanner = new Scanner();
-        this.scanner.setProgram(program);
+        this.scanner.setErrorConsumer(program);
     }
 
     @Override

+ 1 - 1
jplag.frontend.csharp-1.2/src/main/java/de/jplag/csharp/Language.java

@@ -10,7 +10,7 @@ public class Language implements de.jplag.Language {
 
     public Language(ErrorConsumer program) {
         this.parser = new Parser();
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(program);
 
     }
 

+ 3 - 2
jplag.frontend.java/src/main/java/de/jplag/java/JavaToken.java

@@ -1,6 +1,7 @@
 package de.jplag.java;
 
 import de.jplag.Token;
+import de.jplag.TokenConstants;
 
 public class JavaToken extends Token implements JavaTokenConstants {
 
@@ -11,9 +12,9 @@ public class JavaToken extends Token implements JavaTokenConstants {
     @Override
     protected String type2string() {
         switch (type) {
-            case JavaTokenConstants.FILE_END:
+            case TokenConstants.FILE_END:
                 return "EOF";
-            case JavaTokenConstants.SEPARATOR_TOKEN:
+            case TokenConstants.SEPARATOR_TOKEN:
                 return "METHOD_SEPARATOR";
             case J_PACKAGE:
                 return "PACKAGE";

+ 36 - 22
jplag.frontend.java/src/main/java/de/jplag/java/JavacAdapter.java

@@ -9,7 +9,7 @@ import java.util.Collections;
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
 import javax.tools.JavaCompiler;
-import javax.tools.JavaFileObject;
+import javax.tools.JavaCompiler.CompilationTask;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.ToolProvider;
 
@@ -19,38 +19,52 @@ import com.sun.source.util.JavacTask;
 import com.sun.source.util.SourcePositions;
 import com.sun.source.util.Trees;
 
+import de.jplag.ErrorConsumer;
+import de.jplag.TokenConstants;
+
 public class JavacAdapter {
 
     private static final JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
 
-    public int parseFiles(File directory, File[] pathedFiles, final Parser parser) {
+    public int parseFiles(File directory, Iterable<File> pathedFiles, final Parser parser) {
         final StandardJavaFileManager fileManager = javac.getStandardFileManager(null, null, StandardCharsets.UTF_8);
-        DiagnosticCollector<? super JavaFileObject> diagListen = new DiagnosticCollector<>();
-        final JavaCompiler.CompilationTask task = javac.getTask(null, fileManager, diagListen, null, null,
-                fileManager.getJavaFileObjects(pathedFiles));
-        Iterable<? extends CompilationUnitTree> asts = Collections.emptyList();
-        try {
-            asts = ((JavacTask) task).parse();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
+        var listener = new DiagnosticCollector<>();
+        var javaFiles = fileManager.getJavaFileObjectsFromFiles(pathedFiles);
+        final CompilationTask task = javac.getTask(null, fileManager, listener, null, null, javaFiles);
         final Trees trees = Trees.instance(task);
         final SourcePositions positions = trees.getSourcePositions();
-        for (final CompilationUnitTree ast : asts) {
-            final String filename;
-            if (directory == null)
-                filename = ast.getSourceFile().getName();
-            else {
-                filename = Paths.get(directory.toURI()).relativize(Paths.get(ast.getSourceFile().toUri())).toString();
-            }
+        for (final CompilationUnitTree ast : executeCompilationTask(task)) {
+            final String filename = fileNameOf(directory, ast);
             final LineMap map = ast.getLineMap();
             ast.accept(new TokenGeneratingTreeScanner(filename, parser, map, positions, ast), null);
-            parser.add(JavaTokenConstants.FILE_END, filename, 1, -1, -1);
+            parser.add(TokenConstants.FILE_END, filename, 1, -1, -1);
         }
+        return processErrors(parser.getErrorConsumer(), listener);
+    }
+
+    private Iterable<? extends CompilationUnitTree> executeCompilationTask(final CompilationTask task) {
+        Iterable<? extends CompilationUnitTree> abstractSyntaxTrees = Collections.emptyList();
+        try {
+            abstractSyntaxTrees = ((JavacTask) task).parse();
+        } catch (IOException exception) {
+            exception.printStackTrace();
+        }
+        return abstractSyntaxTrees;
+    }
+
+    private String fileNameOf(File directory, final CompilationUnitTree ast) {
+        if (directory == null)
+            return ast.getSourceFile().getName();
+        else {
+            return Paths.get(directory.toURI()).relativize(Paths.get(ast.getSourceFile().toUri())).toString();
+        }
+    }
+
+    private int processErrors(final ErrorConsumer consumer, DiagnosticCollector<Object> listener) {
         int errors = 0;
-        for (Diagnostic<?> diagItem : diagListen.getDiagnostics()) {
-            if (diagItem.getKind() == javax.tools.Diagnostic.Kind.ERROR) {
-                parser.getErrorConsumer().addError(diagItem.toString());
+        for (Diagnostic<?> diagnosticItem : listener.getDiagnostics()) {
+            if (diagnosticItem.getKind() == javax.tools.Diagnostic.Kind.ERROR) {
+                consumer.addError(diagnosticItem.toString());
                 errors++;
             }
         }

+ 5 - 5
jplag.frontend.java/src/main/java/de/jplag/java/Language.java

@@ -11,9 +11,9 @@ import de.jplag.TokenList;
 public class Language implements de.jplag.Language {
     private final Parser parser;
 
-    public Language(ErrorConsumer program) {
+    public Language(ErrorConsumer errorConsumer) {
         this.parser = new Parser();
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(errorConsumer);
     }
 
     @Override
@@ -23,7 +23,7 @@ public class Language implements de.jplag.Language {
 
     @Override
     public String getName() {
-        return "Javac 1.9+ based AST plugin";
+        return "Javac based AST plugin";
     }
 
     @Override
@@ -57,8 +57,8 @@ public class Language implements de.jplag.Language {
     }
 
     @Override
-    public TokenList parse(File dir, String[] files) {
-        return this.parser.parse(dir, files);
+    public TokenList parse(File directory, String[] files) {
+        return this.parser.parse(directory, files);
     }
 
     @Override

+ 8 - 9
jplag.frontend.java/src/main/java/de/jplag/java/Parser.java

@@ -1,6 +1,9 @@
 package de.jplag.java;
 
+import static java.util.stream.Collectors.toList;
+
 import java.io.File;
+import java.util.Arrays;
 
 import de.jplag.AbstractParser;
 import de.jplag.TokenList;
@@ -11,21 +14,17 @@ public class Parser extends AbstractParser {
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;
-        File[] pathedFiles = new File[files.length];
-        for (int i = 0; i < files.length; i++) {
-            pathedFiles[i] = new File(directory, files[i]);
-        }
-        JavacAdapter javac = new JavacAdapter();
-        errors += javac.parseFiles(directory, pathedFiles, this);
+        var pathedFiles = Arrays.stream(files).map(it -> new File(directory, it)).collect(toList());
+        errors += new JavacAdapter().parseFiles(directory, pathedFiles, this);
         this.parseEnd();
         return tokens;
     }
 
-    public void add(int type, String filename, long line, long col, long length) {
-        tokens.addToken(new JavaToken(type, filename, (int) line, (int) col, (int) length));
+    public void add(int type, String filename, long line, long column, long length) {
+        tokens.addToken(new JavaToken(type, filename, (int) line, (int) column, (int) length));
     }
 
-    public void errorsInc() {
+    public void increaseErrors() {
         errors++;
     }
 }

+ 1 - 1
jplag.frontend.java/src/main/java/de/jplag/java/TokenGeneratingTreeScanner.java

@@ -391,7 +391,7 @@ final class TokenGeneratingTreeScanner extends TreeScanner<Object, Object> {
 
     @Override
     public Object visitErroneous(ErroneousTree node, Object p) {
-        parser.errorsInc();
+        parser.increaseErrors();
         return super.visitErroneous(node, p);
     }
 

+ 1 - 1
jplag.frontend.python-3/src/main/java/de/jplag/python3/Language.java

@@ -11,7 +11,7 @@ public class Language implements de.jplag.Language {
 
     public Language(ErrorConsumer program) {
         this.parser = new Parser();
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(program);
     }
 
     @Override

+ 1 - 1
jplag.frontend.scheme/src/main/java/de/jplag/scheme/Language.java

@@ -9,7 +9,7 @@ public class Language implements de.jplag.Language {
 
     public Language(ErrorConsumer program) {
         this.parser = new Parser();
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(program);
 
     }
 

+ 1 - 1
jplag.frontend.text/src/main/java/de/jplag/text/Language.java

@@ -11,7 +11,7 @@ public class Language implements de.jplag.Language {
     private final Parser parser = new Parser();
 
     public Language(ErrorConsumer program) {
-        this.parser.setProgram(program);
+        this.parser.setErrorConsumer(program);
     }
 
     @Override