]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.reflection/src/org/simantics/scl/reflection/internal/typeRegistry/TypeRegistry.java
Getting rid of *Array and replace with Vector * (SCL)
[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;
2
3 import gnu.trove.set.hash.THashSet;
4
5 import java.util.List;
6 import java.util.concurrent.ConcurrentHashMap;
7
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;
14
15 public class TypeRegistry {
16
17     private static final Logger LOGGER = LoggerFactory.getLogger(TypeRegistry.class);
18
19     private static final ConcurrentHashMap<TCon, Class<?>> map = 
20             new ConcurrentHashMap<TCon, Class<?>>();
21     
22     private static final THashSet<String> builtins = new THashSet<String>();
23     
24     static {
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);
34         
35         map.put(Types.LIST, List.class);
36         for(int i=0;i<8;++i)
37             if(i != 1)
38                 try {
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);
43                 }
44         
45         for(TCon con : map.keySet())
46             builtins.add(con.name);
47     }
48     
49     public static Class<?> getClass(TCon type) throws TypeNotFoundException {
50         Class<?> clazz = map.get(type);
51         if(clazz == null) {
52             try {
53                 clazz = BindingRegistry.getClass(type);
54             } catch(TypeNotFoundException e) {
55                 LOGGER.error("Could not get class for type {}", type, e);
56                 throw e;
57             }
58             map.put(type, clazz);
59         }
60         return clazz;
61     }
62     
63     public static boolean isBuiltin(String name) {
64         return builtins.contains(name);
65     }
66 }