java.lang.AssertionError: Expected instance count: 0, actual: 1
Element 0
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$AdaptedSourceViewer#this$0 -> org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor@36dd4ac6
org.eclipse.jface.text.source.projection.ProjectionViewer$UpdateDocumentListener#this$0 -> org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$AdaptedSourceViewer@28797e8a
java.lang.Object[0] -> org.eclipse.jface.text.source.projection.ProjectionViewer$UpdateDocumentListener@68d08318
org.eclipse.core.runtime.ListenerList#listeners -> [Ljava.lang.Object;@29b720cd
org.eclipse.jface.text.AbstractDocument#fDocumentListeners -> [org.eclipse.jface.text.source.projection.ProjectionViewer$UpdateDocumentListener@68d08318]
org.eclipse.jface.text.TextSelection#fDocument -> org.eclipse.core.internal.filebuffers.SynchronizableDocument@12864353
org.eclipse.ui.internal.handlers.ActionDelegateHandlerProxy#currentSelection -> TextSelection [offset: 0, startLine: 0, length: 0, document: org.eclipse.core.internal.filebuffers.
org.eclipse.ui.internal.handlers.HandlerActivation#handler -> ActionDelegateHandlerProxy(org.eclipse.jdt.ui.tests.leaks.JavaLeakTestActionDelegate@748078e0,org.e
java.lang.Object[84] -> [ActionDelegateHandlerProxy(org.eclipse.jdt.ui.tests.leaks.JavaLeakTestActionDelegate@748078e0,org.
java.util.ArrayList#elementData -> [Ljava.lang.Object;@1356527a
org.eclipse.ui.internal.menus.LegacyActionPersistence#handlerActivations -> [[ActionDelegateHandlerProxy(null,org.eclipse.debug.internal.ui.actions.breakpoints.RetargetToggleB
org.eclipse.ui.internal.services.RegistryPersistence$$Lambda/0x00007f76ef33fdd8#arg$1 -> org.eclipse.ui.internal.menus.LegacyActionPersistence@50df3772
org.eclipse.core.internal.registry.ExtensionRegistry$ListenerInfo#listener -> org.eclipse.ui.internal.services.RegistryPersistence$$Lambda/0x00007f76ef33fdd8@453f92db
java.lang.Object[32] -> org.eclipse.core.internal.registry.ExtensionRegistry$ListenerInfo@453f92db
org.eclipse.core.runtime.ListenerList#listeners -> [Ljava.lang.Object;@11bc64f6
org.eclipse.core.internal.registry.ExtensionRegistry#listeners -> [org.eclipse.core.internal.registry.ExtensionRegistry$ListenerInfo@14f13587, org.eclipse.core.inter
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl#service -> org.eclipse.core.internal.registry.ExtensionRegistry@7107a4a3
java.lang.Object[51] -> {org.eclipse.core.runtime.IExtensionRegistry}={service.id=51, service.bundleid=176, service.scope=s
java.util.ArrayList#elementData -> [Ljava.lang.Object;@2a47fb5d
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry#allPublishedServices -> [{org.eclipse.osgi.framework.log.FrameworkLog}={service.id=4, service.bundleid=0, service.scope=bun
org.eclipse.osgi.internal.framework.EquinoxContainer#serviceRegistry -> org.eclipse.osgi.internal.serviceregistry.ServiceRegistry@74c997b1
org.eclipse.osgi.internal.loader.BundleLoader#container -> Equinox Container: d57b11db-e23c-4f58-90ea-e4b32796a4ee
org.eclipse.osgi.internal.loader.EquinoxClassLoader#delegate -> org.eclipse.jdt.ui.tests_3.16.300.v20250929-2035
org.eclipse.osgi.internal.loader.EquinoxClassLoader -> org.eclipse.osgi.internal.loader.EquinoxClassLoader@2bd15a2d[org.eclipse.jdt.ui.tests:3.16.300.v202
. Actual: 0
at org.junit.Assert.fail(Assert.java:89)
at org.junit.Assert.failEquals(Assert.java:187)
at org.junit.Assert.assertNotEquals(Assert.java:201)
at org.eclipse.jdt.ui.leaktest.LeakTestCase.assertInstanceCount(LeakTestCase.java:133)
at org.eclipse.jdt.ui.tests.leaks.JavaLeakTest.testJavaEditorActionDelegate(JavaLeakTest.java:483)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
The UpdateDocumentListener added in that PR is not always removed, causing memory leak.
See for example https://download.eclipse.org/eclipse/downloads/drops4/I20251007-1800/testresults/html/org.eclipse.jdt.ui.tests_ep438I-unit-linux-x86_64-java21_linux.gtk.x86_64_21.html
This is a regression from eclipse-platform/eclipse.platform.ui#3074.
The UpdateDocumentListener added in that PR is not always removed, causing memory leak.