]> gerrit.simantics Code Review - simantics/platform.git/blob
d94d6c12345510e39c4f8c438c38836415c0ebac
[simantics/platform.git] /
1 package org.simantics.scl.compiler.internal.parsing.translation;\r
2 \r
3 import gnu.trove.map.hash.THashMap;\r
4 \r
5 import java.util.ArrayList;\r
6 import java.util.Collection;\r
7 \r
8 import org.simantics.scl.compiler.elaboration.errors.NotPatternException;\r
9 import org.simantics.scl.compiler.internal.parsing.declarations.DAnnotationAst;\r
10 import org.simantics.scl.compiler.internal.parsing.declarations.DRelationAst;\r
11 \r
12 public class RelationRepository {\r
13     THashMap<String, ArrayList<DRelationAst>> relations = \r
14             new THashMap<String, ArrayList<DRelationAst>>();\r
15     THashMap<String, ArrayList<DAnnotationAst>> annotations = \r
16             new THashMap<String, ArrayList<DAnnotationAst>>();\r
17             \r
18     public String add(DRelationAst relation) throws NotPatternException {\r
19         String name = relation.lhs.getPatternHead().name;\r
20         ArrayList<DRelationAst> vs = relations.get(name);\r
21         if(vs == null) {\r
22             vs = new ArrayList<DRelationAst>(2);\r
23             relations.put(name, vs);\r
24         }\r
25         vs.add(relation);\r
26         return name;\r
27     }\r
28     \r
29     public void addDefinitions(String name, ArrayList<DRelationAst> relationList) {\r
30         ArrayList<DRelationAst> vs = relations.get(name);\r
31         if(vs == null) {\r
32             vs = new ArrayList<DRelationAst>(relationList.size());\r
33             relations.put(name, vs);\r
34         }\r
35         vs.addAll(relationList);\r
36     }\r
37     \r
38     public void addAnnotation(String name, DAnnotationAst annotation) {\r
39         ArrayList<DAnnotationAst> as = annotations.get(name);\r
40         if(as == null) {\r
41             as = new ArrayList<DAnnotationAst>(2);\r
42             annotations.put(name, as);\r
43         }\r
44         as.add(annotation);\r
45     }\r
46     \r
47     public void addAnnotations(String name, ArrayList<DAnnotationAst> annotationList) {\r
48         ArrayList<DAnnotationAst> as = annotations.get(name);\r
49         if(as == null) {\r
50             as = new ArrayList<DAnnotationAst>(annotationList.size());\r
51             annotations.put(name, as);\r
52         }\r
53         as.addAll(annotationList);\r
54     }\r
55     \r
56     public Collection<String> getRelationNames() {\r
57         return relations.keySet();\r
58     }\r
59 \r
60     public ArrayList<DRelationAst> getDefinition(String name) {\r
61         return relations.get(name);\r
62     }\r
63 \r
64     public ArrayList<DAnnotationAst> getAnnotations(String name) {\r
65         return annotations.get(name);\r
66     }\r
67 \r
68     public void addFrom(RelationRepository repo, String oldName, String newName) {\r
69         addDefinitions(newName, repo.getDefinition(oldName));\r
70         \r
71         ArrayList<DAnnotationAst> as = repo.getAnnotations(oldName);\r
72         if(as != null)\r
73             addAnnotations(newName, as);\r
74     }\r
75 }\r