Bug 572210 - Reflective access with CGLIB breaks windowbuilder in java 16 and higher
Summary: Reflective access with CGLIB breaks windowbuilder in java 16 and higher
Status: CLOSED MOVED
Alias: None
Product: z_Archived
Classification: Eclipse Foundation
Component: WindowBuilder (show other bugs)
Version: unspecified   Edit
Hardware: PC Linux
: P1 blocker (vote)
Target Milestone: ---   Edit
Assignee: Laurent CARON CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 573238 573490 573529 (view as bug list)
Depends on:
Blocks: 573490
  Show dependency tree
 
Reported: 2021-03-23 04:24 EDT by Missing name CLA
Modified: 2022-06-27 01:23 EDT (History)
8 users (show)

See Also:


Attachments
Screenshot (11.29 KB, text/x-log)
2021-03-23 04:24 EDT, Missing name CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Missing name CLA 2021-03-23 04:24:11 EDT
Created attachment 285921 [details]
Screenshot

Hi,
I receive an 'Unhandled event loop exception' exception (see attached) only when Eclipse runs JDK16.
When I use JDK16 for my workspace it works.

I use Eclipse 4.19 with JDK16 patches.

Attached the screenshot showing the exception and a sample projecz.

ava.lang.NullPointerException: Cannot invoke "org.eclipse.jface.viewers.ISelectionProvider.addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)" because "this.m_selectionProvider" is null
	at org.eclipse.wb.internal.core.editor.UndoManager.addSelectionListener(UndoManager.java:187)
	at org.eclipse.wb.internal.core.editor.UndoManager.refreshDesignerEditor(UndoManager.java:382)
	at org.eclipse.wb.internal.core.editor.UndoManager.activate(UndoManager.java:90)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState_True(DesignPage.java:263)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState(DesignPage.java:241)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode.showPage(DefaultMultiMode.java:125)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode$1.widgetSelected(DefaultMultiMode.java:63)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1453)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1436)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1225)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3243)
	at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1881)
	at org.eclipse.swt.custom.CTabFolder.lambda$0(CTabFolder.java:330)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5092)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4570)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1461)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1434)

Eclipse Log:
!ENTRY org.eclipse.ui 4 0 2021-03-23 09:09:44.715
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.ExceptionInInitializerError
	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:166)
	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
	at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
	at org.eclipse.wb.core.model.broadcast.BroadcastSupport.getListener(BroadcastSupport.java:198)
	at org.eclipse.wb.internal.core.parser.JavaInfoParser.<init>(JavaInfoParser.java:216)
	at org.eclipse.wb.internal.core.parser.JavaInfoParser.<init>(JavaInfoParser.java:208)
	at org.eclipse.wb.internal.core.parser.JavaInfoParser.parse(JavaInfoParser.java:150)
	at org.eclipse.wb.internal.core.editor.DesignPage.internal_refreshGEF(DesignPage.java:534)
	at org.eclipse.wb.internal.core.editor.DesignPage.access$9(DesignPage.java:522)
	at org.eclipse.wb.internal.core.editor.DesignPage$8$1.run(DesignPage.java:449)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:5941)
	at org.eclipse.wb.internal.core.editor.DesignPage$8.run(DesignPage.java:446)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:436)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:352)
	at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:468)
	at org.eclipse.wb.internal.core.editor.DesignPage.internal_refreshGEF_withProgress(DesignPage.java:465)
	at org.eclipse.wb.internal.core.editor.DesignPage.internal_refreshGEF(DesignPage.java:415)
	at org.eclipse.wb.internal.core.editor.UndoManager.refreshDesignerEditor(UndoManager.java:381)
	at org.eclipse.wb.internal.core.editor.UndoManager.activate(UndoManager.java:90)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState_True(DesignPage.java:263)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState(DesignPage.java:241)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode.showPage(DefaultMultiMode.java:125)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode$1.widgetSelected(DefaultMultiMode.java:63)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1453)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1436)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1225)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3243)
	at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1881)
	at org.eclipse.swt.custom.CTabFolder.lambda$0(CTabFolder.java:330)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5092)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4570)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1461)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1434)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @8f7544a
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
	at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
	at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
	at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
	at net.sf.cglib.core.ReflectUtils$2.run(ReflectUtils.java:56)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
	at net.sf.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:46)
	... 67 more

