eclipse-platform / eclipse.platform.ui

Eclipse Platform
https://projects.eclipse.org/projects/eclipse.platform
Eclipse Public License 2.0
75 stars 156 forks source link

Not properly disposed SWT resource in AnnotationCodeMiningFilter.isPaintable #1830

Open BeckerWdf opened 3 months ago

BeckerWdf commented 3 months ago

Let's make sure issue is not already fixed in latest builds first.

Steps to reproduce

From a fresh installation and clean workspace:

I found this in the error log:

java.lang.Error: SWT Resource was not properly disposed
    at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172)
    at org.eclipse.swt.graphics.Resource.<init>(Resource.java:120)
    at org.eclipse.swt.graphics.Image.<init>(Image.java:771)
    at org.eclipse.jface.resource.URLImageDescriptor.createImage(URLImageDescriptor.java:306)
    at org.eclipse.jface.resource.DeferredImageDescriptor.createImage(DeferredImageDescriptor.java:85)
    at org.eclipse.jface.resource.ImageDescriptor.createResource(ImageDescriptor.java:229)
    at org.eclipse.jface.resource.DeviceResourceManager.allocate(DeviceResourceManager.java:56)
    at org.eclipse.jface.resource.AbstractResourceManager.create(AbstractResourceManager.java:92)
    at org.eclipse.jface.resource.LazyResourceManager.create(LazyResourceManager.java:88)
    at org.eclipse.jface.resource.ResourceManager.createImageWithDefault(ResourceManager.java:192)
    at org.eclipse.jface.resource.ImageRegistry.get(ImageRegistry.java:208)
    at org.eclipse.ui.internal.WorkbenchImages.getImage(WorkbenchImages.java:378)
    at org.eclipse.ui.internal.SharedImages.getImage(SharedImages.java:31)
    at org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess.getImage(DefaultMarkerAnnotationAccess.java:415)
    at org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess.isPaintable(DefaultMarkerAnnotationAccess.java:298)
    at org.eclipse.ui.internal.editors.text.codemining.annotation.AnnotationCodeMiningFilter.isPaintable(AnnotationCodeMiningFilter.java:104)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
    at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:280)
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.findAny(ReferencePipeline.java:652)
    at org.eclipse.ui.internal.editors.text.codemining.annotation.AnnotationCodeMiningFilter.isEmpty(AnnotationCodeMiningFilter.java:77)
    at org.eclipse.ui.internal.editors.text.codemining.annotation.AnnotationCodeMiningProvider$AnnotationModelListener.modelChanged(AnnotationCodeMiningProvider.java:138)
    at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:592)
    at org.eclipse.jface.text.source.AnnotationModel$InternalModelListener.modelChanged(AnnotationModel.java:256)
    at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:592)
    at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:558)
    at org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel.update(ResourceMarkerAnnotationModel.java:114)
    at org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel$ResourceChangeListener.resourceChanged(ResourceMarkerAnnotationModel.java:57)
    at org.eclipse.core.internal.events.NotificationManager$1.run(NotificationManager.java:321)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
    at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:311)
    at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:174)
    at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:458)
    at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1586)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2462)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2473)
...

Community

BeckerWdf commented 3 months ago

May it can be fixed similar to the fix in #1829

jukzi commented 2 months ago

The stacktrace shows it uses "org.eclipse.ui.ISharedImages.getImage(String)" which is documented clients must <b>not</b> dispose of the returned image. The image should have been disposed with org.eclipse.jface.resource.ImageRegistry.dispose()