blob: 85b9737c5e41f26fb6ca41a16ed61d5f18dcd933 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.core.tests.compiler.regression;
import java.util.Map;
import junit.framework.Test;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
public class JavadocTest_1_3 extends JavadocTest {
String docCommentSupport = CompilerOptions.ENABLED;
String reportInvalidJavadoc = CompilerOptions.ERROR;
String reportMissingJavadocTags = CompilerOptions.ERROR;
String reportMissingJavadocComments = null;
public JavadocTest_1_3(String name) {
super(name);
}
public static Class javadocTestClass() {
return JavadocTest_1_3.class;
}
// Use this static initializer to specify subset for tests
// All specified tests which does not belong to the class are skipped...
static {
// TESTS_NAMES = new String[] {
// "testBug70892conform1", "testBug70892conform2"
// };
// TESTS_NUMBERS = new int[] { 21 };
// TESTS_RANGE = new int[] { 21, 50 };
}
public static Test suite() {
return buildTestSuite(javadocTestClass());
}
protected Map getCompilerOptions() {
Map options = super.getCompilerOptions();
options.put(CompilerOptions.OPTION_DocCommentSupport, this.docCommentSupport);
options.put(CompilerOptions.OPTION_ReportInvalidJavadoc, reportInvalidJavadoc);
if (reportMissingJavadocComments != null)
options.put(CompilerOptions.OPTION_ReportMissingJavadocComments, reportMissingJavadocComments);
else
options.put(CompilerOptions.OPTION_ReportMissingJavadocComments, reportInvalidJavadoc);
if (reportMissingJavadocTags != null)
options.put(CompilerOptions.OPTION_ReportMissingJavadocTags, reportMissingJavadocTags);
else
options.put(CompilerOptions.OPTION_ReportMissingJavadocTags, reportInvalidJavadoc);
options.put(CompilerOptions.OPTION_ReportFieldHiding, CompilerOptions.IGNORE);
options.put(CompilerOptions.OPTION_ReportSyntheticAccessEmulation, CompilerOptions.IGNORE);
options.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.ERROR);
options.put(CompilerOptions.OPTION_ReportUnusedImport, CompilerOptions.ERROR);
return options;
}
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
this.docCommentSupport = CompilerOptions.ENABLED;
reportInvalidJavadoc = CompilerOptions.ERROR;
reportMissingJavadocTags = CompilerOptions.ERROR;
reportMissingJavadocComments = CompilerOptions.IGNORE;
}
/**
* Test fix for bug 70892: [1.5][Javadoc] Compiler should parse reference for inline tag @value
* @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70892">70892</a>
* These two tests pass for 1.3 or 1.4 source level but should fail for 1.5
* @see JavadocTest_1_5
*/
public void test001() {
reportMissingJavadocTags = CompilerOptions.IGNORE;
reportMissingJavadocComments = CompilerOptions.IGNORE;
runNegativeTest(
new String[] {
"X.java",
"/**\n" +
" * {@value \"invalid\"}\n" +
" * {@value <a href=\"invalid\">invalid</a>} invalid\n" +
" * {@value #field}\n" +
" * {@value #foo}\n" +
" * {@value #foo()}\n" +
" */\n" +
"public class X {\n" +
" int field;\n" +
" void foo() {}\n" +
"}\n"
},
"" // No failure in fact...
);
}
public void test002() {
reportMissingJavadocTags = CompilerOptions.IGNORE;
reportMissingJavadocComments = CompilerOptions.IGNORE;
runNegativeTest(
new String[] {
"X.java",
"/**\n" +
" * {@value \"invalid}\n" +
" * {@value <a href}\n" +
" * {@value <a href=\"invalid\">invalid</a} invalid\n" +
" * {@value #fild}\n" +
" * {@value #fo}\n" +
" * {@value #f()}\n" +
" */\n" +
"public class X {\n" +
" int field;\n" +
" void foo() {}\n" +
"}\n"
},
"" // No failure in fact...
);
}
/**
* Test fix for bug 70891: [1.5][javadoc] Compiler should accept new 1.5 syntax for @param
* @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=70891">70891</a>
* These two tests fail for 1.5 source level but should pass for 1.3 or 1.4
* @see JavadocTest_1_3
*/
/* (non-Javadoc)
* Test @param for generic class type parameter
*/
public void test003() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <E> Type\n" +
" */\n" +
" public class X<E> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\r\n" +
" * @param <E> Type\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\r\n" +
" public class X<E> {}\r\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test004() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <E> Type extends RuntimeException\n" +
" */\n" +
" public class X<E extends RuntimeException> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\r\n" +
" * @param <E> Type extends RuntimeException\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\r\n" +
" public class X<E extends RuntimeException> {}\r\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test005() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <T> Type parameter 1\n" +
" * @param <U> Type parameter 2\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\r\n" +
" * @param <T> Type parameter 1\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\r\n" +
" * @param <U> Type parameter 2\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\r\n" +
" * @param <V> Type parameter 3\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\r\n" +
" public class X<T, U, V> {}\r\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test006() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <E> Type parameter\n" +
" */\n" +
" public class X {}",
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <E> Type parameter\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n"
);
}
public void test007() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <E> Type parameter\n" +
" */\n" +
" public class X<E, F> {}",
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <E> Type parameter\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" public class X<E, F> {}\n" +
" ^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test008() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 1\n" +
" * @param <U> Type parameter 2\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\n" +
" public class X<T> {}\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test009() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 1\n" +
" * @param <X> Type parameter 2\n" +
" * @param <U> Type parameter 2\n" +
" * @param <E> Type parameter 2\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <X> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" * @param <E> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 9)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test010() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <V> Type parameter 3\n" +
" * @param <U> Type parameter 2\n" +
" * @param <T> Type parameter 1\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\r\n" +
" * @param <V> Type parameter 3\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\r\n" +
" * @param <U> Type parameter 2\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\r\n" +
" * @param <T> Type parameter 1\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\r\n" +
" public class X<T, U, V> {}\r\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test011() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <U> Type parameter 1\n" +
" * @param <E> Type parameter 2\n" +
" * @param <V> Type parameter 2\n" +
" * @param <U> Type parameter 2\n" +
" * @param <T> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <E> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" * @param <T> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 9)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test012() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test013() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test014() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <U> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <U> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test015() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <U> Type parameter 3\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <U> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test016() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 3\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test017() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 3\n" +
" * @param <U> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <U> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test018() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test019() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <V> Type parameter 2\n" +
" * @param <X> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" * @param <E> Type parameter 2\n" +
" * @param <U> Type parameter 2\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <X> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" * @param <E> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 9)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test020() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <V> Type parameter 2\n" +
" * @param\n" +
" * @param <U> Type parameter 1\n" +
" */\n" +
" public class X<T, U, V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param\n" +
" ^^^^^\n" +
"Javadoc: Missing parameter name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\n" +
" public class X<T, U, V> {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test021() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference: compile error\n" +
" * @param <T> Type parameter 2\n" +
" * @param <V> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" */\n" +
" public class X<T, , V> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\n" +
" public class X<T, , V> {}\n" +
" ^^\n" +
"Syntax error on tokens, delete these tokens\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" public class X<T, , V> {}\n" +
" ^\n" +
"Syntax error, insert \"ClassBody\" to complete CompilationUnit\n" +
"----------\n"
);
}
public void test022() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference: compile error\n" +
" * @param <T> Type parameter 2\n" +
" * @param <V> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" */\n" +
" public class X<T, U, V extend Exception> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <T> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\n" +
" public class X<T, U, V extend Exception> {}\n" +
" ^^^^^^\n" +
"Syntax error on tokens, delete these tokens\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" public class X<T, U, V extend Exception> {}\n" +
" ^\n" +
"Syntax error, insert \"ClassBody\" to complete CompilationUnit\n" +
"----------\n" +
"6. ERROR in X.java (at line 7)\n" +
" public class X<T, U, V extend Exception> {}\n" +
" ^^^^^^\n" +
"extend cannot be resolved to a type\n" +
"----------\n"
);
}
/* (non-Javadoc)
* Test @param for generic method type parameter
*/
public void test023() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <E> Type\n" +
" */\n" +
" public <E> void foo() {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\r\n" +
" * @param <E> Type\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 6)\r\n" +
" public <E> void foo() {}\r\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test024() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <E> Type extends RuntimeException\n" +
" * @param val int\n" +
" * @param obj Object\n" +
" */\n" +
" public <E extends RuntimeException> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\r\n" +
" * @param <E> Type extends RuntimeException\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 8)\r\n" +
" public <E extends RuntimeException> void foo(int val, Object obj) {}\r\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test025() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Valid type parameter reference\n" +
" * @param val int\n" +
" * @param obj Object\n" +
" * @param <T> Type parameter 1\n" +
" * @param <U> Type parameter 2\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 6)\r\n" +
" * @param <T> Type parameter 1\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 7)\r\n" +
" * @param <U> Type parameter 2\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 8)\r\n" +
" * @param <V> Type parameter 3\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 10)\r\n" +
" public <T, U, V> void foo(int val, Object obj) {}\r\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test026() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param val int\n" +
" * @param <E> Type parameter\n" +
" * @param obj Object\n" +
" */\n" +
" public void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 5)\n" +
" * @param <E> Type parameter\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n"
);
}
public void test027() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <E> Type parameter\n" +
" */\n" +
" public <E, F> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <E> Type parameter\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 6)\n" +
" public <E, F> void foo(int val, Object obj) {}\n" +
" ^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" public <E, F> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter val\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" public <E, F> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
public void test028() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 1\n" +
" * @param <U> Type parameter 2\n" +
" * @param <V> Type parameter 3\n" +
" * @param xxx int\n" +
" * @param Obj Object\n" +
" */\n" +
" public <T> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <T> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 7)\n" +
" * @param xxx int\n" +
" ^^^\n" +
"Javadoc: Parameter xxx is not declared\n" +
"----------\n" +
"5. ERROR in X.java (at line 8)\n" +
" * @param Obj Object\n" +
" ^^^\n" +
"Javadoc: Parameter Obj is not declared\n" +
"----------\n" +
"6. ERROR in X.java (at line 10)\n" +
" public <T> void foo(int val, Object obj) {}\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"7. ERROR in X.java (at line 10)\n" +
" public <T> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter val\n" +
"----------\n" +
"8. ERROR in X.java (at line 10)\n" +
" public <T> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
public void test029() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 1\n" +
" * @param <X> Type parameter 2\n" +
" * @param val int\n" +
" * @param <U> Type parameter 2\n" +
" * @param <E> Type parameter 2\n" +
" * @param obj Object\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <T> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" * @param <X> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 7)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 8)\n" +
" * @param <E> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 10)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 12)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test030() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Valid type parameter reference\n" +
" * @param <V> Type parameter 3\n" +
" * @param obj Object\n" +
" * @param <U> Type parameter 2\n" +
" * @param val int\n" +
" * @param <T> Type parameter 1\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\r\n" +
" * @param <V> Type parameter 3\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 6)\r\n" +
" * @param <U> Type parameter 2\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 8)\r\n" +
" * @param <T> Type parameter 1\r\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 10)\r\n" +
" public <T, U, V> void foo(int val, Object obj) {}\r\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test031() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 5)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter val\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
public void test032() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <T> Type parameter 3\n" +
" * @param val int\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <T> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 7)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"3. ERROR in X.java (at line 7)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
public void test033() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param obj Object\n" +
" * @param <U> Type parameter 3\n" +
" * @param <V> Type parameter 3\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 5)\n" +
" * @param <U> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 6)\n" +
" * @param <V> Type parameter 3\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 8)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"4. ERROR in X.java (at line 8)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter val\n" +
"----------\n"
);
}
public void test034() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param val int\n" +
" * @param <V> Type parameter 2\n" +
" * @param <X> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" * @param Object obj\n" +
" * @param <E> Type parameter 2\n" +
" * @param <U> Type parameter 2\n" +
" * @param val int\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 5)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 6)\n" +
" * @param <X> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 7)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 8)\n" +
" * @param Object obj\n" +
" ^^^^^^\n" +
"Javadoc: Parameter Object is not declared\n" +
"----------\n" +
"5. ERROR in X.java (at line 9)\n" +
" * @param <E> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 10)\n" +
" * @param <U> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"7. ERROR in X.java (at line 11)\n" +
" * @param val int\n" +
" ^^^\n" +
"Javadoc: Duplicate tag for parameter\n" +
"----------\n" +
"8. ERROR in X.java (at line 13)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"9. ERROR in X.java (at line 13)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
public void test035() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <V> Type parameter 2\n" +
" * @param\n" +
" * @param <U> Type parameter 1\n" +
" */\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" * @param\n" +
" ^^^^^\n" +
"Javadoc: Missing parameter name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 8)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n" +
"5. ERROR in X.java (at line 8)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter val\n" +
"----------\n" +
"6. ERROR in X.java (at line 8)\n" +
" public <T, U, V> void foo(int val, Object obj) {}\n" +
" ^^^\n" +
"Javadoc: Missing tag for parameter obj\n" +
"----------\n"
);
}
// TODO (david) recovery seems not to work properly here:
// we should have type parameters in method declaration.
public void test036() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference: compile error\n" +
" * @param <T> Type parameter 2\n" +
" * @param <V> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" * @param val int\n" +
" * @param obj Object\n" +
" */\n" +
" public <T, , V> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <T> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 10)\n" +
" public <T, , V> void foo(int val, Object obj) {}\n" +
" ^^^^^^^^\n" +
"Syntax error on tokens, delete these tokens\n" +
"----------\n"
);
}
public void test037() {
this.runNegativeTest(
new String[] {
"X.java",
" public class X {\n" +
" /**\n" +
" * Invalid type parameter reference: compile error\n" +
" * @param <T> Type parameter 2\n" +
" * @param <V> Type parameter 2\n" +
" * @param <U> Type parameter 1\n" +
" * @param val int\n" +
" * @param obj Object\n" +
" */\n" +
" public <T, U, V extends Exceptions> void foo(int val, Object obj) {}\n" +
"}"
},
"----------\n" +
"1. ERROR in X.java (at line 4)\n" +
" * @param <T> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 5)\n" +
" * @param <V> Type parameter 2\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 6)\n" +
" * @param <U> Type parameter 1\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 10)\n" +
" public <T, U, V extends Exceptions> void foo(int val, Object obj) {}\n" +
" ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test038() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param < Type\n" +
" * @param < Type for parameterization\n" +
" * @param <> Type\n" +
" * @param <?> Type\n" +
" * @param <*> Type\n" +
" */\n" +
" public class X<E> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param < Type\n" +
" ^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param < Type for parameterization\n" +
" ^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <> Type\n" +
" ^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" * @param <?> Type\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" * @param <*> Type\n" +
" ^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 9)\n" +
" public class X<E> {}\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
public void test039() {
this.runNegativeTest(
new String[] {
"X.java",
" /**\n" +
" * Invalid type parameter reference\n" +
" * @param <E Type parameter of class X\n" +
" * @param E> Type\n" +
" * @param <<E> Type\n" +
" * @param <<<E> Type\n" +
" * @param <E>> Type\n" +
" */\n" +
" public class X<E> {}"
},
"----------\n" +
"1. ERROR in X.java (at line 3)\n" +
" * @param <E Type parameter of class X\n" +
" ^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"2. ERROR in X.java (at line 4)\n" +
" * @param E> Type\n" +
" ^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"3. ERROR in X.java (at line 5)\n" +
" * @param <<E> Type\n" +
" ^^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"4. ERROR in X.java (at line 6)\n" +
" * @param <<<E> Type\n" +
" ^^^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"5. ERROR in X.java (at line 7)\n" +
" * @param <E>> Type\n" +
" ^^^^\n" +
"Javadoc: Invalid param tag name\n" +
"----------\n" +
"6. ERROR in X.java (at line 9)\n" +
" public class X<E> {}\n" +
" ^\n" +
"Syntax error, type parameters are only available if source level is 1.5\n" +
"----------\n"
);
}
}