1 package org.simantics.scl.reflection.internal.typeRegistry;
3 import gnu.trove.set.hash.THashSet;
6 import java.util.concurrent.ConcurrentHashMap;
8 import org.simantics.scl.compiler.types.TCon;
9 import org.simantics.scl.compiler.types.Types;
10 import org.simantics.scl.reflection.TypeNotFoundException;
11 import org.simantics.scl.reflection.internal.registry.BindingRegistry;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
15 public class TypeRegistry {
17 private static final Logger LOGGER = LoggerFactory.getLogger(TypeRegistry.class);
19 private static final ConcurrentHashMap<TCon, Class<?>> map =
20 new ConcurrentHashMap<TCon, Class<?>>();
22 private static final THashSet<String> builtins = new THashSet<String>();
25 map.put(Types.BOOLEAN, Boolean.class);
26 map.put(Types.BYTE, Byte.class);
27 map.put(Types.CHARACTER, Character.class);
28 map.put(Types.SHORT, Short.class);
29 map.put(Types.INTEGER, Integer.class);
30 map.put(Types.LONG, Long.class);
31 map.put(Types.FLOAT, Float.class);
32 map.put(Types.DOUBLE, Double.class);
33 map.put(Types.STRING, String.class);
35 map.put(Types.LIST, List.class);
39 map.put(Types.tupleConstructor(i),
40 Class.forName("org.simantics.scl.runtime.tuple.Tuple" + i));
41 } catch(ClassNotFoundException e) {
42 LOGGER.error("Could not find class for {}", i, e);
45 for(TCon con : map.keySet())
46 builtins.add(con.name);
49 public static Class<?> getClass(TCon type) throws TypeNotFoundException {
50 Class<?> clazz = map.get(type);
53 clazz = BindingRegistry.getClass(type);
54 } catch(TypeNotFoundException e) {
55 LOGGER.error("Could not get class for type {}", type, e);
63 public static boolean isBuiltin(String name) {
64 return builtins.contains(name);