TypesBadArg.java revision 1465:b52a38d4536c
1247835Skib/*
2247835Skib * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
3247835Skib * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4247835Skib *
5247835Skib * This code is free software; you can redistribute it and/or modify it
6247835Skib * under the terms of the GNU General Public License version 2 only, as
7247835Skib * published by the Free Software Foundation.
8247835Skib *
9247835Skib * This code is distributed in the hope that it will be useful, but WITHOUT
10247835Skib * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11247835Skib * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12247835Skib * version 2 for more details (a copy is included in the LICENSE file that
13247835Skib * accompanied this code).
14247835Skib *
15247835Skib * You should have received a copy of the GNU General Public License version
16247835Skib * 2 along with this work; if not, write to the Free Software Foundation,
17247835Skib * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18247835Skib *
19247835Skib * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20247835Skib * or visit www.oracle.com if you need additional information or have any
21247835Skib * questions.
22247835Skib */
23247835Skib
24247835Skib/*
25247835Skib * @test
26247835Skib * @bug     6345812
27247835Skib * @summary Validate argument kinds in Types utilities
28247835Skib * @author  Scott Seligman
29247835Skib * @library /tools/javac/lib
30247835Skib * @build   JavacTestingAbstractProcessor TypesBadArg
31247835Skib * @compile -processor TypesBadArg -proc:only TypesBadArg.java
32247835Skib */
33247835Skib
34247835Skibimport java.util.Set;
35247835Skibimport javax.annotation.processing.*;
36247835Skibimport javax.lang.model.element.*;
37247835Skibimport javax.lang.model.type.*;
38247835Skibimport javax.lang.model.util.*;
39247835Skib
40247835Skibpublic class TypesBadArg extends JavacTestingAbstractProcessor {
41247835Skib    boolean success = true;
42247835Skib
43247835Skib    public boolean process(Set<? extends TypeElement> tes,
44247835Skib                           RoundEnvironment round) {
45247835Skib        if (round.processingOver()) return true;
46247835Skib
47247835Skib        final Elements elements = processingEnv.getElementUtils();
48247835Skib        final Types types = processingEnv.getTypeUtils();
49247835Skib
50247835Skib        final TypeMirror javaLang =
51247835Skib            elements.getPackageElement("java.lang").asType();
52247835Skib
53247835Skib        makeBadCall(new Runnable() {
54247835Skib            public void run() {
55247835Skib                types.isSubtype(javaLang, javaLang);
56247835Skib            }
57247835Skib        });
58247835Skib        makeBadCall(new Runnable() {
59247835Skib            public void run() {
60247835Skib                types.isAssignable(javaLang, javaLang);
61247835Skib            }
62247835Skib        });
63247835Skib        makeBadCall(new Runnable() {
64247835Skib            public void run() {
65247835Skib                types.contains(javaLang, javaLang);
66247835Skib            }
67247835Skib        });
68247835Skib        makeBadCall(new Runnable() {
69247835Skib            public void run() {
70247835Skib                types.directSupertypes(javaLang);
71247835Skib            }
72247835Skib        });
73247835Skib        makeBadCall(new Runnable() {
74247835Skib            public void run() {
75247835Skib                types.erasure(javaLang);
76247835Skib            }
77247835Skib        });
78247835Skib        makeBadCall(new Runnable() {
79247835Skib            public void run() {
80247835Skib                types.capture(javaLang);
81247835Skib            }
82247835Skib        });
83247835Skib        makeBadCall(new Runnable() {
84247835Skib            public void run() {
85247835Skib                types.unboxedType(javaLang);
86247835Skib            }
87247835Skib        });
88247835Skib        makeBadCall(new Runnable() {
89247835Skib            public void run() {
90247835Skib                types.unboxedType(types.getNoType(TypeKind.VOID));
91247835Skib            }
92247835Skib        });
93247835Skib        if (! success)
94247835Skib            throw new AssertionError("Some test(s) failed.");
95247835Skib        return true;
96247835Skib    }
97247835Skib
98247835Skib    private void makeBadCall(Runnable runnable) {
99247835Skib        try {
100247835Skib            runnable.run();
101247835Skib            System.out.println("Failure: IllegalArgumentException expected");
102247835Skib            success = false;
103247835Skib        } catch (IllegalArgumentException e) {
104247835Skib            System.out.println("IllegalArgumentException as expected");
105247835Skib        }
106247835Skib    }
107247835Skib}
108247835Skib