X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FComponentTypeScriptRuntimeEnvironmentRequest.java;h=89385e5be3f111439be954cac24278c62f256f30;hb=b055bfb36cca301ceed0591028d245e152c8c32d;hp=7f2b54559ed35f0ecb7c077fe97c6131a8ddca82;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/ComponentTypeScriptRuntimeEnvironmentRequest.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/ComponentTypeScriptRuntimeEnvironmentRequest.java index 7f2b54559..89385e5be 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/ComponentTypeScriptRuntimeEnvironmentRequest.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/ComponentTypeScriptRuntimeEnvironmentRequest.java @@ -1,7 +1,5 @@ package org.simantics.modeling; -import java.util.ArrayList; - import org.simantics.db.ReadGraph; import org.simantics.db.common.request.ParametrizedPrimitiveRead; import org.simantics.db.procedure.Listener; @@ -13,9 +11,7 @@ import org.simantics.scl.osgi.SCLOsgi; import org.simantics.scl.runtime.SCLContext; public class ComponentTypeScriptRuntimeEnvironmentRequest extends ParametrizedPrimitiveRead { - - // This array list is only needed to keep strong references to update listeners preventing their garbage collection. - ArrayList listeners; + UpdateListener listener; public ComponentTypeScriptRuntimeEnvironmentRequest(EnvironmentSpecification parameter) { super(parameter); @@ -23,20 +19,22 @@ public class ComponentTypeScriptRuntimeEnvironmentRequest extends ParametrizedPr @Override public void register(ReadGraph graph, Listener procedure) { - UpdateListener listener = null; - if(!procedure.isDisposed()) { + if(!procedure.isDisposed() && listener == null) { listener = new UpdateListener() { @Override public void notifyAboutUpdate() { createRuntimeEnvironment(graph, procedure, this); } }; - if(listeners == null) - listeners = new ArrayList(2); - listeners.add(listener); } createRuntimeEnvironment(graph, procedure, listener); } + + @Override + public void unregistered() { + if(listener != null) + listener.stopListening(); + } private void createRuntimeEnvironment(ReadGraph graph, Listener procedure, UpdateListener listener) { SCLContext context = SCLContext.getCurrent();