diff --git a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java --- a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java +++ b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java @@ -45,7 +45,6 @@ package org.netbeans.modules.ant.freeform; import java.io.File; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -67,9 +66,9 @@ import org.openide.filesystems.FileObject; import org.openide.filesystems.FileRenameEvent; import org.openide.filesystems.FileUtil; +import org.openide.util.CallbackReferences; import org.openide.util.ChangeSupport; import org.openide.util.Mutex; -import org.openide.util.Utilities; import org.openide.xml.XMLUtil; import org.w3c.dom.Element; @@ -209,14 +208,14 @@ cs.fireChange(); } - private class WeakFileListener extends WeakReference implements Runnable, FileChangeListener { + private class WeakFileListener extends CallbackReferences.WeakCallback implements FileChangeListener { private final File file; private WeakFileListener ( final FreeformSources source, final File file) { - super (source, Utilities.activeReferenceQueue()); + super (source); this.file = file; } diff --git a/bugtracking/src/org/netbeans/modules/bugtracking/RepositoryImpl.java b/bugtracking/src/org/netbeans/modules/bugtracking/RepositoryImpl.java --- a/bugtracking/src/org/netbeans/modules/bugtracking/RepositoryImpl.java +++ b/bugtracking/src/org/netbeans/modules/bugtracking/RepositoryImpl.java @@ -45,7 +45,6 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; -import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.util.*; import java.util.Map.Entry; @@ -57,7 +56,7 @@ import org.netbeans.modules.team.spi.NBRepositoryProvider; import org.netbeans.modules.team.spi.OwnerInfo; import org.netbeans.modules.team.spi.TeamBugtrackingConnector; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** @@ -502,10 +501,10 @@ abstract WRAPPER createWrapper(DATA d); - private class MapReference extends WeakReference implements Runnable { + private class MapReference extends CallbackReferences.WeakCallback { private final DATA key; public MapReference(DATA d, WRAPPER w) { - super(w, Utilities.activeReferenceQueue()); + super(w); this.key = d; } @Override diff --git a/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java b/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java --- a/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java +++ b/core.windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java @@ -80,11 +80,10 @@ import org.openide.loaders.InstanceDataObject; import org.openide.modules.ModuleInfo; import org.openide.modules.SpecificationVersion; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.openide.util.Utilities; -import org.openide.util.io.SafeException; import org.openide.windows.TopComponent; import org.openide.xml.XMLUtil; import org.xml.sax.EntityResolver; @@ -1394,11 +1393,11 @@ * This class is used to clean internal maps containing > * after TopComponent instanced was gc'ed. */ - private class TopComponentReference extends WeakReference implements Runnable { + private class TopComponentReference extends CallbackReferences.WeakCallback { private final String tcID; public TopComponentReference (TopComponent ref, String tcID) { - super(ref, Utilities.activeReferenceQueue()); + super(ref); this.tcID = tcID; } diff --git a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/WeakHashMapActive.java b/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/WeakHashMapActive.java --- a/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/WeakHashMapActive.java +++ b/debugger.jpda.projects/src/org/netbeans/modules/debugger/jpda/projects/WeakHashMapActive.java @@ -41,13 +41,11 @@ */ package org.netbeans.modules.debugger.jpda.projects; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.WeakReference; import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** * A weak hash map, that automatically release entries as soon as they are freed by GC. @@ -57,18 +55,16 @@ // TODO: Make it a public API. There's another copy of this class in debugger.jpda module. public final class WeakHashMapActive extends AbstractMap { - private final ReferenceQueue queue; private final Map, V> map; public WeakHashMapActive() { super(); map = new HashMap<>(); - queue = BaseUtilities.activeReferenceQueue(); } @Override public V put(K key, V value) { - KeyReference rk = new KeyReference<>(key, queue); + KeyReference rk = new KeyReference<>(key); synchronized (map) { return map.put(rk, value); } @@ -76,7 +72,7 @@ @Override public V get(Object key) { - KeyReference rk = new KeyReference<>(key, null); + KeyReference rk = new KeyReference<>(key, true); synchronized (map) { return map.get(rk); } @@ -84,7 +80,7 @@ @Override public V remove(Object key) { - KeyReference rk = new KeyReference<>(key, null); + KeyReference rk = new KeyReference<>(key, true); synchronized (map) { return map.remove(rk); } @@ -109,13 +105,18 @@ throw new UnsupportedOperationException("Not supported."); } - private class KeyReference extends WeakReference implements Runnable { + private class KeyReference extends CallbackReferences.WeakCallback { private final int hash; + private final boolean test; - KeyReference(K r, ReferenceQueue queue) { - super(r, queue); + KeyReference(K r) { + this(r, false); + } + KeyReference(K r, boolean test) { + super(r); hash = r.hashCode(); + this.test = test; } @Override @@ -140,6 +141,9 @@ @Override public void run() { // Collected + if (test) { + return ; + } synchronized (map) { map.remove(this); } diff --git a/debugger.jpda/src/org/netbeans/modules/debugger/jpda/util/WeakHashMapActive.java b/debugger.jpda/src/org/netbeans/modules/debugger/jpda/util/WeakHashMapActive.java --- a/debugger.jpda/src/org/netbeans/modules/debugger/jpda/util/WeakHashMapActive.java +++ b/debugger.jpda/src/org/netbeans/modules/debugger/jpda/util/WeakHashMapActive.java @@ -41,13 +41,11 @@ */ package org.netbeans.modules.debugger.jpda.util; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.WeakReference; import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** * A weak hash map, that automatically release entries as soon as they are freed by GC. @@ -57,18 +55,16 @@ // TODO: Make it a public API. There's another copy of this class in debugger.jpda.projects module. public final class WeakHashMapActive extends AbstractMap { - private final ReferenceQueue queue; private final Map, V> map; public WeakHashMapActive() { super(); map = new HashMap<>(); - queue = BaseUtilities.activeReferenceQueue(); } @Override public V put(K key, V value) { - KeyReference rk = new KeyReference<>(key, queue); + KeyReference rk = new KeyReference<>(key); synchronized (map) { return map.put(rk, value); } @@ -76,7 +72,7 @@ @Override public V get(Object key) { - KeyReference rk = new KeyReference<>(key, null); + KeyReference rk = new KeyReference<>(key, true); synchronized (map) { return map.get(rk); } @@ -84,7 +80,7 @@ @Override public V remove(Object key) { - KeyReference rk = new KeyReference<>(key, null); + KeyReference rk = new KeyReference<>(key, true); synchronized (map) { return map.remove(rk); } @@ -109,13 +105,19 @@ throw new UnsupportedOperationException("Not supported."); } - private class KeyReference extends WeakReference implements Runnable { + private class KeyReference extends CallbackReferences.WeakCallback { private final int hash; + private final boolean test; - KeyReference(K r, ReferenceQueue queue) { - super(r, queue); + KeyReference(K r) { + this(r, false); + } + + KeyReference(K r, boolean test) { + super(r); hash = r.hashCode(); + this.test = test; } @Override @@ -140,6 +142,9 @@ @Override public void run() { // Collected + if (test) { + return ; + } synchronized (map) { map.remove(this); } diff --git a/editor.document/src/org/netbeans/modules/editor/lib2/document/Mark.java b/editor.document/src/org/netbeans/modules/editor/lib2/document/Mark.java --- a/editor.document/src/org/netbeans/modules/editor/lib2/document/Mark.java +++ b/editor.document/src/org/netbeans/modules/editor/lib2/document/Mark.java @@ -42,7 +42,7 @@ package org.netbeans.modules.editor.lib2.document; -import java.lang.ref.WeakReference; +import org.openide.util.CallbackReferences; /** * Mark is an element of the {@link MarkVector}. @@ -60,7 +60,7 @@ * @since 1.46 */ -final class Mark extends WeakReference implements Runnable { +final class Mark extends CallbackReferences.WeakCallback { /** * Offset at which the mark is located in the document. @@ -81,7 +81,7 @@ * Construct mark instance. */ Mark(MarkVector markVector, int rawOffset, EditorPosition pos) { - super(pos, org.openide.util.BaseUtilities.activeReferenceQueue()); // The queue calls run() when unreachable + super(pos); // Calls run() when unreachable this.markVector = markVector; this.rawOffset = rawOffset; pos.initMark(this); @@ -104,7 +104,7 @@ } public void run() { - // Called by Utilities.activeReferenceQueue() once the EditorPosition + // Called by CallbackReferences once the EditorPosition // is no longer reachable MarkVector lMarkVector = markVector; if (lMarkVector != null) { diff --git a/editor.indent.project/src/org/netbeans/modules/editor/indent/project/ProjectAwareCodeStylePreferences.java b/editor.indent.project/src/org/netbeans/modules/editor/indent/project/ProjectAwareCodeStylePreferences.java --- a/editor.indent.project/src/org/netbeans/modules/editor/indent/project/ProjectAwareCodeStylePreferences.java +++ b/editor.indent.project/src/org/netbeans/modules/editor/indent/project/ProjectAwareCodeStylePreferences.java @@ -44,7 +44,6 @@ import java.lang.ref.Reference; import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; @@ -65,8 +64,8 @@ import org.netbeans.modules.editor.indent.spi.CodeStylePreferences; import org.openide.filesystems.FileObject; import org.openide.loaders.DataObject; +import org.openide.util.CallbackReferences; import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; import org.openide.util.WeakListeners; import org.openide.util.lookup.ServiceProvider; @@ -93,7 +92,9 @@ private static final Logger LOG = Logger.getLogger(ProjectAwareCodeStylePreferences.class.getName()); private static final RequestProcessor RP = new RequestProcessor("Project Aware Code Style Preferences", 1, false, false); //NOI18N - private static final CodeStylePreferences.Provider singleton = new CodeStylePreferences.Provider() { + private static final CodeStylePreferences.Provider singleton = new CSPProvider(); + + private static final class CSPProvider implements CodeStylePreferences.Provider, CallbackReferences.Callback { @Override public Preferences forFile(FileObject file, String mimeType) { @@ -131,7 +132,7 @@ csp = new Csp( mimeType, - doc == null ? null : new CleaningWeakReference(doc), + doc == null ? null : new CallbackReferences.Weak(doc, this), file); if (csps == null) { csps = new HashMap(); @@ -159,20 +160,14 @@ return csp; } - final class CleaningWeakReference extends WeakReference implements Runnable { + @Override + public void referenceCleared(Reference reference) { + synchronized (cache) { + //expunge stale entries from the cache: + cache.size(); + } + } - public CleaningWeakReference(Document referent) { - super(referent, Utilities.activeReferenceQueue()); - } - - public @Override void run() { - synchronized (cache) { - //expunge stale entries from the cache: - cache.size(); - } - } - - } }; private static final class Csp { diff --git a/editor.lib/src/org/netbeans/modules/editor/lib/impl/MultiMark.java b/editor.lib/src/org/netbeans/modules/editor/lib/impl/MultiMark.java --- a/editor.lib/src/org/netbeans/modules/editor/lib/impl/MultiMark.java +++ b/editor.lib/src/org/netbeans/modules/editor/lib/impl/MultiMark.java @@ -44,8 +44,8 @@ package org.netbeans.modules.editor.lib.impl; -import java.lang.ref.WeakReference; import javax.swing.text.Position; +import org.openide.util.CallbackReferences; /** @@ -57,7 +57,7 @@ * @version 1.00 */ -public final class MultiMark extends WeakReference implements Runnable { +public final class MultiMark extends CallbackReferences.WeakCallback { /** Whether mark has a backward (or forward) bias */ static final int BACKWARD_BIAS = 1; @@ -107,7 +107,7 @@ /** Construct new mark. The mark is invalid by default. */ private MultiMark(BasePosition pos, MarkVector markVector, int offset, int flags) { - super(pos, org.openide.util.Utilities.activeReferenceQueue()); + super(pos); if (pos != null) { pos.setMark(this); } @@ -140,7 +140,7 @@ } public void run() { - // Called by Utilities.activeReferenceQueue() once the BasePosition + // Called by CallbackReferences once the BasePosition // is no longer reachable dispose(); diff --git a/editor.lib2/src/org/netbeans/modules/editor/lib2/WeakReferenceStableList.java b/editor.lib2/src/org/netbeans/modules/editor/lib2/WeakReferenceStableList.java --- a/editor.lib2/src/org/netbeans/modules/editor/lib2/WeakReferenceStableList.java +++ b/editor.lib2/src/org/netbeans/modules/editor/lib2/WeakReferenceStableList.java @@ -41,12 +41,12 @@ */ package org.netbeans.modules.editor.lib2; -import java.lang.ref.WeakReference; import java.util.AbstractList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.NoSuchElementException; +import org.openide.util.CallbackReferences; /** * List holding non-null items weakly with automatic collection of GCed items. @@ -238,12 +238,12 @@ } - private static final class WeakRef extends WeakReference implements Runnable { + private static final class WeakRef extends CallbackReferences.WeakCallback { private final WeakReferenceStableList list; public WeakRef(E e, WeakReferenceStableList list) { - super(e, org.openide.util.Utilities.activeReferenceQueue()); + super(e); this.list = list; } diff --git a/editor.lib2/src/org/netbeans/modules/editor/lib2/actions/KeyBindingsUpdater.java b/editor.lib2/src/org/netbeans/modules/editor/lib2/actions/KeyBindingsUpdater.java --- a/editor.lib2/src/org/netbeans/modules/editor/lib2/actions/KeyBindingsUpdater.java +++ b/editor.lib2/src/org/netbeans/modules/editor/lib2/actions/KeyBindingsUpdater.java @@ -41,7 +41,6 @@ */ package org.netbeans.modules.editor.lib2.actions; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -57,6 +56,7 @@ import org.netbeans.api.editor.settings.MultiKeyBinding; import org.netbeans.lib.editor.util.ArrayUtilities; import org.netbeans.spi.editor.AbstractEditorAction; +import org.openide.util.CallbackReferences; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; @@ -203,10 +203,10 @@ updateActionsAndKits(); } - private final class KitReference extends WeakReference implements Runnable { + private final class KitReference extends CallbackReferences.WeakCallback { KitReference(EditorKit kit) { - super(kit, org.openide.util.Utilities.activeReferenceQueue()); + super(kit); } @Override diff --git a/editor.lib2/src/org/netbeans/spi/editor/highlighting/support/OffsetsBag.java b/editor.lib2/src/org/netbeans/spi/editor/highlighting/support/OffsetsBag.java --- a/editor.lib2/src/org/netbeans/spi/editor/highlighting/support/OffsetsBag.java +++ b/editor.lib2/src/org/netbeans/spi/editor/highlighting/support/OffsetsBag.java @@ -44,7 +44,6 @@ package org.netbeans.spi.editor.highlighting.support; -import java.lang.ref.WeakReference; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.event.DocumentEvent; @@ -54,7 +53,7 @@ import org.netbeans.api.editor.settings.AttributesUtilities; import org.netbeans.modules.editor.lib2.highlighting.OffsetGapList; import org.netbeans.spi.editor.highlighting.*; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** * A bag of highlighted areas specified by their offsets in a document. @@ -922,12 +921,12 @@ } } // End of Seq class - private static final class DocL extends WeakReference implements DocumentListener, Runnable { + private static final class DocL extends CallbackReferences.WeakCallback implements DocumentListener { private Document document; public DocL(OffsetsBag bag) { - super(bag, Utilities.activeReferenceQueue()); + super(bag); this.document = bag.getDocument(); } diff --git a/editor.mimelookup.impl/src/org/netbeans/modules/editor/mimelookup/impl/FolderPathLookup.java b/editor.mimelookup.impl/src/org/netbeans/modules/editor/mimelookup/impl/FolderPathLookup.java --- a/editor.mimelookup.impl/src/org/netbeans/modules/editor/mimelookup/impl/FolderPathLookup.java +++ b/editor.mimelookup.impl/src/org/netbeans/modules/editor/mimelookup/impl/FolderPathLookup.java @@ -47,7 +47,6 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -63,6 +62,7 @@ import org.openide.filesystems.FileStateInvalidException; import org.openide.filesystems.spi.CustomInstanceFactory; import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.lookup.AbstractLookup; @@ -279,7 +279,7 @@ *
* Once the instance gets released the item will be removed from cache. */ - private static final class InstanceItem { + private static final class InstanceItem implements CallbackReferences.Callback { static final long serialVersionUID = 10L; @@ -348,7 +348,7 @@ if (inst == null) { inst = createInstanceFor(fo, Object.class); if (inst != null) { - setRef(new Ref(inst)); + setRef(new CallbackReferences.Weak(inst, this)); } } return inst; @@ -481,20 +481,12 @@ void release() { releaseInstanceItem(this); } + + @Override + public void referenceCleared(Reference reference) { + release(); + } - private final class Ref extends WeakReference implements Runnable { - - Ref(Object inst) { - super(inst, BaseUtilities.activeReferenceQueue()); - } - - @Override - public void run() { - release(); - } - - } - } } diff --git a/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/keybindings/KeyBindingSettingsImpl.java b/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/keybindings/KeyBindingSettingsImpl.java --- a/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/keybindings/KeyBindingSettingsImpl.java +++ b/editor.settings.storage/src/org/netbeans/modules/editor/settings/storage/keybindings/KeyBindingSettingsImpl.java @@ -68,7 +68,7 @@ import org.netbeans.modules.editor.settings.storage.api.EditorSettings; import org.netbeans.modules.editor.settings.storage.api.EditorSettingsStorage; import org.netbeans.modules.editor.settings.storage.api.KeyBindingSettingsFactory; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** * KeyBindings settings are represented by List of keybindings. @@ -293,7 +293,7 @@ return new Immutable(result); } - private static final class Listener extends WeakReference implements PropertyChangeListener, Runnable { + private static final class Listener extends CallbackReferences.WeakCallback implements PropertyChangeListener { private final KeyBindingSettingsFactory baseKBS; private final EditorSettingsStorage, MultiKeyBinding> storage; @@ -302,7 +302,7 @@ KeyBindingSettingsImpl kb, KeyBindingSettingsFactory baseKBS ) { - super(kb, Utilities.activeReferenceQueue()); + super(kb); this.baseKBS = baseKBS; this.storage = EditorSettingsStorage.get(KeyMapsStorage.ID); diff --git a/editor.tools.storage/src/org/netbeans/modules/editor/tools/storage/api/XMLHintPreferences.java b/editor.tools.storage/src/org/netbeans/modules/editor/tools/storage/api/XMLHintPreferences.java --- a/editor.tools.storage/src/org/netbeans/modules/editor/tools/storage/api/XMLHintPreferences.java +++ b/editor.tools.storage/src/org/netbeans/modules/editor/tools/storage/api/XMLHintPreferences.java @@ -50,7 +50,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.ref.Reference; -import java.lang.ref.SoftReference; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; @@ -62,6 +61,7 @@ import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import org.netbeans.api.annotations.common.NonNull; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.RequestProcessor; import org.openide.util.Utilities; @@ -324,11 +324,11 @@ private static final int SAVE_DELAY = 30000; } - private static final class CleaneableSoftReference extends SoftReference implements Runnable { + private static final class CleaneableSoftReference extends CallbackReferences.SoftCallback { private static URI settings; public CleaneableSoftReference(HintPreferencesProviderImpl referent, URI settings) { - super(referent, Utilities.activeReferenceQueue()); + super(referent); } @Override diff --git a/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriding.java b/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriding.java --- a/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriding.java +++ b/java.editor/src/org/netbeans/modules/java/editor/overridden/ComputeOverriding.java @@ -46,7 +46,6 @@ import com.sun.source.tree.CompilationUnitTree; import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -72,7 +71,7 @@ import org.netbeans.api.java.source.CompilationInfo; import org.netbeans.api.java.source.ElementHandle; import org.netbeans.api.java.source.SourceUtils; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** @@ -275,9 +274,9 @@ } } - private static final class CleaningWR extends WeakReference implements Runnable { + private static final class CleaningWR extends CallbackReferences.WeakCallback { public CleaningWR(Elements el) { - super(el, Utilities.activeReferenceQueue()); + super(el); } public void run() { synchronized(CACHE) { diff --git a/java.project.ui/src/org/netbeans/modules/java/project/ui/ProjectProblemsProviders.java b/java.project.ui/src/org/netbeans/modules/java/project/ui/ProjectProblemsProviders.java --- a/java.project.ui/src/org/netbeans/modules/java/project/ui/ProjectProblemsProviders.java +++ b/java.project.ui/src/org/netbeans/modules/java/project/ui/ProjectProblemsProviders.java @@ -115,11 +115,11 @@ import org.openide.filesystems.FileRenameEvent; import org.openide.filesystems.FileUtil; import org.openide.modules.SpecificationVersion; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.Mutex; import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; import org.openide.util.WeakListeners; /** @@ -1494,10 +1494,10 @@ } } - private static class OpenManagersWeakListener extends WeakReference implements Runnable, PropertyChangeListener { + private static class OpenManagersWeakListener extends CallbackReferences.WeakCallback implements PropertyChangeListener { public OpenManagersWeakListener(final PropertyChangeListener listener) { - super(listener, Utilities.activeReferenceQueue()); + super(listener); } @Override diff --git a/java.source.base/src/org/netbeans/modules/java/source/indexing/APTUtils.java b/java.source.base/src/org/netbeans/modules/java/source/indexing/APTUtils.java --- a/java.source.base/src/org/netbeans/modules/java/source/indexing/APTUtils.java +++ b/java.source.base/src/org/netbeans/modules/java/source/indexing/APTUtils.java @@ -49,7 +49,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.lang.ref.Reference; -import java.lang.ref.SoftReference; import java.lang.ref.WeakReference; import java.net.URL; import java.util.Arrays; @@ -85,7 +84,7 @@ import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.RequestProcessor; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.WeakListeners; import org.openide.util.lookup.Lookups; @@ -491,13 +490,13 @@ //getResource and getResources of module classloaders do not return resources from parent's META-INF, so no need to override them } - private static final class ClassLoaderRef extends SoftReference implements Runnable { + private static final class ClassLoaderRef extends CallbackReferences.SoftCallback { private final long timeStamp; private final String rootPath; public ClassLoaderRef(final ClassLoader cl, final FileObject root) { - super(cl, BaseUtilities.activeReferenceQueue()); + super(cl); this.timeStamp = getTimeStamp(root); this.rootPath = FileUtil.getFileDisplayName(root); LOG.log(Level.FINER, "ClassLoader for root {0} created.", new Object[]{rootPath}); //NOI18N diff --git a/java.source.base/src/org/netbeans/modules/java/source/parsing/WriteBackTransaction.java b/java.source.base/src/org/netbeans/modules/java/source/parsing/WriteBackTransaction.java --- a/java.source.base/src/org/netbeans/modules/java/source/parsing/WriteBackTransaction.java +++ b/java.source.base/src/org/netbeans/modules/java/source/parsing/WriteBackTransaction.java @@ -49,7 +49,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.ref.Reference; -import java.lang.ref.SoftReference; import java.net.URL; import java.nio.charset.Charset; import java.util.ArrayList; @@ -70,7 +69,7 @@ import org.netbeans.modules.java.preprocessorbridge.spi.JavaFileFilterImplementation; import org.netbeans.modules.java.source.util.Iterators; import org.openide.util.Pair; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** * @@ -342,11 +341,11 @@ * Simple guard against memory overflow; when the reference is freed, it instructs * Storage to flush on next file addition. */ - private static class CacheRef extends SoftReference implements Runnable { + private static class CacheRef extends CallbackReferences.SoftCallback { private WriteBackTransaction storage; public CacheRef(WriteBackTransaction storage, Object referent) { - super(referent, BaseUtilities.activeReferenceQueue()); + super(referent); this.storage = storage; } diff --git a/java.source.base/src/org/netbeans/modules/java/source/usages/ClassIndexImpl.java b/java.source.base/src/org/netbeans/modules/java/source/usages/ClassIndexImpl.java --- a/java.source.base/src/org/netbeans/modules/java/source/usages/ClassIndexImpl.java +++ b/java.source.base/src/org/netbeans/modules/java/source/usages/ClassIndexImpl.java @@ -69,7 +69,7 @@ import org.openide.filesystems.FileObject; import org.openide.util.Exceptions; import org.openide.util.Pair; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** Should probably final class with private constructor. * @@ -284,9 +284,9 @@ void rollback() throws IOException; } - private class Ref extends WeakReference implements Runnable { + private class Ref extends CallbackReferences.WeakCallback { public Ref (ClassIndexImplListener listener) { - super (listener, BaseUtilities.activeReferenceQueue()); + super (listener); } public void run() { diff --git a/java.source.base/src/org/netbeans/modules/java/source/usages/fcs/FileChangeSupport.java b/java.source.base/src/org/netbeans/modules/java/source/usages/fcs/FileChangeSupport.java --- a/java.source.base/src/org/netbeans/modules/java/source/usages/fcs/FileChangeSupport.java +++ b/java.source.base/src/org/netbeans/modules/java/source/usages/fcs/FileChangeSupport.java @@ -48,7 +48,6 @@ import java.util.Map; import java.util.WeakHashMap; import org.openide.filesystems.FileObject; -import java.lang.ref.WeakReference; import java.util.HashMap; import org.openide.filesystems.FileChangeListener; @@ -56,7 +55,7 @@ import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileRenameEvent; import org.openide.filesystems.FileUtil; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; // XXX current implementation is not efficient for listening to a large # of files // XXX copied from project.ant ("purge" method added into this copy, otherwise unmodified) @@ -122,14 +121,14 @@ for (Object o : holders.keySet()); } - private static final class Holder extends WeakReference implements FileChangeListener, Runnable { + private static final class Holder extends CallbackReferences.WeakCallback implements FileChangeListener { private final File path; private FileObject current; private File currentF; public Holder(FileChangeSupportListener listener, File path) { - super(listener, BaseUtilities.activeReferenceQueue()); + super(listener); assert path != null; this.path = path; locateCurrent(); diff --git a/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/logicalview/AbstractLogicalViewProvider.java b/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/logicalview/AbstractLogicalViewProvider.java --- a/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/logicalview/AbstractLogicalViewProvider.java +++ b/javaee.project/src/org/netbeans/modules/javaee/project/api/ant/ui/logicalview/AbstractLogicalViewProvider.java @@ -50,7 +50,6 @@ import java.beans.PropertyChangeListener; import java.io.CharConversionException; import java.io.IOException; -import java.lang.ref.WeakReference; import java.net.URL; import java.text.MessageFormat; import java.util.Collection; @@ -121,10 +120,10 @@ import org.openide.ErrorManager; import org.openide.NotifyDescriptor; import org.openide.awt.DynamicMenuContent; +import org.openide.util.CallbackReferences; import org.openide.util.ChangeSupport; import org.openide.util.ContextAwareAction; import org.openide.util.Exceptions; -import org.openide.util.Utilities; import org.w3c.dom.Element; /** @@ -889,10 +888,10 @@ return BrokenServerLibrarySupport.isBroken(project); } - private static class OpenManagersWeakListener extends WeakReference implements Runnable, PropertyChangeListener { + private static class OpenManagersWeakListener extends CallbackReferences.WeakCallback implements PropertyChangeListener { public OpenManagersWeakListener(final PropertyChangeListener listener) { - super(listener, Utilities.activeReferenceQueue()); + super(listener); } @Override diff --git a/javafx2.editor/src/org/netbeans/modules/javafx2/editor/completion/beans/FxBeanCache.java b/javafx2.editor/src/org/netbeans/modules/javafx2/editor/completion/beans/FxBeanCache.java --- a/javafx2.editor/src/org/netbeans/modules/javafx2/editor/completion/beans/FxBeanCache.java +++ b/javafx2.editor/src/org/netbeans/modules/javafx2/editor/completion/beans/FxBeanCache.java @@ -42,20 +42,14 @@ package org.netbeans.modules.javafx2.editor.completion.beans; import java.lang.ref.Reference; -import java.lang.ref.ReferenceQueue; -import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Deque; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.WeakHashMap; import javax.lang.model.element.TypeElement; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -65,7 +59,7 @@ import org.netbeans.api.java.source.ElementHandle; import org.netbeans.api.java.source.RootsEvent; import org.netbeans.api.java.source.TypesEvent; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; import org.openide.util.WeakListeners; /** @@ -159,11 +153,11 @@ cc.addBeanInfo(instance, parents); } - private static class CacheRef extends WeakReference implements Runnable { + private static class CacheRef extends CallbackReferences.WeakCallback { private String refKey; public CacheRef(ClasspathCache referent, String key) { - super(referent, Utilities.activeReferenceQueue()); + super(referent); this.refKey = key; } diff --git a/lexer/src/org/netbeans/lib/lexer/TokenHierarchyOperation.java b/lexer/src/org/netbeans/lib/lexer/TokenHierarchyOperation.java --- a/lexer/src/org/netbeans/lib/lexer/TokenHierarchyOperation.java +++ b/lexer/src/org/netbeans/lib/lexer/TokenHierarchyOperation.java @@ -859,10 +859,10 @@ } } -// private final class SnapshotRef extends WeakReference> implements Runnable { +// private final class SnapshotRef extends CallbackReferences.WeakCallback> { // // SnapshotRef(TokenHierarchyOperation snapshot) { -// super(snapshot, org.openide.util.Utilities.activeReferenceQueue()); +// super(snapshot); // } // // public void run() { diff --git a/openide.awt/src/org/openide/awt/ContextManager.java b/openide.awt/src/org/openide/awt/ContextManager.java --- a/openide.awt/src/org/openide/awt/ContextManager.java +++ b/openide.awt/src/org/openide/awt/ContextManager.java @@ -59,6 +59,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.logging.Level; import java.util.logging.Logger; +import org.openide.util.CallbackReferences; import org.openide.util.Lookup; import org.openide.util.Lookup.Item; import org.openide.util.Lookup.Provider; @@ -66,7 +67,6 @@ import org.openide.util.LookupEvent; import org.openide.util.LookupListener; import org.openide.util.Mutex; -import org.openide.util.Utilities; import org.openide.util.WeakListeners; import org.openide.util.WeakSet; import org.openide.util.lookup.Lookups; @@ -289,13 +289,12 @@ } - private static final class GMReference extends WeakReference - implements Runnable { + private static final class GMReference extends CallbackReferences.WeakCallback { private LookupRef context; private boolean survive; public GMReference(ContextManager m, LookupRef context, boolean survive) { - super(m, Utilities.activeReferenceQueue()); + super(m); this.context = context; this.survive = survive; } diff --git a/openide.awt/src/org/openide/awt/GlobalManager.java b/openide.awt/src/org/openide/awt/GlobalManager.java --- a/openide.awt/src/org/openide/awt/GlobalManager.java +++ b/openide.awt/src/org/openide/awt/GlobalManager.java @@ -59,10 +59,10 @@ import javax.swing.Action; import javax.swing.ActionMap; import org.openide.awt.ContextManager.LookupRef; +import org.openide.util.CallbackReferences; import org.openide.util.Lookup; import org.openide.util.LookupListener; import org.openide.util.Mutex; -import org.openide.util.Utilities; import org.openide.util.WeakSet; @@ -224,13 +224,12 @@ return newMap; } - private static final class GMReference extends WeakReference - implements Runnable { + private static final class GMReference extends CallbackReferences.WeakCallback { private LookupRef context; private boolean survive; public GMReference(GlobalManager m, LookupRef context, boolean survive) { - super(m, Utilities.activeReferenceQueue()); + super(m); this.context = context; this.survive = survive; } diff --git a/openide.compat/src/org/openide/util/WeakListener.java b/openide.compat/src/org/openide/util/WeakListener.java --- a/openide.compat/src/org/openide/util/WeakListener.java +++ b/openide.compat/src/org/openide/util/WeakListener.java @@ -924,7 +924,7 @@ /** Reference that also holds ref to WeakListener. */ - private static final class ListenerReference extends WeakReference implements Runnable { + private static final class ListenerReference extends CallbackReferences.WeakCallback { private static Class lastClass; private static String lastMethodName; private static Method lastRemove; @@ -932,7 +932,7 @@ final WeakListener weakListener; public ListenerReference(Object ref, WeakListener weakListener) { - super(ref, Utilities.activeReferenceQueue()); + super(ref); this.weakListener = weakListener; } diff --git a/openide.filesystems/src/org/openide/filesystems/DeepListener.java b/openide.filesystems/src/org/openide/filesystems/DeepListener.java --- a/openide.filesystems/src/org/openide/filesystems/DeepListener.java +++ b/openide.filesystems/src/org/openide/filesystems/DeepListener.java @@ -44,7 +44,6 @@ import java.io.File; import java.io.FileFilter; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -52,14 +51,14 @@ import java.util.concurrent.Callable; import java.util.logging.Level; import java.util.logging.Logger; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.WeakSet; /** * * @author Jaroslav Tulach */ -final class DeepListener extends WeakReference +final class DeepListener extends CallbackReferences.WeakCallback implements FileChangeListener, Runnable, Callable, FileFilter { static final Logger LOG = Logger.getLogger(FileUtil.class.getName() + ".recursive"); private final File path; @@ -71,7 +70,7 @@ private final int hash; DeepListener(FileChangeListener listener, File path, FileFilter ff, Callable stop) { - super(listener, BaseUtilities.activeReferenceQueue()); + super(listener); this.path = path; this.stop = stop; this.filter = ff; diff --git a/openide.filesystems/src/org/openide/filesystems/FileChangeImpl.java b/openide.filesystems/src/org/openide/filesystems/FileChangeImpl.java --- a/openide.filesystems/src/org/openide/filesystems/FileChangeImpl.java +++ b/openide.filesystems/src/org/openide/filesystems/FileChangeImpl.java @@ -43,7 +43,6 @@ import java.io.File; import java.io.FileFilter; -import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; @@ -51,11 +50,12 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** Holds FileChangeListener and File pair and handle movement of auxiliary * FileChangeListener to the first existing upper folder and firing appropriate events. */ -final class FileChangeImpl extends WeakReference implements FileChangeListener, Runnable { +final class FileChangeImpl extends CallbackReferences.WeakCallback implements FileChangeListener { /** Contains mapping of FileChangeListener to File. */ private static final Map> holders = new WeakHashMap>(); @@ -66,7 +66,7 @@ private boolean isOnTarget = false; public FileChangeImpl(FileChangeListener listener, File path) { - super(listener, BaseUtilities.activeReferenceQueue()); + super(listener); assert path != null; this.path = path; } diff --git a/openide.filesystems/src/org/openide/filesystems/JarFileSystem.java b/openide.filesystems/src/org/openide/filesystems/JarFileSystem.java --- a/openide.filesystems/src/org/openide/filesystems/JarFileSystem.java +++ b/openide.filesystems/src/org/openide/filesystems/JarFileSystem.java @@ -59,7 +59,6 @@ import java.lang.management.ManagementFactory; import java.lang.ref.Reference; import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -81,6 +80,7 @@ import org.openide.util.RequestProcessor; import org.openide.util.RequestProcessor.Task; import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** A virtual filesystem based on a JAR archive. *

For historical reasons many AbstractFileSystem.* methods are implemented @@ -992,9 +992,9 @@ * JarFS if often queried for its FOs e.g. by java parser, which * leaves the references immediately. */ - private class Ref extends WeakReference implements Runnable { + private class Ref extends CallbackReferences.WeakCallback { public Ref(T fo) { - super(fo, BaseUtilities.activeReferenceQueue()); + super(fo); } // do the cleanup diff --git a/openide.loaders/src/org/openide/loaders/DataObjectPool.java b/openide.loaders/src/org/openide/loaders/DataObjectPool.java --- a/openide.loaders/src/org/openide/loaders/DataObjectPool.java +++ b/openide.loaders/src/org/openide/loaders/DataObjectPool.java @@ -954,7 +954,7 @@ */ public void setDataObject (DataObject dobj) { synchronized (DataObjectPool.getPOOL()) { - this.obj = new ItemReference (dobj, this); + this.obj = dobj != null ? new ItemReference (dobj, this) : REFERENCE_NOT_SET; if (dobj != null && !dobj.getPrimaryFile ().isValid()) { // if the primary file is already invalid => mark the object as invalid DataObjectPool.getPOOL().countRegistration(dobj.getPrimaryFile()); @@ -1031,13 +1031,13 @@ } /** WeakReference - references a DataObject, strongly references an Item */ - static final class ItemReference extends WeakReference + static final class ItemReference extends CallbackReferences.WeakCallback implements Runnable { /** Reference to an Item */ private Item item; ItemReference(DataObject dobject, Item item) { - super(dobject, org.openide.util.Utilities.activeReferenceQueue()); + super(dobject); this.item = item; } diff --git a/openide.loaders/src/org/openide/loaders/DataShadow.java b/openide.loaders/src/org/openide/loaders/DataShadow.java --- a/openide.loaders/src/org/openide/loaders/DataShadow.java +++ b/openide.loaders/src/org/openide/loaders/DataShadow.java @@ -1204,13 +1204,12 @@ } } - static final class DSWeakReference extends WeakReference - implements Runnable { + static final class DSWeakReference extends CallbackReferences.WeakCallback { private int hash; private FileObject original; DSWeakReference(T o) { - super(o, org.openide.util.Utilities.activeReferenceQueue()); + super(o); this.hash = o.hashCode(); if (o instanceof DataShadow) { DataShadow s = (DataShadow)o; diff --git a/openide.loaders/test/unit/src/org/openide/loaders/DataObjectSizeTest.java b/openide.loaders/test/unit/src/org/openide/loaders/DataObjectSizeTest.java --- a/openide.loaders/test/unit/src/org/openide/loaders/DataObjectSizeTest.java +++ b/openide.loaders/test/unit/src/org/openide/loaders/DataObjectSizeTest.java @@ -85,7 +85,7 @@ Object[] exclude = { original.getLoader (), original.getPrimaryFile (), - org.openide.util.Utilities.activeReferenceQueue (), + //org.openide.util.Utilities.activeReferenceQueue (), }; assertSize ("If we exclude all the static things, like loader and " + diff --git a/openide.nodes/src/org/openide/nodes/EntrySupportDefault.java b/openide.nodes/src/org/openide/nodes/EntrySupportDefault.java --- a/openide.nodes/src/org/openide/nodes/EntrySupportDefault.java +++ b/openide.nodes/src/org/openide/nodes/EntrySupportDefault.java @@ -59,7 +59,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.openide.nodes.Children.Entry; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** Default support that just fires changes directly to children and is suitable * for simple mappings. @@ -845,11 +845,11 @@ } } - private class ChArrRef extends WeakReference implements Runnable { + private class ChArrRef extends CallbackReferences.WeakCallback { private final ChildrenArray chArr; public ChArrRef(ChildrenArray referent, boolean weak) { - super(referent, Utilities.activeReferenceQueue()); + super(referent); this.chArr = weak ? null : referent; } diff --git a/openide.nodes/src/org/openide/nodes/EntrySupportLazyState.java b/openide.nodes/src/org/openide/nodes/EntrySupportLazyState.java --- a/openide.nodes/src/org/openide/nodes/EntrySupportLazyState.java +++ b/openide.nodes/src/org/openide/nodes/EntrySupportLazyState.java @@ -41,14 +41,13 @@ */ package org.openide.nodes; -import java.lang.ref.WeakReference; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.logging.Level; import org.openide.nodes.Children.Entry; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** This class should represent an immutable state of a EntrySupportLazy instance. * @@ -363,12 +362,12 @@ } } - private static final class NodeRef extends WeakReference implements Runnable { + private static final class NodeRef extends CallbackReferences.WeakCallback { private final EntryInfo info; public NodeRef(Node node, EntryInfo info) { - super(node, Utilities.activeReferenceQueue()); + super(node); info.lazy().registerNode(1, info); this.info = info; } diff --git a/openide.nodes/test/unit/src/org/openide/nodes/ChildrenKeysTest.java b/openide.nodes/test/unit/src/org/openide/nodes/ChildrenKeysTest.java --- a/openide.nodes/test/unit/src/org/openide/nodes/ChildrenKeysTest.java +++ b/openide.nodes/test/unit/src/org/openide/nodes/ChildrenKeysTest.java @@ -70,9 +70,9 @@ import org.netbeans.junit.Log; import org.netbeans.junit.NbTestCase; import org.netbeans.junit.RandomlyFails; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; public class ChildrenKeysTest extends NbTestCase { private Logger LOG; @@ -918,12 +918,12 @@ } static void waitActiveReferenceQueue() throws InterruptedException { - class W extends WeakReference implements Runnable { + class W extends CallbackReferences.WeakCallback { boolean cleaned; boolean finalized; public W(Object obj) { - super(obj, Utilities.activeReferenceQueue()); + super(obj); } public synchronized void run() { cleaned = true; diff --git a/openide.text/src/org/openide/text/DocumentOpenClose.java b/openide.text/src/org/openide/text/DocumentOpenClose.java --- a/openide.text/src/org/openide/text/DocumentOpenClose.java +++ b/openide.text/src/org/openide/text/DocumentOpenClose.java @@ -56,6 +56,7 @@ import javax.swing.text.Position; import javax.swing.text.StyledDocument; import org.openide.awt.UndoRedo; +import org.openide.util.CallbackReferences; import org.openide.util.Mutex; import org.openide.util.RequestProcessor; import org.openide.util.Task; @@ -1043,10 +1044,10 @@ } - private final class DocumentRef extends WeakReference implements Runnable { + private final class DocumentRef extends CallbackReferences.WeakCallback { public DocumentRef(StyledDocument doc) { - super(doc, org.openide.util.Utilities.activeReferenceQueue()); + super(doc); Logger.getLogger("TIMER").log(Level.FINE, "TextDocument", doc); } diff --git a/openide.text/src/org/openide/text/LineVector.java b/openide.text/src/org/openide/text/LineVector.java --- a/openide.text/src/org/openide/text/LineVector.java +++ b/openide.text/src/org/openide/text/LineVector.java @@ -41,11 +41,11 @@ */ package org.openide.text; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; +import org.openide.util.CallbackReferences; /** * Binary searchable list of document lines. @@ -431,10 +431,10 @@ } - private final class Ref extends WeakReference implements Runnable { + private final class Ref extends CallbackReferences.WeakCallback { public Ref(Line line) { - super(line, org.openide.util.BaseUtilities.activeReferenceQueue()); // The queue calls run() when unreachable + super(line); // Calls run() when unreachable } @Override diff --git a/openide.text/test/unit/src/org/openide/text/CloneableEditorDocumentGCTest.java b/openide.text/test/unit/src/org/openide/text/CloneableEditorDocumentGCTest.java --- a/openide.text/test/unit/src/org/openide/text/CloneableEditorDocumentGCTest.java +++ b/openide.text/test/unit/src/org/openide/text/CloneableEditorDocumentGCTest.java @@ -63,6 +63,7 @@ import javax.swing.text.Position.Bias; import org.netbeans.junit.NbTestCase; import org.openide.text.CloneableEditorSupport.Pane; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.windows.CloneableOpenSupport; @@ -120,10 +121,10 @@ } public void testDocumentGCed () throws Exception { - class R extends WeakReference implements Runnable { + class R extends CallbackReferences.WeakCallback { public R (Object o) { - super(o, org.openide.util.Utilities.activeReferenceQueue()); + super(o); } public void run() { diff --git a/openide.util.ui/src/org/openide/util/ImageUtilities.java b/openide.util.ui/src/org/openide/util/ImageUtilities.java --- a/openide.util.ui/src/org/openide/util/ImageUtilities.java +++ b/openide.util.ui/src/org/openide/util/ImageUtilities.java @@ -61,6 +61,7 @@ import java.awt.image.RGBImageFilter; import java.awt.image.WritableRaster; import java.io.IOException; +import java.lang.ref.Reference; import java.lang.ref.SoftReference; import java.net.URL; import java.util.HashMap; @@ -90,12 +91,12 @@ /** separator for individual parts of tool tip text */ static final String TOOLTIP_SEPAR = "
"; // NOI18N /** a value that indicates that the icon does not exists */ - private static final ActiveRef NO_ICON = new ActiveRef(null, null, null); + private static final Reference NO_ICON = new SoftReference(null); - private static final Map> cache = new HashMap>(128); - private static final Map> localizedCache = new HashMap>(128); - private static final Map> compositeCache = new HashMap>(128); - private static final Map> imageToolTipCache = new HashMap>(128); + private static final Map> cache = new HashMap>(128); + private static final Map> localizedCache = new HashMap>(128); + private static final Map> compositeCache = new HashMap>(128); + private static final Map> imageToolTipCache = new HashMap>(128); private static RGBImageFilter imageIconFilter = null; @@ -251,7 +252,7 @@ Image cached; synchronized (compositeCache) { - ActiveRef r = compositeCache.get(k); + Reference r = compositeCache.get(k); if (r != null) { cached = r.get(); if (cached != null) { @@ -307,7 +308,7 @@ ToolTipImageKey key = new ToolTipImageKey(image, text); Image cached; synchronized (imageToolTipCache) { - ActiveRef r = imageToolTipCache.get(key); + Reference r = imageToolTipCache.get(key); if (r != null) { cached = r.get(); if (cached != null) { @@ -424,7 +425,7 @@ static Image getIcon(String resource, boolean localized) { if (localized) { synchronized (localizedCache) { - ActiveRef ref = localizedCache.get(resource); + Reference ref = localizedCache.get(resource); Image img = null; // no icon for this name (already tested) @@ -495,7 +496,7 @@ * and is not optimized/interned */ private static Image getIcon(String name, ClassLoader loader, boolean localizedQuery) { - ActiveRef ref = cache.get(name); + Reference ref = cache.get(name); Image img = null; // no icon for this name (already tested) @@ -791,12 +792,12 @@ } /** Cleaning reference. */ - private static final class ActiveRef extends SoftReference implements Runnable { - private final Map> holder; + private static final class ActiveRef extends CallbackReferences.SoftCallback { + private final Map> holder; private final T key; - public ActiveRef(Image o, Map> holder, T key) { - super(o, Utilities.activeReferenceQueue()); + public ActiveRef(Image o, Map> holder, T key) { + super(o); this.holder = holder; this.key = key; } diff --git a/openide.util.ui/src/org/openide/util/Utilities.java b/openide.util.ui/src/org/openide/util/Utilities.java --- a/openide.util.ui/src/org/openide/util/Utilities.java +++ b/openide.util.ui/src/org/openide/util/Utilities.java @@ -278,6 +278,8 @@ * Be sure to call this method anew for each reference. * Do not attempt to cache the return value. * @since 3.11 + * @Deprecated This API requires an indefinitely running background thread. + * Use {@link CallbackReferences} instead. */ public static ReferenceQueue activeReferenceQueue() { return BaseUtilities.activeReferenceQueue(); diff --git a/openide.util.ui/src/org/openide/util/doc-files/api.html b/openide.util.ui/src/org/openide/util/doc-files/api.html --- a/openide.util.ui/src/org/openide/util/doc-files/api.html +++ b/openide.util.ui/src/org/openide/util/doc-files/api.html @@ -87,7 +87,6 @@ loadImage, mergeImage, topologicalSort, - activeReferenceQueue, translate. diff --git a/openide.util/src/org/openide/util/TimedSoftReference.java b/openide.util/src/org/openide/util/TimedSoftReference.java --- a/openide.util/src/org/openide/util/TimedSoftReference.java +++ b/openide.util/src/org/openide/util/TimedSoftReference.java @@ -43,8 +43,6 @@ */ package org.openide.util; -import java.lang.ref.SoftReference; - import java.util.Map; @@ -68,7 +66,7 @@ * * @author Jesse Glick */ -final class TimedSoftReference extends SoftReference implements Runnable { +final class TimedSoftReference extends CallbackReferences.SoftCallback { private static final int TIMEOUT = 30000; private static final RequestProcessor RP = new RequestProcessor("TimedSoftReference"); // NOI18N private RequestProcessor.Task task; @@ -88,7 +86,7 @@ * @param k the key whose value in m may be this reference */ public TimedSoftReference(T o, Map m, Object k) { - super(o, BaseUtilities.activeReferenceQueue()); + super(o); this.o = o; this.m = m; this.k = k; diff --git a/openide.util/src/org/openide/util/WeakListenerImpl.java b/openide.util/src/org/openide/util/WeakListenerImpl.java --- a/openide.util/src/org/openide/util/WeakListenerImpl.java +++ b/openide.util/src/org/openide/util/WeakListenerImpl.java @@ -535,7 +535,7 @@ /** Reference that also holds ref to WeakListenerImpl. */ - private static final class ListenerReference extends WeakReference implements Runnable { + private static final class ListenerReference extends CallbackReferences.WeakCallback { private static Class lastClass; private static Class lastNClass; private static String lastMethodName; @@ -547,7 +547,7 @@ private String name; ListenerReference(Object ref, String name, WeakListenerImpl weakListener) { - super(ref, BaseUtilities.activeReferenceQueue()); + super(ref); this.weakListener = weakListener; this.name = name; } @@ -562,8 +562,7 @@ } if (weakListener.getSource() != source) { - // plan new cleanup into the activeReferenceQueue with this listener and - // provided source + // plan new cleanup with this listener and provided source weakListener.source = new WeakReference (source) { ListenerReference doNotGCRef = new ListenerReference(new Object(), name, weakListener); }; diff --git a/openide.util/test/unit/src/org/openide/util/WeakListenersTest.java b/openide.util/test/unit/src/org/openide/util/WeakListenersTest.java --- a/openide.util/test/unit/src/org/openide/util/WeakListenersTest.java +++ b/openide.util/test/unit/src/org/openide/util/WeakListenersTest.java @@ -526,7 +526,7 @@ l, button, c, - BaseUtilities.activeReferenceQueue() + //BaseUtilities.activeReferenceQueue() }; diff --git a/parsing.api/src/org/netbeans/modules/parsing/impl/TaskProcessor.java b/parsing.api/src/org/netbeans/modules/parsing/impl/TaskProcessor.java --- a/parsing.api/src/org/netbeans/modules/parsing/impl/TaskProcessor.java +++ b/parsing.api/src/org/netbeans/modules/parsing/impl/TaskProcessor.java @@ -42,7 +42,6 @@ package org.netbeans.modules.parsing.impl; -import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; @@ -79,6 +78,7 @@ import org.netbeans.modules.parsing.lucene.spi.ScanSuspendImplementation; import org.netbeans.modules.parsing.spi.*; import org.netbeans.modules.parsing.spi.Parser.Result; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.Mutex; @@ -1244,12 +1244,12 @@ - static final class RemovedTask extends WeakReference implements Runnable { + static final class RemovedTask extends CallbackReferences.WeakCallback { private final SchedulerTask task; public RemovedTask(final @NonNull Source src, final @NonNull SchedulerTask task) { - super (src, org.openide.util.BaseUtilities.activeReferenceQueue()); + super (src); Parameters.notNull("src", src); //NOI18N Parameters.notNull("task", task); //NOI18N this.task = task; diff --git a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/ClusteredIndexables.java b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/ClusteredIndexables.java --- a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/ClusteredIndexables.java +++ b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/ClusteredIndexables.java @@ -43,7 +43,6 @@ package org.netbeans.modules.parsing.impl.indexing; import java.lang.ref.Reference; -import java.lang.ref.SoftReference; import java.text.MessageFormat; import java.util.AbstractCollection; import java.util.ArrayList; @@ -75,7 +74,7 @@ import org.netbeans.modules.parsing.spi.indexing.Indexable; import org.openide.util.Pair; import org.openide.util.Parameters; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** * @@ -493,7 +492,7 @@ // // - private static final class ClearReference extends SoftReference implements Runnable, Callable { + private static final class ClearReference extends CallbackReferences.SoftCallback implements Callable { private final DocumentIndexCacheImpl owner; private final AtomicInteger state = new AtomicInteger(); @@ -501,7 +500,7 @@ public ClearReference( @NonNull final Collection[] data, @NonNull final DocumentIndexCacheImpl owner) { - super(data, BaseUtilities.activeReferenceQueue()); + super(data); Parameters.notNull("data", data); //NOI18N Parameters.notNull("owner", owner); //NOI18N this.owner = owner; diff --git a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/PathRegistry.java b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/PathRegistry.java --- a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/PathRegistry.java +++ b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/PathRegistry.java @@ -81,7 +81,7 @@ import org.openide.util.Exceptions; import org.openide.util.Parameters; import org.openide.util.RequestProcessor; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.WeakListeners; /** @@ -1190,12 +1190,12 @@ } } - private class WeakValue extends WeakReference implements Runnable { + private class WeakValue extends CallbackReferences.WeakCallback { private final URL key; public WeakValue (ClassPath ref, URL key) { - super (ref, BaseUtilities.activeReferenceQueue()); + super (ref); assert key != null; this.key = key; } diff --git a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/URLCache.java b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/URLCache.java --- a/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/URLCache.java +++ b/parsing.indexing/src/org/netbeans/modules/parsing/impl/indexing/URLCache.java @@ -42,7 +42,6 @@ package org.netbeans.modules.parsing.impl.indexing; import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -56,7 +55,7 @@ import org.openide.filesystems.FileObject; import org.openide.filesystems.URLMapper; import org.openide.util.Exceptions; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; /** * Cache for {@link URLMapper#findFileObject} for source roots. @@ -129,14 +128,14 @@ private URLCache() { } - private final class CleanReference extends WeakReference implements Runnable { + private final class CleanReference extends CallbackReferences.WeakCallback { private final URI uri; CleanReference( @NonNull FileObject referent, @NonNull URI uri) { - super(referent, BaseUtilities.activeReferenceQueue()); + super(referent); assert referent != null; assert uri != null; this.uri = uri; diff --git a/parsing.lucene/src/org/netbeans/modules/parsing/lucene/LuceneIndex.java b/parsing.lucene/src/org/netbeans/modules/parsing/lucene/LuceneIndex.java --- a/parsing.lucene/src/org/netbeans/modules/parsing/lucene/LuceneIndex.java +++ b/parsing.lucene/src/org/netbeans/modules/parsing/lucene/LuceneIndex.java @@ -48,7 +48,6 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InterruptedIOException; -import java.lang.ref.SoftReference; import java.net.URI; import java.nio.channels.ClosedByInterruptException; import java.nio.file.Path; @@ -92,6 +91,7 @@ import org.netbeans.modules.parsing.lucene.support.IndexReaderInjection; import org.netbeans.modules.parsing.lucene.support.StoppableConvertor; import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; import org.openide.util.Pair; import org.openide.util.Parameters; @@ -1208,14 +1208,14 @@ } } - private final class CleanReference extends SoftReference implements Runnable { + private final class CleanReference extends CallbackReferences.SoftCallback { @SuppressWarnings("VolatileArrayField") private volatile Directory[] hardRef; //clearHRef may be called by more concurrently (read lock). private final AtomicLong size = new AtomicLong(); //clearHRef may be called by more concurrently (read lock). private CleanReference(final RAMDirectory[] dir) { - super (dir, BaseUtilities.activeReferenceQueue()); + super (dir); final IndexCacheFactory.RAMController c = IndexCacheFactory.getDefault().getRAMController(); final boolean doHardRef = !c.isFull(); if (doHardRef) { diff --git a/parsing.lucene/src/org/netbeans/modules/parsing/lucene/support/IndexManager.java b/parsing.lucene/src/org/netbeans/modules/parsing/lucene/support/IndexManager.java --- a/parsing.lucene/src/org/netbeans/modules/parsing/lucene/support/IndexManager.java +++ b/parsing.lucene/src/org/netbeans/modules/parsing/lucene/support/IndexManager.java @@ -45,7 +45,6 @@ import java.io.File; import java.io.IOException; import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -66,7 +65,7 @@ import org.netbeans.modules.parsing.lucene.SupportAccessor; import org.netbeans.modules.parsing.lucene.spi.ScanSuspendImplementation; import org.netbeans.modules.parsing.lucene.support.Index.WithTermFrequencies.TermFreq; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; @@ -500,12 +499,12 @@ private static final Map> indexes = Collections.synchronizedMap(new HashMap>()); - private static class Ref extends WeakReference implements Runnable { + private static class Ref extends CallbackReferences.WeakCallback { private final File folder; Ref(@NonNull final File folder, @NonNull final Index index) { - super(index, BaseUtilities.activeReferenceQueue()); + super(index); this.folder = folder; } diff --git a/projectapi.nb/src/org/netbeans/modules/projectapi/nb/TimedWeakReference.java b/projectapi.nb/src/org/netbeans/modules/projectapi/nb/TimedWeakReference.java --- a/projectapi.nb/src/org/netbeans/modules/projectapi/nb/TimedWeakReference.java +++ b/projectapi.nb/src/org/netbeans/modules/projectapi/nb/TimedWeakReference.java @@ -49,8 +49,7 @@ // timeout // removed map key functionality -import java.lang.ref.WeakReference; -import org.openide.util.BaseUtilities; +import org.openide.util.CallbackReferences; import org.openide.util.RequestProcessor; /** @@ -71,7 +70,7 @@ * * @author Jesse Glick */ -public final class TimedWeakReference extends WeakReference implements Runnable { +public final class TimedWeakReference extends CallbackReferences.WeakCallback { public static int TIMEOUT = 15000; @@ -89,7 +88,7 @@ * @param o the referent */ public TimedWeakReference(T o) { - super(o, BaseUtilities.activeReferenceQueue()); + super(o); this.o = o; task = RP.create(this); task.schedule(TIMEOUT); diff --git a/spi.editor.hints/src/org/netbeans/modules/editor/hints/HintsControllerImpl.java b/spi.editor.hints/src/org/netbeans/modules/editor/hints/HintsControllerImpl.java --- a/spi.editor.hints/src/org/netbeans/modules/editor/hints/HintsControllerImpl.java +++ b/spi.editor.hints/src/org/netbeans/modules/editor/hints/HintsControllerImpl.java @@ -48,7 +48,6 @@ import java.beans.PropertyChangeSupport; import java.io.IOException; import java.lang.ref.Reference; -import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -77,6 +76,7 @@ import org.openide.text.NbDocument; import org.openide.text.PositionBounds; import org.openide.text.PositionRef; +import org.openide.util.CallbackReferences; import org.openide.util.Exceptions; /** @@ -293,12 +293,12 @@ } } - private static final class CleaningReference extends WeakReference implements Runnable { + private static final class CleaningReference extends CallbackReferences.WeakCallback { private final int hashCode; public CleaningReference(Fix referent) { - super(referent, org.openide.util.Utilities.activeReferenceQueue()); + super(referent); hashCode = System.identityHashCode(referent); } diff --git a/spring.beans/src/org/netbeans/modules/spring/util/fcs/FileChangeSupport.java b/spring.beans/src/org/netbeans/modules/spring/util/fcs/FileChangeSupport.java --- a/spring.beans/src/org/netbeans/modules/spring/util/fcs/FileChangeSupport.java +++ b/spring.beans/src/org/netbeans/modules/spring/util/fcs/FileChangeSupport.java @@ -48,7 +48,6 @@ import java.util.Map; import java.util.WeakHashMap; import org.openide.filesystems.FileObject; -import java.lang.ref.WeakReference; import java.util.HashMap; import org.openide.filesystems.FileChangeListener; @@ -56,7 +55,7 @@ import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileRenameEvent; import org.openide.filesystems.FileUtil; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; // XXX current implementation is not efficient for listening to a large # of files @@ -116,14 +115,14 @@ } } - private static final class Holder extends WeakReference implements FileChangeListener, Runnable { + private static final class Holder extends CallbackReferences.WeakCallback implements FileChangeListener { private final File path; private FileObject current; private File currentF; public Holder(FileChangeSupportListener listener, File path) { - super(listener, Utilities.activeReferenceQueue()); + super(listener); assert path != null; this.path = path; locateCurrent(); diff --git a/timers/src/org/netbeans/modules/timers/InstanceWatcher.java b/timers/src/org/netbeans/modules/timers/InstanceWatcher.java --- a/timers/src/org/netbeans/modules/timers/InstanceWatcher.java +++ b/timers/src/org/netbeans/modules/timers/InstanceWatcher.java @@ -53,7 +53,7 @@ import java.util.Map; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** A class for watching instances. * @@ -180,10 +180,10 @@ // Private innerclasses ---------------------------------------------------- - private final class CleanableWeakReference extends WeakReference implements Runnable { + private final class CleanableWeakReference extends CallbackReferences.WeakCallback { public CleanableWeakReference(Object i) { - super(i, Utilities.activeReferenceQueue()); + super(i); } public void run() { diff --git a/timers/src/org/netbeans/modules/timers/TimesCollectorPeer.java b/timers/src/org/netbeans/modules/timers/TimesCollectorPeer.java --- a/timers/src/org/netbeans/modules/timers/TimesCollectorPeer.java +++ b/timers/src/org/netbeans/modules/timers/TimesCollectorPeer.java @@ -57,10 +57,10 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileChangeAdapter; import org.openide.filesystems.FileEvent; +import org.openide.util.CallbackReferences; /** * @@ -240,9 +240,9 @@ } private static final RequestProcessor CLEANER = new RequestProcessor("CleanableWeakReference"); // NOI18N - private class CleanableWeakReference extends WeakReference implements Runnable { + private class CleanableWeakReference extends CallbackReferences.WeakCallback { public CleanableWeakReference(T o) { - super(o, Utilities.activeReferenceQueue()); + super(o); } public void run() { diff --git a/vmd.model/src/org/netbeans/modules/vmd/api/model/DesignDocument.java b/vmd.model/src/org/netbeans/modules/vmd/api/model/DesignDocument.java --- a/vmd.model/src/org/netbeans/modules/vmd/api/model/DesignDocument.java +++ b/vmd.model/src/org/netbeans/modules/vmd/api/model/DesignDocument.java @@ -43,10 +43,8 @@ */ package org.netbeans.modules.vmd.api.model; -import org.openide.util.Utilities; - -import java.lang.ref.WeakReference; import java.util.*; +import org.openide.util.CallbackReferences; /** * This class represents a document holding all components. @@ -393,12 +391,12 @@ } } - private final class TimedWeakReference extends WeakReference implements Runnable { + private final class TimedWeakReference extends CallbackReferences.WeakCallback { private final long componentID; public TimedWeakReference (DesignComponent referent) { - super (referent, Utilities.activeReferenceQueue ()); + super (referent); this.componentID = referent.getComponentID (); } diff --git a/xml.tax/src/org/netbeans/modules/xml/tax/cookies/TreeEditorCookieImpl.java b/xml.tax/src/org/netbeans/modules/xml/tax/cookies/TreeEditorCookieImpl.java --- a/xml.tax/src/org/netbeans/modules/xml/tax/cookies/TreeEditorCookieImpl.java +++ b/xml.tax/src/org/netbeans/modules/xml/tax/cookies/TreeEditorCookieImpl.java @@ -66,7 +66,7 @@ import org.netbeans.modules.xml.tax.parser.DTDParsingSupport; import org.netbeans.modules.xml.tax.parser.ParsingSupport; import org.netbeans.modules.xml.tax.parser.XMLParsingSupport; -import org.openide.util.Utilities; +import org.openide.util.CallbackReferences; /** * @author Libor Kramolis @@ -555,10 +555,10 @@ /* * Reference which remembers which editor created stored TreeDocumentRoot. */ - private class TreeReference extends WeakReference implements Runnable { + private class TreeReference extends CallbackReferences.WeakCallback { TreeReference (TreeDocumentRoot root) { - super(root, Utilities.activeReferenceQueue()); + super(root); } public TreeDocumentRoot getDocumentRoot() {