X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fmodule%2FLazyModule.java;h=dc1e40e7321e3097d84be7c439aeb7a5a0c10cb6;hb=c00d1429bda8dc27461e1576f4be028b43149758;hp=ce3b7cc5fd22ff49fd4b2a01c5205d3647c2f82e;hpb=9ea5cf59a4d87c3db3a486e86d7b54efffd5516d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/LazyModule.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/LazyModule.java index ce3b7cc5f..dc1e40e73 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/LazyModule.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/module/LazyModule.java @@ -2,9 +2,9 @@ package org.simantics.scl.compiler.module; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; +import java.util.Map; import org.simantics.scl.compiler.constants.Constant; import org.simantics.scl.compiler.elaboration.chr.CHRRuleset; @@ -28,9 +28,9 @@ import gnu.trove.map.hash.THashMap; public abstract class LazyModule implements Module { private final String moduleName; - private final ConcurrentHashMap values = new ConcurrentHashMap(); - private final ConcurrentHashMap relations = new ConcurrentHashMap(); - private final ConcurrentHashMap entityTypes = new ConcurrentHashMap(); + private final Map values = Collections.synchronizedMap(new HashMap()); + private final Map relations = Collections.synchronizedMap(new HashMap()); + private final Map entityTypes = Collections.synchronizedMap(new HashMap()); protected abstract SCLValue createValue(String name); @@ -64,11 +64,15 @@ public abstract class LazyModule implements Module { public void findValuesForPrefix(final Collection values, final String prefix) { } - private final Function createValue = this::createValue; - @Override public SCLValue getValue(String name) { - return values.computeIfAbsent(name, createValue); + if(values.containsKey(name)) + return values.get(name); + else { + SCLValue value = createValue(name); + values.put(name, value); + return value; + } } @Override @@ -76,16 +80,24 @@ public abstract class LazyModule implements Module { return null; } - private final Function createRelation = this::createRelation; - public SCLRelation getRelation(String name) { - return relations.computeIfAbsent(name, createRelation); + if(relations.containsKey(name)) + return relations.get(name); + else { + SCLRelation relation = createRelation(name); + relations.put(name, relation); + return relation; + } } - private final Function createEntityType = this::createEntityType; - public SCLEntityType getEntityType(String name) { - return entityTypes.computeIfAbsent(name, createEntityType); + if(entityTypes.containsKey(name)) + return entityTypes.get(name); + else { + SCLEntityType entityType = createEntityType(name); + entityTypes.put(name, entityType); + return entityType; + } } @Override