--- /dev/null
+package org.simantics.scl.reflection.internal.typeRegistry;\r
+\r
+import gnu.trove.set.hash.THashSet;\r
+\r
+import java.util.List;\r
+import java.util.concurrent.ConcurrentHashMap;\r
+\r
+import org.simantics.scl.compiler.types.TCon;\r
+import org.simantics.scl.compiler.types.Types;\r
+import org.simantics.scl.reflection.TypeNotFoundException;\r
+import org.simantics.scl.reflection.internal.registry.BindingRegistry;\r
+\r
+public class TypeRegistry {\r
+ private static final ConcurrentHashMap<TCon, Class<?>> map = \r
+ new ConcurrentHashMap<TCon, Class<?>>();\r
+ \r
+ private static final THashSet<String> builtins = new THashSet<String>();\r
+ \r
+ static {\r
+ map.put(Types.BOOLEAN, Boolean.class); \r
+ map.put(Types.BYTE, Byte.class);\r
+ map.put(Types.CHARACTER, Character.class);\r
+ map.put(Types.SHORT, Short.class);\r
+ map.put(Types.INTEGER, Integer.class);\r
+ map.put(Types.LONG, Long.class);\r
+ map.put(Types.FLOAT, Float.class);\r
+ map.put(Types.DOUBLE, Double.class);\r
+ map.put(Types.STRING, String.class);\r
+ map.put(Types.BYTE_ARRAY, byte[].class);\r
+ \r
+ map.put(Types.LIST, List.class);\r
+ for(int i=0;i<8;++i)\r
+ if(i != 1)\r
+ try {\r
+ map.put(Types.tupleConstructor(i), \r
+ Class.forName("org.simantics.scl.runtime.tuple.Tuple" + i));\r
+ } catch(ClassNotFoundException e) {\r
+ e.printStackTrace();\r
+ }\r
+ \r
+ for(TCon con : map.keySet())\r
+ builtins.add(con.name);\r
+ }\r
+ \r
+ public static Class<?> getClass(TCon type) throws TypeNotFoundException {\r
+ Class<?> clazz = map.get(type);\r
+ if(clazz == null) {\r
+ try {\r
+ clazz = BindingRegistry.getClass(type);\r
+ } catch(TypeNotFoundException e) {\r
+ e.printStackTrace();\r
+ throw e;\r
+ }\r
+ map.put(type, clazz);\r
+ }\r
+ return clazz;\r
+ }\r
+ \r
+ public static boolean isBuiltin(String name) {\r
+ return builtins.contains(name);\r
+ }\r
+}\r