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=4bf5d847e8d8d745cd62c294ec51e8d786dbf6c2;hp=6c2befb5cdb15c2e72d171cfbc88c0c3663b6972;hb=78f577368ba4c71ad6fb3d9f16c03c634585cf7b;hpb=fa9b9d56a9a16226e6409724cedfbbe94463b301 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 6c2befb5c..4bf5d847e 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; @@ -34,14 +35,10 @@ import org.simantics.scl.compiler.internal.parsing.translation.ProcessedDInstanc import org.simantics.scl.compiler.internal.parsing.translation.RelationRepository; import org.simantics.scl.compiler.internal.parsing.translation.ValueRepository; import org.simantics.scl.compiler.module.ImportDeclaration; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import gnu.trove.map.hash.THashMap; public class DeclarationClassification { - private static final Logger LOGGER = LoggerFactory.getLogger(DeclarationClassification.class); - ArrayList importsAst = new ArrayList(); ArrayList dataTypesAst = new ArrayList(); ArrayList typeAliasesAst = new ArrayList(); @@ -55,6 +52,7 @@ public class DeclarationClassification { ArrayList effectsAst = new ArrayList(); ArrayList rulesAst = new ArrayList(); ArrayList mappingRelationsAst = new ArrayList(); + ArrayList rulesetsAst = new ArrayList(); THashMap valueDocumentation = new THashMap(); THashMap relationDocumentation = new THashMap(); @@ -110,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()); } @@ -241,7 +241,7 @@ public class DeclarationClassification { currentAnnotations = new ArrayList(2); } if(declaration.name.name.equals("Eq") || declaration.name.name.equals("Hashable")) { - LOGGER.warn("Skipped instance definition for " + declaration.name + " for " + declaration.types[0]); + errorLog.logWarning(declaration.location, "Skipped instance definition for " + declaration.name + " for " + declaration.types[0]); return; } instancesAst.add(new ProcessedDInstanceAst( @@ -255,7 +255,7 @@ public class DeclarationClassification { currentAnnotations = new ArrayList(2); } if(declaration.name.name.equals("Eq") || declaration.name.name.equals("Hashable")) { - LOGGER.warn("Skipped instance definition for " + declaration.name + " for " + declaration.types[0]); + errorLog.logWarning(declaration.location, "Skipped instance definition for " + declaration.name + " for " + declaration.types[0]); return; } derivingInstancesAst.add(declaration); @@ -346,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) {