Sfoglia il codice sorgente

Remove the unused error count method from the abstract parser and enforce setting the error consumer via constructor.

Timur Sağlam 4 anni fa
parent
commit
5ffb1c2980

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

@@ -8,18 +8,15 @@ public abstract class AbstractParser {
     protected ErrorConsumer errorConsumer;
     protected int errors = 0;
 
-    /**
-     * @return true if there currently are some errors.
-     */
-    public boolean hasErrors() {
-        return errors != 0;
+    public AbstractParser(ErrorConsumer errorConsumer) {
+        this.errorConsumer = errorConsumer;
     }
 
     /**
-     * @return number of total errors.
+     * @return true if the last parse call (which could be still ongoing) lead to one or more errors.
      */
-    public int errorCount() {
-        return errors;
+    public boolean hasErrors() {
+        return errors != 0;
     }
 
     /**
@@ -33,7 +30,5 @@ public abstract class AbstractParser {
      * Setter for the error consumer that collects and prints errors.
      * @param errorConsumer is the consumer to set.
      */
-    public void setErrorConsumer(ErrorConsumer errorConsumer) {
-        this.errorConsumer = errorConsumer;
-    }
+
 }

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

@@ -40,11 +40,6 @@ public interface Language {
      */
     boolean hasErrors();
 
-    /**
-     * Number of errors found during the last {@link #parse}.
-     */
-    int errorCount();
-
     /**
      * Determines whether the parser provide column information.
      */

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

@@ -10,10 +10,10 @@ import de.jplag.TokenList;
  */
 public class Language implements de.jplag.Language {
 
-    private final de.jplag.chars.Parser parser = new Parser();
+    private final Parser parser;
 
     public Language(ErrorConsumer program) {
-        this.parser.setErrorConsumer(program);
+        parser = new Parser(program);
     }
 
     @Override
@@ -21,11 +21,6 @@ public class Language implements de.jplag.Language {
         return new String[] {".TXT", ".txt", ".ASC", ".asc", ".TEX", ".tex"};
     }
 
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
-    }
-
     @Override
     public String getName() {
         return "Character Parser";

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

@@ -5,6 +5,7 @@ import java.io.FileReader;
 import java.nio.charset.StandardCharsets;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenConstants;
 import de.jplag.TokenList;
 
@@ -12,6 +13,14 @@ public class Parser extends AbstractParser {
 
     private TokenList tokens;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -8,14 +8,8 @@ import de.jplag.TokenList;
 public class Language implements de.jplag.Language {
     private final Scanner scanner; // cpp code is scanned not parsed
 
-    public Language(ErrorConsumer program) {
-        this.scanner = new Scanner();
-        this.scanner.setErrorConsumer(program);
-    }
-
-    @Override
-    public int errorCount() {
-        return this.scanner.errorCount();
+    public Language(ErrorConsumer errorConsumer) {
+        scanner = new Scanner(errorConsumer);
     }
 
     @Override

+ 9 - 0
jplag.frontend.cpp/src/main/java/de/jplag/cpp/Scanner.java

@@ -3,6 +3,7 @@ package de.jplag.cpp;
 import java.io.File;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 
 public class Scanner extends AbstractParser {
@@ -10,6 +11,14 @@ public class Scanner extends AbstractParser {
 
     private TokenList tokens;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Scanner(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList scan(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -9,9 +9,7 @@ public class Language implements de.jplag.Language {
     private final Parser parser;
 
     public Language(ErrorConsumer program) {
-        this.parser = new Parser();
-        this.parser.setErrorConsumer(program);
-
+        parser = new Parser(program);
     }
 
     @Override
@@ -19,11 +17,6 @@ public class Language implements de.jplag.Language {
         return new String[] {".cs", ".CS"};
     }
 
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
-    }
-
     @Override
     public String getName() {
         return "C# 1.2 Parser";

+ 9 - 0
jplag.frontend.csharp-1.2/src/main/java/de/jplag/csharp/Parser.java

@@ -7,6 +7,7 @@ import java.nio.charset.StandardCharsets;
 import antlr.Token;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 import de.jplag.csharp.grammar.CSharpLexer;
 import de.jplag.csharp.grammar.CSharpParser;
@@ -15,6 +16,14 @@ public class Parser extends AbstractParser {
     private TokenList tokens;
     private String currentFile;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -12,8 +12,7 @@ public class Language implements de.jplag.Language {
     private final Parser parser;
 
     public Language(ErrorConsumer errorConsumer) {
-        this.parser = new Parser();
-        this.parser.setErrorConsumer(errorConsumer);
+        parser = new Parser(errorConsumer);
     }
 
     @Override
@@ -66,9 +65,4 @@ public class Language implements de.jplag.Language {
         return this.parser.hasErrors();
     }
 
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
-    }
-
 }

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

@@ -6,11 +6,20 @@ import java.io.File;
 import java.util.Arrays;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 
 public class Parser extends AbstractParser {
     private TokenList tokens;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -9,9 +9,8 @@ public class Language implements de.jplag.Language {
 
     private final Parser parser;
 
-    public Language(ErrorConsumer program) {
-        this.parser = new Parser();
-        this.parser.setErrorConsumer(program);
+    public Language(ErrorConsumer errorConsumer) {
+        parser = new Parser(errorConsumer);
     }
 
     @Override
@@ -19,11 +18,6 @@ public class Language implements de.jplag.Language {
         return new String[] {".py"};
     }
 
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
-    }
-
     @Override
     public String getName() {
         return "Python3 Parser";

+ 9 - 0
jplag.frontend.python-3/src/main/java/de/jplag/python3/Parser.java

@@ -13,6 +13,7 @@ import org.antlr.v4.runtime.tree.ParseTree;
 import org.antlr.v4.runtime.tree.ParseTreeWalker;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 import de.jplag.python3.grammar.Python3Lexer;
 import de.jplag.python3.grammar.Python3Parser;
@@ -23,6 +24,14 @@ public class Parser extends AbstractParser {
     private TokenList tokens = new TokenList();
     private String currentFile;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -6,20 +6,12 @@ import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 
 public class Language implements de.jplag.Language {
+    private final de.jplag.scheme.Parser parser;
 
     public Language(ErrorConsumer program) {
-        this.parser = new Parser();
-        this.parser.setErrorConsumer(program);
-
+        parser = new Parser(program);
     }
 
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
-    }
-
-    private final de.jplag.scheme.Parser parser; // Not yet instantiated? See constructor!
-
     @Override
     public String[] suffixes() {
         return new String[] {".scm", ".SCM", ".ss", ".SS"};

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

@@ -3,6 +3,7 @@ package de.jplag.scheme;
 import java.io.File;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenList;
 
 public class Parser extends AbstractParser {
@@ -10,6 +11,14 @@ public class Parser extends AbstractParser {
 
     private TokenList tokens;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;

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

@@ -8,15 +8,10 @@ import de.jplag.TokenList;
 
 public class Language implements de.jplag.Language {
 
-    private final Parser parser = new Parser();
+    private final Parser parser;
 
-    public Language(ErrorConsumer program) {
-        this.parser.setErrorConsumer(program);
-    }
-
-    @Override
-    public int errorCount() {
-        return this.parser.errorCount();
+    public Language(ErrorConsumer errorConsumer) {
+        parser = new Parser(errorConsumer);
     }
 
     @Override

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

@@ -7,6 +7,7 @@ import java.util.Hashtable;
 import antlr.Token;
 
 import de.jplag.AbstractParser;
+import de.jplag.ErrorConsumer;
 import de.jplag.TokenConstants;
 import de.jplag.TokenList;
 
@@ -21,6 +22,14 @@ public class Parser extends AbstractParser {
 
     private boolean runOut = false;
 
+    /**
+     * Creates the parser.
+     * @param errorConsumer is the consumer for any occurring errors.
+     */
+    public Parser(ErrorConsumer errorConsumer) {
+        super(errorConsumer);
+    }
+
     public TokenList parse(File directory, String[] files) {
         tokens = new TokenList();
         errors = 0;