blob: 07e8c822d92e9845c10594cab9299e65d4372fe9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* This is an implementation of an early-draft specification developed under the Java
* Community Process (JCP) and is made available for testing and evaluation purposes
* only. The code is not compatible with any specification of the JCP.
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.parser;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import junit.framework.Test;
import org.eclipse.jdt.core.tests.util.CompilerTestSetup;
import org.eclipse.jdt.internal.compiler.ASTVisitor;
import org.eclipse.jdt.internal.compiler.ast.Annotation;
import org.eclipse.jdt.internal.compiler.ast.Argument;
import org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference;
import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration;
import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation;
import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation;
import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation;
import org.eclipse.jdt.internal.compiler.ast.SingleTypeReference;
import org.eclipse.jdt.internal.compiler.ast.TypeReference;
import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
import org.eclipse.jdt.internal.compiler.lookup.MethodScope;
public class TypeAnnotationSyntaxTest extends AbstractSyntaxTreeTest {
private static String jsr308TestScratchArea = "c:\\Jsr308TestScratchArea";
private static String referenceCompiler = "C:\\jdk-7-ea-bin-b75-windows-i586-30_oct_2009\\jdk7\\bin\\javac.exe";
public static Class testClass() {
return TypeAnnotationSyntaxTest.class;
}
public void initialize(CompilerTestSetup setUp) {
super.initialize(setUp);
}
public static Test suite() {
return buildMinimalComplianceTestSuite(testClass(), F_1_8);
}
static final class LocationPrinterVisitor extends ASTVisitor {
Annotation[] primaryAnnotations;
TypeReference enclosingReference;
Map locations;
public LocationPrinterVisitor() {
this.locations = new HashMap();
}
public Map getLocations() {
return this.locations;
}
public boolean visit(FieldDeclaration fieldDeclaration, MethodScope scope) {
Annotation[] annotations = fieldDeclaration.annotations;
this.enclosingReference = fieldDeclaration.type;
this.primaryAnnotations = annotations;
return true;
}
public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {
this.primaryAnnotations = methodDeclaration.annotations;
TypeReference returnType = methodDeclaration.returnType;
if (returnType != null) {
this.enclosingReference = returnType;
returnType.traverse(this, scope);
}
if (methodDeclaration.thrownExceptions != null) {
int thrownExceptionsLength = methodDeclaration.thrownExceptions.length;
for (int i = 0; i < thrownExceptionsLength; i++) {
TypeReference typeReference = methodDeclaration.thrownExceptions[i];
this.enclosingReference = typeReference;
this.primaryAnnotations = null;
typeReference.traverse(this, scope);
}
}
return false;
}
public boolean visit(Argument argument, ClassScope scope) {
Annotation[] annotations = argument.annotations;
this.enclosingReference = argument.type;
this.primaryAnnotations = annotations;
return true;
}
public boolean visit(Argument argument, BlockScope scope) {
Annotation[] annotations = argument.annotations;
this.enclosingReference = argument.type;
this.primaryAnnotations = annotations;
return true;
}
public boolean visit(MarkerAnnotation annotation, BlockScope scope) {
if (this.enclosingReference != null) {
storeLocations(annotation, Annotation.getLocations(this.enclosingReference, this.primaryAnnotations, annotation, null));
}
return false;
}
public boolean visit(SingleMemberAnnotation annotation, BlockScope scope) {
if (this.enclosingReference != null) {
storeLocations(annotation, Annotation.getLocations(this.enclosingReference, this.primaryAnnotations, annotation, null));
}
return false;
}
public boolean visit(NormalAnnotation annotation, BlockScope scope) {
if (this.enclosingReference != null) {
storeLocations(annotation, Annotation.getLocations(this.enclosingReference, this.primaryAnnotations, annotation, null));
}
return false;
}
public void storeLocations(Annotation annotation, int[] tab) {
String key = String.valueOf(annotation);
if (this.locations.get(key) != null) {
return;
}
if (tab == null) {
this.locations.put(key, null);
return;
}
StringBuffer buffer = new StringBuffer("{");
for (int i = 0, max = tab.length; i < max; i++) {
if (i > 0) {
buffer.append(',');
}
buffer.append(tab[i]);
}
buffer.append('}');
this.locations.put(key, String.valueOf(buffer));
}
public boolean visit(ArrayTypeReference arrayReference, BlockScope scope) {
if (this.enclosingReference == null) return false;
return true;
}
public boolean visit(ParameterizedSingleTypeReference typeReference, BlockScope scope) {
if (this.enclosingReference == null) return false;
return true;
}
public boolean visit(SingleTypeReference typeReference, BlockScope scope) {
if (this.enclosingReference == null) return false;
return true;
}
}
public TypeAnnotationSyntaxTest(String testName){
super(testName, referenceCompiler, jsr308TestScratchArea);
if (referenceCompiler != null) {
File f = new File(jsr308TestScratchArea);
if (!f.exists()) {
f.mkdir();
}
if (f.exists()) {
try {
OutputStreamWriter w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "Marker.java")));
w.write("@interface Marker {}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "Normal.java")));
w.write("@interface Normal {\n\tint value() default 10;\n}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "SingleMember.java")));
w.write("@interface SingleMember {\n\tint value() default 10;\n}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "Positive.java")));
w.write("@interface Positive {}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "Negative.java")));
w.write("@interface Negative{}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "Readonly.java")));
w.write("@interface Readonly {}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "NonNull.java")));
w.write("@interface NonNull {}\n".toCharArray());
w.close();
w = new OutputStreamWriter(new FileOutputStream(new File(jsr308TestScratchArea + File.separator + "HashMap.java")));
w.write("class HashMap<X,Y> {\n class Iterator {}; \n}\n".toCharArray());
w.close();
CHECK_ALL |= CHECK_JAVAC_PARSER;
} catch (IOException e) {
// ignore
}
}
}
}
static {
// TESTS_NAMES = new String[] { "test0038", "test0039", "test0040a" };
// TESTS_NUMBERS = new int[] { 133, 134, 135 };
if (!(new File(referenceCompiler).exists())) {
referenceCompiler = null;
jsr308TestScratchArea = null;
}
}
void traverse (File f) throws IOException {
if (f.isDirectory()) {
File [] files = f.listFiles();
for (int i = 0; i < files.length; i++) {
traverse(files[i]);
}
} else {
if (f.getName().endsWith(".java")) {
System.out.println(f.getCanonicalPath());
char [] contents = new char[(int) f.length()];
FileInputStream fs = new FileInputStream(f);
InputStreamReader isr = new InputStreamReader(fs);
isr.read(contents);
checkParse(contents, null, f.getCanonicalPath(), null);
}
}
}
public void _test000() throws IOException {
traverse(new File("C:\\jsr308tests"));
}
public void test0001() throws IOException {
String source = "@Marker class A extends String {}\n;" +
"@Marker class B extends @Marker String {}\n" +
"@Marker class C extends @Marker @SingleMember(0) String {}\n" +
"@Marker class D extends @Marker @SingleMember(0) @Normal(Value = 0) String {}\n" +
"@Marker class E extends String {}\n;";
String expectedUnitToString =
"@Marker class A extends String {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class B extends @Marker String {\n" +
" B() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class C extends @Marker @SingleMember(0) String {\n" +
" C() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class D extends @Marker @SingleMember(0) @Normal(Value = 0) String {\n" +
" D() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class E extends String {\n" +
" E() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER , source.toCharArray(), null, "test0001", expectedUnitToString);
}
public void test0002() throws IOException {
String source = "class A extends String {}\n;" +
"class B extends @Marker String {}\n" +
"class C extends @Marker @SingleMember(0) String {}\n" +
"class D extends @Marker @SingleMember(0) @Normal(Value = 0) String {}\n" +
"class E extends String {}\n;";
String expectedUnitToString =
"class A extends String {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"class B extends @Marker String {\n" +
" B() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"class C extends @Marker @SingleMember(0) String {\n" +
" C() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"class D extends @Marker @SingleMember(0) @Normal(Value = 0) String {\n" +
" D() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"class E extends String {\n" +
" E() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0002", expectedUnitToString);
}
public void test0003() throws IOException {
String source = "@Marker class A implements Comparable, " +
" @Marker Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A implements Comparable, @Marker Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0003", expectedUnitToString);
}
public void test0004() throws IOException {
String source = "@Marker class A implements Comparable, " +
" @Marker @SingleMember(0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A implements Comparable, @Marker @SingleMember(0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0004", expectedUnitToString);
}
public void test0005() throws IOException {
String source = "@Marker class A implements Comparable, " +
" @Marker @SingleMember(0) @Normal(Value=0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A implements Comparable, @Marker @SingleMember(0) @Normal(Value = 0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0005", expectedUnitToString);
}
public void test0006() throws IOException {
String source = "@Marker class A implements @Marker Comparable, " +
" @Marker @SingleMember(0) @Normal(Value=0) Serializable," +
" @Marker Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A implements @Marker Comparable, @Marker @SingleMember(0) @Normal(Value = 0) Serializable, @Marker Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0006", expectedUnitToString);
}
public void test007() throws IOException {
String source = "@Marker class A extends Object implements Comparable, " +
" @Marker @SingleMember(10) @Normal(Value=0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A extends Object implements Comparable, @Marker @SingleMember(10) @Normal(Value = 0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0007", expectedUnitToString);
}
public void test0008() throws IOException {
String source = "@Marker class A extends @Marker Object implements Comparable, " +
" @Marker @SingleMember(0) @Normal(Value=0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A extends @Marker Object implements Comparable, @Marker @SingleMember(0) @Normal(Value = 0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0008", expectedUnitToString);
}
public void test0009() throws IOException {
String source = "@Marker class A extends @Marker @SingleMember(0) Object implements Comparable, " +
" @Marker @SingleMember(0) @Normal(Value=0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A extends @Marker @SingleMember(0) Object implements Comparable, @Marker @SingleMember(0) @Normal(Value = 0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0009", expectedUnitToString);
}
public void test0010() throws IOException {
String source = "@Marker class A extends @Marker @SingleMember(0) @Normal(Value=0) Object implements Comparable, " +
" @Marker @SingleMember(0) @Normal(Value=0) Serializable," +
" Cloneable {\n" +
"}\n";
String expectedUnitToString =
"@Marker class A extends @Marker @SingleMember(0) @Normal(Value = 0) Object implements Comparable, @Marker @SingleMember(0) @Normal(Value = 0) Serializable, Cloneable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0010", expectedUnitToString);
}
public void test0011() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker String[] @Marker[][] s[] @SingleMember(0)[][] @Normal(Value = 0)[][];\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker String[] @Marker [][][] @SingleMember(0) [][] @Normal(Value = 0) [][] s;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0011", expectedUnitToString);
}
public void test0012() throws IOException {
String source = "public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[] f[];\n" +
" @English String[] @NonNull[] s[] @Nullable[][];\n" +
" float[] p[];\n" +
"public static void main(String args[]) {\n" +
" @Readonly String @Nullable[] @NonNull[] s;\n" +
" s = new @Readonly String @NonNull[5] @Nullable[];\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[][] f;\n" +
" @English String[] @NonNull [][] @Nullable [][] s;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" @Readonly String @Nullable [] @NonNull [] s;\n" +
" s = new @Readonly String @NonNull [5] @Nullable [];\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0012", expectedUnitToString);
}
public void test0013() throws IOException {
String source = "public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[] f[];\n" +
" @English String[] @NonNull[] s[] @Nullable[][];\n" +
" float[] p[];\n" +
"public static void main(String args[]) {\n" +
" @Readonly String s;\n" +
" s = new @Readonly String @NonNull[] @Nullable[] { {\"Hello\"}, {\"World\"}} [0][0];\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[][] f;\n" +
" @English String[] @NonNull [][] @Nullable [][] s;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" @Readonly String s;\n" +
" s = new @Readonly String @NonNull [] @Nullable []{{\"Hello\"}, {\"World\"}}[0][0];\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0013", expectedUnitToString);
}
public void test0014() throws IOException {
String source = "public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[] f[];\n" +
" @English String[] @NonNull[] s[] @Nullable[][];\n" +
" float[] p[];\n" +
"public static int main(String args[])[] @Marker[][] @Marker @SingleMember(0) @Normal(Value=0)[][] {\n" +
" @Readonly String @Nullable[] @NonNull[] s;\n" +
" s = new @Readonly String @NonNull[5] @Nullable[];\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[][] f;\n" +
" @English String[] @NonNull [][] @Nullable [][] s;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public static int[] @Marker [][] @Marker @SingleMember(0) @Normal(Value = 0) [][] main(String[] args) {\n" +
" @Readonly String @Nullable [] @NonNull [] s;\n" +
" s = new @Readonly String @NonNull [5] @Nullable [];\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0014", expectedUnitToString);
}
public void test0015() throws IOException {
String source = "public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[] f[];\n" +
" @English String[] @NonNull[] s[] @Nullable[][];\n" +
" float[] p[];\n" +
"public static int main(String args[])[] @Marker[][] @Marker @SingleMember(0) @Normal(Value=0)[][] {\n" +
" @Readonly String @Nullable[] @NonNull[] s;\n" +
" s = new @Readonly String @NonNull[5] @Nullable[];\n" +
"}\n" +
"@Marker public A () {}\n" +
"}\n";
String expectedUnitToString =
"public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" int[][] f;\n" +
" @English String[] @NonNull [][] @Nullable [][] s;\n" +
" float[][] p;\n" +
" public static int[] @Marker [][] @Marker @SingleMember(0) @Normal(Value = 0) [][] main(String[] args) {\n" +
" @Readonly String @Nullable [] @NonNull [] s;\n" +
" s = new @Readonly String @NonNull [5] @Nullable [];\n" +
" }\n" +
" public @Marker A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0015", expectedUnitToString);
}
// parameters
public void test0016() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(int[] @SingleMember(10)[][] args[] @Normal(Value = 10)[][])[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(int[] @SingleMember(10) [][][] @Normal(Value = 10) [][] args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0016", expectedUnitToString);
}
public void test0017() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(String[] @SingleMember(10)[][] args[] @Normal(Value = 10)[][])[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(String[] @SingleMember(10) [][][] @Normal(Value = 10) [][] args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0017", expectedUnitToString);
}
public void test0018() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(HashMap<String, Object>[] @SingleMember(10)[][] args[] @Normal(Value = 10)[][])[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(HashMap<String, Object>[] @SingleMember(10) [][][] @Normal(Value = 10) [][] args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0018", expectedUnitToString);
}
public void test0019() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker [][] main(HashMap<String, Object>.Iterator[] @SingleMember(10) [][] args[] @Normal(Value = 10) [][])[] @Marker [][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(HashMap<String, Object>.Iterator[] @SingleMember(10) [][][] @Normal(Value = 10) [][] args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0019", expectedUnitToString);
}
// varargs annotation
public void test0020() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(int[] @SingleMember(10)[][] @Marker ... args )[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(int[] @SingleMember(10) [][] @Marker ... args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0020", expectedUnitToString);
}
public void test0021() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(String[] @SingleMember(10)[][] @Marker ... args )[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(String[] @SingleMember(10) [][] @Marker ... args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0021", expectedUnitToString);
}
public void test0022() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(HashMap<Integer,String>[] @SingleMember(10)[][] @Marker ... args )[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(HashMap<Integer, String>[] @SingleMember(10) [][] @Marker ... args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0022", expectedUnitToString);
}
public void test0023() throws IOException {
String source = "public class A {\n" +
"@Marker public int[] @Marker[][] main(HashMap<Integer,String>.Iterator[] @SingleMember(10)[][] @Marker ... args )[] @Marker[][] {\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @Marker [][][] @Marker [][] main(HashMap<Integer, String>.Iterator[] @SingleMember(10) [][] @Marker ... args) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0023", expectedUnitToString);
}
// local variables
public void test0024() throws IOException {
String source = "public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
"public static void main(String args[]) {\n" +
" int[] f[];\n" +
" @English String[] @NonNull[] s[] @Nullable[][];\n" +
" float[] p[];\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class A implements @Readonly Comparable, @NonNull Serializable, Cloneable {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" int[][] f;\n" +
" @English String[] @NonNull [][] @Nullable [][] s;\n" +
" float[][] p;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0024", expectedUnitToString);
}
// type parameter
public void test0025() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> void foo() {\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>void foo() {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0025", expectedUnitToString);
}
// Type
public void test0026() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker int foo() {\n" +
" return 0;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> int bar() {\n" +
" return 0;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker int foo() {\n" +
" return 0;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>int bar() {\n" +
" return 0;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0026", expectedUnitToString);
}
// Type
public void test0027() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker String foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> String bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker String foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>String bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0027", expectedUnitToString);
}
//Type
public void test0028() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object> foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> HashMap<String, @NonNull Object> bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker HashMap<@Readonly String, Object> foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>HashMap<String, @NonNull Object> bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0028", expectedUnitToString);
}
// Type
public void test0029() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object>.Iterator foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> HashMap<String, @NonNull Object>.Iterator bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object>.Iterator foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>HashMap<String, @NonNull Object>.Iterator bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0029", expectedUnitToString);
}
//Type
public void test0030() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object>.Iterator[] @NonEmpty[][] foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> HashMap<String, @NonNull Object>.Iterator[] @NonEmpty[][] bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object>.Iterator[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>HashMap<String, @NonNull Object>.Iterator[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0030", expectedUnitToString);
}
//Type
public void test0031() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker int[] @NonEmpty[][] foo() {\n" +
" return 0;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> int[] @NonEmpty[][] bar() {\n" +
" return 0;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker int[] @NonEmpty [][] foo() {\n" +
" return 0;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>int[] @NonEmpty [][] bar() {\n" +
" return 0;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0031", expectedUnitToString);
}
// Type
public void test0032() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker String[]@NonEmpty[][] foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> String[]@NonEmpty[][] bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker String[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>String[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0032", expectedUnitToString);
}
//Type
public void test0033() throws IOException {
String source = "class A {\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> @Marker HashMap<@Readonly String, Object>[] @NonEmpty[][] foo() {\n" +
" return null;\n" +
"}\n" +
"public <Integer, @Positive Integer, @Negative Integer, Integer> HashMap<String, @NonNull Object>[]@NonEmpty[][] bar () {\n" +
" return null;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>@Marker HashMap<@Readonly String, Object>[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public <Integer, @Positive Integer, @Negative Integer, Integer>HashMap<String, @NonNull Object>[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0033", expectedUnitToString);
}
// Type0 field declaration.
public void test0034() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker int k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker int k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0034", expectedUnitToString);
}
//Type0 field declaration.
public void test0035() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker String k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker String k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0035", expectedUnitToString);
}
//Type0 field declaration.
public void test0036() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer> k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer> k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0036", expectedUnitToString);
}
//Type0 field declaration.
public void test0037() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0037", expectedUnitToString);
}
//Type0 field declaration.
public void test0038() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker int[] @NonEmpty[][] k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker int[] @NonEmpty [][] k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0038", expectedUnitToString);
}
//Type0 field declaration.
public void test0039() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker String[] @NonEmpty[][]k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker String[] @NonEmpty [][] k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0039", expectedUnitToString);
}
//Type0 field declaration.
public void test0040() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>[] @NonEmpty[][] k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>[] @NonEmpty [][] k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0040", expectedUnitToString);
}
//Type0 field declaration.
public void test0041() throws IOException {
String source = "public class A {\n" +
" int[] f[];\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty[][] k;\n" +
" float[] p[];\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" int[][] f;\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty [][] k;\n" +
" float[][] p;\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0041", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0042() throws IOException {
String source = "public class A {\n" +
" public @Marker int foo() { return 0; }\n" +
" public int bar() { return 0; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int foo() {\n" +
" return 0;\n" +
" }\n" +
" public int bar() {\n" +
" return 0;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0042", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0043() throws IOException {
String source = "public class A {\n" +
" public @Marker String foo() { return null; }\n" +
" public String bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker String foo() {\n" +
" return null;\n" +
" }\n" +
" public String bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0043", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0044() throws IOException {
String source = "public class A {\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer> foo() { return null; }\n" +
" public HashMap<@Positive Integer, @Negative Integer> bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer> foo() {\n" +
" return null;\n" +
" }\n" +
" public HashMap<@Positive Integer, @Negative Integer> bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0044", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0045() throws IOException {
String source = "public class A {\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator foo() { return null; }\n" +
" public HashMap<@Positive Integer, @Negative Integer>.Iterator bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator foo() {\n" +
" return null;\n" +
" }\n" +
" public HashMap<@Positive Integer, @Negative Integer>.Iterator bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0045", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0046() throws IOException {
String source = "public class A {\n" +
" public @Marker int[] foo() @NonEmpty[][] { return 0; }\n" +
" public int[] @NonEmpty[][] bar() { return 0; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker int[] @NonEmpty [][] foo() {\n" +
" return 0;\n" +
" }\n" +
" public int[] @NonEmpty [][] bar() {\n" +
" return 0;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0046", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0047() throws IOException {
String source = "public class A {\n" +
" public @Marker String[] foo() @NonEmpty[][] { return null; }\n" +
" public String[] @NonEmpty[][] bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker String[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public String[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0047", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0048() throws IOException {
String source = "public class A {\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>[] foo() @NonEmpty[][] { return null; }\n" +
" public HashMap<@Positive Integer, @Negative Integer> [] @NonEmpty[][] bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public HashMap<@Positive Integer, @Negative Integer>[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0048", expectedUnitToString);
}
//Type0 MethodHeaderName.
public void test0049() throws IOException {
String source = "public class A {\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] foo() @NonEmpty[][] { return null; }\n" +
" public HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty[][] bar() { return null; }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty [][] foo() {\n" +
" return null;\n" +
" }\n" +
" public HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty [][] bar() {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0049", expectedUnitToString);
}
//Type0 local variable declaration
public void test0050() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker int p;\n" +
" int q;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker int p;\n" +
" int q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0050", expectedUnitToString);
}
//Type0 local variable declaration
public void test0051() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker String p;\n" +
" String q;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker String p;\n" +
" String q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0051", expectedUnitToString);
}
//Type0 local variable declaration
public void test0052() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer> p;\n" +
" HashMap<@Positive Integer, @Negative Integer> q;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer> p;\n" +
" HashMap<@Positive Integer, @Negative Integer> q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0052", expectedUnitToString);
}
//Type0 local variable declaration
public void test0053() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator p;\n" +
" HashMap<@Positive Integer, @Negative Integer>.Iterator q;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator p;\n" +
" HashMap<@Positive Integer, @Negative Integer>.Iterator q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0053", expectedUnitToString);
}
//Type0 local variable declaration
public void test0054() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker int[] @NonNull[] p @NonEmpty[][];\n" +
" int[] @NonNull[] q @NonEmpty[][];\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker int[] @NonNull [] @NonEmpty [][] p;\n" +
" int[] @NonNull [] @NonEmpty [][] q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0054", expectedUnitToString);
}
//Type0 local variable declaration
public void test0055() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker String[] @NonNull[] p @NonEmpty[][];\n" +
" String[] @NonNull[] q @NonEmpty[][];\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker String[] @NonNull [] @NonEmpty [][] p;\n" +
" String[] @NonNull [] @NonEmpty [][] q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0055", expectedUnitToString);
}
//Type0 local variable declaration
public void test0056() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>[] @NonNull[] p @NonEmpty[][];\n" +
" HashMap<@Positive Integer, @Negative Integer>[] @NonNull[] q @NonEmpty[][];\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>[] @NonNull [] @NonEmpty [][] p;\n" +
" HashMap<@Positive Integer, @Negative Integer>[] @NonNull [] @NonEmpty [][] q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0056", expectedUnitToString);
}
//Type0 local variable declaration
public void test0057() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonNull[] p @NonEmpty[][];\n" +
" HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonNull[] @NonEmpty[][] q;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" @Marker HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonNull [] @NonEmpty [][] p;\n" +
" HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonNull [] @NonEmpty [][] q;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0057", expectedUnitToString);
}
//Type0 foreach
public void test0058() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" String @NonNull[] @Marker[] s @Readonly[];\n" +
" for (@Readonly String @NonNull[] si @Marker[] : s) {}\n" +
" for (String @NonNull[] sii @Marker[] : s) {}\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" String @NonNull [] @Marker [] @Readonly [] s;\n" +
" for (@Readonly String @NonNull [] @Marker [] si : s) \n" +
" {\n" +
" }\n" +
" for (String @NonNull [] @Marker [] sii : s) \n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0058", expectedUnitToString);
}
//Type0 foreach
public void test0059() throws IOException {
String source = "public class A {\n" +
" public void foo() {\n" +
" int @NonNull[] @Marker[] s @Readonly[];\n" +
" for (@Readonly int @NonNull[] si @Marker[] : s) {}\n" +
" for (int @NonNull[] sii @Marker[] : s) {}\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class A {\n" +
" public A() {\n" +
" super();\n" +
" }\n" +
" public void foo() {\n" +
" int @NonNull [] @Marker [] @Readonly [] s;\n" +
" for (@Readonly int @NonNull [] @Marker [] si : s) \n" +
" {\n" +
" }\n" +
" for (int @NonNull [] @Marker [] sii : s) \n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0059", expectedUnitToString);
}
// cast expression
public void test0060() throws IOException {
String source = "public class Clazz {\n" +
"public static void main(String[] args) {\n" +
"int x;\n" +
"x = (Integer)\n" +
"(@Readonly Object)\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @Normal(Value=0)[][] )\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @SingleMember(0)[][] )\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @Marker[][] )\n" +
"(@Readonly Object)\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>[] @Normal(Value=0)[][] )\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>[] @SingleMember(0)[][] )\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>[] @Marker[][] )\n" +
"(@Readonly Object)\n" +
"(@Readonly String[] @Normal(Value=0)[][] )\n" +
"(@Readonly String[] @SingleMember(0)[][] )\n" +
"(@Readonly String[] @Marker[][] )\n" +
"(@Readonly Object)\n" +
"(@Readonly int[] @Normal(Value=0)[][] )\n" +
"(@Readonly int[] @SingleMember(0)[][] )\n" +
"(@Readonly int[] @Marker[][] )\n" +
"(@Readonly Object)\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator)\n" +
"(@Readonly Object)\n" +
"(@Readonly HashMap<@Positive Integer, @Negative Integer>)\n" +
"(@Readonly Object)\n" +
"(@ReadOnly String)\n" +
"(@Readonly Object)\n" +
"(@Readonly int) 10;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class Clazz {\n" +
" public Clazz() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" int x;\n" +
" x = (Integer) (@Readonly Object) ( @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @Normal(Value = 0) [][]) ( @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @SingleMember(0) [][]) ( @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @Marker [][]) (@Readonly Object) (@Readonly HashMap<@Positive Integer, @Negative Integer>[] @Normal(Value = 0) [][]) (@Readonly HashMap<@Positive Integer, @Negative Integer>[] @SingleMember(0) [][]) (@Readonly HashMap<@Positive Integer, @Negative Integer>[] @Marker [][]) (@Readonly Object) (@Readonly String[] @Normal(Value = 0) [][]) (@Readonly String[] @SingleMember(0) [][]) (@Readonly String[] @Marker [][]) (@Readonly Object) (@Readonly int[] @Normal(Value = 0) [][]) (@Readonly int[] @SingleMember(0) [][]) (@Readonly int[] @Marker [][]) (@Readonly Object) ( @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator) (@Readonly Object) (@Readonly HashMap<@Positive Integer, @Negative Integer>) (@Readonly Object) (@ReadOnly String) (@Readonly Object) (@Readonly int) 10;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0060", expectedUnitToString);
}
//cast expression
public void test0061() throws IOException {
String source = "public class Clazz {\n" +
"public static void main(String[] args) {\n" +
"int x;\n" +
"x = (Integer)\n" +
"(Object)\n" +
"(@Readonly HashMap<Integer, @Negative Integer>.Iterator[] @Normal(Value=0)[][] )\n" +
"(HashMap<@Positive Integer, Integer>.Iterator[] @SingleMember(0)[][] )\n" +
"(@Readonly HashMap<Integer, @Negative Integer>.Iterator[] @Marker[][] )\n" +
"(Object)\n" +
"(@Readonly HashMap<@Positive Integer, Integer>[] @Normal(Value=0)[][] )\n" +
"(HashMap<Integer, @Negative Integer>[] @SingleMember(0)[][] )\n" +
"(@Readonly HashMap<@Positive Integer, Integer>[] @Marker[][] )\n" +
"(Object)\n" +
"(@Readonly String[] @Normal(Value=0)[][] )\n" +
"(String[] @SingleMember(0)[][] )\n" +
"(@Readonly String[] @Marker[][] )\n" +
"(Object)\n" +
"(@Readonly int[] @Normal(Value=0)[][] )\n" +
"(int[] @SingleMember(0)[][] )\n" +
"(@Readonly int[] @Marker[][] )\n" +
"(Object)\n" +
"(@Readonly HashMap<Integer, @Negative Integer>.Iterator)\n" +
"(Object)\n" +
"(@Readonly HashMap<@Positive Integer, Integer>)\n" +
"(Object)\n" +
"(@ReadOnly String)\n" +
"(Object)\n" +
"(@Readonly int) 10;\n" +
"}\n" +
"}\n";
String expectedUnitToString =
"public class Clazz {\n" +
" public Clazz() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" int x;\n" +
" x = (Integer) (Object) ( @Readonly HashMap<Integer, @Negative Integer>.Iterator[] @Normal(Value = 0) [][]) (HashMap<@Positive Integer, Integer>.Iterator[] @SingleMember(0) [][]) ( @Readonly HashMap<Integer, @Negative Integer>.Iterator[] @Marker [][]) (Object) (@Readonly HashMap<@Positive Integer, Integer>[] @Normal(Value = 0) [][]) (HashMap<Integer, @Negative Integer>[] @SingleMember(0) [][]) (@Readonly HashMap<@Positive Integer, Integer>[] @Marker [][]) (Object) (@Readonly String[] @Normal(Value = 0) [][]) (String[] @SingleMember(0) [][]) (@Readonly String[] @Marker [][]) (Object) (@Readonly int[] @Normal(Value = 0) [][]) (int[] @SingleMember(0) [][]) (@Readonly int[] @Marker [][]) (Object) ( @Readonly HashMap<Integer, @Negative Integer>.Iterator) (Object) (@Readonly HashMap<@Positive Integer, Integer>) (Object) (@ReadOnly String) (Object) (@Readonly int) 10;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0061", expectedUnitToString);
}
// instanceof checks
public void test0062() throws IOException {
String source = "public class Clazz {\n" +
"public static void main(Object o) {\n" +
"if (o instanceof @Readonly String) {\n" +
"} else if (o instanceof @Readonly int[] @NonEmpty[][] ) {\n" +
"} else if (o instanceof @Readonly String[] @NonEmpty[][] ) {\n" +
"} else if (o instanceof @Readonly HashMap<?,?>[] @NonEmpty[][] ) {\n" +
"} else if (o instanceof @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty[][] ) {\n" +
"} else if (o instanceof @Readonly HashMap<?,?>) {\n" +
"} else if (o instanceof @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator) {\n" +
"}\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class Clazz {\n" +
" public Clazz() {\n" +
" super();\n" +
" }\n" +
" public static void main(Object o) {\n" +
" if ((o instanceof @Readonly String))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly int[] @NonEmpty [][]))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly String[] @NonEmpty [][]))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly HashMap<?, ?>[] @NonEmpty [][]))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator[] @NonEmpty [][]))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly HashMap<?, ?>))\n" +
" {\n" +
" }\n" +
" else\n" +
" if ((o instanceof @Readonly HashMap<@Positive Integer, @Negative Integer>.Iterator))\n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0062", expectedUnitToString);
}
// assorted unclassified
public void test0063() throws IOException {
String source = "import java.util.HashMap;\n" +
"import java.util.Map; \n" +
"\n" +
"public class Clazz <@A M extends @B String, @C N extends @D Comparable> extends\n" +
" @E Object implements @F Comparable <@G Object> {\n" +
" \n" +
" Clazz(char[] ...args) { \n" +
" }\n" +
" \n" +
" int @I[] f @J[], g, h[], i@K[];\n" +
" int @L[][]@M[] f2; \n" +
" \n" +
" Clazz (int @N[] @O... a) {}\n" +
" int @R[]@S[] aa() {}\n" +
" \n" +
" int @T[]@U[]@V[] a () @W[]@X[]@Y[] { return null; }\n" +
" \n" +
" public void main(String @A[] @B ... args) throws @D Exception {\n" +
" \n" +
" HashMap<@E String, @F String> b1;\n" +
" \n" +
" int b; b = (@G int) 10;\n" +
" \n" +
" char @H[]@I[] ch; ch = (@K char @L[]@M[])(@N char @O[]@P[]) null;\n" +
" \n" +
" int[] i; i = new @Q int @R[10];\n" +
" \n" +
" \n" +
" Integer w; w = new X<@S String, @T Integer>().get(new @U Integer(12));\n" +
" throw new @V Exception(\"test\");\n" +
" boolean c; c = null instanceof @W String;\n" +
" } \n" +
" public <@X X, @Y Y> void foo(X x, Y @Z... y) { \n" +
" \n" +
"}\n" +
" \n" +
" void foo(Map<? super @A Object, ? extends @B String> m){}\n" +
" public int compareTo(Object arg0) {\n" +
" return 0;\n" +
" }\n" +
"\n" +
"}\n" +
"class X<@C K, @D T extends @E Object & @F Comparable<? super @G T>> {\n" +
" \n" +
" public Integer get(Integer integer) {\n" +
" return null;\n" +
" }\n" +
"}\n";
String expectedUnitToString = "import java.util.HashMap;\n" +
"import java.util.Map;\n" +
"public class Clazz<@A M extends @B String, @C N extends @D Comparable> extends @E Object implements @F Comparable<@G Object> {\n" +
" int @I [] @J [] f;\n" +
" int @I [] g;\n" +
" int @I [][] h;\n" +
" int @I [] @K [] i;\n" +
" int @L [][] @M [] f2;\n" +
" Clazz(char[]... args) {\n" +
" super();\n" +
" }\n" +
" Clazz(int @N [] @O ... a) {\n" +
" super();\n" +
" }\n" +
" int @R [] @S [] aa() {\n" +
" }\n" +
" int @T [] @U [] @V [] @W [] @X [] @Y [] a() {\n" +
" return null;\n" +
" }\n" +
" public void main(String @A [] @B ... args) throws @D Exception {\n" +
" HashMap<@E String, @F String> b1;\n" +
" int b;\n" +
" b = (@G int) 10;\n" +
" char @H [] @I [] ch;\n" +
" ch = (@K char @L [] @M []) (@N char @O [] @P []) null;\n" +
" int[] i;\n" +
" i = new @Q int @R [10];\n" +
" Integer w;\n" +
" w = new X<@S String, @T Integer>().get(new @U Integer(12));\n" +
" throw new @V Exception(\"test\");\n" +
" boolean c;\n" +
" c = (null instanceof @W String);\n" +
" }\n" +
" public <@X X, @Y Y>void foo(X x, Y @Z ... y) {\n" +
" }\n" +
" void foo(Map<? super @A Object, ? extends @B String> m) {\n" +
" }\n" +
" public int compareTo(Object arg0) {\n" +
" return 0;\n" +
" }\n" +
"}\n" +
"class X<@C K, @D T extends @E Object & @F Comparable<? super @G T>> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public Integer get(Integer integer) {\n" +
" return null;\n" +
" }\n" +
"}\n";
// indexing parser avoids creating lots of nodes, so parse tree comes out incorrectly.
// this is not bug, but intended behavior - see IndexingParser.newSingleNameReference(char[], long)
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0063", expectedUnitToString);
}
//assorted unclassified
public void test0064() throws IOException {
String source = "class X<T extends @E Object & @F Comparable<? super T>> {}\n";
String expectedUnitToString = "class X<T extends @E Object & @F Comparable<? super T>> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
"}\n";
// indexing parser avoids creating lots of nodes, so parse tree comes out incorrectly.
// this is not bug, but intended behavior - see IndexingParser.newSingleNameReference(char[], long)
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test064", expectedUnitToString);
}
//type class literal expression
public void test0066() throws IOException {
String source = "public class X {\n" +
" <T extends Y<@A String @C[][]@B[]> & Cloneable> void foo(T t) {}\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" <T extends Y<@A String @C [][] @B []> & Cloneable>void foo(T t) {\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0066", expectedUnitToString);
}
//check locations
public void test0067() throws IOException {
String source =
"public class X {\n" +
" @H String @E[] @F[] @G[] field;\n" +
" @A Map<@B String, @C List<@D Object>> field2;\n" +
" @A Map<@B String, @H String @E[] @F[] @G[]> field3;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @H String @E [] @F [] @G [] field;\n" +
" @A Map<@B String, @C List<@D Object>> field2;\n" +
" @A Map<@B String, @H String @E [] @F [] @G []> field3;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0067", expectedUnitToString);
}
//check locations
public void test0068() throws IOException {
String source =
"public class X {\n" +
" @H String @E[] @F[] @G[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @H String @E [] @F [] @G [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0068", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 4, locations.size());
assertEquals("Wrong location", null, locations.get("@E"));
assertEquals("Wrong location", "{0}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@G"));
assertEquals("Wrong location", "{2}", locations.get("@H"));
}
//check locations
public void test0069() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @H String> field3;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @H String> field3;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0069", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 3, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@H"));
}
//check locations
public void test0070() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @H String @E[] @F[] @G[]> field3;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @H String @E [] @F [] @G []> field3;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0070", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 6, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@E"));
assertEquals("Wrong location", "{1,0}", locations.get("@F"));
assertEquals("Wrong location", "{1,1}", locations.get("@G"));
assertEquals("Wrong location", "{1,2}", locations.get("@H"));
}
//check locations
public void test0071() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E[][] @G[]>> field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E [][] @G []>> field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0071", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 6, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@C"));
assertEquals("Wrong location", "{1,0,2}", locations.get("@H"));
assertEquals("Wrong location", "{1,0}", locations.get("@E"));
assertEquals("Wrong location", "{1,0,1}", locations.get("@G"));
}
//check locations
public void test0072() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E[][] @G[]>>[] @I[] @J[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E [][] @G []>>[] @I [] @J [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0072", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 8, locations.size());
assertEquals("Wrong location", "{0}", locations.get("@I"));
assertEquals("Wrong location", "{1}", locations.get("@J"));
assertEquals("Wrong location", "{2}", locations.get("@A"));
assertEquals("Wrong location", "{2,0}", locations.get("@B"));
assertEquals("Wrong location", "{2,1}", locations.get("@C"));
assertEquals("Wrong location", "{2,1,0,2}", locations.get("@H"));
assertEquals("Wrong location", "{2,1,0}", locations.get("@E"));
assertEquals("Wrong location", "{2,1,0,1}", locations.get("@G"));
}
//check locations
public void test0073() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E[][] @G[]>> @I[][] @J[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @C List<@H String @E [][] @G []>> @I [][] @J [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0073", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 8, locations.size());
assertEquals("Wrong location", null, locations.get("@I"));
assertEquals("Wrong location", "{1}", locations.get("@J"));
assertEquals("Wrong location", "{2}", locations.get("@A"));
assertEquals("Wrong location", "{2,0}", locations.get("@B"));
assertEquals("Wrong location", "{2,1}", locations.get("@C"));
assertEquals("Wrong location", "{2,1,0,2}", locations.get("@H"));
assertEquals("Wrong location", "{2,1,0}", locations.get("@E"));
assertEquals("Wrong location", "{2,1,0,1}", locations.get("@G"));
}
//check locations
public void test0074() throws IOException {
String source =
"public class X {\n" +
" @A Map<@C List<@H String @E[][] @G[]>, String @B[] @D[]> @I[] @F[] @J[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@C List<@H String @E [][] @G []>, String @B [] @D []> @I [] @F [] @J [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0074", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 10, locations.size());
assertEquals("Wrong location", null, locations.get("@I"));
assertEquals("Wrong location", "{0}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@J"));
assertEquals("Wrong location", "{2}", locations.get("@A"));
assertEquals("Wrong location", "{2,0}", locations.get("@C"));
assertEquals("Wrong location", "{2,0,0}", locations.get("@E"));
assertEquals("Wrong location", "{2,0,0,1}", locations.get("@G"));
assertEquals("Wrong location", "{2,0,0,2}", locations.get("@H"));
assertEquals("Wrong location", "{2,1,0}", locations.get("@D"));
assertEquals("Wrong location", "{2,1}", locations.get("@B"));
}
//check locations
public void test0075() throws IOException {
String source =
"public class X {\n" +
" @A Map<@C List<@H String @E[][] @G[]>, @B List<String [] @D[]>> [] @I[] @F[] @J[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@C List<@H String @E [][] @G []>, @B List<String[] @D []>>[] @I [] @F [] @J [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0075", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 10, locations.size());
assertEquals("Wrong location", "{0}", locations.get("@I"));
assertEquals("Wrong location", "{1}", locations.get("@F"));
assertEquals("Wrong location", "{2}", locations.get("@J"));
assertEquals("Wrong location", "{3}", locations.get("@A"));
assertEquals("Wrong location", "{3,0}", locations.get("@C"));
assertEquals("Wrong location", "{3,0,0}", locations.get("@E"));
assertEquals("Wrong location", "{3,0,0,1}", locations.get("@G"));
assertEquals("Wrong location", "{3,0,0,2}", locations.get("@H"));
assertEquals("Wrong location", "{3,1}", locations.get("@B"));
assertEquals("Wrong location", "{3,1,0,0}", locations.get("@D"));
}
//check locations
public void test0076() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B String, @C List<@D Object>> field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B String, @C List<@D Object>> field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0076", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 4, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@C"));
assertEquals("Wrong location", "{1,0}", locations.get("@D"));
}
//check locations
public void test0077() throws IOException {
String source =
"public class X {\n" +
" @H String @E[] @F[] @G[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @H String @E [] @F [] @G [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0077", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 4, locations.size());
assertEquals("Wrong location", null, locations.get("@E"));
assertEquals("Wrong location", "{0}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@G"));
assertEquals("Wrong location", "{2}", locations.get("@H"));
}
//check locations
public void test0078() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B Comparable<@C Object @D[] @E[] @F[]>, @G List<@H Document>> field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B Comparable<@C Object @D [] @E [] @F []>, @G List<@H Document>> field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0078", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 8, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{0,0,2}", locations.get("@C"));
assertEquals("Wrong location", "{0,0}", locations.get("@D"));
assertEquals("Wrong location", "{0,0,0}", locations.get("@E"));
assertEquals("Wrong location", "{0,0,1}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@G"));
assertEquals("Wrong location", "{1,0}", locations.get("@H"));
}
//check locations
public void test0079() throws IOException {
String source =
"public class X {\n" +
" @A java.util.Map<@B Comparable<@C Object @D[] @E[] @F[]>, @G List<@H Document>> field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A java.util.Map<@B Comparable<@C Object @D [] @E [] @F []>, @G List<@H Document>> field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0079", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 8, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{0,0,2}", locations.get("@C"));
assertEquals("Wrong location", "{0,0}", locations.get("@D"));
assertEquals("Wrong location", "{0,0,0}", locations.get("@E"));
assertEquals("Wrong location", "{0,0,1}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@G"));
assertEquals("Wrong location", "{1,0}", locations.get("@H"));
}
//check locations
public void test0080() throws IOException {
String source =
"public class X {\n" +
" @B Map<? extends Z, ? extends @A Z> field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @B Map<? extends Z, ? extends @A Z> field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0080", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 2, locations.size());
assertEquals("Wrong location", null, locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@A"));
}
//check locations
public void test0081() throws IOException {
String source =
"public class X {\n" +
" @H java.lang.String @E[] @F[] @G[] field;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @H java.lang.String @E [] @F [] @G [] field;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0081", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 4, locations.size());
assertEquals("Wrong location", null, locations.get("@E"));
assertEquals("Wrong location", "{0}", locations.get("@F"));
assertEquals("Wrong location", "{1}", locations.get("@G"));
assertEquals("Wrong location", "{2}", locations.get("@H"));
}
//check locations
public void test0082() throws IOException {
String source =
"public class X {\n" +
" @A Map<@B java.lang.String, @H java.lang.String @E[] @F[] @G[]> field3;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A Map<@B java.lang.String, @H java.lang.String @E [] @F [] @G []> field3;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
LocationPrinterVisitor visitor = new LocationPrinterVisitor();
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0082", expectedUnitToString, visitor);
Map locations = visitor.getLocations();
assertEquals("Wrong size", 6, locations.size());
assertEquals("Wrong location", null, locations.get("@A"));
assertEquals("Wrong location", "{0}", locations.get("@B"));
assertEquals("Wrong location", "{1}", locations.get("@E"));
assertEquals("Wrong location", "{1,0}", locations.get("@F"));
assertEquals("Wrong location", "{1,1}", locations.get("@G"));
assertEquals("Wrong location", "{1,2}", locations.get("@H"));
}
public void test0083() throws IOException {
String source =
"@Marker class A {}\n;" +
"@Marker class B extends @Marker A {}\n" +
"@Marker class C extends @Marker @SingleMember(0) A {}\n" +
"@Marker class D extends @Marker @SingleMember(0) @Normal(value = 0) A {}\n" +
"@Marker class E extends B {}\n;";
String expectedUnitToString =
"@Marker class A {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class B extends @Marker A {\n" +
" B() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class C extends @Marker @SingleMember(0) A {\n" +
" C() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class D extends @Marker @SingleMember(0) @Normal(value = 0) A {\n" +
" D() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class E extends B {\n" +
" E() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0083", expectedUnitToString);
}
// To test Parser.consumeAdditionalBound() with Type annotations
public void test0084() throws IOException {
String source =
"@Marker interface I<@Negative T> {}\n" +
"@SingleMember(0) interface J<@Positive T> {}\n" +
"@Marker class A implements I<@SingleMember(0) A>, J<@Marker A> {}\n" +
"@Normal(value = 1) class X<E extends @Positive A & @Marker I<A> & @Marker @SingleMember(1) J<@Readonly A>> {\n" +
"}";
String expectedUnitToString =
"@Marker interface I<@Negative T> {\n" +
"}\n" +
"@SingleMember(0) interface J<@Positive T> {\n" +
"}\n" +
"@Marker class A implements I<@SingleMember(0) A>, J<@Marker A> {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Normal(value = 1) class X<E extends @Positive A & @Marker I<A> & @Marker @SingleMember(1) J<@Readonly A>> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0084", expectedUnitToString );
}
// To test Parser.consumeAdditionalBound() with Type annotations
public void test0085() throws IOException {
String source =
"import java.io.Serializable;\n" +
"\n" +
"@SingleMember(10) class X<T extends @Marker Serializable & @Normal(value = 10) Runnable, V extends @Marker T> {\n" +
" @Negative T t;\n" +
" @Marker X(@Readonly T t) {\n" +
" this.t = t;\n" +
" }\n" +
" void foo(@Marker X this) {\n" +
" (this == null ? t : t).run();\n" +
" ((@Marker V) t).run();\n" +
" }\n" +
" public static void main(@Readonly String @Marker [] args) {\n" +
" new @Marker X<@Marker A, @Negative A>(new @Marker A()).foo();\n" +
" }\n" +
"}\n" +
"@Marker class A implements @Marker Serializable, @SingleMember(1) Runnable {\n" +
" public void run() {\n" +
" System.out.print(\"AA\");\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"import java.io.Serializable;\n" +
"@SingleMember(10) class X<T extends @Marker Serializable & @Normal(value = 10) Runnable, V extends @Marker T> {\n" +
" @Negative T t;\n" +
" @Marker X(@Readonly T t) {\n" +
" super();\n" +
" this.t = t;\n" +
" }\n" +
" void foo(@Marker X this) {\n" +
" ((this == null) ? t : t).run();\n" +
" ((@Marker V) t).run();\n" +
" }\n" +
" public static void main(@Readonly String @Marker [] args) {\n" +
" new @Marker X<@Marker A, @Negative A>(new @Marker A()).foo();\n" +
" }\n" +
"}\n" +
"@Marker class A implements @Marker Serializable, @SingleMember(1) Runnable {\n" +
" A() {\n" +
" super();\n" +
" }\n" +
" public void run() {\n" +
" System.out.print(\"AA\");\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0085", expectedUnitToString );
}
// To test Parser.classInstanceCreation() with type annotations
public void test0086() throws IOException {
String source =
"class X {\n" +
" @Marker X() {\n" +
" System.out.print(\"new X created\");\n" +
" }\n" +
" void f() throws @Marker InstantiationException {\n" +
" X testX;\n" +
" testX = new @Readonly @Negative X();\n" +
" Double d;\n" +
" d = new @Marker @Positive Double(1.1);\n" +
" throw new @Positive @Normal(value = 10) InstantiationException(\"test\");\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" @Marker X() {\n" +
" super();\n" +
" System.out.print(\"new X created\");\n" +
" }\n" +
" void f() throws @Marker InstantiationException {\n" +
" X testX;\n" +
" testX = new @Readonly @Negative X();\n" +
" Double d;\n" +
" d = new @Marker @Positive Double(1.1);\n" +
" throw new @Positive @Normal(value = 10) InstantiationException(\"test\");\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0086", expectedUnitToString );
}
// To test Parser.classInstanceCreation() with type annotations
public void test0087() throws IOException {
String source =
"class X {\n" +
" @Marker X() {\n" +
" System.out.print(\"new X created\");\n" +
" }\n" +
" @Marker class Inner {\n" +
" @Normal(value = 10) Inner(){\n" +
" System.out.print(\"X.Inner created\");\n" +
" }\n" +
" }\n" +
" public String getString(){\n" +
" return \"hello\";\n" +
" }\n" +
" void f(@Marker X this) {\n" +
" String testString;\n" +
" testString = new @Readonly @Negative X().getString();\n" +
" X.Inner testInner;\n" +
" testInner = new @Readonly X.Inner();\n" +
" int i;\n" +
" for(i = 0; i < 10; i++)\n" +
" System.out.print(\"test\");\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" @Marker class Inner {\n" +
" @Normal(value = 10) Inner() {\n" +
" super();\n" +
" System.out.print(\"X.Inner created\");\n" +
" }\n" +
" }\n" +
" @Marker X() {\n" +
" super();\n" +
" System.out.print(\"new X created\");\n" +
" }\n" +
" public String getString() {\n" +
" return \"hello\";\n" +
" }\n" +
" void f(@Marker X this) {\n" +
" String testString;\n" +
" testString = new @Readonly @Negative X().getString();\n" +
" X.Inner testInner;\n" +
" testInner = new @Readonly X.Inner();\n" +
" int i;\n" +
" for (i = 0; (i < 10); i ++) \n" +
" System.out.print(\"test\");\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0087", expectedUnitToString );
}
// To test Parser.classInstanceCreation() with type annotations
public void test0088() throws IOException {
String source =
"import java.io.Serializable;\n" +
"class X {\n" +
" public static void main(String[] args) {\n" +
" new @Marker Serializable() {\n" +
" };\n" +
" new @Positive @Marker Serializable() {\n" +
" public long serialVersion;\n" +
" };\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.io.Serializable;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Marker Serializable() {\n" +
" };\n" +
" new @Positive @Marker Serializable() {\n" +
" public long serialVersion;\n" +
" };\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0088", expectedUnitToString );
}
// To test Parser.classInstanceCreation() with type annotations
public void test0089() throws IOException {
String source =
"import java.io.Serializable;\n" +
"class X<T>{\n" +
" public void f() {\n" +
" X testX;\n" +
" testX = new @Marker @SingleMember(10) X<@Negative Integer>();\n" +
" System.out.print(\"object created\");\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.io.Serializable;\n" +
"class X<T> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void f() {\n" +
" X testX;\n" +
" testX = new @Marker @SingleMember(10) X<@Negative Integer>();\n" +
" System.out.print(\"object created\");\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0089", expectedUnitToString );
}
// To test Parser.classInstanceCreation() with type annotations
public void test0090() throws IOException {
String source =
"class X <@Marker T extends @Readonly String> {\n" +
" T foo(T t) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Readonly X<String>().baz(\"SUCCESS\");\n" + // Parser.classInstanceCreation called
" }\n" +
" void baz(final T t) {\n" +
" new @Readonly @Marker Object() {\n" + // Parser.classInstanceCreation called
" void print() {\n" +
" }\n" +
" }.print();\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X<@Marker T extends @Readonly String> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" T foo(T t) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Readonly X<String>().baz(\"SUCCESS\");\n" +
" }\n" +
" void baz(final T t) {\n" +
" new @Readonly @Marker Object() {\n" +
" void print() {\n" +
" }\n" +
"}.print();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0090", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithInitializer() with Type Annotations
public void test0091() throws IOException {
String source =
"class X <@Marker T extends @Readonly String> {\n" +
" public static void main(String[] args) {\n" +
" int [] x1;\n" +
" x1 = new int @Marker @SingleMember(2) [] {-1, -2};\n" +
" Integer [][] x2;\n" +
" x2 = new @Positive Integer @Marker @SingleMember(3) [] @SingleMember(3) [] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X<@Marker T extends @Readonly String> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" int[] x1;\n" +
" x1 = new int @Marker @SingleMember(2) []{(- 1), (- 2)};\n" +
" Integer[][] x2;\n" +
" x2 = new @Positive Integer @Marker @SingleMember(3) [] @SingleMember(3) []{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0091", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithInitializer() with Type Annotations
public void test0092() throws IOException {
String source =
"class X {\n" +
" static class T {\n" +
" public @Readonly Object @Normal(value = 10) [] f() {\n" +
" return new @Readonly Object @Normal(value = 10) [] {this, T.this};\n" +
" }\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" static class T {\n" +
" T() {\n" +
" super();\n" +
" }\n" +
" public @Readonly Object @Normal(value = 10) [] f() {\n" +
" return new @Readonly Object @Normal(value = 10) []{this, T.this};\n" +
" }\n" +
" }\n" +
" X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0092", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithInitializer() with Type Annotations
public void test0093() throws IOException {
String source =
"class X {\n" +
" public static void main(String[] args) {\n" +
" java.util.Arrays.asList(new @Readonly Object @SingleMember(1) [] {\"1\"});\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" java.util.Arrays.asList(new @Readonly Object @SingleMember(1) []{\"1\"});\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0093", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithInitializer() with Type Annotations
public void test0094() throws IOException {
String source =
"class X {\n" +
" public boolean test() {\n" +
" String[] s;\n" +
" s = foo(new @Marker String @SingleMember(1) []{\"hello\"});\n" +
" return s != null;\n" +
" }\n" +
" public <@Marker F> F @SingleMember(1) [] foo(F[] f) {\n" +
" return f;\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public boolean test() {\n" +
" String[] s;\n" +
" s = foo(new @Marker String @SingleMember(1) []{\"hello\"});\n" +
" return (s != null);\n" +
" }\n" +
" public <@Marker F>F @SingleMember(1) [] foo(F[] f) {\n" +
" return f;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0094", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithInitializer() with Type Annotations
public void test0095() throws IOException {
String source =
"import java.util.Arrays;\n" +
"import java.util.List;\n" +
"@Marker class Deejay {\n" +
" @Marker class Counter<@Marker T> {}\n" +
" public void f(String[] args) {\n" +
" Counter<@Positive Integer> songCounter;\n" +
" songCounter = new Counter<@Positive Integer>();\n" +
" Counter<@Readonly String> genre;\n" +
" genre = new Counter<@Readonly String>();\n" +
" List<@Marker Counter<?>> list1;\n" +
" list1 = Arrays.asList(new @Marker Counter<?> @Normal(value = 2) @Marker [] {songCounter, genre});\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"import java.util.Arrays;\n" +
"import java.util.List;\n" +
"@Marker class Deejay {\n" +
" @Marker class Counter<@Marker T> {\n" +
" Counter() {\n" +
" super();\n" +
" }\n" +
" }\n" +
" Deejay() {\n" +
" super();\n" +
" }\n" +
" public void f(String[] args) {\n" +
" Counter<@Positive Integer> songCounter;\n" +
" songCounter = new Counter<@Positive Integer>();\n" +
" Counter<@Readonly String> genre;\n" +
" genre = new Counter<@Readonly String>();\n" +
" List<@Marker Counter<?>> list1;\n" +
" list1 = Arrays.asList(new @Marker Counter<?> @Normal(value = 2) @Marker []{songCounter, genre});\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0095", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithoutInitializer() with Type Annotations
public void test0096() throws IOException {
String source =
"class X <@Marker T extends @Readonly String> {\n" +
" public static void main(String[] args) {\n" +
" int [] x1;\n" +
" x1 = new int @Marker @SingleMember(10) [10];\n" +
" Integer [][] x2;\n" +
" x2 = new @Positive Integer @Marker [10] @Normal(value = 10) [10];\n" +
" char[][] tokens;\n" +
" tokens = new char @SingleMember(0) [0] @Normal(value = 10) @Marker [];\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X<@Marker T extends @Readonly String> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" int[] x1;\n" +
" x1 = new int @Marker @SingleMember(10) [10];\n" +
" Integer[][] x2;\n" +
" x2 = new @Positive Integer @Marker [10] @Normal(value = 10) [10];\n" +
" char[][] tokens;\n" +
" tokens = new char @SingleMember(0) [0] @Normal(value = 10) @Marker [];\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0096", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithoutInitializer() with Type Annotations
public void test0097() throws IOException {
String source =
"class X {\n" +
" public @Readonly Object @Normal(value = 10) [] f(@Marker X this) {\n" +
" return new @Readonly Object @Normal(value = 10) [10];\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public @Readonly Object @Normal(value = 10) [] f(@Marker X this) {\n" +
" return new @Readonly Object @Normal(value = 10) [10];\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0097", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithoutInitializer() with Type Annotations
public void test0098() throws IOException {
String source =
"class X {\n" +
" public boolean test() {\n" +
" String[] s;\n" +
" s = foo(new @Marker String @SingleMember(1) [10]);\n" +
" return s != null;\n" +
" }\n" +
" public <@Marker F> F @SingleMember(1) [] foo(F[] f) {\n" +
" return f;\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public boolean test() {\n" +
" String[] s;\n" +
" s = foo(new @Marker String @SingleMember(1) [10]);\n" +
" return (s != null);\n" +
" }\n" +
" public <@Marker F>F @SingleMember(1) [] foo(F[] f) {\n" +
" return f;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0098", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithoutInitializer() with Type Annotations
public void test0099() throws IOException {
String source =
"import java.util.Arrays;\n" +
"import java.util.List;\n" +
"class X<@Marker T> {\n" +
" public void test() {\n" +
" List<@Marker X<?>> a;\n" +
" a = Arrays.asList(new @Marker X<?> @SingleMember(0) [0]);\n" +
" String @Marker [] @SingleMember(1) [] x;\n" +
" x = new @Readonly String @Normal(value = 5) [5] @SingleMember(1) [1];\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.util.Arrays;\n" +
"import java.util.List;\n" +
"class X<@Marker T> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void test() {\n" +
" List<@Marker X<?>> a;\n" +
" a = Arrays.asList(new @Marker X<?> @SingleMember(0) [0]);\n" +
" String @Marker [] @SingleMember(1) [] x;\n" +
" x = new @Readonly String @Normal(value = 5) [5] @SingleMember(1) [1];\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0099", expectedUnitToString );
}
// To test Parser.consumeArrayCreationExpressionWithoutInitializer() with Type Annotations
public void test0100() throws IOException {
String source =
"import java.util.*;\n" +
"class X {\n" +
" public Integer[] getTypes() {\n" +
" List<@Positive Integer> list;\n" +
" list = new ArrayList<@Positive Integer>();\n" +
" return list == null \n" +
" ? new @Positive Integer @SingleMember(0) [0] \n" +
" : list.toArray(new @Positive Integer @Marker [list.size()]);\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.util.*;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public Integer[] getTypes() {\n" +
" List<@Positive Integer> list;\n" +
" list = new ArrayList<@Positive Integer>();\n" +
" return ((list == null) ? new @Positive Integer @SingleMember(0) [0] : list.toArray(new @Positive Integer @Marker [list.size()]));\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0100", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithGenericsArray() with Type Annotations
public void test0101() throws IOException {
String source =
"import java.util.*;\n" +
"\n" +
"@Marker class X {\n" +
" Vector<Object> data;\n" +
" public void t() {\n" +
" Vector<@Readonly Object> v;\n" +
" v = (@Marker @SingleMember(0) Vector<@Readonly Object>) data.elementAt(0);\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"import java.util.*;\n" +
"@Marker class X {\n" +
" Vector<Object> data;\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void t() {\n" +
" Vector<@Readonly Object> v;\n" +
" v = (@Marker @SingleMember(0) Vector<@Readonly Object>) data.elementAt(0);\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0101", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithGenericsArray() with Type Annotations
// To test Parser.consumeClassHeaderExtends() with Type Annotations
public void test0102() throws IOException {
String source =
"class X<E> {\n" +
" X<@Readonly String> bar() {\n" +
" return (@Marker AX<@Readonly String>) new X<@Readonly String>();\n" +
" }\n" +
" X<@Readonly String> bar(Object o) {\n" +
" return (@Marker AX<@Readonly String>) o;\n" +
" }\n" +
" X<@Negative E> foo(Object o) {\n" +
" return (@Marker @Normal(value = 10) AX<@Negative E>) o;\n" +
" } \n" +
" X<E> baz(Object o) {\n" +
" return (@Marker AX<E>) null;\n" +
" }\n" +
" X<String> baz2(BX bx) {\n" +
" return (@Marker @SingleMember(10) X<String>) bx;\n" +
" }\n" +
"}\n" +
"@Normal(value = 1) class AX<@Marker F> extends @Marker X<@SingleMember(10)F> {}\n" +
"@Normal(value = 2) class BX extends @Marker @SingleMember(1) AX<@Readonly String> {}\n";
String expectedUnitToString =
"class X<E> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" X<@Readonly String> bar() {\n" +
" return (@Marker AX<@Readonly String>) new X<@Readonly String>();\n" +
" }\n" +
" X<@Readonly String> bar(Object o) {\n" +
" return (@Marker AX<@Readonly String>) o;\n" +
" }\n" +
" X<@Negative E> foo(Object o) {\n" +
" return (@Marker @Normal(value = 10) AX<@Negative E>) o;\n" +
" }\n" +
" X<E> baz(Object o) {\n" +
" return (@Marker AX<E>) null;\n" +
" }\n" +
" X<String> baz2(BX bx) {\n" +
" return (@Marker @SingleMember(10) X<String>) bx;\n" +
" }\n" +
"}\n" +
"@Normal(value = 1) class AX<@Marker F> extends @Marker X<@SingleMember(10) F> {\n" +
" AX() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Normal(value = 2) class BX extends @Marker @SingleMember(1) AX<@Readonly String> {\n" +
" BX() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0102", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithGenericsArray() with Type Annotations
public void test0103() throws IOException {
String source =
"import java.lang.reflect.Array;\n" +
"@Marker class X<@Readonly T> {\n" +
" T @SingleMember(0) [] theArray;\n" +
" public X(Class<T> clazz) {\n" +
" theArray = (@Marker @SingleMember(0) T @Normal(value = 10) []) Array.newInstance(clazz, 10); // Compiler warning\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.lang.reflect.Array;\n" +
"@Marker class X<@Readonly T> {\n" +
" T @SingleMember(0) [] theArray;\n" +
" public X(Class<T> clazz) {\n" +
" super();\n" +
" theArray = (@Marker @SingleMember(0) T @Normal(value = 10) []) Array.newInstance(clazz, 10);\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0103", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithGenericsArray() with Type Annotations
public void test0104() throws IOException {
String source =
"import java.util.*;\n" +
"class X {\n" +
" void method(Object o) {\n" +
" if (o instanceof String[]){\n" +
" String[] s;\n" +
" s = (@Marker @Readonly String @Marker []) o;\n" +
" }\n" +
" if (o instanceof @Readonly List<?>[]) {\n" +
" List<?>[] es;\n" +
" es = (@Marker List<?> @SingleMember(0) []) o;\n" +
" }\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.util.*;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" void method(Object o) {\n" +
" if ((o instanceof String[]))\n" +
" {\n" +
" String[] s;\n" +
" s = (@Marker @Readonly String @Marker []) o;\n" +
" }\n" +
" if ((o instanceof @Readonly List<?>[]))\n" +
" {\n" +
" List<?>[] es;\n" +
" es = (@Marker List<?> @SingleMember(0) []) o;\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0104", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithPrimitiveType() with Type Annotations
public void test0105() throws IOException {
String source =
"import java.util.HashMap;\n" +
"class X {\n" +
" public static void main(String[] args) {\n" +
" HashMap<Byte, Byte> subst;\n" +
" subst = new HashMap<Byte, Byte>();\n" +
" subst.put((@Marker byte)1, (@Positive byte)1);\n" +
" if (1 + subst.get((@Positive @Normal(value = 10) byte)1) > 0.f) {\n" +
" System.out.println(\"SUCCESS\");\n" +
" } \n" +
" }\n" +
"}\n";
String expectedUnitToString =
"import java.util.HashMap;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" HashMap<Byte, Byte> subst;\n" +
" subst = new HashMap<Byte, Byte>();\n" +
" subst.put((@Marker byte) 1, (@Positive byte) 1);\n" +
" if (((1 + subst.get((@Positive @Normal(value = 10) byte) 1)) > 0.f))\n" +
" {\n" +
" System.out.println(\"SUCCESS\");\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0105", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithPrimitiveType() with Type Annotations
public void test0106() throws IOException {
String source =
"class X{\n" +
" private float x, y, z;\n" +
" float magnitude () {\n" +
" return (@Marker @Positive float) Math.sqrt((x*x) + (y*y) + (z*z));\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X {\n" +
" private float x;\n" +
" private float y;\n" +
" private float z;\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" float magnitude() {\n" +
" return (@Marker @Positive float) Math.sqrt((((x * x) + (y * y)) + (z * z)));\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0106", expectedUnitToString );
}
// To test Parser.consumeCastExpressionWithQualifiedGenericsArray() with Type Annotations
// Javac version b76 crashes on type annotations on type arguments to parameterized classes
// in a qualified generic reference
public void test0107() throws IOException {
String source =
"class C1<T> {\n" +
" class C11 { }\n" +
" @Marker class C12 {\n" +
" T t;\n" +
" C1<@Readonly T>.C11 m() {\n" +
" C1<@Readonly T>.C11[] ts;\n" +
" ts = (@Marker C1<@Readonly T>.C11[]) new @Marker C1<?>.C11 @Normal(value = 5) [5];\n" +
" return ts;\n" +
" }\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class C1<T> {\n" +
" class C11 {\n" +
" C11() {\n" +
" super();\n" +
" }\n" +
" }\n" +
" @Marker class C12 {\n" +
" T t;\n" +
" C12() {\n" +
" super();\n" +
" }\n" +
" C1<@Readonly T>.C11 m() {\n" +
" C1<@Readonly T>.C11[] ts;\n" +
" ts = ( @Marker C1<@Readonly T>.C11[]) new @Marker C1<?>.C11 @Normal(value = 5) [5];\n" +
" return ts;\n" +
" }\n" +
" }\n" +
" C1() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0107", expectedUnitToString );
}
// To test Parser.consumeFormalParameter() with Type Annotations
public void test0108() throws IOException {
String source =
"class X {\n" +
" int field;" +
" public void test(@Marker X x,@Positive int i){\n" +
" x.field = i;\n" +
" }\n" +
" public static void main(@Readonly String args @Normal(10) []){" +
" System.exit(0);\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X {\n" +
" int field;\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void test(@Marker X x, @Positive int i) {\n" +
" x.field = i;\n" +
" }\n" +
" public static void main(@Readonly String @Normal(10) [] args) {\n" +
" System.exit(0);\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0108", expectedUnitToString );
}
// To test Parser.consumeFormalParameter() with Type Annotations
public void test0109() throws IOException {
String source =
"class X<@Marker T> {\n" +
" T field;" +
" public void test(@Marker @SingleMember(1) X<? extends @Marker Object> x,@Positive T i){\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X<@Marker T> {\n" +
" T field;\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void test(@Marker @SingleMember(1) X<? extends @Marker Object> x, @Positive T i) {\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0109", expectedUnitToString );
}
// To test Parser.consumeClassInstanceCreationExpressionQualifiedWithTypeArguments()
// with Type Annotations
// Javac b76 crashes with type annotations in qualified class instance creation expression
public void test0110() throws IOException {
String source =
"class X {\n" +
" class MX {\n" +
" @Marker <T> MX(T t){\n" +
" System.out.println(t);\n" +
" }\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X().new <@Readonly String> @Marker MX(\"SUCCESS\");\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X {\n" +
" class MX {\n" +
" @Marker <T>MX(T t) {\n" +
" super();\n" +
" System.out.println(t);\n" +
" }\n" +
" }\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X().new <@Readonly String>@Marker MX(\"SUCCESS\");\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER & ~CHECK_DOCUMENT_ELEMENT_PARSER, source.toCharArray(), null, "test0110", expectedUnitToString );
}
// To test Parser.consumeClassInstanceCreationExpressionWithTypeArguments()
// with Type Annotations
public void test0111() throws IOException {
String source =
"class X {\n" +
" public <T> X(T t){\n" +
" System.out.println(t);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new <@Readonly String> @Marker @SingleMember(0) X(\"SUCCESS\");\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X {\n" +
" public <T>X(T t) {\n" +
" super();\n" +
" System.out.println(t);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new <@Readonly String>@Marker @SingleMember(0) X(\"SUCCESS\");\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_DOCUMENT_ELEMENT_PARSER, source.toCharArray(), null, "test0111", expectedUnitToString );
}
// To test Parser.consumeEnhancedForStatementHeaderInit() with Type Annotations
public void test0112() throws IOException {
String source =
"import java.util.*;\n" +
"class X {\n" +
" List list() { return null; }\n" +
" void m2() { for (@SingleMember(10) Iterator<@Marker X> i = list().iterator(); i.hasNext();); }\n" +
" void m3() {\n" +
" Integer [] array;\n" +
" array = new Integer [] {1, 2, 3};\n" +
" List<List<X>> xList;\n" +
" xList = null;\n" +
" for(@Positive @SingleMember(10) Integer i: array) {}\n" +
" for(@Marker @Normal(value = 5) List<@Readonly X> x: xList) {}\n" +
" }" +
"}\n";
String expectedUnitToString =
"import java.util.*;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" List list() {\n" +
" return null;\n" +
" }\n" +
" void m2() {\n" +
" for (@SingleMember(10) Iterator<@Marker X> i = list().iterator();; i.hasNext(); ) \n" +
" ;\n" +
" }\n" +
" void m3() {\n" +
" Integer[] array;\n" +
" array = new Integer[]{1, 2, 3};\n" +
" List<List<X>> xList;\n" +
" xList = null;\n" +
" for (@Positive @SingleMember(10) Integer i : array) \n" +
" {\n" +
" }\n" +
" for (@Marker @Normal(value = 5) List<@Readonly X> x : xList) \n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_COMPLETION_PARSER & ~CHECK_SELECTION_PARSER & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0112", expectedUnitToString );
expectedUnitToString =
"import java.util.*;\n" +
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" List list() {\n" +
" return null;\n" +
" }\n" +
" void m2() {\n" +
" for (@SingleMember(10) Iterator<@Marker X> i;; i.hasNext(); ) \n" +
" ;\n" +
" }\n" +
" void m3() {\n" +
" Integer[] array;\n" +
" array = new Integer[]{1, 2, 3};\n" +
" List<List<X>> xList;\n" +
" xList = null;\n" +
" for (@Positive @SingleMember(10) Integer i : array) \n" +
" {\n" +
" }\n" +
" for (@Marker @Normal(value = 5) List<@Readonly X> x : xList) \n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_COMPLETION_PARSER & CHECK_SELECTION_PARSER, source.toCharArray(), null, "test0112", expectedUnitToString );
}
// To test Parser.consumeEnterAnonymousClassBody() with Type Annotations
public void test0113() throws IOException {
String source =
"@Marker class X {\n" +
" void f(@Normal(value = 5) X this) {\n" +
" new @Marker @SingleMember(10) Object() {\n" +
" void foo(){\n" +
" System.out.println(\"test\");\n" +
" }\n" +
" }.foo();\n" +
" }\n" +
"}";
String expectedUnitToString =
"@Marker class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" void f(@Normal(value = 5) X this) {\n" +
" new @Marker @SingleMember(10) Object() {\n" +
" void foo() {\n" +
" System.out.println(\"test\");\n" +
" }\n" +
"}.foo();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_DOCUMENT_ELEMENT_PARSER, source.toCharArray(), null, "test0113", expectedUnitToString );
}
// To test Parser.consumeEnterAnonymousClassBody() with Type Annotations
public void test0114() throws IOException {
String source =
"class Toplevel2{\n" +
" public boolean foo(){\n" +
" Toplevel2 o;\n" +
" o = new @Marker @Normal(value = 5) Toplevel2() { \n" +
" public boolean foo() { return false; } // no copy in fact\n" +
" };\n" +
" return o.foo();\n" +
" }\n" +
"}";
String expectedUnitToString =
"class Toplevel2 {\n" +
" Toplevel2() {\n" +
" super();\n" +
" }\n" +
" public boolean foo() {\n" +
" Toplevel2 o;\n" +
" o = new @Marker @Normal(value = 5) Toplevel2() {\n" +
" public boolean foo() {\n" +
" return false;\n" +
" }\n" +
"};\n" +
" return o.foo();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_DOCUMENT_ELEMENT_PARSER, source.toCharArray(), null, "test0114", expectedUnitToString );
}
// To test Parser.consumeEnterAnonymousClassBody() with Type Annotations
public void test0115() throws IOException {
String source =
"class X <T> {\n" +
" T foo(T t) {\n" +
" System.out.println(t);\n" +
" return t;\n" +
" }\n" +
" public static void main(String @Normal(value = 5) [] args) {\n" +
" new @Marker X<@SingleMember(10) @Normal(value = 5) XY>() {\n" +
" void run() {\n" +
" foo(new @Marker XY());\n" +
" }\n" +
" }.run();\n" +
" }\n" +
"}\n" +
"@Marker class XY {\n" +
" public String toString() {\n" +
" return \"SUCCESS\";\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"class X<T> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" T foo(T t) {\n" +
" System.out.println(t);\n" +
" return t;\n" +
" }\n" +
" public static void main(String @Normal(value = 5) [] args) {\n" +
" new @Marker X<@SingleMember(10) @Normal(value = 5) XY>() {\n" +
" void run() {\n" +
" foo(new @Marker XY());\n" +
" }\n" +
"}.run();\n" +
" }\n" +
"}\n" +
"@Marker class XY {\n" +
" XY() {\n" +
" super();\n" +
" }\n" +
" public String toString() {\n" +
" return \"SUCCESS\";\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_DOCUMENT_ELEMENT_PARSER, source.toCharArray(), null, "test0115", expectedUnitToString );
}
// To test Parser.consumeInsideCastExpressionLL1() with Type Annotations
public void test0116() throws IOException {
String source =
"class X{\n" +
" public void test1(){\n" +
" throw (@Marker Error) null; \n" +
" } \n" +
" public void test2(){\n" +
" String s;\n" +
" s = (@Marker @SingleMember(10) String) null;\n" +
" byte b;\n" +
" b = 0;\n" +
" Byte i;\n" +
" i = (@Positive Byte) b;\n" +
" } \n" +
" public void test3(java.io.Serializable name) {\n" +
" Object temp;\n" +
" temp = (Object)name;\n" +
" System.out.println( (String)temp );\n" +
" }\n" +
"}";
String expectedUnitToString =
"class X {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void test1() {\n" +
" throw (@Marker Error) null;\n" +
" }\n" +
" public void test2() {\n" +
" String s;\n" +
" s = (@Marker @SingleMember(10) String) null;\n" +
" byte b;\n" +
" b = 0;\n" +
" Byte i;\n" +
" i = (@Positive Byte) b;\n" +
" }\n" +
" public void test3(java.io.Serializable name) {\n" +
" Object temp;\n" +
" temp = (Object) name;\n" +
" System.out.println((String) temp);\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0116", expectedUnitToString );
}
// To test Parser.consumeInstanceOfExpression() with Type Annotations
public void test0117() throws IOException {
String source =
"import java.util.*;\n" +
"class X <@NonNull T>{\n" +
" public void test1(Object obj) {\n" +
" if(obj instanceof @Marker @NonNull X) {\n" +
" X newX;\n" +
" newX = (@NonNull X) obj;\n" +
" }\n" +
" }\n" +
" @NonNull T foo(@NonNull T t) {\n" +
" if (t instanceof @NonNull @Marker List<?> @Normal(value = 10) []) {\n" +
" List<?> @SingleMember (10) [] es;\n" +
" es = (@Marker List<?> @SingleMember(10) []) t;\n" +
" }\n" +
" if (t instanceof @Marker @Normal(value = 5) X<?>) {\n" +
" return t;\n" +
" }\n" +
" return t;\n" +
" }\n" +
"}";
String expectedUnitToString =
"import java.util.*;\n" +
"class X<@NonNull T> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public void test1(Object obj) {\n" +
" if ((obj instanceof @Marker @NonNull X))\n" +
" {\n" +
" X newX;\n" +
" newX = (@NonNull X) obj;\n" +
" }\n" +
" }\n" +
" @NonNull T foo(@NonNull T t) {\n" +
" if ((t instanceof @NonNull @Marker List<?> @Normal(value = 10) []))\n" +
" {\n" +
" List<?> @SingleMember(10) [] es;\n" +
" es = (@Marker List<?> @SingleMember(10) []) t;\n" +
" }\n" +
" if ((t instanceof @Marker @Normal(value = 5) X<?>))\n" +
" {\n" +
" return t;\n" +
" }\n" +
" return t;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER , source.toCharArray(), null, "test0117", expectedUnitToString );
}
// To test Parser.consumeInstanceOfExpressionWithName() with Type Annotations
public void test0118() throws IOException {
String source =
"class Outer<E> {\n" +
" Inner inner;\n" +
" class Inner {\n" +
" E e;\n" +
" @NonNull E getOtherElement(Object other) {\n" +
" if (!(other instanceof @Marker @SingleMember(10) Outer<?>.Inner))\n" +
" throw new @Marker IllegalArgumentException(String.valueOf(other));\n" +
" Inner that;\n" +
" that = (@Marker Inner) other;\n" +
" return that.e;\n" +
" }\n" +
" }\n" +
"}";
String expectedUnitToString =
"class Outer<E> {\n" +
" class Inner {\n" +
" E e;\n" +
" Inner() {\n" +
" super();\n" +
" }\n" +
" @NonNull E getOtherElement(Object other) {\n" +
" if ((! (other instanceof @Marker @SingleMember(10) Outer<?>.Inner)))\n" +
" throw new @Marker IllegalArgumentException(String.valueOf(other));\n" +
" Inner that;\n" +
" that = (@Marker Inner) other;\n" +
" return that.e;\n" +
" }\n" +
" }\n" +
" Inner inner;\n" +
" Outer() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER , source.toCharArray(), null, "test0118", expectedUnitToString );
}
// To test Parser.consumeTypeArgument() with Type Annotations
public void test0119() throws IOException {
String source =
"class X<@SingleMember(1) Xp1 extends @Readonly String, @NonNull Xp2 extends @NonNull Comparable> extends @Marker XS<@SingleMember(10) Xp2> {\n" +
"\n" +
" public static void main(String @Marker [] args) {\n" +
" Integer w;\n" +
" w = new @Marker X<@Readonly @SingleMember(10) String,@Positive Integer>().get(new @Positive Integer(12));\n" +
" System.out.println(\"SUCCESS\");\n" +
" }\n" +
" Xp2 get(@Marker X this, Xp2 t) {\n" +
" System.out.print(\"{X::get}\");\n" +
" return super.get(t);\n" +
" }\n" +
"}\n" +
"@Marker class XS <@NonNull XSp1> {\n" +
" XSp1 get(XSp1 t) {\n" +
" @NonNull @SingleMember(10) Y.M mObject;\n" +
" mObject = new @SingleMember(10) @NonNull Y.M();\n" +
" System.out.print(\"{XS::get}\");\n" +
" return t;\n" +
" }\n" +
"}\n" +
"class X2<T,E>{}\n" +
"@Marker class Y extends @Marker X2<@NonNull Y.M, @NonNull @SingleMember(1) Y.N> {\n" +
" static class M{}\n" +
" static class N extends M{}\n" +
"}\n";
String expectedUnitToString =
"class X<@SingleMember(1) Xp1 extends @Readonly String, @NonNull Xp2 extends @NonNull Comparable> extends @Marker XS<@SingleMember(10) Xp2> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String @Marker [] args) {\n" +
" Integer w;\n" +
" w = new @Marker X<@Readonly @SingleMember(10) String, @Positive Integer>().get(new @Positive Integer(12));\n" +
" System.out.println(\"SUCCESS\");\n" +
" }\n" +
" Xp2 get(@Marker X this, Xp2 t) {\n" +
" System.out.print(\"{X::get}\");\n" +
" return super.get(t);\n" +
" }\n" +
"}\n" +
"@Marker class XS<@NonNull XSp1> {\n" +
" XS() {\n" +
" super();\n" +
" }\n" +
" XSp1 get(XSp1 t) {\n" +
" @NonNull @SingleMember(10) Y.M mObject;\n" +
" mObject = new @SingleMember(10) @NonNull Y.M();\n" +
" System.out.print(\"{XS::get}\");\n" +
" return t;\n" +
" }\n" +
"}\n" +
"class X2<T, E> {\n" +
" X2() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class Y extends @Marker X2<@NonNull Y.M, @NonNull @SingleMember(1) Y.N> {\n" +
" static class M {\n" +
" M() {\n" +
" super();\n" +
" }\n" +
" }\n" +
" static class N extends M {\n" +
" N() {\n" +
" super();\n" +
" }\n" +
" }\n" +
" Y() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0119", expectedUnitToString );
}
// To test Parser.consumeTypeArgument() with Type Annotations
public void test0120() throws IOException {
String source =
"class X<A1, A2, A3, A4, A5, A6, A7, A8> {\n" +
"}\n" +
"class Y {\n" +
" @Marker X<int @Marker [], short @SingleMember(1) [] @Marker [], long[] @NonNull [][], float[] @Marker [] @Normal(value = 5) [][], double[][]@Marker [] @SingleMember(10) [][], boolean[][][][][][], char[] @Marker [][][][][][], Object[][]@Marker [] @SingleMember(10) [] @Normal(value = 5) [][][][][]> x;\n" +
"}\n";
String expectedUnitToString =
"class X<A1, A2, A3, A4, A5, A6, A7, A8> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"class Y {\n" +
" @Marker X<int @Marker [], short @SingleMember(1) [] @Marker [], long[] @NonNull [][], float[] @Marker [] @Normal(value = 5) [][], double[][] @Marker [] @SingleMember(10) [][], boolean[][][][][][], char[] @Marker [][][][][][], Object[][] @Marker [] @SingleMember(10) [] @Normal(value = 5) [][][][][]> x;\n" +
" Y() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0120", expectedUnitToString );
}
// To test Parser.consumeTypeArgumentReferenceType1() with Type Annotations
public void test0121() throws IOException {
String source =
"@Marker class X <@NonNull T> {\n" +
" protected T t;\n" +
" @Marker X(@NonNull T t) {\n" +
" this.t = t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X<@Marker X<@Readonly @NonNull String>> xs;\n" +
" xs = new @Marker X<@Marker X<@Readonly @NonNull String>>(new @Marker X<@Readonly @NonNull @SingleMember(10) String>(\"SUCCESS\"));\n" +
" System.out.println(xs.t.t);\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"@Marker class X<@NonNull T> {\n" +
" protected T t;\n" +
" @Marker X(@NonNull T t) {\n" +
" super();\n" +
" this.t = t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X<@Marker X<@Readonly @NonNull String>> xs;\n" +
" xs = new @Marker X<@Marker X<@Readonly @NonNull String>>(new @Marker X<@Readonly @NonNull @SingleMember(10) String>(\"SUCCESS\"));\n" +
" System.out.println(xs.t.t);\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_INDEXING_PARSER, source.toCharArray(), null, "test0121", expectedUnitToString );
}
// To test Parser.consumeTypeParameter1WithExtendsAndBounds() and Parser.consumeWildcardBoundsSuper() with
// Type Annotations
public void test0122() throws IOException {
String source =
"@Marker class Foo extends @Marker Foo1 implements @Marker @SingleMember(10) Comparable<@Marker Foo1> {\n" +
" public int compareTo(Foo1 arg0) {\n" +
" return 0;\n" +
" }\n" +
"}\n" +
"class Foo1 {}\n" +
"@Marker class X<@NonNull T extends @NonNull @Normal (value = 5) Object & @Marker Comparable<? super @NonNull T>> {\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X<@Marker Foo>();\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"@Marker class Foo extends @Marker Foo1 implements @Marker @SingleMember(10) Comparable<@Marker Foo1> {\n" +
" Foo() {\n" +
" super();\n" +
" }\n" +
" public int compareTo(Foo1 arg0) {\n" +
" return 0;\n" +
" }\n" +
"}\n" +
"class Foo1 {\n" +
" Foo1() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class X<@NonNull T extends @NonNull @Normal(value = 5) Object & @Marker Comparable<? super @NonNull T>> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X<@Marker Foo>();\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0122", expectedUnitToString );
}
// To test Parser.consumeTypeParameter1WithExtendsAndBounds() with Type Annotations
public void test0123() throws IOException {
String source =
"@Marker class Foo extends @Marker Foo1 implements @Marker @SingleMember(10) Comparable {\n" +
" public int compareTo(Object arg0) {\n" +
" return 0;\n" +
" }\n" +
"}\n" +
"class Foo1 {}\n" +
"@Marker class X<@NonNull T extends @NonNull @Normal (value = 5) Object & @Marker Comparable, @NonNull V extends @Readonly Object> {\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X<@Marker Foo, @SingleMember(0) Foo1>();\n" +
" Class <@NonNull Foo> c;\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"@Marker class Foo extends @Marker Foo1 implements @Marker @SingleMember(10) Comparable {\n" +
" Foo() {\n" +
" super();\n" +
" }\n" +
" public int compareTo(Object arg0) {\n" +
" return 0;\n" +
" }\n" +
"}\n" +
"class Foo1 {\n" +
" Foo1() {\n" +
" super();\n" +
" }\n" +
"}\n" +
"@Marker class X<@NonNull T extends @NonNull @Normal(value = 5) Object & @Marker Comparable, @NonNull V extends @Readonly Object> {\n" +
" X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new @Marker @SingleMember(10) X<@Marker Foo, @SingleMember(0) Foo1>();\n" +
" Class<@NonNull Foo> c;\n" +
" }\n" +
"}\n";
checkParse(source.toCharArray(), null, "test0123", expectedUnitToString );
}
//To test type annotations on static class member access in a declaration
public void test0125() throws IOException {
String source =
"public class X extends @A(\"Hello, World!\") Y<@B @C('(') String[] @D[]> {}";
String expectedUnitToString =
"public class X extends @A(\"Hello, World!\") Y<@B @C(\'(\') String[] @D []> {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0125", expectedUnitToString );
}
//To test type annotations on static class member access in a declaration
public void test0126() throws IOException {
String source =
"public class X {\n" +
" @A(\"Hello, World!\") @B @C('(') String@E[] @D[] f;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A(\"Hello, World!\") @B @C(\'(\') String @E [] @D [] f;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0126", expectedUnitToString );
}
//To test type annotations on static class member access in a declaration
public void test0127() throws IOException {
String source =
"public class X {\n" +
" @A(\"Hello, World!\") Y<@B @C('(') String[] @D[]> f;\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" @A(\"Hello, World!\") Y<@B @C(\'(\') String[] @D []> f;\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0127", expectedUnitToString );
}
//type class literal expression
public void test0128() throws IOException {
String source =
"public class X {\n" +
" public boolean foo(String s) {\n" +
" return (s instanceof @C('_') Object[]);\n" +
" }\n" +
" public Object foo1(String s) {\n" +
" return new @B(3) @A(\"new Object\") Object[] {};\n" +
" }\n" +
" public Class foo2(String s) {\n" +
" return null;\n" +
" }\n" +
" public Class foo3(String s) {\n" +
" return null;\n" +
" }\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" public boolean foo(String s) {\n" +
" return (s instanceof @C(\'_\') Object[]);\n" +
" }\n" +
" public Object foo1(String s) {\n" +
" return new @B(3) @A(\"new Object\") Object[]{};\n" +
" }\n" +
" public Class foo2(String s) {\n" +
" return null;\n" +
" }\n" +
" public Class foo3(String s) {\n" +
" return null;\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0128", expectedUnitToString );
}
//instanceof checks
public void test0129() throws IOException {
String source = "public class Clazz {\n" +
"public static void main(Object o) {\n" +
"if (o instanceof @Readonly String) {\n" +
"}\n" +
"}\n" +
"}";
String expectedUnitToString =
"public class Clazz {\n" +
" public Clazz() {\n" +
" super();\n" +
" }\n" +
" public static void main(Object o) {\n" +
" if ((o instanceof @Readonly String))\n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0129", expectedUnitToString);
}
//instanceof checks
public void test0130() throws IOException {
String source = "public class Clazz {\n" +
"public static void foo() {\n" +
" if (o instanceof @Readonly String[]) {}" +
"}\n" +
"}";
String expectedUnitToString =
"public class Clazz {\n" +
" public Clazz() {\n" +
" super();\n" +
" }\n" +
" public static void foo() {\n" +
" if ((o instanceof @Readonly String[]))\n" +
" {\n" +
" }\n" +
" }\n" +
"}\n";
checkParse(CHECK_ALL & ~CHECK_JAVAC_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
//cast
public void test0131() throws IOException {
String source =
"public class X {\n" +
" public void foo(Object o) {\n" +
" if (o instanceof String[][]) {\n" +
" String[][] tab = (@C('_') @B(3) String[] @A[]) o;\n" +
" System.out.println(tab.length);\n" +
" }\n" +
" System.out.println(o);\n" +
" }\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" public void foo(Object o) {\n" +
" if ((o instanceof String[][]))\n" +
" {\n" +
" String[][] tab = (@C(\'_\') @B(3) String[] @A []) o;\n" +
" System.out.println(tab.length);\n" +
" }\n" +
" System.out.println(o);\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
//cast
public void test0132() throws IOException {
String source =
"public class X {\n" +
" public void foo(Object o) {\n" +
" if (o instanceof String[][]) {\n" +
" String[][] tab = (@C('_') @B(3) String@D[] @A[]) o;\n" +
" System.out.println(tab.length);\n" +
" }\n" +
" System.out.println(o);\n" +
" }\n" +
"}";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" public void foo(Object o) {\n" +
" if ((o instanceof String[][]))\n" +
" {\n" +
" String[][] tab = (@C(\'_\') @B(3) String @D [] @A []) o;\n" +
" System.out.println(tab.length);\n" +
" }\n" +
" System.out.println(o);\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
//generic type arguments in a generic method invocation
public void test0133() throws IOException {
String source =
"public class X {\n" +
" static <T, U> T foo(T t, U u) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" System.out.println(X.<@D() @A(value = \"hello\") String, @B X>foo(\"SUCCESS\", null));\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" static <T, U>T foo(T t, U u) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" System.out.println(X.<@D() @A(value = \"hello\") String, @B X>foo(\"SUCCESS\", null));\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
//generic type arguments in a generic method invocation
public void test0134() throws IOException {
String source =
"public class X {\n" +
"\n" +
" <T, U> T foo(T t, U u) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X x = new X();\n" +
" System.out.println(x.<@D() @A(value = \"hello\") String, @B X>foo(\"SUCCESS\", null));\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class X {\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" <T, U>T foo(T t, U u) {\n" +
" return t;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X x = new X();\n" +
" System.out.println(x.<@D() @A(value = \"hello\") String, @B X>foo(\"SUCCESS\", null));\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
//generic type arguments in a generic constructor invocation
public void test0135() throws IOException {
String source =
"public class X {\n" +
" <T, U> X(T t, U u) {\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X x = new <@D() @A(value = \"hello\") String, @B X> X();\n" +
" System.out.println(x);\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class X {\n" +
" <T, U>X(T t, U u) {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" X x = new <@D() @A(value = \"hello\") String, @B X>X();\n" +
" System.out.println(x);\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=383600 -- Receiver annotation - new syntax.
public void test0136() throws IOException {
String source =
"public class X<T> {\n" +
" public class Y<K> {\n" +
" void foo(@Marker X<T> this) {\n" +
" }\n" +
" public class Z {\n" +
" Z(@D() @A(value = \"hello\") X<T>.Y<K> X.Y.this) {\n" +
" }\n" +
" }\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new X<String>().new Y<Integer>().new Z();\n" +
" }\n" +
"}\n";
String expectedUnitToString =
"public class X<T> {\n" +
" public class Y<K> {\n" +
" public class Z {\n" +
" Z(@D() @A(value = \"hello\") X<T>.Y<K> X.Y.this) {\n" +
" super();\n" +
" }\n" +
" }\n" +
" public Y() {\n" +
" super();\n" +
" }\n" +
" void foo(@Marker X<T> this) {\n" +
" }\n" +
" }\n" +
" public X() {\n" +
" super();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new X<String>().new Y<Integer>().new Z();\n" +
" }\n" +
"}\n";
checkParse(CHECK_PARSER, source.toCharArray(), null, "test0130", expectedUnitToString);
}
}