X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fcompilation%2FDeclarationClassification.java;h=ed21f04b2951c9f8bbd8e16ae75c3c7c114c3669;hp=7c6d53ac8f698171b3275f533925afb68bee1698;hb=3216affb4ed0e73a5601be223638f4f1a41fb26a;hpb=7045f0f516c243563976207abcec13a68891ff1d diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/DeclarationClassification.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/DeclarationClassification.java index 7c6d53ac8..ed21f04b2 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/DeclarationClassification.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/DeclarationClassification.java @@ -25,6 +25,7 @@ import org.simantics.scl.compiler.internal.parsing.declarations.DInstanceAst; import org.simantics.scl.compiler.internal.parsing.declarations.DMappingRelationAst; import org.simantics.scl.compiler.internal.parsing.declarations.DRelationAst; import org.simantics.scl.compiler.internal.parsing.declarations.DRuleAst; +import org.simantics.scl.compiler.internal.parsing.declarations.DRulesetAst; import org.simantics.scl.compiler.internal.parsing.declarations.DTypeAst; import org.simantics.scl.compiler.internal.parsing.declarations.DValueAst; import org.simantics.scl.compiler.internal.parsing.declarations.DValueTypeAst; @@ -38,36 +39,37 @@ import org.simantics.scl.compiler.module.ImportDeclaration; import gnu.trove.map.hash.THashMap; public class DeclarationClassification { - ArrayList importsAst = new ArrayList(); - ArrayList dataTypesAst = new ArrayList(); - ArrayList typeAliasesAst = new ArrayList(); - ValueRepository valueDefinitionsAst = new ValueRepository(); - RelationRepository relationDefinitionsAst = new RelationRepository(); - ArrayList typeAnnotationsAst = new ArrayList(); - ArrayList fixityAst = new ArrayList(); - ArrayList typeClassesAst = new ArrayList(); - ArrayList instancesAst = new ArrayList(); - ArrayList derivingInstancesAst = new ArrayList(); - ArrayList effectsAst = new ArrayList(); - ArrayList rulesAst = new ArrayList(); - ArrayList mappingRelationsAst = new ArrayList(); + public ArrayList importsAst = new ArrayList(); + public ArrayList dataTypesAst = new ArrayList(); + public ArrayList typeAliasesAst = new ArrayList(); + public ValueRepository valueDefinitionsAst = new ValueRepository(); + public RelationRepository relationDefinitionsAst = new RelationRepository(); + public ArrayList typeAnnotationsAst = new ArrayList(); + public ArrayList fixityAst = new ArrayList(); + public ArrayList typeClassesAst = new ArrayList(); + public ArrayList instancesAst = new ArrayList(); + public ArrayList derivingInstancesAst = new ArrayList(); + public ArrayList effectsAst = new ArrayList(); + public ArrayList rulesAst = new ArrayList(); + public ArrayList mappingRelationsAst = new ArrayList(); + public ArrayList rulesetsAst = new ArrayList(); - THashMap valueDocumentation = new THashMap(); - THashMap relationDocumentation = new THashMap(); - THashMap typeDocumentation = new THashMap(); - THashMap classDocumentation = new THashMap(); + public THashMap valueDocumentation = new THashMap(); + public THashMap relationDocumentation = new THashMap(); + public THashMap typeDocumentation = new THashMap(); + public THashMap classDocumentation = new THashMap(); - ArrayList javaMethodDeclarations = new ArrayList(); + public ArrayList javaMethodDeclarations = new ArrayList(); - StringBuilder moduleDocumentation = new StringBuilder(); + public StringBuilder moduleDocumentation = new StringBuilder(); - ArrayList currentAnnotations = new ArrayList(2); - DDocumentationAst documentation; - String inJavaClass; + public ArrayList currentAnnotations = new ArrayList(2); + public DDocumentationAst documentation; + public String inJavaClass; - ArrayList defaultAnnotations = new ArrayList(); + public ArrayList defaultAnnotations = new ArrayList(); - ErrorLog errorLog; + public ErrorLog errorLog; public DeclarationClassification(CompilationContext compilationContext) { this.errorLog = compilationContext.errorLog; @@ -106,6 +108,8 @@ public class DeclarationClassification { handle((DMappingRelationAst)declaration); else if(declaration instanceof DRelationAst) handle((DRelationAst)declaration); + else if(declaration instanceof DRulesetAst) + handle((DRulesetAst)declaration); else throw new InternalCompilerError("Unknown declaration " + declaration.getClass().getSimpleName()); } @@ -186,7 +190,7 @@ public class DeclarationClassification { importsAst.add(declaration); } - public void handle(DImportJavaAst declaration) { + public void handle(DImportJavaAst declaration) { if(!currentAnnotations.isEmpty()) { for(DAnnotationAst annotation : currentAnnotations) { String name = annotation.id.text; @@ -342,11 +346,19 @@ public class DeclarationClassification { } } + public void handle(DRulesetAst declaration) { + if(documentation != null) { + declaration.documentation = documentation; + documentation = null; + } + rulesetsAst.add(declaration); + } + public void handle(DDocumentationAst declaration) { if(documentation != null) { errorLog.log(documentation.location, "Invalid documentation string. It precedes another documentation string."); } - documentation = declaration; + documentation = declaration; } public void handle(DAnnotationAst declaration) {