diff options
| author | Maxime Porhel | 2015-03-06 16:02:10 +0000 |
|---|---|---|
| committer | Maxime Porhel | 2015-03-06 16:04:05 +0000 |
| commit | 74814928c41228f302e0babfdd8f76ded9678676 (patch) | |
| tree | b9f019870859128cf3ebe3606ed36f8f54f51ec7 | |
| parent | 7785d5eec25b8fe1fbcf73a33029455345166ca4 (diff) | |
| download | org.eclipse.sirius-74814928c41228f302e0babfdd8f76ded9678676.tar.gz org.eclipse.sirius-74814928c41228f302e0babfdd8f76ded9678676.tar.xz org.eclipse.sirius-74814928c41228f302e0babfdd8f76ded9678676.zip | |
[461557] Correct NPE during navigation from problem marker
When the user clicks on an error marker, this trigger the goto marker
mecanism.
If the "marked" editor is not opened, the "error editor" is opened
during editor initalization but replaced during goto marker navigation.
This is done because Eclipse tries to open a Sirius diagram editor using
a basic FileEditorInput referencing only the file, with no information
on the concrete representation to open.
Bug: 461557
Change-Id: Ie5f8fefd3728f4878325cd7a454ba163db4a4b32
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java index c8f2247ba0..430cafd060 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/DDiagramEditorImpl.java @@ -95,6 +95,7 @@ import org.eclipse.sirius.business.api.session.SessionManager; import org.eclipse.sirius.business.api.session.SessionManagerListener; import org.eclipse.sirius.common.tools.DslCommonPlugin; import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter; +import org.eclipse.sirius.common.tools.api.util.StringUtil; import org.eclipse.sirius.common.ui.tools.api.util.IObjectActionDelegateWrapper; import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.DDiagramElement; @@ -1772,16 +1773,21 @@ public class DDiagramEditorImpl extends SiriusDiagramEditor implements DDiagramE // In case the input is based on the DDiagram, we need to updated it to // use the GMF diagram IEditorInput updatedEditorInput = input; - EObject eObject = session.getTransactionalEditingDomain().getResourceSet().getEObject(((SessionEditorInput) input).getURI(), false); - if (eObject instanceof DDiagram) { - DDiagram dDiagram = (DDiagram) eObject; - final DiagramCreationUtil util = new DiagramCreationUtil(dDiagram); - if (!util.findAssociatedGMFDiagram()) { - DiagramPlugin.getDefault().getLog().log(new Status(IStatus.WARNING, DiagramPlugin.ID, "The gmf diagram is expected to be created before calling setInput() on the editor")); - } - final Diagram gmfDiag = util.getAssociatedGMFDiagram(); - updatedEditorInput = new SessionEditorInput(EcoreUtil.getURI(gmfDiag), dDiagram.getName(), session); + if (input instanceof URIEditorInput) { + URI uri = ((URIEditorInput) input).getURI(); + if (uri != null && !StringUtil.isEmpty(uri.fragment())) { + EObject eObject = session.getTransactionalEditingDomain().getResourceSet().getEObject(uri, false); + if (eObject instanceof DDiagram) { + DDiagram dDiagram = (DDiagram) eObject; + final DiagramCreationUtil util = new DiagramCreationUtil(dDiagram); + if (!util.findAssociatedGMFDiagram()) { + DiagramPlugin.getDefault().getLog().log(new Status(IStatus.WARNING, DiagramPlugin.ID, "The gmf diagram is expected to be created before calling setInput() on the editor")); + } + final Diagram gmfDiag = util.getAssociatedGMFDiagram(); + updatedEditorInput = new SessionEditorInput(EcoreUtil.getURI(gmfDiag), dDiagram.getName(), session); + } + } } super.setInput(updatedEditorInput); if (getGraphicalViewer() != null) { |
