+ public static final String UTF_8 = "UTF-8";
+ private final List<Import> imports = new ArrayList<Import>();
+ private final File file;
+ public List<Clazz> classes = new ArrayList<Clazz>();
+ StringBuffer contents = new StringBuffer();
+ 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(" ", 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;
+ }
+
+ 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;
+ }