]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.osgi/src/org/simantics/scl/osgi/SCLOsgi.java
Simupedia tuning step 2
[simantics/platform.git] / bundles / org.simantics.scl.osgi / src / org / simantics / scl / osgi / SCLOsgi.java
index 1e0360051ff318849582e947f30f729033ed15b9..35438747c9ee6f4e699d600085dfd84d5a89a79c 100644 (file)
@@ -9,6 +9,8 @@ import org.simantics.scl.compiler.module.Module;
 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;
@@ -70,36 +72,16 @@ public class SCLOsgi {
         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 {
@@ -109,12 +91,15 @@ public class SCLOsgi {
                 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;
     }