1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.entropysoft.transmorph.signature;
17
18 import net.entropysoft.transmorph.signature.formatter.ClassFileTypeSignatureFormatter;
19
20
21
22
23
24
25
26
27
28 public class TypeArgSignature extends TypeSignature {
29
30 public static char NO_WILDCARD = ' ';
31 public static char UNBOUNDED_WILDCARD = '*';
32 public static char UPPERBOUND_WILDCARD = '+';
33 public static char LOWERBOUND_WILDCARD = '-';
34 private final char wildcard;
35 private final FieldTypeSignature fieldTypeSignature;
36 private volatile String signature;
37
38 public TypeArgSignature(char wildcard, FieldTypeSignature fieldTypeSignature) {
39 this.wildcard = wildcard;
40 this.fieldTypeSignature = fieldTypeSignature;
41 }
42
43 public char getWildcard() {
44 return wildcard;
45 }
46
47
48
49
50
51
52 public FieldTypeSignature getFieldTypeSignature() {
53 return fieldTypeSignature;
54 }
55
56 public String getSignature() {
57 if (signature == null) {
58 ClassFileTypeSignatureFormatter typeSignatureFormatter = new ClassFileTypeSignatureFormatter();
59 signature = typeSignatureFormatter.formatTypeArgSignature(this);
60 }
61 return signature;
62 }
63
64 @Override
65 public String toString() {
66 return getSignature();
67 }
68
69 @Override
70 public boolean isTypeArgument() {
71 return true;
72 }
73
74 @Override
75 public FullTypeSignature getTypeErasureSignature() {
76 if (wildcard == NO_WILDCARD)
77 return getFieldTypeSignature().getTypeErasureSignature();
78 if (wildcard == UNBOUNDED_WILDCARD)
79 return TypeSignatureFactory.getTypeSignature(Object.class);
80 if (wildcard == UPPERBOUND_WILDCARD)
81 return getFieldTypeSignature().getTypeErasureSignature();
82 if (wildcard == LOWERBOUND_WILDCARD)
83 return TypeSignatureFactory.getTypeSignature(Object.class);
84 return null;
85 }
86
87 }