]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/repository/ModuleRepository.java
(refs #7541) Added support for module deprecation
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / module / repository / ModuleRepository.java
index 7170b992b41d87be51e0e615d4723985bb03478e..089f2c26c95469e639176ed9f50136b91a9c46c7 100644 (file)
@@ -7,6 +7,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 import org.simantics.scl.compiler.common.exceptions.InternalCompilerError;
+import org.simantics.scl.compiler.compilation.CompilationContext;
 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
 import org.simantics.scl.compiler.environment.ConcreteEnvironment;
 import org.simantics.scl.compiler.environment.Environment;
@@ -159,7 +160,7 @@ public class ModuleRepository {
                         Collection<ImportDeclaration> dependencies = module.getDependencies();
                         THashMap<String, ModuleEntry> moduleEntries;
                         try {
-                            moduleEntries = getModuleEntries(dependencies.toArray(new ImportDeclaration[dependencies.size()]), null);
+                            moduleEntries = getModuleEntries(null, dependencies.toArray(new ImportDeclaration[dependencies.size()]), null);
                         } catch (ImportFailureException e) {
                             throw new InternalCompilerError(e);
                         }
@@ -173,7 +174,7 @@ public class ModuleRepository {
                         if(parentModule != null)
                             parentModules.add(parentModule);
                     }*/
-                    RuntimeModule rm = new RuntimeModule(module, parentModules, source.getClassLoader());
+                    RuntimeModule rm = new RuntimeModule(module, parentModules, module.getParentClassLoader());
                     ModuleInitializer initializer = module.getModuleInitializer();
                     if(initializer != null)
                         try {
@@ -254,6 +255,7 @@ public class ModuleRepository {
     }
     
     private THashMap<String, ModuleEntry> getModuleEntries(
+            CompilationContext compilationContext,
             ImportDeclaration[] imports,
             UpdateListener listener) throws ImportFailureException {
         THashMap<String, ModuleEntry> result = new THashMap<String, ModuleEntry>();
@@ -268,11 +270,17 @@ public class ModuleRepository {
         while(!stack.isEmpty()) {
             ImportDeclaration import_ = stack.remove(stack.size()-1);
             if(!result.containsKey(import_.moduleName)) {
-                ModuleEntry entry = getModuleEntry(import_.moduleName, originalImports.contains(import_.moduleName) ? listener : null);
+                boolean originalImport = originalImports.contains(import_.moduleName);
+                ModuleEntry entry = getModuleEntry(import_.moduleName, originalImport ? listener : null);
                 Failable<Module> compilationResult = entry.compilationResult;
                 if(compilationResult.didSucceed()) {
                     result.put(import_.moduleName, entry);
                     stack.addAll(compilationResult.getResult().getDependencies());
+                    if(originalImport) {
+                        String deprecation = compilationResult.getResult().getDeprecation();
+                        if(deprecation != null && compilationContext != null)
+                            compilationContext.errorLog.logWarning(import_.location, "Deprecated module " + import_.moduleName   + (deprecation.isEmpty() ? "." : ": " + deprecation));
+                    }
                 }
                 else {
                     if(failures == null)
@@ -318,7 +326,14 @@ public class ModuleRepository {
     public Environment createEnvironment(
             ImportDeclaration[] imports,
             UpdateListener listener) throws ImportFailureException {
-        THashMap<String, ModuleEntry> entries = getModuleEntries(imports, listener);
+        return createEnvironment(null, imports, listener);
+    }
+    
+    public Environment createEnvironment(
+            CompilationContext compilationContext,
+            ImportDeclaration[] imports,
+            UpdateListener listener) throws ImportFailureException {
+        THashMap<String, ModuleEntry> entries = getModuleEntries(compilationContext, imports, listener);
         THashMap<String, Module> moduleMap = mapEntriesToModules(entries);
         return createEnvironment(moduleMap, imports);
     }
@@ -348,14 +363,15 @@ public class ModuleRepository {
             ImportDeclaration[] imports,
             ClassLoader parentClassLoader,
             UpdateListener listener) throws ImportFailureException {
-        THashMap<String, ModuleEntry> entries = getModuleEntries(imports, listener);
+        THashMap<String, ModuleEntry> entries = getModuleEntries(null, imports, listener);
         THashMap<String, Module> moduleMap = mapEntriesToModules(entries);
         Environment environment = createEnvironment(moduleMap, imports);
         THashMap<String, RuntimeModule> runtimeModuleMap = mapEntriesToRuntimeModules(entries);
         return new RuntimeEnvironmentImpl(environment, parentClassLoader, runtimeModuleMap);
     }
     
-    private static Environment createEnvironment(THashMap<String, Module> moduleMap, 
+    private static Environment createEnvironment(
+            THashMap<String, Module> moduleMap, 
             ImportDeclaration[] imports) {
         NamespaceSpec spec = new NamespaceSpec();
         for(ImportDeclaration import_ : imports)