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%2Finternal%2Fheader%2FModuleHeader.java;h=0ab17f83478313ee3f5df5209850ce3178b198ef;hp=80acf17c571cb242e2db401233525006f118908d;hb=6573b29e111ea03c3fa88bf1565d47d0fc4faabd;hpb=bf5f7cda1b9b64484cc6e53499e38d6785744aec diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java index 80acf17c5..0ab17f834 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java @@ -12,6 +12,7 @@ public class ModuleHeader { public long classLoaderLocation; public String defaultLocalName; public List export; + // Features public boolean chr; public boolean fields; @@ -32,37 +33,47 @@ public class ModuleHeader { break; case "export": if(assignment.value == null) - errorLog.log(assignment.location, "Property export needs to be given a string list value."); + errorLog.log(assignment.location, "Property export needs to be given a list of exported symbols."); else { export = AnnotationUtils.extractIdentifierList(assignment.value); if(export == null) - errorLog.log(assignment.value.location, "Expected a list of exported items."); + errorLog.log(assignment.value.location, "Expected a list of exported symbols."); + } + break; + case "features": + if(assignment.value == null) + errorLog.log(assignment.location, "Property features needs to be given a list of features (identifiers)."); + else { + List features = AnnotationUtils.extractIdentifierList(assignment.value); + if(features == null) + errorLog.log(assignment.value.location, "Expected a list of features (identifiers)."); + for(EVar feature : features) + handleFeature(errorLog, feature); } break; case "defaultLocalName": - if(assignment.value == null) + if(assignment.value == null) errorLog.log(assignment.location, "Property defaultLocalName needs to be given a string value."); - else { - defaultLocalName = AnnotationUtils.extractString(assignment.value); - if(defaultLocalName == null) - errorLog.log(assignment.value.location, "Expected string here."); - } - break; - case "fields": - if(assignment.value != null) - errorLog.log(assignment.location, "No value expected for property fields."); - this.fields = true; + else { + defaultLocalName = AnnotationUtils.extractString(assignment.value); + if(defaultLocalName == null) + errorLog.log(assignment.value.location, "Expected string here."); + } break; - case "chr": - if(assignment.value != null) - errorLog.log(assignment.location, "No value expected for property chr."); - this.chr = true; - break; default: errorLog.logWarning(assignment.location, "Unknown module header field was skipped."); } } + private void handleFeature(ErrorLog errorLog, EVar feature) { + switch(feature.name) { + case "chr": chr = true; break; + case "fields": fields = true; break; + default: + errorLog.log(feature.location, "Unknown feature " + feature.name + "."); + } + } + public static ModuleHeader process(ErrorLog errorLog, FieldAssignment[] fields) { if(fields == null) return null;