diff options
author | Ansgar Radermacher | 2015-07-09 11:14:34 +0000 |
---|---|---|
committer | Ansgar Radermacher | 2015-07-09 11:14:34 +0000 |
commit | e0ad18cfd7e23e372ed3336e9bdaf5f06ac946a8 (patch) | |
tree | cbbb782b442b6d172ce330b71f2d6412a61b63ab /extraplugins/codegen | |
parent | 9cf6d01b6a420c40e94598854a397bae09e759ff (diff) | |
download | org.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.java | 27 |
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>(); } |