Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2017-10-12 14:45:33 +0000
committerAnsgar Radermacher2017-10-17 14:01:31 +0000
commit81125bf7465715f39a659923c07ac1a6f8cd1682 (patch)
tree26f67af302bf2bb988b2cda1241008bc7230b930
parent2e68b2e6ad8a185ffb32d1b2693cf852ec40e79d (diff)
downloadorg.eclipse.papyrus-81125bf7465715f39a659923c07ac1a6f8cd1682.tar.gz
org.eclipse.papyrus-81125bf7465715f39a659923c07ac1a6f8cd1682.tar.xz
org.eclipse.papyrus-81125bf7465715f39a659923c07ac1a6f8cd1682.zip
Bug 514455 - [All diagrams] Label icon does not correspond to element type
- Retrieve right label provider for an element instead of always using the EMFLabelProvider (which used to display the right icon until some time ago, but does not do that any more) - Cache label provider for each resource. Use a WeakHashMap to assure that resources are freed if no longer in use. - Deprecate existing labelProvider, replace by new labelProviderMap Signed-off-by: Ansgar Radermacher <ansgar.radermacher@cea.fr> Change-Id: Id1b7ac566d36915d01ff3912ac6019bd7113ca1d (cherry picked from commit aa5965d36db33a4524608d7f961001c26c2aaf6e)
-rw-r--r--plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java31
1 files changed, 26 insertions, 5 deletions
diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
index f16c11262a4..0fe3a81a4c0 100644
--- a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
+++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common/src/org/eclipse/papyrus/infra/gmfdiag/common/utils/DiagramEditPartsUtil.java
@@ -19,7 +19,9 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.WeakHashMap;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.AbstractTreeIterator;
@@ -28,6 +30,7 @@ import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartViewer;
@@ -61,11 +64,13 @@ import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.emf.appearance.helper.AppearanceHelper;
import org.eclipse.papyrus.infra.emf.readonly.ReadOnlyManager;
import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject;
+import org.eclipse.papyrus.infra.gmfdiag.common.Activator;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.ConnectionEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusDiagramEditPart;
import org.eclipse.papyrus.infra.gmfdiag.common.helper.NotationHelper;
import org.eclipse.papyrus.infra.gmfdiag.common.preferences.PreferencesConstantsHelper;
-import org.eclipse.papyrus.infra.ui.emf.providers.EMFLabelProvider;
+import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
import org.eclipse.papyrus.infra.ui.util.EditorHelper;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorPart;
@@ -1008,9 +1013,17 @@ public class DiagramEditPartsUtil {
}
/**
- * @since 3.0
+ * @since 3.2.0
+ * @deprecated has been replaced by labelProviderMap
+ */
+ @Deprecated ILabelProvider labelProvider;
+
+ /**
+ * @since 3.2.0
+ * Use hash map to cache label provider references. The "weak" assures that resources no longer
+ * in use are freed
*/
- protected static ILabelProvider labelProvider;
+ protected static Map<Resource, ILabelProvider> labelProviderMap = new WeakHashMap<Resource, ILabelProvider>();
/**
* Return the icon of a label, taking element type definitions into account
@@ -1021,16 +1034,24 @@ public class DiagramEditPartsUtil {
* @since 3.0
*/
public static Image getIcon(EObject parserElement, EditPartViewer viewer) {
- // EObject parserElement = getParserElement();
if (parserElement == null) {
return null;
}
List<View> views = DiagramEditPartsUtil.findViews(parserElement, viewer);
for (View view : views) {
if (AppearanceHelper.showElementIcon(view)) {
+ Resource rs = parserElement.eResource();
+ ILabelProvider labelProvider = labelProviderMap.get(rs);
if (labelProvider == null) {
- labelProvider = new EMFLabelProvider();
+ try {
+ LabelProviderService provider = ServiceUtilsForEObject.getInstance().getService(LabelProviderService.class, parserElement);
+ labelProvider = provider.getLabelProvider();
+ labelProviderMap.put(rs, labelProvider);
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
}
+
return labelProvider.getImage(parserElement);
}
}

Back to the top