]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/scl/GraphModuleSourceRepository.java
Merge changes Ib64cf026,I238948da
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / scl / GraphModuleSourceRepository.java
index 10a217b9da073918575c19bacf98f2925619688e..09f7694dd482e5f1ce53ab784160ec3a078a2967 100644 (file)
@@ -15,19 +15,25 @@ import org.simantics.db.procedure.SyncListener;
 import org.simantics.db.request.Read;
 import org.simantics.layer0.Layer0;
 import org.simantics.modeling.ModelingUtils;
+import org.simantics.modeling.internal.Activator;
+import org.simantics.scl.compiler.internal.codegen.types.JavaReferenceValidatorFactory;
 import org.simantics.scl.compiler.module.repository.UpdateListener;
+import org.simantics.scl.compiler.module.repository.UpdateListener.Observable;
 import org.simantics.scl.compiler.source.ModuleSource;
 import org.simantics.scl.compiler.source.StringModuleSource;
 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
+import org.simantics.scl.osgi.internal.OsgiJavaReferenceValidatorFactory;
 import org.simantics.scl.runtime.SCLContext;
-import org.simantics.structural2.utils.StructuralUtils;
 import org.simantics.scl.runtime.tuple.Tuple0;
+import org.simantics.structural2.utils.StructuralUtils;
 
 import gnu.trove.procedure.TObjectProcedure;
 import gnu.trove.set.hash.THashSet;
 
 public enum GraphModuleSourceRepository implements ModuleSourceRepository {
     INSTANCE;
+    
+    private static final OsgiJavaReferenceValidatorFactory REFERENCE_VALIDATOR_FACTORY = new OsgiJavaReferenceValidatorFactory(Activator.getContext().getBundle());
 
     @Override
     public ModuleSource getModuleSource(final String moduleName, UpdateListener listener) {
@@ -54,15 +60,20 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
         }
     }
 
-    static class ModuleListener implements SyncListener<ModuleSource> {
+    static class ModuleListener implements SyncListener<ModuleSource>, Observable {
         UpdateListener listener;
         boolean alreadyExecutedOnce;
         final String moduleName;
         public ModuleListener(UpdateListener listener, String moduleName) {
             this.listener = listener;
+            this.listener.addObservable(this);
             this.moduleName = moduleName;
         }
         @Override
+        public void removeListener(UpdateListener listener) {
+            this.listener = null;
+        }
+        @Override
         public boolean isDisposed() {
             return listener == null;
         }
@@ -117,6 +128,11 @@ public enum GraphModuleSourceRepository implements ModuleSourceRepository {
                 e.printStackTrace();
             }
         }
+        
+        @Override
+        public JavaReferenceValidatorFactory getJavaReferenceValidatorFactory() {
+            return REFERENCE_VALIDATOR_FACTORY;
+        }
     }
 
     static class ReadModuleSource extends UnaryRead<String, ModuleSource> {