diff options
author | Laurent Fasani | 2017-04-12 12:38:05 +0000 |
---|---|---|
committer | Laurent Fasani | 2017-04-28 13:44:43 +0000 |
commit | b585afa30a8a49470086467b7c1d4da79a9b4a51 (patch) | |
tree | 21c2663327c2b11e5baa4d3a48b401612a231d63 | |
parent | 3fd217cf9514ffe1662f2f348a050b5c492e9c98 (diff) | |
download | org.eclipse.sirius-b585afa30a8a49470086467b7c1d4da79a9b4a51.tar.gz org.eclipse.sirius-b585afa30a8a49470086467b7c1d4da79a9b4a51.tar.xz org.eclipse.sirius-b585afa30a8a49470086467b7c1d4da79a9b4a51.zip |
[493353] Allow crossReferencing DRepresentationDescriptor.reference
* DRepresentationDescriptor.reference is now derived, so we need to
cross reference this feature as a special case.
Bug: 493353
Change-Id: I3a162b802bedeffdc3eaf368fbe9fcb9bf78a380
Signed-off-by: Laurent Fasani <laurent.fasani@obeo.fr>
2 files changed, 32 insertions, 7 deletions
diff --git a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/util/SiriusCrossReferenceAdapterImpl.java b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/util/SiriusCrossReferenceAdapterImpl.java index 51f8493e33..a1f1da2754 100644 --- a/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/util/SiriusCrossReferenceAdapterImpl.java +++ b/plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/util/SiriusCrossReferenceAdapterImpl.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 THALES GLOBAL SERVICES and others. + * Copyright (c) 2015, 2017 THALES GLOBAL SERVICES and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -11,19 +11,20 @@ package org.eclipse.sirius.common.tools.api.util; import java.util.Collection; +import java.util.HashSet; import java.util.List; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.util.BasicEList; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; /** - * Specific {@link ECrossReferenceAdapter} which resolve proxy ability can be - * disabled. All {@link ECrossReferenceAdapter} used for Sirius should extend - * this adapter in place of {@link ECrossReferenceAdapter} + * Specific {@link ECrossReferenceAdapter} which resolve proxy ability can be disabled. All + * {@link ECrossReferenceAdapter} used for Sirius should extend this adapter in place of {@link ECrossReferenceAdapter} * * @author <a href="mailto:laurent.fasani@obeo.fr">Laurent Fasani</a> */ @@ -40,6 +41,11 @@ public class SiriusCrossReferenceAdapterImpl extends ECrossReferenceAdapter impl private boolean resolveProxyEnabled = true; /** + * This is a white list of features that must be cross referenced. + */ + private Collection<EReference> featureToBeCrossReferencedWhiteList = new HashSet<EReference>(); + + /** * Disable the resolution of the proxy. */ @Override @@ -99,9 +105,7 @@ public class SiriusCrossReferenceAdapterImpl extends ECrossReferenceAdapter impl }; } - /** - * {@inheritDoc} - */ + @Override protected void addAdapter(Notifier notifier) { List<Adapter> eAdapters = notifier.eAdapters(); if (!eAdapters.contains(this)) { @@ -114,4 +118,22 @@ public class SiriusCrossReferenceAdapterImpl extends ECrossReferenceAdapter impl } } } + + /** + * Set a white list of features that must be cross referenced. + * + * @param featureToBeCrossReferencedWhiteList + * The feature list that must not be null. + */ + public void setFeatureToBeCrossReferencedWhiteList(Collection<EReference> featureToBeCrossReferencedWhiteList) { + this.featureToBeCrossReferencedWhiteList = featureToBeCrossReferencedWhiteList; + } + + /** + * This override allows to crossReference a white list of EReference. + */ + @Override + protected boolean isIncluded(EReference eReference) { + return (eReference.getEOpposite() == null && !eReference.isDerived()) || featureToBeCrossReferencedWhiteList.contains(eReference); + } } diff --git a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/DAnalysisSessionImpl.java b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/DAnalysisSessionImpl.java index 07fb0a9074..fb2556d987 100644 --- a/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/DAnalysisSessionImpl.java +++ b/plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/DAnalysisSessionImpl.java @@ -12,6 +12,7 @@ package org.eclipse.sirius.business.internal.session.danalysis; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; @@ -236,6 +237,8 @@ public class DAnalysisSessionImpl extends DAnalysisSessionEObjectImpl implements public ECrossReferenceAdapterWithUnproxyCapability getSemanticCrossReferencer() { if (crossReferencer == null) { crossReferencer = createSemanticCrossReferencer(); + crossReferencer.setFeatureToBeCrossReferencedWhiteList(Arrays.asList(ViewpointPackage.eINSTANCE.getDRepresentationDescriptor_Representation())); + if (interpreter != null) { interpreter.setCrossReferencer(crossReferencer); } |