--- /dev/null 2016-07-01 10:21:58.952446902 +0300 +++ new/test/java/lang/annotation/AnnotationVerifier.java 2016-07-01 13:33:07.591559272 +0300 @@ -0,0 +1,72 @@ +/* +* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. +* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +* +* This code is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License version 2 only, as +* published by the Free Software Foundation. Oracle designates this +* particular file as subject to the "Classpath" exception as provided +* by Oracle in the LICENSE file that accompanied this code. +* +* This code is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +* version 2 for more details (a copy is included in the LICENSE file that +* accompanied this code). +* +* You should have received a copy of the GNU General Public License version +* 2 along with this work; if not, write to the Free Software Foundation, +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +* +* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +* or visit www.oracle.com if you need additional information or have any +* questions. +*/ + +import sun.reflect.annotation.AnnotationType; + +import java.lang.annotation.AnnotationFormatError; +import java.util.function.Supplier; + +/* + * @test + * @bug 8158510 + * @summary Verify valid annotation + * @modules java.base/jdk.internal.org.objectweb.asm + * @modules java.base/sun.reflect.annotation + * @clean AnnoationWithVoidReturn.class AnnoationWithParameter.class + * @compile -XDignore.symbol.file ClassFileGenerator.java + * @run main ClassFileGenerator + * @build AnnotationVerifier + * @run main AnnotationVerifier + */ + +@AnnoationWithParameter +@AnnoationWithVoidReturn +public class AnnotationVerifier { + + public static void main(String[] args) throws Exception { + int failures = 0; + failures += expectAFE(() -> {return AnnotationType.getInstance(AnnoationWithParameter.class).toString(); }); + failures += expectAFE(() -> {return AnnotationVerifier.class.getAnnotation(AnnoationWithVoidReturn.class); }); + + if (failures > 0) { + System.err.println(failures + " failure(s) seen"); + throw new RuntimeException(); + } + } + + private static int expectAFE(Supplier supplier) { + try { + Object o = supplier.get(); + System.err.println("Failure: unexpected value seen: " + o); + return 1; + } catch (AnnotationFormatError afe) { + System.out.println(afe); + return 0; + } catch (IllegalArgumentException iae) { + System.out.println(iae); + return 0; + } + } +}