]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.reflection/src/org/simantics/scl/reflection/internal/typeRegistry/TypeRegistry.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.reflection / src / org / simantics / scl / reflection / internal / typeRegistry / TypeRegistry.java
1 package org.simantics.scl.reflection.internal.typeRegistry;\r
2 \r
3 import gnu.trove.set.hash.THashSet;\r
4 \r
5 import java.util.List;\r
6 import java.util.concurrent.ConcurrentHashMap;\r
7 \r
8 import org.simantics.scl.compiler.types.TCon;\r
9 import org.simantics.scl.compiler.types.Types;\r
10 import org.simantics.scl.reflection.TypeNotFoundException;\r
11 import org.simantics.scl.reflection.internal.registry.BindingRegistry;\r
12 \r
13 public class TypeRegistry {\r
14     private static final ConcurrentHashMap<TCon, Class<?>> map = \r
15             new ConcurrentHashMap<TCon, Class<?>>();\r
16     \r
17     private static final THashSet<String> builtins = new THashSet<String>();\r
18     \r
19     static {\r
20         map.put(Types.BOOLEAN, Boolean.class);        \r
21         map.put(Types.BYTE, Byte.class);\r
22         map.put(Types.CHARACTER, Character.class);\r
23         map.put(Types.SHORT, Short.class);\r
24         map.put(Types.INTEGER, Integer.class);\r
25         map.put(Types.LONG, Long.class);\r
26         map.put(Types.FLOAT, Float.class);\r
27         map.put(Types.DOUBLE, Double.class);\r
28         map.put(Types.STRING, String.class);\r
29         map.put(Types.BYTE_ARRAY, byte[].class);\r
30         \r
31         map.put(Types.LIST, List.class);\r
32         for(int i=0;i<8;++i)\r
33             if(i != 1)\r
34                 try {\r
35                     map.put(Types.tupleConstructor(i), \r
36                             Class.forName("org.simantics.scl.runtime.tuple.Tuple" + i));\r
37                 } catch(ClassNotFoundException e) {\r
38                     e.printStackTrace();\r
39                 }\r
40         \r
41         for(TCon con : map.keySet())\r
42             builtins.add(con.name);\r
43     }\r
44     \r
45     public static Class<?> getClass(TCon type) throws TypeNotFoundException {\r
46         Class<?> clazz = map.get(type);\r
47         if(clazz == null) {\r
48             try {\r
49                 clazz = BindingRegistry.getClass(type);\r
50             } catch(TypeNotFoundException e) {\r
51                 e.printStackTrace();\r
52                 throw e;\r
53             }\r
54             map.put(type, clazz);\r
55         }\r
56         return clazz;\r
57     }\r
58     \r
59     public static boolean isBuiltin(String name) {\r
60         return builtins.contains(name);\r
61     }\r
62 }\r