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

Bug 239736

Summary: VE 1.3 on Ganymede throws NullPointerException when opening a ViewPart
Product: z_Archived Reporter: Emanuele Ziglioli <me>
Component: VEAssignee: Yves YANG <yves.yang>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: jkolter, juusojekku, philippe_mulet, remy.suen, ville.kanerva, yves.yang
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
URL: http://divby0.blogspot.com/2008/07/visual-editor-for-eclipse-34-ganymede.html
Whiteboard:
Attachments:
Description Flags
Patch to ControlManager to log warnings when controlBeanProxies are not resolved
yves.yang: iplog+
replace: org.eclipse.ve.swt_1.4.0.xxxx.jar/vm/jbcfswtvm.jar
none
patch for this bug. yves.yang: iplog+

Description Emanuele Ziglioli CLA 2008-07-06 17:35:09 EDT
I'm using a VE 1.3 distribution on Eclipse 3.4.
When I try to open a class that extends ViewPart using the Visual Editor, an exception is thrown.
As a result, there's no output in the Preview, Property and JavaBeans views.

Eclipse reports two errors in the error Log.

Older one:

java.lang.NullPointerException
at org.eclipse.ve.internal.swt.ControlManager.refreshImage(ControlManager.java:934)
at org.eclipse.ve.internal.rcp.WorkbenchPartProxyAdapter.refreshImage(WorkbenchPartProxyAdapter.java:494)
at org.eclipse.ve.internal.cde.core.ImageFigureController.setImageNotifier(ImageFigureController.java:174)
at org.eclipse.ve.internal.rcp.WorkbenchPartGraphicalEditPart.activate(WorkbenchPartGraphicalEditPart.java:170)
at org.eclipse.gef.editparts.AbstractEditPart.activate(AbstractEditPart.java:152)
at org.eclipse.gef.editparts.AbstractGraphicalEditPart.activate(AbstractGraphicalEditPart.java:193)
at org.eclipse.ve.internal.java.core.CompositionComponentsGraphicalEditPart.activate(CompositionComponentsGraphicalEditPart.java:88)
at org.eclipse.ve.internal.java.vce.SubclassCompositionComponentsGraphicalEditPart.activate(SubclassCompositionComponentsGraphicalEditPart.java:70)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart.setRootModel(JavaVisualEditorPart.java:505)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart.initializeViewers(JavaVisualEditorPart.java:1121)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart$Setup$2.run(JavaVisualEditorPart.java:2098)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
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:382)
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:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)


New one:

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(SWT.java:3777)
at org.eclipse.swt.SWT.error(SWT.java:3695)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:136)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3800)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3425)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
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:382)
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:549)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
Caused by: java.lang.NullPointerException
at org.eclipse.ve.internal.swt.ControlManager.refreshImage(ControlManager.java:934)
at org.eclipse.ve.internal.rcp.WorkbenchPartProxyAdapter.refreshImage(WorkbenchPartProxyAdapter.java:494)
at org.eclipse.ve.internal.cde.core.ImageFigureController.setImageNotifier(ImageFigureController.java:174)
at org.eclipse.ve.internal.rcp.WorkbenchPartGraphicalEditPart.activate(WorkbenchPartGraphicalEditPart.java:170)
at org.eclipse.gef.editparts.AbstractEditPart.activate(AbstractEditPart.java:152)
at org.eclipse.gef.editparts.AbstractGraphicalEditPart.activate(AbstractGraphicalEditPart.java:193)
at org.eclipse.ve.internal.java.core.CompositionComponentsGraphicalEditPart.activate(CompositionComponentsGraphicalEditPart.java:88)
at org.eclipse.ve.internal.java.vce.SubclassCompositionComponentsGraphicalEditPart.activate(SubclassCompositionComponentsGraphicalEditPart.java:70)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart.setRootModel(JavaVisualEditorPart.java:505)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart.initializeViewers(JavaVisualEditorPart.java:1121)
at org.eclipse.ve.internal.java.codegen.editorpart.JavaVisualEditorPart$Setup$2.run(JavaVisualEditorPart.java:2098)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:133)
... 22 more
Comment 1 Remy Suen CLA 2008-07-06 21:17:52 EDT
I'm also getting this error. Although I also had some other JEM errors. Note that I was debugging VE and not actually launching a VE-installed Eclipse.
Comment 2 Jason Kolter CLA 2008-10-15 00:04:30 EDT
I get the same errors when trying Ganymede with the VE 1.4 version at http://update.soyatec.org/Ganymede/ve/1.4
Comment 3 Immanuel Scheerer CLA 2008-10-16 05:54:42 EDT
Created attachment 115238 [details]
Patch to ControlManager to log warnings when controlBeanProxies are not resolved

The NullPointerException is caused by a missing controlBeanProxy in ControlManager. Simply checking if controlBeanproxy is null to avoid the NullPointerException does not solve the problem because ControlManager can't work without a controlBeanProxy.

The missing controlBeanProxy can be detected earlier (see patch): ControlManager#setControlBeanProxy(...) does not set the controlBeanProxy directly, but registers a proxy listener (line 378, ControlManager), and when the proxy is correctly resolved, the controlBeanProxy is set. I added the proxyNotResolved(ProxyEvent)-method to log unresolved proxies which actually cause the NullPointerExceptions.

Unfortunately I couldn't figure out what causes proxy resolution to fail. I first suspected a network communication problem betwenn remote and local vm. Then I thought that the creation of proxies according to the EMF-model has problems caused by the workbench parts (view or editor). But I could not approve any of my thoughts.
Comment 4 novaeye liang CLA 2009-04-03 12:11:32 EDT
Created attachment 130852 [details]
replace: org.eclipse.ve.swt_1.4.0.xxxx.jar/vm/jbcfswtvm.jar

replace: org.eclipse.ve.swt_1.4.0.xxxx.jar/vm/jbcfswtvm.jar
Comment 5 novaeye liang CLA 2009-04-03 12:16:08 EDT
Created attachment 130853 [details]
patch for this bug.
Comment 6 Yves YANG CLA 2009-04-03 19:00:46 EDT
Thanks legend! I have tested and integrated it in CVS. 
Comment 7 Yves YANG CLA 2009-07-03 05:04:01 EDT
fixed in 1.4.