parse annotations
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / methods / Clazz.java
1 package eu.svjatoslav.inspector.java.methods;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import eu.svjatoslav.inspector.tokenizer.InvalidSyntaxException;
7 import eu.svjatoslav.inspector.tokenizer.Tokenizer;
8 import eu.svjatoslav.inspector.tokenizer.TokenizerMatch;
9
10 public class Clazz {
11
12         private final String packageName;
13         private final String className;
14         private final boolean isInterface;
15
16         public ClassReference superClass;
17         public List<ClassReference> implementedInterfaces = new ArrayList<ClassReference>();
18
19         public Clazz(final String packageName, final String className,
20                         final Tokenizer tokenizer, final boolean isInterface)
21                         throws InvalidSyntaxException {
22
23                 this.packageName = packageName;
24                 this.className = className;
25                 this.isInterface = isInterface;
26
27                 while (true) {
28                         final TokenizerMatch match = tokenizer.getNextToken();
29
30                         if ("extends".equals(match.token)) {
31                                 superClass = new ClassReference(tokenizer);
32                                 continue;
33                         }
34
35                         if ("implements".equals(match.token)) {
36                                 while (true) {
37                                         implementedInterfaces.add(new ClassReference(tokenizer));
38
39                                         if (tokenizer.probeNextToken(","))
40                                                 continue;
41
42                                         break;
43                                 }
44                                 continue;
45                         }
46
47                         if ("{".equals(match.token)) {
48                                 parseClassBody(tokenizer);
49                                 break;
50                         }
51
52                 }
53         }
54
55         public String getFullName() {
56                 return packageName + "." + className;
57         }
58
59         public void parseClassBody(final Tokenizer tokenizer) {
60                 tokenizer.skipUntilDataEnd();
61         }
62
63         @Override
64         public String toString() {
65                 final EnumerationBuffer result = new EnumerationBuffer();
66
67                 result.append(packageName + " -> " + className + " ");
68
69                 if (isInterface)
70                         result.append("(interface)");
71                 else
72                         result.append("(class)");
73                 result.append("\n");
74
75                 if (superClass != null)
76                         result.append("    super: " + superClass.toString() + "\n");
77
78                 if (implementedInterfaces.size() > 0) {
79                         result.append("    implements: ");
80                         for (final ClassReference classReference : implementedInterfaces)
81                                 result.appendEnumeration(classReference.toString());
82                         result.append("\n");
83                 }
84
85                 return result.toString();
86         }
87
88 }