Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-03-06 16:02:10 +0000
committerMaxime Porhel2015-03-06 16:04:05 +0000
commit74814928c41228f302e0babfdd8f76ded9678676 (patch)
treeb9f019870859128cf3ebe3606ed36f8f54f51ec7
parent7785d5eec25b8fe1fbcf73a33029455345166ca4 (diff)
downloadorg.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.java24
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) {

Back to the top