Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnsgar Radermacher2015-07-09 11:14:34 +0000
committerAnsgar Radermacher2015-07-09 11:14:34 +0000
commite0ad18cfd7e23e372ed3336e9bdaf5f06ac946a8 (patch)
treecbbb782b442b6d172ce330b71f2d6412a61b63ab /extraplugins/codegen
parent9cf6d01b6a420c40e94598854a397bae09e759ff (diff)
downloadorg.eclipse.papyrus-e0ad18cfd7e23e372ed3336e9bdaf5f06ac946a8.tar.gz
org.eclipse.papyrus-e0ad18cfd7e23e372ed3336e9bdaf5f06ac946a8.tar.xz
org.eclipse.papyrus-e0ad18cfd7e23e372ed3336e9bdaf5f06ac946a8.zip
472274 - [CDT integration] Some model changes are not propagated to the CDT editor
Diffstat (limited to 'extraplugins/codegen')
-rw-r--r--extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/listener/ModelListener.java27
1 files changed, 27 insertions, 0 deletions
diff --git a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/listener/ModelListener.java b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/listener/ModelListener.java
index 81cad092e62..18bc74c536e 100644
--- a/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/listener/ModelListener.java
+++ b/extraplugins/codegen/org.eclipse.papyrus.texteditor.cdt/src/org/eclipse/papyrus/texteditor/cdt/listener/ModelListener.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.papyrus.infra.core.listenerservice.IPapyrusListener;
import org.eclipse.papyrus.uml.tools.listeners.PapyrusStereotypeListener;
+import org.eclipse.uml2.uml.Behavior;
import org.eclipse.uml2.uml.Classifier;
import org.eclipse.uml2.uml.DirectedRelationship;
import org.eclipse.uml2.uml.Element;
@@ -68,6 +69,22 @@ public class ModelListener implements IPapyrusListener {
// don't treat addition here, since operations/properties do not have their final names yet
// IStorage storage = new TextStorage(string);
}
+ if (notifier instanceof Behavior) {
+ Behavior behavior = (Behavior) notifier;
+ if (eventType == Notification.SET) {
+ // name modification
+ if (behavior.getSpecification() == null) {
+ }
+ }
+ else if (eventType == Notification.ADD) {
+ // modification of an opaque behavior in Papyrus implied remove&add operations
+ Classifier nearestCl = getNearestClassifier(behavior);
+ if (nearestCl != null) {
+ regenList.add(nearestCl);
+ }
+ }
+ }
+
else if (notifier instanceof Feature) {
// if a feature is added, it is first generated with a dummy name, then the name is corrected.
Feature feature = (Feature) notifier;
@@ -104,5 +121,15 @@ public class ModelListener implements IPapyrusListener {
}
}
+ public static Classifier getNearestClassifier(Element element) {
+ while (element != null) {
+ if (!(element instanceof Behavior) && (element instanceof Classifier)) {
+ return (Classifier) element;
+ }
+ element = element.getOwner();
+ }
+ return null;
+ }
+
static EList<Classifier> regenList = new UniqueEList<Classifier>();
}

Back to the top