Updated copyright info
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / methods / Clazz.java
1 /*
2  * JavaInspect - Utility to visualize java software
3  * Copyright (C) 2013-2020, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 3 of the GNU Lesser General Public License
7  * or later as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.inspector.java.methods;
11
12 import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
13 import eu.svjatoslav.commons.string.tokenizer.Tokenizer;
14 import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
15
16 import java.util.ArrayList;
17 import java.util.List;
18
19 public class Clazz {
20
21     public final List<ClassReference> implementedInterfaces = new ArrayList<>();
22     private final String packageName;
23     private final String className;
24     private final boolean isInterface;
25     public ClassReference superClass;
26
27     public Clazz(final String packageName, final String className,
28                  final Tokenizer tokenizer, final boolean isInterface)
29             throws InvalidSyntaxException {
30
31         this.packageName = packageName;
32         this.className = className;
33         this.isInterface = isInterface;
34
35         while (true) {
36             final TokenizerMatch match = tokenizer.getNextToken();
37
38             if ("extends".equals(match.token)) {
39                 superClass = new ClassReference(tokenizer);
40                 continue;
41             }
42
43             if ("implements".equals(match.token)) {
44                 while (true) {
45                     implementedInterfaces.add(new ClassReference(tokenizer));
46
47                     if (tokenizer.consumeIfNextToken(","))
48                         continue;
49
50                     break;
51                 }
52                 continue;
53             }
54
55             if ("{".equals(match.token)) {
56                 parseClassBody(tokenizer);
57                 break;
58             }
59
60         }
61     }
62
63     public String getFullName() {
64         return packageName + "." + className;
65     }
66
67     public void parseClassBody(final Tokenizer tokenizer) {
68         tokenizer.skipUntilDataEnd();
69     }
70
71     @Override
72     public String toString() {
73         final EnumerationBuffer result = new EnumerationBuffer();
74
75         result.append(packageName + " -> " + className + " ");
76
77         if (isInterface)
78             result.append("(interface)");
79         else
80             result.append("(class)");
81         result.append("\n");
82
83         if (superClass != null)
84             result.append("    super: " + superClass.toString() + "\n");
85
86         if (implementedInterfaces.size() > 0) {
87             result.append("    implements: ");
88             for (final ClassReference classReference : implementedInterfaces)
89                 result.appendEnumeration(classReference.toString());
90             result.append("\n");
91         }
92
93         return result.toString();
94     }
95
96 }