]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/StandardModuleInitializer.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / top / StandardModuleInitializer.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/StandardModuleInitializer.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/StandardModuleInitializer.java
new file mode 100644 (file)
index 0000000..60a0f9b
--- /dev/null
@@ -0,0 +1,32 @@
+package org.simantics.scl.compiler.top;\r
+\r
+import java.lang.reflect.Field;\r
+\r
+import org.simantics.scl.compiler.internal.codegen.writer.ExternalConstant;\r
+\r
+public class StandardModuleInitializer implements ModuleInitializer {\r
+    private final String moduleClassName; \r
+    private final ExternalConstant[] externalConstants;\r
+    \r
+    private StandardModuleInitializer(String moduleClassName,\r
+            ExternalConstant[] externalConstants) {\r
+        this.moduleClassName = moduleClassName;\r
+        this.externalConstants = externalConstants;\r
+    }\r
+\r
+    @Override\r
+    public void initializeModule(ClassLoader classLoader) throws Exception {\r
+        Class<?> clazz = classLoader.loadClass(moduleClassName.replace('/', '.'));\r
+        for(ExternalConstant ec : externalConstants) {\r
+            Field field = clazz.getField(ec.fieldName);\r
+            field.set(null, ec.value);\r
+        }\r
+    }\r
+    \r
+    public static ModuleInitializer create(String moduleClassName, ExternalConstant[] externalConstants) {\r
+        if(externalConstants.length == 0)\r
+            return null;\r
+        else\r
+            return new StandardModuleInitializer(moduleClassName, externalConstants);\r
+    }\r
+}\r