]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/header/ModuleHeader.java
(refs #7307) Added features field to SCL module header
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / header / ModuleHeader.java
index 80acf17c571cb242e2db401233525006f118908d..0ab17f83478313ee3f5df5209850ce3178b198ef 100644 (file)
@@ -12,6 +12,7 @@ public class ModuleHeader {
     public long classLoaderLocation;
     public String defaultLocalName;
     public List<EVar> 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<EVar> 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;