1 package com.fasterxml.classmate.types;
2
3 import java.util.*;
4
5 import com.fasterxml.classmate.ResolvedType;
6 import com.fasterxml.classmate.TypeBindings;
7
8 /**
9  * Type used for Java primitive types (which does not include arrays here).
10  *<p>
11  * Since set of primitive types is bounded, constructor is defined as protected,
12  * and class final; that is, new primitive types are not to be constructed
13  * by calling applications.
14  */

15 public final class ResolvedPrimitiveType extends ResolvedType
16 {
17     private final static ResolvedPrimitiveType VOID = new ResolvedPrimitiveType(Void.TYPE, 'V', "void");
18     
19     /**
20      * Primitive types have single-character Signature, easy and efficient
21      * to just store here
22      */

23     protected final String _signature;
24
25     /**
26      * Human-readable description should be simple as well
27      */

28     protected final String _description;
29     
30     /*
31     /**********************************************************************
32     /* Life cycle
33     /**********************************************************************
34      */

35
36     protected ResolvedPrimitiveType(Class<?> erased, char sig, String desc)
37     {
38         super(erased, TypeBindings.emptyBindings());
39         _signature = String.valueOf(sig);
40         _description = desc;
41     }
42     
43     public static List<ResolvedPrimitiveType> all()
44     {
45         ArrayList<ResolvedPrimitiveType> all = new ArrayList<ResolvedPrimitiveType>();
46         all.add(new ResolvedPrimitiveType(Boolean.TYPE, 'Z', "boolean"));
47         all.add(new ResolvedPrimitiveType(Byte.TYPE, 'B', "byte"));
48         all.add(new ResolvedPrimitiveType(Short.TYPE, 'S', "short"));
49         all.add(new ResolvedPrimitiveType(Character.TYPE, 'C', "char"));
50         all.add(new ResolvedPrimitiveType(Integer.TYPE, 'I', "int"));
51         all.add(new ResolvedPrimitiveType(Long.TYPE, 'J', "long"));
52         all.add(new ResolvedPrimitiveType(Float.TYPE, 'F', "float"));
53         all.add(new ResolvedPrimitiveType(Double.TYPE, 'D', "double"));
54         return all;
55     }
56
57     public static ResolvedPrimitiveType voidType()
58     {
59         return VOID;
60     }
61     
62     @Override
63     public boolean canCreateSubtypes() {
64         return false;
65     }
66     
67     /*
68     /**********************************************************************
69     /* Accessors for related types
70     /**********************************************************************
71      */

72
73     @Override
74     public ResolvedType getSelfReferencedType() { return null; }
75     
76     @Override
77     public ResolvedType getParentClass() { return null; }
78     
79     /*
80     /**********************************************************************
81     /* Simple property accessors
82     /**********************************************************************
83      */

84
85     @Override
86     public boolean isInterface() { return false; }
87     
88     @Override
89     public boolean isAbstract() { return false; }
90
91     @Override
92     public ResolvedType getArrayElementType() { return null; }
93
94     @Override
95     public boolean isArray() { return false; }
96
97     @Override
98     public boolean isPrimitive() { return true; }
99
100     @Override
101     public List<ResolvedType> getImplementedInterfaces() {
102         return Collections.emptyList();
103     }
104
105     /*
106     /**********************************************************************
107     /* Accessors for raw (minimally procesed) members
108     /**********************************************************************
109      */

110     
111     // Primitive types are simple; no fields, no methods, no constructors
112     
113     /*
114     /**********************************************************************
115     /* String representations
116     /**********************************************************************
117      */

118
119     @Override
120     public String getSignature() {
121         return _signature;
122     }
123
124     @Override
125     public String getErasedSignature() {
126         return _signature;
127     }
128
129     @Override
130     public String getFullDescription() {
131         return _description;
132     }
133
134     @Override
135     public StringBuilder appendSignature(StringBuilder sb) {
136         sb.append(_signature);
137         return sb;
138     }
139
140     @Override
141     public StringBuilder appendErasedSignature(StringBuilder sb) {
142         sb.append(_signature);
143         return sb;
144     }
145     
146     @Override
147     public StringBuilder appendFullDescription(StringBuilder sb) {
148         sb.append(_description);
149         return sb;
150     }
151
152     @Override
153     public StringBuilder appendBriefDescription(StringBuilder sb) {
154         sb.append(_description);
155         return sb;
156     }
157 }
158