1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.entropysoft.transmorph.signature;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21
22
23
24
25
26
27
28
29 public class ClassTypeSignature extends FieldTypeSignature {
30
31 private final String binaryName;
32 private final TypeArgSignature[] typeArgSignatures;
33 private final ClassTypeSignature ownerTypeSignature;
34 private volatile FullTypeSignature typeErasureSignature;
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public ClassTypeSignature(String binaryName,
50 TypeArgSignature[] typeArgSignatures,
51 ClassTypeSignature ownerTypeSignature) {
52 this.binaryName = binaryName;
53 this.typeArgSignatures = typeArgSignatures;
54 this.ownerTypeSignature = ownerTypeSignature;
55 }
56
57
58
59
60
61
62 public boolean isInnerClass() {
63 return ownerTypeSignature != null;
64 }
65
66
67
68
69
70
71
72 public String getBinaryName() {
73 return binaryName;
74 }
75
76
77
78
79
80
81
82 public String getClassName() {
83 if (ownerTypeSignature == null) {
84 return binaryName;
85 }
86 return ownerTypeSignature.getClassName() + '$' + binaryName;
87 }
88
89 public String getInnerClassName() {
90 if (ownerTypeSignature == null) {
91 return null;
92 }
93 return binaryName;
94 }
95
96
97
98
99
100
101 public ClassTypeSignature getOwnerTypeSignature() {
102 return ownerTypeSignature;
103 }
104
105
106
107
108
109
110
111 public TypeArgSignature[] getTypeArgSignatures() {
112 return typeArgSignatures;
113 }
114
115
116
117
118 public FullTypeSignature getTypeErasureSignature() {
119 if (typeErasureSignature == null) {
120 typeErasureSignature = new ClassTypeSignature(binaryName,
121 new TypeArgSignature[0], ownerTypeSignature == null ? null
122 : (ClassTypeSignature) ownerTypeSignature
123 .getTypeErasureSignature());
124 }
125 return typeErasureSignature;
126 }
127
128 private ClassTypeSignature[] getClassTypeSignatures() {
129 List<ClassTypeSignature> list = new ArrayList<ClassTypeSignature>();
130
131 ClassTypeSignature classTypeSignature = this;
132 while (classTypeSignature != null) {
133 list.add(0, classTypeSignature);
134 classTypeSignature = classTypeSignature.ownerTypeSignature;
135 }
136 return list.toArray(new ClassTypeSignature[list.size()]);
137 }
138
139 @Override
140 public String toString() {
141 return getSignature();
142 }
143
144 public boolean isClassType() {
145 return true;
146 }
147
148 }