Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 317156 - [Wizard] NPE while creating a new Papyrus Model from an existing .uml file
Summary: [Wizard] NPE while creating a new Papyrus Model from an existing .uml file
Status: RESOLVED FIXED
Alias: None
Product: Papyrus
Classification: Modeling
Component: Core (show other bugs)
Version: unspecified   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 314834
  Show dependency tree
 
Reported: 2010-06-17 05:28 EDT by Tatiana Fesenko CLA
Modified: 2013-05-30 02:48 EDT (History)
1 user (show)

See Also:


Attachments
UML file (3.72 KB, application/octet-stream)
2012-08-20 10:51 EDT, John M. CLA
no flags Details
proposed patch for ModelSet (1.92 KB, patch)
2013-03-14 17:01 EDT, Andreas Brieg CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Tatiana Fesenko CLA 2010-06-17 05:28:55 EDT
1. Create a UML model, e.g. using New UML Model wizard. Add a root element, say, a Model and name it.
2. Select the newly created UML file. Invoke 'New Papyrus Model' wizard.

NPE is thrown. It didn’t happen before.  

The code which causes NPE looks like

      IPath path = file.getFullPath().removeFileExtension();

…     for(String modelId : modelIdentifiers) {

…                 model.changeModelPath(filenameWithoutExtension);

      }

The filenameWithoutException field is not initialized, it is null, and it ends up with an exception.

This problem is related to changes caused by the bug 315083: ModelSet: Allow to create .di and .notation models only, and do not create a domain model
Comment 1 John M. CLA 2012-08-20 10:51:25 EDT
Created attachment 220052 [details]
UML file

Generated uml from ecore model, reproduce the npe.

Stack Trace:
java.lang.NullPointerException
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.getCreateDiagramCommand(AbstractPapyrusGmfCreateDiagramCommandHandler.java:295)
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.runAsTransaction(AbstractPapyrusGmfCreateDiagramCommandHandler.java:121)
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler$1.doExecute(AbstractPapyrusGmfCreateDiagramCommandHandler.java:279)
	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:513)
	at org.eclipse.papyrus.commands.CheckedOperationHistory.execute(CheckedOperationHistory.java:182)
	at org.eclipse.papyrus.commands.NotifyingWorkspaceCommandStack.doExecute(NotifyingWorkspaceCommandStack.java:252)
	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.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.createDiagram(AbstractPapyrusGmfCreateDiagramCommandHandler.java:282)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.initDiagrams(CreateModelWizard.java:440)
	at org.eclipse.papyrus.uml.diagram.wizards.InitModelWizard.initDiagrams(InitModelWizard.java:192)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.initDiagramModel(CreateModelWizard.java:398)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.createAndOpenPapyrusModel(CreateModelWizard.java:179)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.performFinish(CreateModelWizard.java:156)
...
Comment 2 Andreas Brieg CLA 2013-03-07 14:42:31 EST
The stack trace has changed a bit in 0.9.2. Currently it is:

java.lang.NullPointerException
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.getCreateDiagramCommand(AbstractPapyrusGmfCreateDiagramCommandHandler.java:294)
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.runAsTransaction(AbstractPapyrusGmfCreateDiagramCommandHandler.java:120)
	at org.eclipse.papyrus.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler$1.doExecute(AbstractPapyrusGmfCreateDiagramCommandHandler.java:278)
	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:513)
	at org.eclipse.papyrus.commands.CheckedOperationHistory.execute(CheckedOperationHistory.java:182)
	at org.eclipse.papyrus.commands.NotifyingWorkspaceCommandStack.doExecute(NotifyingWorkspaceCommandStack.java:252)
	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.infra.gmfdiag.common.AbstractPapyrusGmfCreateDiagramCommandHandler.createDiagram(AbstractPapyrusGmfCreateDiagramCommandHandler.java:281)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.initDiagrams(CreateModelWizard.java:440)
	at org.eclipse.papyrus.uml.diagram.wizards.InitModelWizard.initDiagrams(InitModelWizard.java:192)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.initDiagramModel(CreateModelWizard.java:398)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.createAndOpenPapyrusModel(CreateModelWizard.java:179)
	at org.eclipse.papyrus.uml.diagram.wizards.CreateModelWizard.performFinish(CreateModelWizard.java:156)
	at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:827)
	at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
	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:4169)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:259)
	at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279)
	at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290)
	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:76)
	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.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:231)
	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:212)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:131)
	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:171)
	at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:515)
	at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157)
	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:4169)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
	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:353)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
	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:629)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

The problem is that the *.notation resource doesn't exist at that point.
Comment 3 Andreas Brieg CLA 2013-03-09 11:47:37 EST
I further investigated the problem in 0.9.2.

The cause of the problem is located in org.eclipse.papyrus.infra.core.resource.ModelSet.getAssociatedResource(Resource, String). It retrieves the notation resource with a load on demand. But the notation resource itself isn't stored on disk at that point. So the load on demand will fail.

The documentation of ModelSet states that after "call load() or create() then, it is possible to get associated models". But that contract is not correctly implemented. 

Maybe the associated resource should be retrieved without specifying a load on demand. If the resource has been retrieved it can be checked, if it exists and then loaded.
Comment 4 Andreas Brieg CLA 2013-03-14 17:01:13 EDT
Created attachment 228450 [details]
proposed patch for ModelSet

This is an implementation for my suggestion. It retrieves the resource with no load on demand and if the retrieved resource exists, it is then loaded.

However I don't see an initialized diagram when this patch is applied. So there is probably further investigation necessary.
Comment 5 Camille Letavernier CLA 2013-05-03 10:41:56 EDT
Works as expected in 0.10. I close this task