Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 328226

Summary: [Class Diagram] Diagram modification cause other diagrams corrupted
Product: [Modeling] Papyrus Reporter: Arnaud Dieumegard <arnaud.dieumegard>
Component: CoreAssignee: Patrick Tessier <Patrick.Tessier>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
The sample diagram before being corrupted
none
The sample diagram corrupted none

Description Arnaud Dieumegard CLA 2010-10-20 06:08:51 EDT
Build Identifier: Build id: 20100617-1415

Hi all, i am experiencing problems with the edition of diagrams.
I use PapyrusMDT 0.7.0.v201007251735
I have two diagrams in witch the same interface is referenced, an operation in the interface and the operation is displayed on the diagrams. If I have only one diagram opened and I delete (completely, not only hide from the diagram) the operation, the second diagram is corrupted. Here is the satck trace:

java.lang.ClassCastException: org.eclipse.uml2.uml.internal.impl.InterfaceImpl cannot be cast to org.eclipse.uml2.uml.Operation
	at org.eclipse.papyrus.diagram.common.helper.OperationLabelHelper.getUMLElement(OperationLabelHelper.java:129)
	at org.eclipse.papyrus.diagram.common.helper.OperationLabelHelper.getUMLElement(OperationLabelHelper.java:1)
	at org.eclipse.papyrus.diagram.common.helper.StereotypedElementLabelHelper.stereotypesToDisplay(StereotypedElementLabelHelper.java:232)
	at org.eclipse.papyrus.diagram.common.helper.StereotypedElementLabelHelper.labelToDisplay(StereotypedElementLabelHelper.java:361)
	at org.eclipse.papyrus.diagram.common.helper.StereotypedElementLabelHelper.refreshEditPartDisplay(StereotypedElementLabelHelper.java:351)
	at org.eclipse.papyrus.diagram.clazz.custom.policies.OperationLabelEditPolicy.refreshDisplay(OperationLabelEditPolicy.java:397)
	at org.eclipse.papyrus.diagram.common.editpolicies.AbstractMaskManagedEditPolicy.refresh(AbstractMaskManagedEditPolicy.java:90)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:858)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:252)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:211)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.addChild(GraphicalEditPart.java:1319)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:771)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:718)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:633)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$3(GraphicalEditPart.java:1)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:861)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:252)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:211)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.addChild(GraphicalEditPart.java:1319)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:771)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:718)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:633)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$3(GraphicalEditPart.java:1)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:861)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.papyrus.diagram.common.editparts.UMLNodeEditPart.refresh(UMLNodeEditPart.java:79)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:252)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:211)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.addChild(GraphicalEditPart.java:1319)
	at org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(AbstractEditPart.java:771)
	at org.eclipse.gef.editparts.AbstractEditPart.refresh(AbstractEditPart.java:718)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.refresh(AbstractGraphicalEditPart.java:633)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.access$3(GraphicalEditPart.java:1)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart$3.run(GraphicalEditPart.java:861)
	at org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl.runExclusive(TransactionalEditingDomainImpl.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart.refresh(GraphicalEditPart.java:851)
	at org.eclipse.gef.editparts.AbstractEditPart.addNotify(AbstractEditPart.java:252)
	at org.eclipse.gef.editparts.AbstractGraphicalEditPart.addNotify(AbstractGraphicalEditPart.java:223)
	at org.eclipse.gef.editparts.AbstractEditPart.addChild(AbstractEditPart.java:211)
	at org.eclipse.gef.editparts.SimpleRootEditPart.setContents(SimpleRootEditPart.java:105)
	at org.eclipse.gef.ui.parts.AbstractEditPartViewer.setContents(AbstractEditPartViewer.java:617)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer.setContents(DiagramGraphicalViewer.java:378)
	at org.eclipse.gef.ui.parts.AbstractEditPartViewer.setContents(AbstractEditPartViewer.java:626)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.initializeGraphicalViewerContents(DiagramEditor.java:872)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.initializeGraphicalViewer(DiagramEditor.java:865)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditorWithFlyOutPalette.initializeGraphicalViewer(DiagramEditorWithFlyOutPalette.java:116)
	at org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor.initializeGraphicalViewer(DiagramDocumentEditor.java:175)
	at org.eclipse.papyrus.diagram.clazz.part.UMLDiagramEditor.initializeGraphicalViewer(UMLDiagramEditor.java:500)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.createGraphicalViewer(DiagramEditor.java:807)
	at org.eclipse.papyrus.diagram.clazz.UmlClassDiagramForMultiEditor.createGraphicalViewer(UmlClassDiagramForMultiEditor.java:97)
	at org.eclipse.gef.ui.parts.GraphicalEditor.createPartControl(GraphicalEditor.java:171)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor.createPartControl(DiagramEditor.java:1580)
	at org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditorWithFlyOutPalette.createPartControl(DiagramEditorWithFlyOutPalette.java:328)
	at org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor.createPartControl(DiagramDocumentEditor.java:1511)
	at org.eclipse.papyrus.sasheditor.internal.EditorPart.createEditorPartControl(EditorPart.java:263)
	at org.eclipse.papyrus.sasheditor.internal.EditorPart.createPartControl(EditorPart.java:169)
	at org.eclipse.papyrus.sasheditor.internal.TabFolderPart.createChildPart(TabFolderPart.java:903)
	at org.eclipse.papyrus.sasheditor.internal.TabFolderPart.createTabItem(TabFolderPart.java:828)
	at org.eclipse.papyrus.sasheditor.internal.TabFolderPart.synchronize2(TabFolderPart.java:743)
	at org.eclipse.papyrus.sasheditor.internal.RootPart.synchronize2(RootPart.java:139)
	at org.eclipse.papyrus.sasheditor.internal.SashWindowsContainer.refreshTabsInternal(SashWindowsContainer.java:386)
	at org.eclipse.papyrus.sasheditor.internal.SashWindowsContainer.refreshTabs(SashWindowsContainer.java:339)
	at org.eclipse.papyrus.sasheditor.editor.AbstractMultiPageSashEditor.refreshTabs(AbstractMultiPageSashEditor.java:171)
	at org.eclipse.papyrus.core.editor.CoreMultiDiagramEditor.access$5(CoreMultiDiagramEditor.java:1)
	at org.eclipse.papyrus.core.editor.CoreMultiDiagramEditor$3.contentChanged(CoreMultiDiagramEditor.java:187)
	at org.eclipse.papyrus.sasheditor.contentprovider.di.internal.ContentChangedEventProvider.fireContentChanged(ContentChangedEventProvider.java:162)
	at org.eclipse.papyrus.sasheditor.contentprovider.di.internal.ContentChangedEventProvider$EMFAdapter.notifyChanged(ContentChangedEventProvider.java:194)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:380)
	at org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(EcoreEList.java:255)
	at org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:300)
	at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:307)
	at org.eclipse.papyrus.sashwindows.di.impl.TabFolderImpl.addPage(TabFolderImpl.java:91)
	at org.eclipse.papyrus.sashwindows.di.impl.SashModelImpl.addPage(SashModelImpl.java:145)
	at org.eclipse.papyrus.sasheditor.contentprovider.di.internal.PageMngrImpl.openPage(PageMngrImpl.java:141)
	at org.eclipse.papyrus.sasheditor.contentprovider.di.internal.TransactionalPageMngrImpl$5.doExecute(TransactionalPageMngrImpl.java:164)
	at org.eclipse.emf.transaction.RecordingCommand.execute(RecordingCommand.java:135)
	at org.eclipse.emf.workspace.EMFCommandOperation.doExecute(EMFCommandOperation.java:119)
	at org.eclipse.emf.workspace.AbstractEMFOperation.execute(AbstractEMFOperation.java:150)
	at org.eclipse.core.commands.operations.DefaultOperationHistory.execute(DefaultOperationHistory.java:511)
	at org.eclipse.emf.workspace.impl.WorkspaceCommandStackImpl.doExecute(WorkspaceCommandStackImpl.java:208)
	at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:165)
	at org.eclipse.emf.transaction.impl.AbstractTransactionalCommandStack.execute(AbstractTransactionalCommandStack.java:219)
	at org.eclipse.papyrus.sasheditor.contentprovider.di.internal.TransactionalPageMngrImpl.openPage(TransactionalPageMngrImpl.java:169)
	at org.eclipse.papyrus.modelexplorer.actions.OpenDiagramAction.run(OpenDiagramAction.java:62)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)

I have experienced this bug also with deletion of attributes (and I think it's not the only elements on witch it can be seen).
I join a sample example witch is not my diagram because they are confidential but the behavior is exactly the same.

Reproducible: Always

Steps to Reproduce:
1.Import the SampleBasic.zip file containing a sample diagram
2.Open the Main diagram and the Module1 diagram (two Class diagrams) and no others
3.In the Module1 diagram, delete an operation of the Interface0Module1 interface (complete delete)
4.Open the Module3Dependencies diagram and the error comes.
Comment 1 Arnaud Dieumegard CLA 2010-10-20 06:09:36 EDT
Created attachment 181270 [details]
The sample diagram before being corrupted
Comment 2 Arnaud Dieumegard CLA 2010-10-20 06:11:10 EDT
Created attachment 181271 [details]
The sample diagram corrupted
Comment 3 Arnaud Dieumegard CLA 2010-10-25 06:33:04 EDT
Since the diagrams are corrupted it should be good for Papyrus to be able to reopen those corrupted diagrams.
Comment 4 Patrick Tessier CLA 2011-01-04 05:44:50 EST
Now this bug is solved by using a service edit. 
I have tested your example, now there is not corruption of diagram.