diff options
| author | Pierre-Charles David | 2016-09-27 09:09:12 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2016-10-03 07:36:59 +0000 |
| commit | 1d4983b3a0bc0a3f0fb6c4e9ffdee938ec2385d1 (patch) | |
| tree | 45231e5304464a34d4b5aa96dcf05d22d58c69e8 | |
| parent | 066168088672c0327b69f0e960a7003e144578a2 (diff) | |
| download | org.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.java | 20 |
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; } |