!ENTRY org.eclipse.ui 4 0 2021-03-23 09:09:44.722
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.NullPointerException: Cannot invoke "org.eclipse.jface.viewers.ISelectionProvider.addSelectionChangedListener(org.eclipse.jface.viewers.ISelectionChangedListener)" because "this.m_selectionProvider" is null
	at org.eclipse.wb.internal.core.editor.UndoManager.addSelectionListener(UndoManager.java:187)
	at org.eclipse.wb.internal.core.editor.UndoManager.refreshDesignerEditor(UndoManager.java:382)
	at org.eclipse.wb.internal.core.editor.UndoManager.activate(UndoManager.java:90)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState_True(DesignPage.java:263)
	at org.eclipse.wb.internal.core.editor.DesignPage.handleActiveState(DesignPage.java:241)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode.showPage(DefaultMultiMode.java:125)
	at org.eclipse.wb.internal.core.editor.multi.DefaultMultiMode$1.widgetSelected(DefaultMultiMode.java:63)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1453)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1436)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1225)
	at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3243)
	at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1881)
	at org.eclipse.swt.custom.CTabFolder.lambda$0(CTabFolder.java:330)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5831)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1427)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:5092)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4570)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1461)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1434)
Comment 1 Wim Jongman CLA 2021-03-23 07:00:04 EDT
Hello Alexander, thanks for reporting. The reason is the usage of cglib. 

Before Java 16 we got this:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by ...
WARNING: Please consider reporting this to the maintainers of ... WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

Now with Java 16 it seems broken.

https://www.eclipse.org/lists/platform-dev/msg02726.html
http://jdk.java.net/16/release-notes section Proxy Classes Are Not Open for Reflective Access
https://github.com/spring-projects/spring-framework/issues/20414
Comment 2 Missing name CLA 2021-03-23 07:24:44 EDT
Thanks for your quick reply.
Comment 3 Missing name CLA 2021-03-25 07:25:47 EDT
Hi,

It works well when I use " --illegal-access=permit" (in eclipse.ini), 
proposed by Laurent.

Regards
Alex
Comment 4 Laurent CARON CLA 2021-03-25 12:41:57 EDT
Thank you for your feeback. We have a workaround before the definitive fix.
Comment 5 Wim Jongman CLA 2021-03-25 12:43:32 EDT
(In reply to Laurent CARON from comment #4)
> Thank you for your feeback. We have a workaround before the definitive fix.

Thanks, Laurent! Good call. I assumed it was all gone in Java16.
Comment 6 Carmen S. CLA 2021-05-12 12:18:22 EDT
I have just registered to say thank you, I had the same problem and the " --illegal-access=permit" solution worked for me too.
Comment 7 Wim Jongman CLA 2021-05-13 12:55:33 EDT
(In reply to Carmen S. from comment #6)
> I have just registered to say thank you, 

We appreciate that!
Comment 8 Wim Jongman CLA 2021-05-14 04:03:03 EDT
*** Bug 573529 has been marked as a duplicate of this bug. ***
Comment 9 Wim Jongman CLA 2021-05-14 04:04:05 EDT
*** Bug 573490 has been marked as a duplicate of this bug. ***
Comment 10 Eclipse Genie CLA 2021-05-15 11:30:23 EDT
New Gerrit change created: https://git.eclipse.org/r/c/www.eclipse.org/windowbuilder/+/180631
Comment 12 Eclipse Genie CLA 2021-05-17 04:14:40 EDT
New Gerrit change created: https://git.eclipse.org/r/c/www.eclipse.org/windowbuilder/+/180665
Comment 14 Holger Voormann CLA 2021-05-25 02:45:27 EDT
This issue was also reported on Stack Overflow (at least 4 times so far, of which 3 were closed as duplicate):
https://stackoverflow.com/q/67394509/6505250
Comment 15 Holger Voormann CLA 2021-05-25 02:51:50 EDT
I have raised bug 573739 to JustJ, so that this problem does not occur for those using a JustJ Java 16 JRE when JustJ would add the --illegal-access=permit VM arg.
Comment 16 Wim Jongman CLA 2021-05-25 04:03:23 EDT
Thanks for taking care of those two things, Holger.
Comment 17 Holger Voormann CLA 2021-06-04 04:56:04 EDT
Pull request to add the VM argument "--illegal-access=permit" to "eclipse.ini" via a separate fragment and the p2 Eclipse touchpoint action "addJvmArg":
https://github.com/eclipse/windowbuilder/pull/41

Adding "--illegal-access=permit" even when it is not needed does not seem to cause an issue, at least with a Java 11 HotSpot or OpenJ9 VM. So, adding "--illegal-access=permit" seems safe independent of which Java VM is used.
Comment 19 Niraj Modi CLA 2021-11-10 06:31:28 EST
*** Bug 573238 has been marked as a duplicate of this bug. ***
Comment 20 Christian Haeussler CLA 2022-06-27 01:23:27 EDT
The argument --illegal-access=permit is no longer supported with Java 17.