|
7 | 7 |
|
8 | 8 | import stdlib.Strings; |
9 | 9 |
|
10 | | -import java.util.Arrays; |
| 10 | +import java.io.Closeable; |
| 11 | +import java.lang.reflect.Array; |
| 12 | +import java.util.*; |
11 | 13 |
|
12 | 14 | /** |
13 | 15 | * @author Hoofdgebruiker |
14 | 16 | */ |
15 | 17 | public class JavaClass implements Comparable<JavaClass> { |
16 | | - public static final JavaClass CLASS = new JavaClass("java.lang", "Class", Kind.CLASS); |
17 | | - public static final JavaClass ENUM = new JavaClass("java.lang", "Enum", Kind.CLASS); |
18 | | - public static final JavaClass OBJECT = new JavaClass("java.lang", "Object", Kind.CLASS); |
19 | | - public static final JavaClass STRING = new JavaClass("java.lang", "String", Kind.CLASS); |
20 | | - public static final JavaClass CLOSEABLE = new JavaClass("java.lang", "AutoCloseable", Kind.INTERFACE); |
21 | | - public static final JavaClass MAP = new JavaClass("java.util", "Map", JavaClass.Kind.INTERFACE); |
22 | | - public static final JavaClass HASHMAP = new JavaClass("java.util", "HashMap", JavaClass.Kind.CLASS); |
23 | | - public static final JavaClass ITERATOR = new JavaClass("java.util", "Iterator", JavaClass.Kind.INTERFACE); |
24 | | - public static final JavaClass ITERABLE = new JavaClass("java.lang", "Iterable", Kind.INTERFACE); |
25 | | - public static final JavaClass ARRAYS = new JavaClass("java.util", "Arrays", Kind.CLASS); |
26 | | - |
27 | | - public static final JavaClass BOOLEAN = new JavaClass("java.lang", "Boolean", Kind.CLASS); |
28 | | - public static final JavaClass BYTE = new JavaClass("java.lang", "Byte", Kind.CLASS); |
29 | | - public static final JavaClass SHORT = new JavaClass("java.lang", "Short", Kind.CLASS); |
30 | | - public static final JavaClass INTEGER = new JavaClass("java.lang", "Integer", Kind.CLASS); |
31 | | - public static final JavaClass LONG = new JavaClass("java.lang", "Long", Kind.CLASS); |
32 | | - public static final JavaClass FLOAT = new JavaClass("java.lang", "Float", Kind.CLASS); |
33 | | - public static final JavaClass DOUBLE = new JavaClass("java.lang", "Double", Kind.CLASS); |
34 | | - public static final JavaClass CHARACTER = new JavaClass("java.lang", "Character", Kind.CLASS); |
35 | | - public static final JavaClass COLLECTION = new JavaClass("java.util", "Collection", Kind.INTERFACE); |
36 | | - public static final JavaClass COLLECTIONS = new JavaClass("java.util", "Collections", Kind.CLASS); |
37 | | - public static final JavaClass STRINGBUILDER = new JavaClass("java.lang", "StringBuilder", Kind.CLASS); |
38 | | - public static final JavaClass ARRAY = new JavaClass("java.lang.reflect", "Array", Kind.CLASS); |
| 18 | + public static final JavaClass CLASS = fromJavaClass(Class.class); |
| 19 | + public static final JavaClass ENUM = fromJavaClass(Enum.class); |
| 20 | + public static final JavaClass OBJECT = fromJavaClass(Object.class); |
| 21 | + public static final JavaClass STRING = fromJavaClass(String.class); |
| 22 | + public static final JavaClass AUTO_CLOSEABLE = fromJavaClass(AutoCloseable.class); |
| 23 | + public static final JavaClass CLOSEABLE = fromJavaClass(Closeable.class); |
| 24 | + public static final JavaClass MAP = fromJavaClass(Map.class); |
| 25 | + public static final JavaClass HASHMAP = fromJavaClass(HashMap.class); |
| 26 | + public static final JavaClass ITERATOR = fromJavaClass(Iterator.class); |
| 27 | + public static final JavaClass ITERABLE = fromJavaClass(Iterable.class); |
| 28 | + public static final JavaClass ARRAYS = fromJavaClass(Arrays.class); |
| 29 | + |
| 30 | + public static final JavaClass BOOLEAN = fromJavaClass(Boolean.class); |
| 31 | + public static final JavaClass BYTE = fromJavaClass(Byte.class); |
| 32 | + public static final JavaClass SHORT = fromJavaClass(Short.class); |
| 33 | + public static final JavaClass INTEGER = fromJavaClass(Integer.class); |
| 34 | + public static final JavaClass LONG = fromJavaClass(Long.class); |
| 35 | + public static final JavaClass FLOAT = fromJavaClass(Float.class); |
| 36 | + public static final JavaClass DOUBLE = fromJavaClass(Double.class); |
| 37 | + public static final JavaClass CHARACTER = fromJavaClass(Character.class); |
| 38 | + public static final JavaClass COLLECTION = fromJavaClass(Collection.class); |
| 39 | + public static final JavaClass COLLECTIONS = fromJavaClass(Collections.class); |
| 40 | + public static final JavaClass STRING_BUILDER = fromJavaClass(StringBuilder.class); |
| 41 | + public static final JavaClass ARRAY = fromJavaClass(Array.class); |
39 | 42 |
|
40 | 43 | public static final JavaClass SHARED = new JavaClass("zsynthetic", "Shared", Kind.CLASS); |
41 | 44 | public final JavaClass outer; |
@@ -97,6 +100,19 @@ public static JavaClass fromInternalName(String internalName, Kind kind) { |
97 | 100 | return new JavaClass(pkg, internalName, kind, nameParts); |
98 | 101 | } |
99 | 102 |
|
| 103 | + public static JavaClass fromJavaClass(final Class<?> clazz) { |
| 104 | + if (clazz.isArray()) { |
| 105 | + return JavaClass.fromInternalName(clazz.getName(), Kind.ARRAY); |
| 106 | + } |
| 107 | + if (clazz.isPrimitive()) { |
| 108 | + throw new IllegalStateException("JavaClass cannot represent primitive types"); |
| 109 | + } |
| 110 | + |
| 111 | + final String internalName = clazz.getName().replace('.', '/'); |
| 112 | + final Kind kind = clazz.isInterface()? Kind.INTERFACE : clazz.isEnum()? Kind.ENUM : Kind.CLASS; |
| 113 | + return JavaClass.fromInternalName(internalName, kind); |
| 114 | + } |
| 115 | + |
100 | 116 | public static String getNameFromFile(String filename) { |
101 | 117 | if (filename.indexOf('.') > 0) |
102 | 118 | return filename.substring(0, filename.lastIndexOf('.')); |
|
0 commit comments