diff options
author | Ansgar Radermacher | 2017-10-12 14:45:33 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2017-10-17 14:01:31 +0000 |
commit | 81125bf7465715f39a659923c07ac1a6f8cd1682 (patch) | |
tree | 26f67af302bf2bb988b2cda1241008bc7230b930 | |
parent | 2e68b2e6ad8a185ffb32d1b2693cf852ec40e79d (diff) | |
download | org.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.java | 31 |
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); } } |