1/*
2 * Copyright (c) 2014, 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
24/**
25 * @test
26 * @bug 8029017
27 * @summary sanity testing of ElementType validation for repeating annotations
28 * @compile TypeUseTarget.java
29 */
30
31import java.lang.annotation.*;
32
33public class TypeUseTarget {}
34
35
36// Case 1:
37@Target({
38    ElementType.TYPE_USE,
39})
40@Repeatable(Case1Container.class)
41@interface Case1 {}
42
43@Target({
44    ElementType.ANNOTATION_TYPE,
45    ElementType.TYPE,
46    ElementType.TYPE_USE,
47    ElementType.TYPE_PARAMETER,
48})
49@interface Case1Container {
50  Case1[] value();
51}
52
53
54// Case 2:
55@Target({
56    ElementType.TYPE_USE,
57})
58@Repeatable(Case2Container.class)
59@interface Case2 {}
60
61@Target({
62    ElementType.ANNOTATION_TYPE,
63    ElementType.TYPE,
64    ElementType.TYPE_USE,
65})
66@interface Case2Container {
67  Case2[] value();
68}
69
70
71// Case 3:
72@Target({
73    ElementType.TYPE_USE,
74})
75@Repeatable(Case3Container.class)
76@interface Case3 {}
77
78@Target({
79    ElementType.ANNOTATION_TYPE,
80    ElementType.TYPE,
81})
82@interface Case3Container {
83  Case3[] value();
84}
85
86
87// Case 4:
88@Target({
89    ElementType.TYPE_USE,
90})
91@Repeatable(Case4Container.class)
92@interface Case4 {}
93
94@Target({
95    ElementType.ANNOTATION_TYPE,
96})
97@interface Case4Container {
98  Case4[] value();
99}
100
101
102// Case 5:
103@Target({
104    ElementType.TYPE_USE,
105})
106@Repeatable(Case5Container.class)
107@interface Case5 {}
108
109@Target({
110    ElementType.TYPE,
111})
112@interface Case5Container {
113  Case5[] value();
114}
115
116
117// Case 6:
118@Target({
119    ElementType.TYPE_USE,
120})
121@Repeatable(Case6Container.class)
122@interface Case6 {}
123
124@Target({
125    ElementType.TYPE_PARAMETER,
126})
127@interface Case6Container {
128  Case6[] value();
129}
130