+ public static final String UTF_8 = "UTF-8";
+ public final List<Clazz> classes = new ArrayList<>();
+ final StringBuffer contents = new StringBuffer();
+ 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);
+
+ readFile();
+
+ final Tokenizer tokenizer = new Tokenizer(contents.toString());
+
+ // 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);
+
+ // comments
+ tokenizer.addTerminator("//", "\n", DROP);
+ tokenizer.addTerminator("/*", "*/", DROP);
+
+ 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;
+ }
+
+ final boolean wasModifier = modifiers.parseModifier(match.token);
+ if (wasModifier)
+ continue;
+
+ if ("class".equals(match.token)) {
+ parseClass(tokenizer);
+ continue;
+ }
+
+ if ("interface".equals(match.token)) {
+ parseInterface(tokenizer);
+ continue;
+ }