]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.graph.compiler/src/org/simantics/graph/compiler/internal/translation/GraphTranslator.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.graph.compiler / src / org / simantics / graph / compiler / internal / translation / GraphTranslator.java
index 71ff4c3328e02ea300f7ba033d40098beebc1f1a..623275277da031167d108b1c5e2503f444b5de64 100644 (file)
-package org.simantics.graph.compiler.internal.translation;\r
-\r
-import gnu.trove.map.hash.TObjectIntHashMap;\r
-import gnu.trove.set.hash.TIntHashSet;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-import org.antlr.runtime.tree.Tree;\r
-import org.simantics.graph.compiler.SourceInfo.DefinitionPosition;\r
-import org.simantics.graph.compiler.internal.parsing.GraphParser;\r
-import org.simantics.graph.compiler.internal.store.LocationStore;\r
-import org.simantics.graph.compiler.internal.store.PreValueStore;\r
-import org.simantics.graph.compiler.internal.templates.TemplateDefinition;\r
-import org.simantics.graph.compiler.internal.templates.TemplateDefinitionStore;\r
-import org.simantics.graph.compiler.internal.templates.TemplateInstanceStore;\r
-import org.simantics.graph.compiler.internal.values.TreeValue;\r
-import org.simantics.graph.query.Paths;\r
-import org.simantics.graph.query.UriUtils;\r
-import org.simantics.graph.store.GraphStore;\r
-import org.simantics.ltk.ISource;\r
-import org.simantics.ltk.Problem;\r
-import org.simantics.ltk.antlr.ANTLRUtils;\r
-\r
-public class GraphTranslator extends GraphStore {\r
-\r
-       ISource source;\r
-       Collection<Problem> problems;\r
-       \r
-       TObjectIntHashMap<String> variables = new TObjectIntHashMap<String>();\r
-       ArrayList<DefinitionPosition> definitionPositions = new ArrayList<DefinitionPosition>();\r
-       TIntHashSet definedResources = new TIntHashSet();\r
-       \r
-       LocationStore locations;\r
-       TemplateInstanceStore templateInstances;\r
-       TemplateDefinitionStore templateDefinitions;\r
-       PreValueStore preValues;\r
-       \r
-       Paths paths;\r
-       int layer0;\r
-       \r
-       public GraphTranslator(Paths paths, Collection<Problem> problems, GraphStore store) {\r
-               super(store);           \r
-               this.problems = problems;\r
-               this.paths = paths;\r
-               \r
-               locations = getStore(LocationStore.class);\r
-               if(locations == null) {\r
-                       locations = new LocationStore();\r
-                       addStore(LocationStore.class, locations);\r
-               }\r
-               \r
-               templateInstances = getStore(TemplateInstanceStore.class);\r
-               if(templateInstances == null) {\r
-                       templateInstances = new TemplateInstanceStore();\r
-                       addStore(TemplateInstanceStore.class, templateInstances);\r
-               }\r
-               \r
-               templateDefinitions = getStore(TemplateDefinitionStore.class);\r
-               if(templateDefinitions == null) {\r
-                       templateDefinitions = new TemplateDefinitionStore();\r
-                       addStore(TemplateDefinitionStore.class, templateDefinitions);\r
-               }\r
-               \r
-               preValues = getStore(PreValueStore.class);\r
-               if(preValues == null) {\r
-                       preValues = new PreValueStore();\r
-                       addStore(PreValueStore.class, preValues);\r
-               }\r
-                       \r
-               layer0 = identities.createPathToId(paths.Layer0);               \r
-       }\r
-       \r
-       public void setSource(ISource source) {\r
-               this.source = source;\r
-       }\r
-       \r
-       public void translateGraph(Tree tree) {         \r
-               int count = tree.getChildCount();\r
-               for(int i=0;i<count;++i)\r
-                       translateResourceDefinition(tree.getChild(i));\r
-       }\r
-\r
-       protected void locate(int resource, Tree tree) {\r
-               locations.add(resource, ANTLRUtils.location(source, tree));\r
-       }\r
-       \r
-       public int translateResourceDefinition(Tree tree) {\r
-               Tree subjectTree = tree.getChild(0);\r
-               int subject = translateResource(subjectTree);\r
-               \r
-               int count = tree.getChildCount();\r
-               for(int i=1;i<count;++i) {\r
-                       Tree child = tree.getChild(i);\r
-                       switch(child.getType()) {\r
-                       case GraphParser.PROPERTY:\r
-                               translateProperty(subject, subjectTree, child);\r
-                               break;\r
-                       case GraphParser.TEMPLATE_INSTANCE:\r
-                               translateTemplateInstance(subject, child);\r
-                               break;\r
-                       case GraphParser.TEMPLATE_DEFINITION:\r
-                               translateTemplateDefinition(subject, child);\r
-                               break;\r
-                       }\r
-               }\r
-               return subject;\r
-       }\r
-\r
-       private void translateProperty(int subject, Tree subjectTree, Tree tree) {\r
-               int predicate = translateResource(tree.getChild(0));\r
-               if(predicate == instanceOfId || predicate == inheritsId || predicate == subrelationOfId)\r
-                       if(definedResources.add(subject)) {                             \r
-                       definitionPositions.add(new DefinitionPosition(subject,\r
-                                       ANTLRUtils.getStartLine(subjectTree) + source.startLine(),\r
-                                       ANTLRUtils.getStartIndex(subjectTree) + source.startPos(),\r
-                                       ANTLRUtils.getStopIndex(subjectTree) + source.startPos()\r
-                       ));\r
-                       }\r
-               int count = tree.getChildCount();\r
-               for(int i=1;i<count;++i) {\r
-                       int object = translateResourceDefinition(tree.getChild(i));\r
-                       statements.add(subject, predicate, object);\r
-               }\r
-       }       \r
-        \r
-       private void translateTemplateInstance(int subject, Tree tree) {\r
-               int parameterCount = tree.getChildCount();\r
-               int[] templateInstance = new int[parameterCount+1];\r
-               templateInstance[0] = translateResource(tree.getChild(0));\r
-               templateInstance[1] = subject;\r
-               for(int i=1;i<parameterCount;++i) {\r
-                       Tree child = tree.getChild(i);\r
-                       if(child.getType() == GraphParser.RESOURCE)\r
-                               templateInstance[i+1] = translateResourceDefinition(child);\r
-                       else\r
-                               templateInstance[i+1] = translateResource(child);\r
-               }\r
-               templateInstances.add(templateInstance);\r
-       }       \r
-       \r
-       private void translateTemplateDefinition(int subject, Tree tree) {\r
-               ArrayList<String> parameters = new ArrayList<String>(); \r
-\r
-               int i=0;\r
-               while(i < tree.getChildCount() && \r
-                               tree.getChild(i).getType() == GraphParser.VARIABLE) {\r
-                       parameters.add(tree.getChild(i).getChild(0).getText());\r
-                       ++i;\r
-               }\r
-\r
-               GraphStore store = new GraphStore();\r
-               ChildGraphTranslator translator = new ChildGraphTranslator(this, store);\r
-               translator.setSource(source);\r
-               while(i < tree.getChildCount()) {\r
-                       translator.translateResourceDefinition(tree.getChild(i));\r
-                       ++i;\r
-               }       \r
-               \r
-               templateDefinitions.add(subject, \r
-                               new TemplateDefinition(parameters.toArray(new String[parameters.size()]), \r
-                                               translator.correspondences.toArray(), \r
-                                               store));\r
-       }\r
-\r
-       public static void printTree(Tree tree) {\r
-               printTree(0, tree);\r
-       }\r
-       \r
-       int equalsId = 0;\r
-       int inheritsId = 0;\r
-       int subrelationOfId = 0;\r
-       int instanceOfId = 0;\r
-       int hasDomainId = 0;\r
-       int hasRangeId = 0;\r
-       int domainOfId = 0;\r
-       int requiresValueTypeId = 0;\r
-       int DatatypeId = 0;\r
-       \r
-       private int translateResource(Tree tree) {\r
-               switch(tree.getType()) {\r
-               case GraphParser.EMBEDDED_VALUE: {\r
-                       int id = identities.newResource();\r
-                       preValues.setValue(id, new TreeValue(source, tree.getChild(0)));\r
-                       locate(id, tree.getChild(0));\r
-                       return id;\r
-               }\r
-               case GraphParser.EMBEDDED_TYPE: {\r
-                       int DataType = identities.newResource();\r
-                       values.setValue(DataType, new DataTypeTranslator(source, problems).translate(tree.getChild(0)));\r
-                       if(instanceOfId == 0)\r
-                               instanceOfId = identities.getChild(layer0, "InstanceOf");\r
-                       if(DatatypeId == 0)\r
-                               DatatypeId = identities.getChild(layer0, "DataType");\r
-                       statements.add(DataType, instanceOfId, DatatypeId);\r
-                       locate(DataType, tree.getChild(0));\r
-                       return DataType;\r
-               }\r
-               case GraphParser.BLANK: {\r
-                       int id = identities.newResource();\r
-                       locate(id, tree);\r
-                       return id;\r
-               }\r
-               case GraphParser.ID:\r
-                       return getVariable(tree, tree.getText());\r
-               case GraphParser.VARIABLE: {\r
-                       int id = identities.getRoot(tree.getChild(0).getText());\r
-                       locate(id, tree);\r
-                       return id;\r
-               }\r
-               case GraphParser.URI: {\r
-                       String uri = tree.getText();\r
-                       uri = uri.substring(1, uri.length()-1);\r
-                       int id = identities.createPathToId(UriUtils.uriToPath(uri));\r
-                       locate(id, tree);\r
-                       return id;\r
-               }\r
-               case GraphParser.REF: {\r
-                       int parent = translateResource(tree.getChild(0));\r
-                       Tree nameNode = tree.getChild(1);\r
-                       String name = nameNode.getText();\r
-                       if(nameNode.getType() == GraphParser.STRING) {\r
-                               name = name.substring(1, name.length()-1);\r
-                       }\r
-                       int id = identities.getChild(parent, name);\r
-                       locate(id, tree);\r
-                       return id;\r
-               }\r
-               case GraphParser.EQUALS:\r
-                       if(equalsId == 0)\r
-                               equalsId = identities.getChild(layer0, "Equals");\r
-                       return equalsId;\r
-               case GraphParser.INHERITS:\r
-                       if(inheritsId == 0)\r
-                               inheritsId = identities.getChild(layer0, "Inherits");\r
-                       return inheritsId;\r
-               case GraphParser.SUBRELATION_OF:\r
-                       if(subrelationOfId == 0)\r
-                               subrelationOfId = identities.getChild(layer0, "SubrelationOf");\r
-                       return subrelationOfId;\r
-               case GraphParser.INSTANCE_OF:\r
-                       if(instanceOfId == 0)\r
-                               instanceOfId = identities.getChild(layer0, "InstanceOf");\r
-                       return instanceOfId;            \r
-               case GraphParser.HAS_DOMAIN:\r
-            if(hasDomainId == 0)\r
-                hasDomainId = identities.getChild(layer0, "HasDomain");\r
-            return hasDomainId;                        \r
-               case GraphParser.HAS_RANGE:\r
-            if(hasRangeId == 0)\r
-                hasRangeId = identities.getChild(layer0, "HasRange");\r
-            return hasRangeId;\r
-               case GraphParser.DOMAIN_OF:\r
-            if(domainOfId == 0)\r
-                domainOfId = identities.getChild(layer0, "DomainOf");\r
-            return domainOfId;     \r
-        case GraphParser.REQUIRES_VALUE_TYPE:\r
-            if(requiresValueTypeId == 0)\r
-                requiresValueTypeId = identities.getChild(layer0, "RequiresValueType");\r
-            return requiresValueTypeId;            \r
-               default: \r
-                       // TODO\r
-                       System.out.println("-- " + GraphParser.tokenNames[tree.getType()]);\r
-                       printTree(tree);\r
-                       return 0;\r
-               }               \r
-       }\r
-\r
-       public int getVariable(Tree place, String text) {\r
-               if(variables.containsKey(text))\r
-                       return variables.get(text);\r
-               else {\r
-                       int id = identities.newResource();\r
-                       variables.put(text, id);\r
-                       locate(id, place);\r
-                       return id;\r
-               }\r
-       }\r
-       \r
-       public TObjectIntHashMap<String> getVariables() {\r
-               return variables;\r
-       }\r
-       \r
-       public ArrayList<DefinitionPosition> getDefinitionPositions() {\r
-               return definitionPositions;\r
-       }\r
-\r
-       public static void printTree(int indent, Tree tree) {\r
-               for(int i=0;i<indent;++i)\r
-                       System.out.print("  ");\r
-               System.out.println(tree.getText());\r
-               for(int i=0;i<tree.getChildCount();++i)\r
-                       printTree(indent+1, tree.getChild(i));\r
-       }       \r
-}\r
+package org.simantics.graph.compiler.internal.translation;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.TIntHashSet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.antlr.runtime.tree.Tree;
+import org.simantics.graph.compiler.SourceInfo.DefinitionPosition;
+import org.simantics.graph.compiler.internal.parsing.GraphParser;
+import org.simantics.graph.compiler.internal.store.LocationStore;
+import org.simantics.graph.compiler.internal.store.PreValueStore;
+import org.simantics.graph.compiler.internal.templates.TemplateDefinition;
+import org.simantics.graph.compiler.internal.templates.TemplateDefinitionStore;
+import org.simantics.graph.compiler.internal.templates.TemplateInstanceStore;
+import org.simantics.graph.compiler.internal.values.TreeValue;
+import org.simantics.graph.query.Paths;
+import org.simantics.graph.query.UriUtils;
+import org.simantics.graph.store.GraphStore;
+import org.simantics.ltk.ISource;
+import org.simantics.ltk.Problem;
+import org.simantics.ltk.antlr.ANTLRUtils;
+
+public class GraphTranslator extends GraphStore {
+
+       ISource source;
+       Collection<Problem> problems;
+       
+       TObjectIntHashMap<String> variables = new TObjectIntHashMap<String>();
+       ArrayList<DefinitionPosition> definitionPositions = new ArrayList<DefinitionPosition>();
+       TIntHashSet definedResources = new TIntHashSet();
+       
+       LocationStore locations;
+       TemplateInstanceStore templateInstances;
+       TemplateDefinitionStore templateDefinitions;
+       PreValueStore preValues;
+       
+       Paths paths;
+       int layer0;
+       
+       public GraphTranslator(Paths paths, Collection<Problem> problems, GraphStore store) {
+               super(store);           
+               this.problems = problems;
+               this.paths = paths;
+               
+               locations = getStore(LocationStore.class);
+               if(locations == null) {
+                       locations = new LocationStore();
+                       addStore(LocationStore.class, locations);
+               }
+               
+               templateInstances = getStore(TemplateInstanceStore.class);
+               if(templateInstances == null) {
+                       templateInstances = new TemplateInstanceStore();
+                       addStore(TemplateInstanceStore.class, templateInstances);
+               }
+               
+               templateDefinitions = getStore(TemplateDefinitionStore.class);
+               if(templateDefinitions == null) {
+                       templateDefinitions = new TemplateDefinitionStore();
+                       addStore(TemplateDefinitionStore.class, templateDefinitions);
+               }
+               
+               preValues = getStore(PreValueStore.class);
+               if(preValues == null) {
+                       preValues = new PreValueStore();
+                       addStore(PreValueStore.class, preValues);
+               }
+                       
+               layer0 = identities.createPathToId(paths.Layer0);               
+       }
+       
+       public void setSource(ISource source) {
+               this.source = source;
+       }
+       
+       public void translateGraph(Tree tree) {         
+               int count = tree.getChildCount();
+               for(int i=0;i<count;++i)
+                       translateResourceDefinition(tree.getChild(i));
+       }
+
+       protected void locate(int resource, Tree tree) {
+               locations.add(resource, ANTLRUtils.location(source, tree));
+       }
+       
+       public int translateResourceDefinition(Tree tree) {
+               Tree subjectTree = tree.getChild(0);
+               int subject = translateResource(subjectTree);
+               
+               int count = tree.getChildCount();
+               for(int i=1;i<count;++i) {
+                       Tree child = tree.getChild(i);
+                       switch(child.getType()) {
+                       case GraphParser.PROPERTY:
+                               translateProperty(subject, subjectTree, child);
+                               break;
+                       case GraphParser.TEMPLATE_INSTANCE:
+                               translateTemplateInstance(subject, child);
+                               break;
+                       case GraphParser.TEMPLATE_DEFINITION:
+                               translateTemplateDefinition(subject, child);
+                               break;
+                       }
+               }
+               return subject;
+       }
+
+       private void translateProperty(int subject, Tree subjectTree, Tree tree) {
+               int predicate = translateResource(tree.getChild(0));
+               if(predicate == instanceOfId || predicate == inheritsId || predicate == subrelationOfId)
+                       if(definedResources.add(subject)) {                             
+                       definitionPositions.add(new DefinitionPosition(subject,
+                                       ANTLRUtils.getStartLine(subjectTree) + source.startLine(),
+                                       ANTLRUtils.getStartIndex(subjectTree) + source.startPos(),
+                                       ANTLRUtils.getStopIndex(subjectTree) + source.startPos()
+                       ));
+                       }
+               int count = tree.getChildCount();
+               for(int i=1;i<count;++i) {
+                       int object = translateResourceDefinition(tree.getChild(i));
+                       statements.add(subject, predicate, object);
+               }
+       }       
+        
+       private void translateTemplateInstance(int subject, Tree tree) {
+               int parameterCount = tree.getChildCount();
+               int[] templateInstance = new int[parameterCount+1];
+               templateInstance[0] = translateResource(tree.getChild(0));
+               templateInstance[1] = subject;
+               for(int i=1;i<parameterCount;++i) {
+                       Tree child = tree.getChild(i);
+                       if(child.getType() == GraphParser.RESOURCE)
+                               templateInstance[i+1] = translateResourceDefinition(child);
+                       else
+                               templateInstance[i+1] = translateResource(child);
+               }
+               templateInstances.add(templateInstance);
+       }       
+       
+       private void translateTemplateDefinition(int subject, Tree tree) {
+               ArrayList<String> parameters = new ArrayList<String>(); 
+
+               int i=0;
+               while(i < tree.getChildCount() && 
+                               tree.getChild(i).getType() == GraphParser.VARIABLE) {
+                       parameters.add(tree.getChild(i).getChild(0).getText());
+                       ++i;
+               }
+
+               GraphStore store = new GraphStore();
+               ChildGraphTranslator translator = new ChildGraphTranslator(this, store);
+               translator.setSource(source);
+               while(i < tree.getChildCount()) {
+                       translator.translateResourceDefinition(tree.getChild(i));
+                       ++i;
+               }       
+               
+               templateDefinitions.add(subject, 
+                               new TemplateDefinition(parameters.toArray(new String[parameters.size()]), 
+                                               translator.correspondences.toArray(), 
+                                               store));
+       }
+
+       public static void printTree(Tree tree) {
+               printTree(0, tree);
+       }
+       
+       int equalsId = 0;
+       int inheritsId = 0;
+       int subrelationOfId = 0;
+       int instanceOfId = 0;
+       int hasDomainId = 0;
+       int hasRangeId = 0;
+       int domainOfId = 0;
+       int requiresValueTypeId = 0;
+       int DatatypeId = 0;
+       
+       private int translateResource(Tree tree) {
+               switch(tree.getType()) {
+               case GraphParser.EMBEDDED_VALUE: {
+                       int id = identities.newResource();
+                       preValues.setValue(id, new TreeValue(source, tree.getChild(0)));
+                       locate(id, tree.getChild(0));
+                       return id;
+               }
+               case GraphParser.EMBEDDED_TYPE: {
+                       int DataType = identities.newResource();
+                       values.setValue(DataType, new DataTypeTranslator(source, problems).translate(tree.getChild(0)));
+                       if(instanceOfId == 0)
+                               instanceOfId = identities.getChild(layer0, "InstanceOf");
+                       if(DatatypeId == 0)
+                               DatatypeId = identities.getChild(layer0, "DataType");
+                       statements.add(DataType, instanceOfId, DatatypeId);
+                       locate(DataType, tree.getChild(0));
+                       return DataType;
+               }
+               case GraphParser.BLANK: {
+                       int id = identities.newResource();
+                       locate(id, tree);
+                       return id;
+               }
+               case GraphParser.ID:
+                       return getVariable(tree, tree.getText());
+               case GraphParser.VARIABLE: {
+                       int id = identities.getRoot(tree.getChild(0).getText());
+                       locate(id, tree);
+                       return id;
+               }
+               case GraphParser.URI: {
+                       String uri = tree.getText();
+                       uri = uri.substring(1, uri.length()-1);
+                       int id = identities.createPathToId(UriUtils.uriToPath(uri));
+                       locate(id, tree);
+                       return id;
+               }
+               case GraphParser.REF: {
+                       int parent = translateResource(tree.getChild(0));
+                       Tree nameNode = tree.getChild(1);
+                       String name = nameNode.getText();
+                       if(nameNode.getType() == GraphParser.STRING) {
+                               name = name.substring(1, name.length()-1);
+                       }
+                       int id = identities.getChild(parent, name);
+                       locate(id, tree);
+                       return id;
+               }
+               case GraphParser.EQUALS:
+                       if(equalsId == 0)
+                               equalsId = identities.getChild(layer0, "Equals");
+                       return equalsId;
+               case GraphParser.INHERITS:
+                       if(inheritsId == 0)
+                               inheritsId = identities.getChild(layer0, "Inherits");
+                       return inheritsId;
+               case GraphParser.SUBRELATION_OF:
+                       if(subrelationOfId == 0)
+                               subrelationOfId = identities.getChild(layer0, "SubrelationOf");
+                       return subrelationOfId;
+               case GraphParser.INSTANCE_OF:
+                       if(instanceOfId == 0)
+                               instanceOfId = identities.getChild(layer0, "InstanceOf");
+                       return instanceOfId;            
+               case GraphParser.HAS_DOMAIN:
+            if(hasDomainId == 0)
+                hasDomainId = identities.getChild(layer0, "HasDomain");
+            return hasDomainId;                        
+               case GraphParser.HAS_RANGE:
+            if(hasRangeId == 0)
+                hasRangeId = identities.getChild(layer0, "HasRange");
+            return hasRangeId;
+               case GraphParser.DOMAIN_OF:
+            if(domainOfId == 0)
+                domainOfId = identities.getChild(layer0, "DomainOf");
+            return domainOfId;     
+        case GraphParser.REQUIRES_VALUE_TYPE:
+            if(requiresValueTypeId == 0)
+                requiresValueTypeId = identities.getChild(layer0, "RequiresValueType");
+            return requiresValueTypeId;            
+               default: 
+                       // TODO
+                       System.out.println("-- " + GraphParser.tokenNames[tree.getType()]);
+                       printTree(tree);
+                       return 0;
+               }               
+       }
+
+       public int getVariable(Tree place, String text) {
+               if(variables.containsKey(text))
+                       return variables.get(text);
+               else {
+                       int id = identities.newResource();
+                       variables.put(text, id);
+                       locate(id, place);
+                       return id;
+               }
+       }
+       
+       public TObjectIntHashMap<String> getVariables() {
+               return variables;
+       }
+       
+       public ArrayList<DefinitionPosition> getDefinitionPositions() {
+               return definitionPositions;
+       }
+
+       public static void printTree(int indent, Tree tree) {
+               for(int i=0;i<indent;++i)
+                       System.out.print("  ");
+               System.out.println(tree.getText());
+               for(int i=0;i<tree.getChildCount();++i)
+                       printTree(indent+1, tree.getChild(i));
+       }       
+}