diff options
| author | Florian Barbin | 2016-05-18 15:49:32 +0000 |
|---|---|---|
| committer | Florian Barbin | 2016-05-19 09:34:29 +0000 |
| commit | 894ff9a8368e5e55bb4e4f3487c5ffcf1d705703 (patch) | |
| tree | cecaac63a18122209575a1c0650e4f160c816d77 | |
| parent | 048bd6be27cac84df93c21ef3c85bbb5cbb90077 (diff) | |
| download | org.eclipse.sirius-894ff9a8368e5e55bb4e4f3487c5ffcf1d705703.tar.gz org.eclipse.sirius-894ff9a8368e5e55bb4e4f3487c5ffcf1d705703.tar.xz org.eclipse.sirius-894ff9a8368e5e55bb4e4f3487c5ffcf1d705703.zip | |
[493918] Make sure runNonUIValidation method disposes the new Shell.
* Also adds a new testCase in the existing DiagramValidationTest.
Bug: 493918
Change-Id: I9758b7965449323fb7fef324d03604fc03db7db5
Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
2 files changed, 32 insertions, 3 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/ValidateAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/ValidateAction.java index a421bbe505..53a983dd15 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/ValidateAction.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/part/ValidateAction.java @@ -36,7 +36,6 @@ import org.eclipse.emf.validation.service.ModelValidationService; import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; import org.eclipse.gef.EditPartViewer; import org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor; -import org.eclipse.gmf.runtime.diagram.ui.OffscreenEditPartFactory; import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; import org.eclipse.gmf.runtime.emf.core.util.EMFCoreUtil; @@ -56,12 +55,14 @@ import org.eclipse.sirius.diagram.ui.edit.api.part.IDDiagramEditPart; import org.eclipse.sirius.diagram.ui.internal.providers.SiriusMarkerNavigationProvider; import org.eclipse.sirius.diagram.ui.internal.providers.SiriusValidationProvider; import org.eclipse.sirius.diagram.ui.tools.internal.marker.SiriusMarkerNavigationProviderSpec; +import org.eclipse.sirius.diagram.ui.tools.internal.part.OffscreenEditPartFactory; import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.ext.emf.AllContents; import org.eclipse.sirius.tools.api.validation.constraint.RuleWrappingStatus; import org.eclipse.sirius.viewpoint.DRepresentationElement; import org.eclipse.sirius.viewpoint.DSemanticDecorator; import org.eclipse.sirius.viewpoint.ViewpointPackage; +import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation; @@ -136,8 +137,10 @@ public class ValidateAction extends Action { * @was-generated */ public static void runNonUIValidation(View view) { - DiagramEditPart diagramEditPart = OffscreenEditPartFactory.getInstance().createDiagramEditPart(view.getDiagram()); + Shell shell = new Shell(); + DiagramEditPart diagramEditPart = OffscreenEditPartFactory.getInstance().createDiagramEditPart(view.getDiagram(), shell); runValidation(diagramEditPart, view); + shell.dispose(); } /** @@ -235,6 +238,7 @@ public class ValidateAction extends Action { /** * @was-generated-NOT */ + @SuppressWarnings("rawtypes") private static void createMarkers(IFile target, IStatus validationStatus, DiagramEditPart diagramEditPart) { if (validationStatus.isOK()) { return; @@ -291,6 +295,7 @@ public class ValidateAction extends Action { /** * @was-generated-NOT */ + @SuppressWarnings("rawtypes") private static void createMarkers(IFile target, Diagnostic emfValidationStatus, DiagramEditPart diagramEditPart) { if (emfValidationStatus.getSeverity() == Diagnostic.OK) { return; @@ -304,7 +309,8 @@ public class ValidateAction extends Action { if (data != null && !data.isEmpty() && data.get(0) instanceof EObject) { EObject element = (EObject) data.get(0); View view = getCorrespondingView(element, diagramEditPart); - addMarker(diagramEditPart.getViewer(), target, view, EMFCoreUtil.getQualifiedName(element, true), nextDiagnostic.getMessage(), diagnosticToStatusSeverity(nextDiagnostic.getSeverity())); + addMarker(diagramEditPart.getViewer(), target, view, EMFCoreUtil.getQualifiedName(element, true), nextDiagnostic.getMessage(), + diagnosticToStatusSeverity(nextDiagnostic.getSeverity())); } } } @@ -367,6 +373,7 @@ public class ValidateAction extends Action { /** * @was-generated */ + @SuppressWarnings({ "rawtypes", "unchecked" }) private static Set collectTargetElements(IStatus status, Set targetElementCollector, List allConstraintStatuses) { if (status instanceof IConstraintStatus) { targetElementCollector.add(((IConstraintStatus) status).getTarget()); @@ -384,6 +391,7 @@ public class ValidateAction extends Action { /** * @was-generated */ + @SuppressWarnings({ "rawtypes", "unchecked" }) private static Set collectTargetElements(Diagnostic diagnostic, Set targetElementCollector, List allDiagnostics) { List data = diagnostic.getData(); EObject target = null; diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/validation/DiagramValidationTest.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/validation/DiagramValidationTest.java index 0636006df7..193d57eda4 100644 --- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/validation/DiagramValidationTest.java +++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/api/validation/DiagramValidationTest.java @@ -22,8 +22,10 @@ import org.eclipse.core.runtime.ILogListener; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; +import org.eclipse.emf.transaction.RunnableWithResult; import org.eclipse.emf.workspace.util.WorkspaceSynchronizer; import org.eclipse.gmf.runtime.common.ui.util.WorkbenchPartDescriptor; +import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.DDiagramElement; import org.eclipse.sirius.diagram.DNode; @@ -36,6 +38,7 @@ import org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase; import org.eclipse.sirius.tests.support.api.TestsUtil; import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager; import org.eclipse.sirius.viewpoint.DSemanticDecorator; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import com.google.common.base.Predicate; @@ -126,6 +129,13 @@ public class DiagramValidationTest extends SiriusDiagramTestCase { } assertTrue("Marker created by validation was not found", found); + int numberOfShellBefore = getShellsNumber(); + if (editorPart instanceof IDiagramWorkbenchPart) { + final IDiagramWorkbenchPart part = (IDiagramWorkbenchPart) editorPart; + ValidateAction.runNonUIValidation(part.getDiagram()); + } + assertEquals("A new shell has not been disposed.", numberOfShellBefore, getShellsNumber()); + verify(logListener); } @@ -259,6 +269,17 @@ public class DiagramValidationTest extends SiriusDiagramTestCase { assertEquals("The semantic element '" + semanticName + "' does not have the expected SemanticValidationRule markers", expectedNbSemanticMarker, semanticMarkers); } + private int getShellsNumber() { + RunnableWithResult<Integer> withResult = new RunnableWithResult.Impl<Integer>() { + @Override + public void run() { + setResult(Display.getDefault().getShells().length); + } + }; + Display.getDefault().syncExec(withResult); + return withResult.getResult(); + } + @Override protected void tearDown() throws Exception { DialectUIManager.INSTANCE.closeEditor(editorPart, false); |
