Use common library to read file content.
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / methods / JavaFile.java
index e8cbe6b..70d5dc2 100755 (executable)
@@ -1,7 +1,7 @@
 /*
  * JavaInspect - Utility to visualize java software
- * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
- * 
+ * Copyright (C) 2013-2020, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of version 3 of the GNU Lesser General Public License
  * or later as published by the Free Software Foundation.
 
 package eu.svjatoslav.inspector.java.methods;
 
-import java.io.BufferedReader;
+import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
+import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
+import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
+
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
-import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
-import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
+import static eu.svjatoslav.commons.file.IOHelper.getFileContentsAsString;
+import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.DROP;
+import static eu.svjatoslav.commons.string.tokenizer.Terminator.TerminationStrategy.PRESERVE;
 
 public class JavaFile {
 
-       private final List<Import> imports = new ArrayList<Import>();
-
-       private String packageName;
-
-       private final File file;
-
-       StringBuffer contents = new StringBuffer();
-
-       public List<Clazz> classes = new ArrayList<Clazz>();
-
-       public JavaFile(final File file) throws IOException, InvalidSyntaxException {
-               this.file = file;
-               parse();
-       }
-
-       public void parse() throws IOException, InvalidSyntaxException {
-               System.out.println("java file: " + file);
-
-               readFile();
-
-               final Tokenizer tokenizer = new Tokenizer(contents.toString());
-
-               // empty space
-               tokenizer.addTerminator(" ", true);
-               tokenizer.addTerminator("\t", true);
-               tokenizer.addTerminator("\n", true);
-
-               tokenizer.addTerminator(";", false);
-               tokenizer.addTerminator("{", false);
-               tokenizer.addTerminator("}", false);
-               tokenizer.addTerminator("(", false);
-               tokenizer.addTerminator(")", false);
-               tokenizer.addTerminator("[", false);
-               tokenizer.addTerminator("]", false);
-               tokenizer.addTerminator("<", false);
-               tokenizer.addTerminator(">", false);
-               tokenizer.addTerminator(",", false);
-               tokenizer.addTerminator("@", false);
-
-               // comments
-               tokenizer.addTerminator("//", "\n", true);
-               tokenizer.addTerminator("/*", "*/", true);
-
-               final Modifiers modifiers = new Modifiers();
-
-               while (true) {
-                       final TokenizerMatch match = tokenizer.getNextToken();
-                       if (match == null)
-                               break;
-
-                       if (match.token.equals("package")) {
-                               parsePackage(tokenizer);
-                               continue;
-                       }
-
-                       if (match.token.equals("import")) {
-                               parseImport(tokenizer);
-                               continue;
-                       }
+    public static final String UTF_8 = "UTF-8";
+    public final List<Clazz> classes = new ArrayList<>();
+    String contents;
+    private final List<Import> imports = new ArrayList<>();
+    private final File file;
+    private String packageName;
+
+    public JavaFile(final File file) throws IOException, InvalidSyntaxException {
+        this.file = file;
+        parse();
+    }
+
+    public void parse() throws IOException, InvalidSyntaxException {
+        System.out.println("java file: " + file);
+
+        contents = getFileContentsAsString(file);
 
-                       final boolean wasModifier = modifiers.parseModifier(match.token);
-                       if (wasModifier)
-                               continue;
+        final Tokenizer tokenizer = new Tokenizer(contents);
+
+        // empty space
+        tokenizer.addTerminator(" ", DROP);
+        tokenizer.addTerminator("\t", DROP);
+        tokenizer.addTerminator("\n", DROP);
+
+        tokenizer.addTerminator(";", PRESERVE);
+        tokenizer.addTerminator("{", PRESERVE);
+        tokenizer.addTerminator("}", PRESERVE);
+        tokenizer.addTerminator("(", PRESERVE);
+        tokenizer.addTerminator(")", PRESERVE);
+        tokenizer.addTerminator("[", PRESERVE);
+        tokenizer.addTerminator("]", PRESERVE);
+        tokenizer.addTerminator("<", PRESERVE);
+        tokenizer.addTerminator(">", PRESERVE);
+        tokenizer.addTerminator(",", PRESERVE);
+        tokenizer.addTerminator("@", PRESERVE);
 
-                       if ("class".equals(match.token)) {
-                               parseClass(tokenizer);
-                               continue;
-                       }
+        // comments
+        tokenizer.addTerminator("//", "\n", DROP);
+        tokenizer.addTerminator("/*", "*/", DROP);
 
-                       if ("interface".equals(match.token)) {
-                               parseInterface(tokenizer);
-                               continue;
-                       }
+        final Modifiers modifiers = new Modifiers();
 
-                       if ("@".equals(match.token)) {
-                               final Annotation annotation = new Annotation(tokenizer);
-                               continue;
-                       }
+        while (true) {
+            final TokenizerMatch match = tokenizer.getNextToken();
+            if (match == null)
+                break;
 
-                       System.out.println("    " + modifiers.toString() + " "
-                                       + match.token);
-                       modifiers.reset();
-                       skipUntilSemicolon(tokenizer);
-               }
+            if (match.token.equals("package")) {
+                parsePackage(tokenizer);
+                continue;
+            }
 
-       }
+            if (match.token.equals("import")) {
+                parseImport(tokenizer);
+                continue;
+            }
 
-       private void parseClass(final Tokenizer tokenizer)
-                       throws InvalidSyntaxException {
+            final boolean wasModifier = modifiers.parseModifier(match.token);
+            if (wasModifier)
+                continue;
 
-               final TokenizerMatch match = tokenizer.getNextToken();
-               final Clazz clazz = new Clazz(packageName, match.token, tokenizer,
-                               false);
-               // System.out.println(clazz.toString());
-               classes.add(clazz);
+            if ("class".equals(match.token)) {
+                parseClass(tokenizer);
+                continue;
+            }
 
-       }
+            if ("interface".equals(match.token)) {
+                parseInterface(tokenizer);
+                continue;
+            }
 
-       private void parseImport(final Tokenizer tokenizer)
-                       throws InvalidSyntaxException {
+            if ("@".equals(match.token)) {
+                new Annotation(tokenizer);
+                continue;
+            }
 
-               final Import imp = new Import();
+            System.out.println("    " + modifiers.toString() + " "
+                    + match.token);
+            modifiers.reset();
+            skipUntilSemicolon(tokenizer);
+        }
 
-               final TokenizerMatch match = tokenizer.getNextToken();
+    }
 
