]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.osgi/src/org/simantics/scl/osgi/internal/Activator.java
Speeding up platform startup time
[simantics/platform.git] / bundles / org.simantics.scl.osgi / src / org / simantics / scl / osgi / internal / Activator.java
index ea113017a1458790a57567a7498b4d5339285689..4642fb5a40d48922d1b46d8854cac9a6e69a5486 100644 (file)
@@ -1,14 +1,27 @@
 package org.simantics.scl.osgi.internal;
 
 import java.util.Hashtable;
+import java.util.concurrent.ForkJoinPool;
 
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.simantics.scl.compiler.errors.Failable;
+import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.module.repository.ModuleRepository;
+import org.simantics.scl.compiler.module.repository.UpdateListener;
 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
+import org.simantics.scl.compiler.source.repository.ProceduralModuleSourceRepository;
 import org.simantics.scl.compiler.source.repository.SourceRepositories;
+import org.simantics.scl.osgi.SCLOsgi;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class Activator implements BundleActivator {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(Activator.class);
+
+    public static final String PLUGIN_ID = "org.simantics.scl.osgi";
+
     private static BundleContext context;
 
     public static BundleContext getContext() {
@@ -23,6 +36,21 @@ public class Activator implements BundleActivator {
         bundleContext.registerService(ModuleSourceRepository.class,
                 SourceRepositories.BUILTIN_SOURCE_REPOSITORY,
                 properties);
+        bundleContext.registerService(ModuleSourceRepository.class,
+                new ProceduralModuleSourceRepository() {
+                    @Override
+                    protected ModuleRepository getModuleRepository(UpdateListener listener) {
+                        return SCLOsgi.MODULE_REPOSITORY;
+                    }
+                },
+                properties);
+        // Let's try to compile StandardLibrary asynchronously to speed up
+        // the compilation when we actually need it the first time
+        LOGGER.info("Warming up SCL-compiler with StandardLibrary");
+        ForkJoinPool.commonPool().submit(() -> {
+            Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule("StandardLibrary");
+            LOGGER.info("StandardLibrary compiled {}", module);
+        });
     }
 
     public void stop(BundleContext bundleContext) throws Exception {