1/* 2 * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24import com.sun.beans.util.Cache; 25 26/* 27 * @test 28 * @bug 8039137 29 * @summary Tests Cache recursion 30 * @author Sergey Malenkov 31 * @modules java.desktop/com.sun.beans.util 32 * @compile -XDignore.symbol.file TestCacheRecursion.java 33 * @run main TestCacheRecursion 34 */ 35 36public class TestCacheRecursion { 37 private static boolean ERROR; 38 private static final Cache<Class<?>,Boolean> CACHE 39 = new Cache<Class<?>,Boolean>(Cache.Kind.WEAK, Cache.Kind.STRONG) { 40 @Override 41 public Boolean create(Class<?> type) { 42 if (ERROR) { 43 throw new Error("not initialized"); 44 } 45 type = type.getSuperclass(); 46 return (type != null) && get(type); 47 } 48 }; 49 50 public static void main(String[] args) { 51 CACHE.get(Z.class); 52 ERROR = true; 53 for (Class<?> type = Z.class; type != null; type = type.getSuperclass()) { 54 CACHE.get(type); 55 } 56 } 57 58 private class A {} 59 private class B extends A {} 60 private class C extends B {} 61 private class D extends C {} 62 private class E extends D {} 63 private class F extends E {} 64 private class G extends F {} 65 private class H extends G {} 66 private class I extends H {} 67 private class J extends I {} 68 private class K extends J {} 69 private class L extends K {} 70 private class M extends L {} 71 private class N extends M {} 72 private class O extends N {} 73 private class P extends O {} 74 private class Q extends P {} 75 private class R extends Q {} 76 private class S extends R {} 77 private class T extends S {} 78 private class U extends T {} 79 private class V extends U {} 80 private class W extends V {} 81 private class X extends W {} 82 private class Y extends X {} 83 private class Z extends Y {} 84} 85