diff options
author | Karsten Thoms | 2019-10-18 22:39:58 +0000 |
---|---|---|
committer | Karsten Thoms | 2019-10-21 14:08:58 +0000 |
commit | 23b975ceaacfa0739472788320458ebba4e129d1 (patch) | |
tree | 46828b9b1834a225701c0041123dde3f61c411c7 | |
parent | 419342c0c3a21016553d44f815091cc4a9e2b9fd (diff) | |
download | eclipse.platform.ui-23b975ceaacfa0739472788320458ebba4e129d1.tar.gz eclipse.platform.ui-23b975ceaacfa0739472788320458ebba4e129d1.tar.xz eclipse.platform.ui-23b975ceaacfa0739472788320458ebba4e129d1.zip |
Bug 552175 - Cache property names per EClassI20191022-0405
JXPath creates only a single instance of EDynamicPropertyHandler. On
this instance getPropertyNames is called frequently for the same EClass,
making is a candidate for caching.
Change-Id: I0155dafc3ee5f43c00cdcadbb838d4c7fa1e2277
Signed-off-by: Karsten Thoms <karsten.thoms@itemis.de>
-rw-r--r-- | bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/helper/EDynamicPropertyHandler.java | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/helper/EDynamicPropertyHandler.java b/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/helper/EDynamicPropertyHandler.java index 17a5677e494..d4d9e513e25 100644 --- a/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/helper/EDynamicPropertyHandler.java +++ b/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/helper/EDynamicPropertyHandler.java @@ -13,6 +13,9 @@ ******************************************************************************/ package org.eclipse.e4.emf.internal.xpath.helper; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.jxpath.DynamicPropertyHandler; import org.eclipse.core.runtime.Assert; import org.eclipse.emf.ecore.EClass; @@ -25,12 +28,14 @@ import org.eclipse.emf.ecore.EStructuralFeature; * @author Karsten Thoms <karsten.thoms@itemis.de> */ public class EDynamicPropertyHandler implements DynamicPropertyHandler { + private Map<EClass, String[]> eClass2PropNames = new HashMap<>(); + @Override public String[] getPropertyNames(Object object) { Assert.isLegal(object instanceof EObject); EClass eClass = ((EObject) object).eClass(); - String[] propNames = eClass.getEAllStructuralFeatures().stream().map(f -> f.getName()).toArray(String[]::new); - return propNames; + return eClass2PropNames.computeIfAbsent(eClass, + clz -> clz.getEAllStructuralFeatures().stream().map(f -> f.getName()).toArray(String[]::new)); } @Override |