1.1 --- a/test/tools/javap/typeAnnotations/ArrayClassLiterals.java Thu Oct 28 13:31:55 2010 -0700 1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 1.3 @@ -1,183 +0,0 @@ 1.4 -/* 1.5 - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. 1.6 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.7 - * 1.8 - * This code is free software; you can redistribute it and/or modify it 1.9 - * under the terms of the GNU General Public License version 2 only, as 1.10 - * published by the Free Software Foundation. 1.11 - * 1.12 - * This code is distributed in the hope that it will be useful, but WITHOUT 1.13 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1.14 - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1.15 - * version 2 for more details (a copy is included in the LICENSE file that 1.16 - * accompanied this code). 1.17 - * 1.18 - * You should have received a copy of the GNU General Public License version 1.19 - * 2 along with this work; if not, write to the Free Software Foundation, 1.20 - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1.21 - * 1.22 - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 1.23 - * or visit www.oracle.com if you need additional information or have any 1.24 - * questions. 1.25 - */ 1.26 - 1.27 -import java.io.*; 1.28 -import com.sun.tools.classfile.*; 1.29 - 1.30 -/* 1.31 - * @test ArrayClassLiterals 1.32 - * @bug 6863814 1.33 - * @summary test that class literals array doesn't crash javap 1.34 - */ 1.35 - 1.36 -public class ArrayClassLiterals { 1.37 - public static void main(String[] args) throws Exception { 1.38 - new ArrayClassLiterals().run(); 1.39 - } 1.40 - 1.41 - public void run() throws Exception { 1.42 - File javaFile = writeTestFile(); 1.43 - File classFile = compileTestFile(javaFile); 1.44 - 1.45 - ClassFile cf = ClassFile.read(classFile); 1.46 - test(cf); 1.47 - for (Field f : cf.fields) { 1.48 - test(cf, f); 1.49 - } 1.50 - for (Method m: cf.methods) { 1.51 - test(cf, m); 1.52 - } 1.53 - 1.54 - countAnnotations(); 1.55 - 1.56 - if (errors > 0) 1.57 - throw new Exception(errors + " errors found"); 1.58 - System.out.println("PASSED"); 1.59 - } 1.60 - 1.61 - void test(ClassFile cf) { 1.62 - test(cf, Attribute.RuntimeVisibleTypeAnnotations, true); 1.63 - test(cf, Attribute.RuntimeInvisibleTypeAnnotations, false); 1.64 - } 1.65 - 1.66 - void test(ClassFile cf, Method m) { 1.67 - test(cf, m, Attribute.RuntimeVisibleTypeAnnotations, true); 1.68 - test(cf, m, Attribute.RuntimeInvisibleTypeAnnotations, false); 1.69 - } 1.70 - 1.71 - void test(ClassFile cf, Field m) { 1.72 - test(cf, m, Attribute.RuntimeVisibleTypeAnnotations, true); 1.73 - test(cf, m, Attribute.RuntimeInvisibleTypeAnnotations, false); 1.74 - } 1.75 - 1.76 - // test the result of Attributes.getIndex according to expectations 1.77 - // encoded in the method's name 1.78 - void test(ClassFile cf, String name, boolean visible) { 1.79 - int index = cf.attributes.getIndex(cf.constant_pool, name); 1.80 - if (index != -1) { 1.81 - Attribute attr = cf.attributes.get(index); 1.82 - assert attr instanceof RuntimeTypeAnnotations_attribute; 1.83 - RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; 1.84 - all += tAttr.annotations.length; 1.85 - if (visible) 1.86 - visibles += tAttr.annotations.length; 1.87 - else 1.88 - invisibles += tAttr.annotations.length; 1.89 - 1.90 - for (ExtendedAnnotation anno : tAttr.annotations) 1.91 - anno.position.toString(); 1.92 - } 1.93 - } 1.94 - 1.95 - // test the result of Attributes.getIndex according to expectations 1.96 - // encoded in the method's name 1.97 - void test(ClassFile cf, Method m, String name, boolean visible) { 1.98 - int index = m.attributes.getIndex(cf.constant_pool, name); 1.99 - if (index != -1) { 1.100 - Attribute attr = m.attributes.get(index); 1.101 - assert attr instanceof RuntimeTypeAnnotations_attribute; 1.102 - RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; 1.103 - all += tAttr.annotations.length; 1.104 - if (visible) 1.105 - visibles += tAttr.annotations.length; 1.106 - else 1.107 - invisibles += tAttr.annotations.length; 1.108 - 1.109 - for (ExtendedAnnotation anno : tAttr.annotations) 1.110 - anno.position.toString(); 1.111 - } 1.112 - } 1.113 - 1.114 - // test the result of Attributes.getIndex according to expectations 1.115 - // encoded in the method's name 1.116 - void test(ClassFile cf, Field m, String name, boolean visible) { 1.117 - int index = m.attributes.getIndex(cf.constant_pool, name); 1.118 - if (index != -1) { 1.119 - Attribute attr = m.attributes.get(index); 1.120 - assert attr instanceof RuntimeTypeAnnotations_attribute; 1.121 - RuntimeTypeAnnotations_attribute tAttr = (RuntimeTypeAnnotations_attribute)attr; 1.122 - all += tAttr.annotations.length; 1.123 - if (visible) 1.124 - visibles += tAttr.annotations.length; 1.125 - else 1.126 - invisibles += tAttr.annotations.length; 1.127 - 1.128 - for (ExtendedAnnotation anno : tAttr.annotations) 1.129 - anno.position.toString(); 1.130 - } 1.131 - } 1.132 - 1.133 - File writeTestFile() throws IOException { 1.134 - File f = new File("Testa.java"); 1.135 - PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f))); 1.136 - out.println("import java.util.*;"); 1.137 - out.println("class Testa { "); 1.138 - out.println(" @interface A { }"); 1.139 - 1.140 - out.println(" void test() {"); 1.141 - out.println(" Object a = @A String.class;"); 1.142 - out.println(" Object b = @A String @A [] @A [].class;"); 1.143 - out.println(" }"); 1.144 - out.println("}"); 1.145 - 1.146 - out.close(); 1.147 - return f; 1.148 - } 1.149 - 1.150 - File compileTestFile(File f) { 1.151 - int rc = com.sun.tools.javac.Main.compile(new String[] { "-source", "1.7", "-g", f.getPath() }); 1.152 - if (rc != 0) 1.153 - throw new Error("compilation failed. rc=" + rc); 1.154 - String path = f.getPath(); 1.155 - return new File(path.substring(0, path.length() - 5) + ".class"); 1.156 - } 1.157 - 1.158 - void countAnnotations() { 1.159 - int expected_visibles = 0, expected_invisibles = 4; 1.160 - int expected_all = expected_visibles + expected_invisibles; 1.161 - 1.162 - if (expected_all != all) { 1.163 - errors++; 1.164 - System.err.println("expected " + expected_all 1.165 - + " annotations but found " + all); 1.166 - } 1.167 - 1.168 - if (expected_visibles != visibles) { 1.169 - errors++; 1.170 - System.err.println("expected " + expected_visibles 1.171 - + " visibles annotations but found " + visibles); 1.172 - } 1.173 - 1.174 - if (expected_invisibles != invisibles) { 1.175 - errors++; 1.176 - System.err.println("expected " + expected_invisibles 1.177 - + " invisibles annotations but found " + invisibles); 1.178 - } 1.179 - 1.180 - } 1.181 - 1.182 - int errors; 1.183 - int all; 1.184 - int visibles; 1.185 - int invisibles; 1.186 -}