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%2Ftop%2FStandardModuleInitializer.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Ftop%2FStandardModuleInitializer.java;h=60a0f9b1f161883f31d486ffebfe84006678a7d8;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 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 index 000000000..60a0f9b1f --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/StandardModuleInitializer.java @@ -0,0 +1,32 @@ +package org.simantics.scl.compiler.top; + +import java.lang.reflect.Field; + +import org.simantics.scl.compiler.internal.codegen.writer.ExternalConstant; + +public class StandardModuleInitializer implements ModuleInitializer { + private final String moduleClassName; + private final ExternalConstant[] externalConstants; + + private StandardModuleInitializer(String moduleClassName, + ExternalConstant[] externalConstants) { + this.moduleClassName = moduleClassName; + this.externalConstants = externalConstants; + } + + @Override + public void initializeModule(ClassLoader classLoader) throws Exception { + Class clazz = classLoader.loadClass(moduleClassName.replace('/', '.')); + for(ExternalConstant ec : externalConstants) { + Field field = clazz.getField(ec.fieldName); + field.set(null, ec.value); + } + } + + public static ModuleInitializer create(String moduleClassName, ExternalConstant[] externalConstants) { + if(externalConstants.length == 0) + return null; + else + return new StandardModuleInitializer(moduleClassName, externalConstants); + } +}