Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Fasani2017-04-12 12:38:05 +0000
committerLaurent Fasani2017-04-28 13:44:43 +0000
commitb585afa30a8a49470086467b7c1d4da79a9b4a51 (patch)
tree21c2663327c2b11e5baa4d3a48b401612a231d63
parent3fd217cf9514ffe1662f2f348a050b5c492e9c98 (diff)
downloadorg.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>
-rw-r--r--plugins/org.eclipse.sirius.common/src/org/eclipse/sirius/common/tools/api/util/SiriusCrossReferenceAdapterImpl.java36
-rw-r--r--plugins/org.eclipse.sirius/src/org/eclipse/sirius/business/internal/session/danalysis/DAnalysisSessionImpl.java3
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);
}

Back to the top