Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre-Charles David2016-09-27 09:09:12 +0000
committerPierre-Charles David2016-10-03 07:36:59 +0000
commit1d4983b3a0bc0a3f0fb6c4e9ffdee938ec2385d1 (patch)
tree45231e5304464a34d4b5aa96dcf05d22d58c69e8
parent066168088672c0327b69f0e960a7003e144578a2 (diff)
downloadorg.eclipse.sirius-1d4983b3a0bc0a3f0fb6c4e9ffdee938ec2385d1.tar.gz
org.eclipse.sirius-1d4983b3a0bc0a3f0fb6c4e9ffdee938ec2385d1.tar.xz
org.eclipse.sirius-1d4983b3a0bc0a3f0fb6c4e9ffdee938ec2385d1.zip
[502180] Make STS#executeOperation() more robust
Add some safety checks to avoid trying to execute an operation on an invalid target element, i.e. a proxy or an element which is not part of a Sirius session. Bug: 502180 Change-Id: I59507f3870e7467f0b4f65ccd678c88ce60af196 Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java20
1 files changed, 12 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
index 651621f3b1..f5239890ea 100644
--- a/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
+++ b/plugins/org.eclipse.sirius.ui.properties/src/org/eclipse/sirius/ui/properties/internal/SiriusToolServices.java
@@ -264,14 +264,18 @@ public class SiriusToolServices {
* @return the model element on which the tool was executed.
*/
public EObject executeOperation(EObject eObject, String initialCommandUri) {
- Session session = new EObjectQuery(eObject).getSession();
- ModelOperation modelOperation = findModelOperation(initialCommandUri, session);
- if (modelOperation != null) {
- ModelAccessor modelAccessor = session.getModelAccessor();
- ICommandTask task = new TaskHelper(modelAccessor, SiriusEditPlugin.getPlugin().getUiCallback()).buildTaskFromModelOperation(eObject, modelOperation);
- SiriusCommand command = new SiriusCommand(session.getTransactionalEditingDomain(), "SiriusToolServices#executeOperation"); //$NON-NLS-1$
- command.getTasks().add(task);
- session.getTransactionalEditingDomain().getCommandStack().execute(command);
+ if (!eObject.eIsProxy()) {
+ Session session = new EObjectQuery(eObject).getSession();
+ if (session != null) {
+ ModelOperation modelOperation = findModelOperation(initialCommandUri, session);
+ if (modelOperation != null) {
+ ModelAccessor modelAccessor = session.getModelAccessor();
+ ICommandTask task = new TaskHelper(modelAccessor, SiriusEditPlugin.getPlugin().getUiCallback()).buildTaskFromModelOperation(eObject, modelOperation);
+ SiriusCommand command = new SiriusCommand(session.getTransactionalEditingDomain(), "SiriusToolServices#executeOperation"); //$NON-NLS-1$
+ command.getTasks().add(task);
+ session.getTransactionalEditingDomain().getCommandStack().execute(command);
+ }
+ }
}
return eObject;
}

Back to the top