-               if (match.token.equals("static")) {
-                       imp.isStatic = true;
-                       imp.path = tokenizer.getNextToken().token;
-               } else
-                       imp.path = match.token;
+    private void parseClass(final Tokenizer tokenizer)
+            throws InvalidSyntaxException {
 
-               imports.add(imp);
+        final TokenizerMatch match = tokenizer.getNextToken();
+        final Clazz clazz = new Clazz(packageName, match.token, tokenizer,
+                false);
+        // System.out.println(clazz.toString());
+        classes.add(clazz);
 
-               tokenizer.expectNextToken(";");
-       }
+    }
 
-       private void parseInterface(final Tokenizer tokenizer)
-                       throws InvalidSyntaxException {
+    private void parseImport(final Tokenizer tokenizer)
+            throws InvalidSyntaxException {
 
-               final TokenizerMatch match = tokenizer.getNextToken();
-               final Clazz clazz = new Clazz(packageName, match.token, tokenizer, true);
-               // System.out.println(clazz.toString());
-               classes.add(clazz);
-       }
+        final Import imp = new Import();
 
-       private void parsePackage(final Tokenizer tokenizer)
-                       throws InvalidSyntaxException {
+        final TokenizerMatch match = tokenizer.getNextToken();
 
-               final TokenizerMatch match = tokenizer.getNextToken();
+        if (match.token.equals("static")) {
+            imp.isStatic = true;
+            imp.path = tokenizer.getNextToken().token;
+        } else
+            imp.path = match.token;
 
-               packageName = match.token;
+        imports.add(imp);
 
-               tokenizer.expectNextToken(";");
-       }
+        tokenizer.expectAndConsumeNextToken(";");
+    }
 
-       private void readFile() throws FileNotFoundException, IOException {
-               final FileReader fileReader = new FileReader(file);
+    private void parseInterface(final Tokenizer tokenizer)
+            throws InvalidSyntaxException {
 
-               final BufferedReader bufferedReader = new BufferedReader(fileReader);
+        final TokenizerMatch match = tokenizer.getNextToken();
+        final Clazz clazz = new Clazz(packageName, match.token, tokenizer, true);
+        // System.out.println(clazz.toString());
+        classes.add(clazz);
+    }
 
-               while (true) {
-                       final String line = bufferedReader.readLine();
+    private void parsePackage(final Tokenizer tokenizer)
+            throws InvalidSyntaxException {
 
-                       if (line == null)
-                               break;
+        final TokenizerMatch match = tokenizer.getNextToken();
 
-                       contents.append(line);
-                       contents.append("\n");
-               }
+        packageName = match.token;
 
-               bufferedReader.close();
-               fileReader.close();
-       }
+        tokenizer.expectAndConsumeNextToken(";");
+    }
 
-       public void skipUntilSemicolon(final Tokenizer tokenizer) {
-               while (true) {
-                       final TokenizerMatch token = tokenizer.getNextToken();
+    public void skipUntilSemicolon(final Tokenizer tokenizer) throws InvalidSyntaxException {
+        while (true) {
+            final TokenizerMatch token = tokenizer.getNextToken();
 
-                       if (token == null)
-                               return;
+            if (token == null)
+                return;
 
-                       if (token.token.equals(";"))
-                               return;
-               }
-       }
+            if (token.token.equals(";"))
+                return;
+        }
+    }
 
 }