From 282d6024a76b98a62b87e15f2c4b2ede3ba2f70a Mon Sep 17 00:00:00 2001 From: Alexander Strakh Date: Thu, 2 Oct 2014 15:48:16 +0400 Subject: [PATCH] Query caching impl --- .../common/ocl/business/internal/interpreter/OclInterpreter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/org.eclipse.sirius.common.ocl/src/org/eclipse/sirius/common/ocl/business/internal/interpreter/OclInterpreter.java b/plugins/org.eclipse.sirius.common.ocl/src/org/eclipse/sirius/common/ocl/business/internal/interpreter/OclInterpreter.java index 243b5cc..d431365 100644 --- a/plugins/org.eclipse.sirius.common.ocl/src/org/eclipse/sirius/common/ocl/business/internal/interpreter/OclInterpreter.java +++ b/plugins/org.eclipse.sirius.common.ocl/src/org/eclipse/sirius/common/ocl/business/internal/interpreter/OclInterpreter.java @@ -17,6 +17,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.HashMap; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; @@ -72,6 +73,8 @@ public class OclInterpreter implements IInterpreter, IInterpreterProvider, IProp /** The variables listener. */ private final List variablesListeners = new LinkedList(); + private Map> oclExpressionsCache = new HashMap>(); + /** * {@inheritDoc} */ @@ -291,7 +294,11 @@ public class OclInterpreter implements IInterpreter, IInterpreterProvider, IProp getOCLHelper().getOCL().getEnvironment().addElement(oclVar.getName(), (Variable) oclVar, false); } - final OCLExpression query = getOCLHelper().createQuery(exp); + OCLExpression query = oclExpressionsCache.get(exp); + if(query == null) { + query = getOCLHelper().createQuery(exp); + oclExpressionsCache.put(exp, query); + } final Query eval = getOCL().createQuery(query); for (final Map.Entry variable : getVariables().entrySet()) { -- 1.8.4.5