import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor;
import org.simantics.scl.compiler.module.repository.ModuleRepository;
+import org.simantics.scl.compiler.runtime.ExpressionClassLoader;
+import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
import org.simantics.scl.compiler.runtime.RuntimeModule;
import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
import org.simantics.scl.compiler.testing.repository.TestRepository;
return null;
}
- public static String compileAllModules2() {
+ public static String primeClassloading() {
ArrayList<String> modulesWithErrors = new ArrayList<String>();
SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
@Override
public boolean execute(String moduleName) {
- System.out.print(moduleName);
- System.out.print(" - ");
- Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
- if(module.didSucceed()) {
- System.out.println("succeeded");
- } else if(module == DoesNotExist.INSTANCE)
- System.out.println("does not exist"); // should not happen
- else {
- System.out.println("error");
- modulesWithErrors.add(moduleName);
- }
- return true;
- }
- });
- SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
- @Override
- public boolean execute(String moduleName) {
- System.out.print(moduleName);
- System.out.print(" - ");
Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
if(module.didSucceed()) {
Failable<RuntimeModule> frm = SCLOsgi.MODULE_REPOSITORY.getRuntimeModule(moduleName);
RuntimeModule rm = frm.getResult();
- rm.loadReferences();
- System.out.println("succeeded");
+ rm.loadClasses();
} else if(module == DoesNotExist.INSTANCE)
System.out.println("does not exist"); // should not happen
else {
return true;
}
});
- if(!modulesWithErrors.isEmpty()) {
- StringBuilder b = new StringBuilder();
- b.append("Some SCL modules failed to compile:");
- for(String module : modulesWithErrors)
- b.append(' ').append(module);
- return b.toString();
+ for(RuntimeEnvironment env : SCLOsgi.MODULE_REPOSITORY.getRuntimeEnvironments()) {
+ ExpressionClassLoader ecl = (ExpressionClassLoader)env.getMutableClassLoader();
+ for(String name : ecl.localClasses.keySet()) {
+ try {
+ ecl.loadClass(name.replace("/", "."));
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ }
}
return null;
}