openide.util/test/unit/src/org/openide/util/lookup/SimpleProxyLookupIssue42244Test.java
Warnings.
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
4 * Copyright 1997-2009 Sun Microsystems, Inc. All rights reserved.
6 * The contents of this file are subject to the terms of either the GNU
7 * General Public License Version 2 only ("GPL") or the Common
8 * Development and Distribution License("CDDL") (collectively, the
9 * "License"). You may not use this file except in compliance with the
10 * License. You can obtain a copy of the License at
11 * http://www.netbeans.org/cddl-gplv2.html
12 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
13 * specific language governing permissions and limitations under the
14 * License. When distributing the software, include this License Header
15 * Notice in each file and include the License file at
16 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
17 * particular file as subject to the "Classpath" exception as provided
18 * by Sun in the GPL Version 2 section of the License file that
19 * accompanied this code. If applicable, add the following below the
20 * License Header, with the fields enclosed by brackets [] replaced by
21 * your own identifying information:
22 * "Portions Copyrighted [year] [name of copyright owner]"
26 * The Original Software is NetBeans. The Initial Developer of the Original
27 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
28 * Microsystems, Inc. All Rights Reserved.
30 * If you wish your version of this file to be governed by only the CDDL
31 * or only the GPL Version 2, indicate your decision by adding
32 * "[Contributor] elects to include this software in this distribution
33 * under the [CDDL or GPL Version 2] license." If you do not indicate a
34 * single choice of license, a recipient has the option to distribute
35 * your version of this file under either the CDDL, the GPL Version 2 or
36 * to extend the choice of license to its licensees as provided above.
37 * However, if you add GPL Version 2 code and therefore, elected the GPL
38 * Version 2 license, then the option applies only if the new code is
39 * made subject to such option by the copyright holder.
42 package org.openide.util.lookup;
44 import java.lang.ref.WeakReference;
46 import junit.framework.*;
47 import org.netbeans.junit.*;
48 import org.openide.util.Lookup;
50 /** To simulate issue 42244.
52 @SuppressWarnings("unchecked") // XXX ought to be corrected, just a lot of them
53 public class SimpleProxyLookupIssue42244Test extends AbstractLookupBaseHid implements AbstractLookupBaseHid.Impl {
54 public SimpleProxyLookupIssue42244Test (java.lang.String testName) {
55 super(testName, null);
58 public static Test suite() {
59 // return new SimpleProxyLookupIssue42244Test("testGarbageCollect");
60 return new NbTestSuite(SimpleProxyLookupIssue42244Test.class);
63 /** Creates an lookup for given lookup. This class just returns
64 * the object passed in, but subclasses can be different.
65 * @param lookup in lookup
66 * @return a lookup to use
68 public Lookup createLookup (final Lookup lookup) {
69 class C implements Lookup.Provider {
70 public Lookup getLookup () {
74 return Lookups.proxy (new C ());
77 public Lookup createInstancesLookup (InstanceContent ic) {
78 return new KeepResultsProxyLookup (new AbstractLookup (ic));
81 public void clearCaches () {
82 KeepResultsProxyLookup k = (KeepResultsProxyLookup)this.instanceLookup;
84 ArrayList toGC = new ArrayList ();
85 Iterator it = k.allQueries.iterator ();
86 while (it.hasNext ()) {
87 Lookup.Result r = (Lookup.Result)it.next ();
88 toGC.add (new WeakReference (r));
93 it = toGC.iterator ();
94 while (it.hasNext ()) {
95 WeakReference r = (WeakReference)it.next ();
96 assertGC ("Trying to release all results from memory", r);
100 class KeepResultsProxyLookup extends ProxyLookup {
101 private ArrayList allQueries = new ArrayList ();
102 private ThreadLocal in = new ThreadLocal ();
104 public KeepResultsProxyLookup (Lookup delegate) {
105 super (new Lookup[] { delegate });
109 protected void beforeLookup (org.openide.util.Lookup.Template template) {
110 super.beforeLookup (template);
111 if (allQueries != null && in.get () == null) {
113 Lookup.Result res = lookup (template);
114 allQueries.add (res);