1 /*
   2  * Copyright (c) 2013, 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 package typeannos;
  25 
  26 import java.lang.annotation.*;
  27 
  28 /*
  29  * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
  30  */
  31 class DefaultScope {
  32     Parameterized<String, String> unannotated;
  33     Parameterized<@FldA String, String> firstTypeArg;
  34     Parameterized<String, @FldA String> secondTypeArg;
  35     Parameterized<@FldA String, @FldB String> bothTypeArgs;
  36 
  37     Parameterized<@FldA Parameterized<@FldA String, @FldB String>, @FldB String>
  38     nestedParameterized;
  39 
  40     @FldA String [] array1;
  41     @FldA String @FldB [] array1Deep;
  42     @FldA String [] [] array2;
  43     @FldD String @FldC @FldA [] @FldC @FldB [] array2Deep;
  44     String @FldA [] [] array2First;
  45     String [] @FldB [] array2Second;
  46 
  47     // Old-style array syntax
  48     String array2FirstOld @FldA [];
  49     String array2SecondOld [] @FldB [];
  50 }
  51 
  52 class ModifiedScoped {
  53     public final Parameterized<String, String> unannotated = null;
  54     public final Parameterized<@FldA String, String> firstTypeArg = null;
  55     public final Parameterized<String, @FldA String> secondTypeArg = null;
  56     public final Parameterized<@FldA String, @FldB String> bothTypeArgs = null;
  57 
  58     public final Parameterized<@FldA Parameterized<@FldA String, @FldB String>, @FldB String>
  59     nestedParameterized = null;
  60 
  61     public final @FldA String [] array1 = null;
  62     public final @FldA String @FldB [] array1Deep = null;
  63     public final @FldA String [] [] array2 = null;
  64     public final @FldA String @FldA [] @FldB [] array2Deep = null;
  65     public final String @FldA [] [] array2First = null;
  66     public final String [] @FldB [] array2Second = null;
  67 }
  68 
  69 class Parameterized<K, V> { }
  70 
  71 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
  72 @Documented
  73 @interface FldA { }
  74 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
  75 @Documented
  76 @interface FldB { }
  77 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
  78 @Documented
  79 @interface FldC { }
  80 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
  81 @Documented
  82 @interface FldD { }