| /******************************************************************************* |
| * Copyright (c) 2000, 2008 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 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.core.tests.compiler.regression; |
| |
| import java.util.Map; |
| |
| import junit.framework.Test; |
| |
| import org.eclipse.wst.jsdt.internal.compiler.impl.CompilerOptions; |
| |
| public class JavadocBugsTest extends JavadocTest { |
| |
| String docCommentSupport = CompilerOptions.ENABLED; |
| String reportInvalidJavadoc = CompilerOptions.ERROR; |
| String reportInvalidJavadocVisibility = CompilerOptions.PRIVATE; |
| String reportMissingJavadocTags = CompilerOptions.ERROR; |
| String reportMissingJavadocComments = null; |
| String reportDeprecation = CompilerOptions.ERROR; |
| String reportJavadocDeprecation = null; |
| |
| public JavadocBugsTest(String name) { |
| super(name); |
| } |
| |
| public static Class javadocTestClass() { |
| return JavadocBugsTest.class; |
| } |
| |
| // Use this static initializer to specify subset for tests |
| // All specified tests which does not belong to the class are skipped... |
| static { |
| // TESTS_PREFIX = "testBug96237"; |
| // TESTS_NAMES = new String[] { "testBug68017javadocWarning2" }; |
| // TESTS_NUMBERS = new int[] { 129241 }; |
| // TESTS_RANGE = new int[] { 21, 50 }; |
| } |
| public static Test suite() { |
| return buildAllCompliancesTestSuite(javadocTestClass()); |
| } |
| |
| protected Map getCompilerOptions() { |
| Map options = super.getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_DocCommentSupport, docCommentSupport); |
| options.put(CompilerOptions.OPTION_ReportInvalidJavadoc, reportInvalidJavadoc); |
| if (!CompilerOptions.IGNORE.equals(reportInvalidJavadoc)) { |
| options.put(CompilerOptions.OPTION_ReportInvalidJavadocTagsVisibility, this.reportInvalidJavadocVisibility); |
| } |
| if (this.reportJavadocDeprecation != null) { |
| options.put(CompilerOptions.OPTION_ReportInvalidJavadocTagsDeprecatedRef, reportJavadocDeprecation); |
| } |
| if (reportMissingJavadocComments != null) { |
| options.put(CompilerOptions.OPTION_ReportMissingJavadocComments, reportMissingJavadocComments); |
| options.put(CompilerOptions.OPTION_ReportMissingJavadocCommentsOverriding, CompilerOptions.ENABLED); |
| } else { |
| options.put(CompilerOptions.OPTION_ReportMissingJavadocComments, reportInvalidJavadoc); |
| } |
| if (reportMissingJavadocTags != null) { |
| options.put(CompilerOptions.OPTION_ReportMissingJavadocTags, reportMissingJavadocTags); |
| options.put(CompilerOptions.OPTION_ReportMissingJavadocTagsOverriding, CompilerOptions.ENABLED); |
| } 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, reportDeprecation); |
| options.put(CompilerOptions.OPTION_ReportRawTypeReference, CompilerOptions.IGNORE); |
| options.put(CompilerOptions.OPTION_ReportUnusedPrivateMember, CompilerOptions.IGNORE); |
| return options; |
| } |
| /* (non-Javadoc) |
| * @see junit.framework.TestCase#setUp() |
| */ |
| protected void setUp() throws Exception { |
| super.setUp(); |
| docCommentSupport = CompilerOptions.ENABLED; |
| reportInvalidJavadoc = CompilerOptions.ERROR; |
| reportInvalidJavadocVisibility = CompilerOptions.PRIVATE; |
| reportMissingJavadocTags = CompilerOptions.IGNORE; |
| reportMissingJavadocComments = CompilerOptions.IGNORE; |
| reportDeprecation = CompilerOptions.ERROR; |
| } |
| |
| /** |
| * Bug 45596. |
| * When this bug happened, compiler wrongly complained on missing parameter javadoc |
| * entries for method declaration in anonymous class. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45596">45596</a> |
| */ |
| public void testBug45596() { |
| runConformTest( |
| new String[] { |
| "test/X.java", |
| "package test;\n" |
| + "class X {\n" |
| + " void foo(int x, String str) {}\n" |
| + "}\n", |
| "test/Y.java", |
| "package test;\n" |
| + "class Y {\n" |
| + " /** */\n" |
| + " protected X field = new X() {\n" |
| + " void foo(int x, String str) {}\n" |
| + " };\n" |
| + "}\n"}); |
| } |
| |
| /** |
| * Additional test for bug 45596. |
| * Verify correct complain about missing parameter javadoc entries in anonymous class. |
| * Since bug 47132, @param, @return and @throws tags are not resolved in javadoc of anonymous |
| * class... |
| */ |
| public void testBug45596a() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(int x, String str) {}\n" + |
| "}\n", |
| "Y1.java", |
| "public class Y1 {\n" + |
| " /** */\n" + |
| " protected X field = new X() {\n" + |
| " /** Invalid javadoc comment in anonymous class */\n" + |
| " void foo(String str) {}\n" + |
| " };\n" + |
| "}\n", |
| "Y2.java", |
| "public class Y2 {\n" + |
| " /** */\n" + |
| " void foo() {\n" + |
| " X x = new X() {\n" + |
| " /** Invalid javadoc comment in anonymous class */\n" + |
| " void foo(String str) {}\n" + |
| " };\n" + |
| " x.foo(0, \"\");\n" + |
| " }\n" + |
| "}\n", |
| "Y3.java", |
| "public class Y3 {\n" + |
| " static X x;\n" + |
| " static {\n" + |
| " x = new X() {\n" + |
| " /** Invalid javadoc comment in anonymous class */\n" + |
| " void foo(String str) {}\n" + |
| " };\n" + |
| " }\n" + |
| "}\n" } |
| ); |
| } |
| |
| /** |
| * Additional test for bug 45596. |
| * Verify no complain about missing parameter javadoc entries. |
| */ |
| public void testBug45596b() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(int x, String str) {}\n" + |
| "}\n", |
| "Y1.java", |
| "public class Y1 {\n" + |
| " /** */\n" + |
| " protected X field = new X() {\n" + |
| " /**\n" + |
| " * Valid javadoc comment in anonymous class.\n" + |
| " * @param str String\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int bar(String str) {\n" + |
| " return 10;\n" + |
| " }\n" + |
| " };\n" + |
| "}\n", |
| "Y2.java", |
| "public class Y2 {\n" + |
| " /** */\n" + |
| " void foo() {\n" + |
| " X x = new X() {\n" + |
| " /**\n" + |
| " * Valid javadoc comment in anonymous class.\n" + |
| " * @param str String\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int bar(String str) {\n" + |
| " return 10;\n" + |
| " }\n" + |
| " };\n" + |
| " x.foo(0, \"\");\n" + |
| " }\n" + |
| "}\n", |
| "Y3.java", |
| "public class Y3 {\n" + |
| " static X x;\n" + |
| " static {\n" + |
| " x = new X() {\n" + |
| " /**\n" + |
| " * Valid javadoc comment in anonymous class.\n" + |
| " * @param str String\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int bar(String str) {\n" + |
| " return 10;\n" + |
| " }\n" + |
| " };\n" + |
| " }\n" + |
| "}\n"} |
| ); |
| } |
| |
| /** |
| * Bug 45592. |
| * When this bug happened, a NullPointerException occured during the compilation. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45592">45592</a> |
| */ |
| public void testBug45592() { |
| runConformTest( |
| new String[] { |
| "a/Y.java", |
| "package a;\n" + |
| "\n" + |
| "/** */\n" + |
| "public class Y {\n" + |
| " protected boolean bar(Object obj) {\n" + |
| " return obj == null;\n" + |
| " }\n" + |
| "}\n", |
| "test/X.java", |
| "package test;\n" + |
| "public class X {\n" + |
| " public static Boolean valueOf(boolean bool) {\n" + |
| " if (bool) {\n" + |
| " return Boolean.TRUE;\n" + |
| " } else {\n" + |
| " return Boolean.FALSE;\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test/YY.java", |
| "package test;\n" + |
| "\n" + |
| "import a.Y;\n" + |
| "\n" + |
| "/** */\n" + |
| "public class YY extends Y {\n" + |
| " /**\n" + |
| " * Returns a Boolean.\n" + |
| " * @param key\n" + |
| " * @return A Boolean telling whether the key is null or not.\n" + |
| " * @see #bar(Object)\n" + |
| " */\n" + |
| " protected Boolean foo(Object key) {\n" + |
| " return X.valueOf(bar(key));\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 45737. |
| * When this bug happened, compiler complains on return type and argument of method bar. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45737">45737</a> |
| */ |
| public void testBug45737() { |
| runConformTest( |
| new String[] { |
| "Y.java", |
| "class Y {\n" + |
| " void foo() {\n" + |
| " X x = new X() {\n" + |
| " /**\n" + |
| " * Valid javadoc comment in anonymous class.\n" + |
| " * @param str String\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int bar(String str) {\n" + |
| " return 10;\n" + |
| " }\n" + |
| " };\n" + |
| " x.foo();\n" + |
| " }\n" + |
| "}\n", |
| "X.java", |
| "class X {\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 45669. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45669">45669</a> |
| */ |
| public void testBug45669() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Valid javadoc comment with tags mixed order\n" + |
| " * @param str first param\n" + |
| " * @see String\n" + |
| " * @param dbl second param\n" + |
| " * @see Double\n" + |
| " * also\n" + |
| " * @see \"String ref\"\n" + |
| " * @return int\n" + |
| " * @throws InterruptedException\n" + |
| " * \n" + |
| " */\n" + |
| " int foo(String str, Double dbl) throws InterruptedException {\n" + |
| " return 0;\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| /* |
| * Additional test for bug 45669. |
| * Verify that compiler complains when @throws tag is between @param tags. |
| */ |
| public void testBug45669a() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Javadoc comment with tags invalid mixed order\n" + |
| " * @param str first param\n" + |
| " * @see String\n" + |
| " * @throws InterruptedException\n" + |
| " * @param dbl second param\n" + |
| " * @see Double\n" + |
| " * also\n" + |
| " * @see \"String ref\"\n" + |
| " * @return int\n" + |
| " * \n" + |
| " */\n" + |
| " public int foo(String str, Double dbl) throws InterruptedException {\n" + |
| " return 0;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 7)\n" + |
| " * @param dbl second param\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 14)\n" + |
| " public int foo(String str, Double dbl) throws InterruptedException {\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter dbl\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 45958. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45958">45958</a> |
| */ |
| public void testBug45958() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int x;\n" + |
| " public X(int i) {\n" + |
| " x = i;\n" + |
| " }\n" + |
| " /**\n" + |
| " * @see #X(int)\n" + |
| " */\n" + |
| " void foo() {\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug45958a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int x;\n" + |
| " public X(int i) {\n" + |
| " x = i;\n" + |
| " }\n" + |
| " /**\n" + |
| " * @see #X(String)\n" + |
| " */\n" + |
| " public void foo() {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 7)\n" + |
| " * @see #X(String)\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: The constructor X(String) is undefined\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug45958b() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int x;\n" + |
| " public X(int i) {\n" + |
| " x = i;\n" + |
| " }\n" + |
| " /**\n" + |
| " * @see #X(int)\n" + |
| " */\n" + |
| " public void foo() {\n" + |
| " }\n" + |
| "}\n", |
| "XX.java", |
| "public class XX extends X {\n" + |
| " /**\n" + |
| " * @param i\n" + |
| " * @see #X(int)\n" + |
| " */\n" + |
| " public XX(int i) {\n" + |
| " super(i);\n" + |
| " x++;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in XX.java (at line 4)\n" + |
| " * @see #X(int)\n" + |
| " ^\n" + |
| "Javadoc: The method X(int) is undefined for the type XX\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug45958c() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int x;\n" + |
| " public X(int i) {\n" + |
| " x = i;\n" + |
| " }\n" + |
| " /**\n" + |
| " * @see #X(String)\n" + |
| " */\n" + |
| " void foo() {\n" + |
| " }\n" + |
| " void X(String str) {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 46901. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=46901">46901</a> |
| */ |
| public void testBug46901() { |
| runConformTest( |
| new String[] { |
| "A.java", |
| "public abstract class A {\n" + |
| " public A() { super(); }\n" + |
| "}\n", |
| "X.java", |
| "/**\n" + |
| " * @see A#A()\n" + |
| " */\n" + |
| "public class X extends A {\n" + |
| " public X() { super(); }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 47215. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47215">47215</a> |
| */ |
| public void testBug47215() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| " /**\n" + |
| " * @see X\n" + |
| " * @see X#X(int)\n" + |
| " * @see X(double)\n" + |
| " * @see X (double)\n" + |
| " * @see X[double]\n" + |
| " * @see X!=}}\n" + |
| " * @see foo()\n" + |
| " * @see foo ()\n" + |
| " */\n" + |
| " public class X {\n" + |
| " public X(int i){}\n" + |
| " public void foo() {}\n" + |
| " }\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * @see X(double)\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Missing #: \"X(double)\"\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * @see X[double]\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " * @see X!=}}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 8)\n" + |
| " * @see foo()\n" + |
| " ^^^^^\n" + |
| "Javadoc: Missing #: \"foo()\"\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 9)\n" + |
| " * @see foo ()\n" + |
| " ^^^\n" + |
| "Javadoc: foo cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 47341. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47341">47341</a> |
| */ |
| public void testBug47341() { |
| runConformTest( |
| new String[] { |
| "p1/X.java", |
| "package p1;\n" + |
| "public class X {\n" + |
| " void foo_package() {}\n" + |
| " protected void foo_protected() {}\n" + |
| "}\n", |
| "p1/Y.java", |
| "package p1;\n" + |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @see #foo_package()\n" + |
| " */\n" + |
| " protected void bar() {\n" + |
| " foo_package();\n" + |
| " }\n" + |
| "}\n", |
| "p2/Y.java", |
| "package p2;\n" + |
| "import p1.X;\n" + |
| "\n" + |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @see X#foo_protected()\n" + |
| " */\n" + |
| " protected void bar() {\n" + |
| " foo_protected();\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 47132. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47132">47132</a> |
| */ |
| public void testBug47132() { |
| reportMissingJavadocComments = CompilerOptions.ERROR; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X {\n" + |
| " /** */\n" + |
| " public void foo(){\n" + |
| " new Object(){\n" + |
| " public int x;\n" + |
| " public void bar(){}\n" + |
| " };\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 47339. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=47339">47339</a> |
| */ |
| public void testBug47339() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X implements Comparable {\n" + |
| " /**\n" + |
| " * @see java.lang.Comparable#compareTo(java.lang.Object)\n" + |
| " */\n" + |
| " public int compareTo(Object o) {\n" + |
| " return 0;\n" + |
| " }\n" + |
| " /** @see Object#toString() */\n" + |
| " public String toString(){\n" + |
| " return \"\";\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug47339a() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X extends RuntimeException {\n" + |
| " \n" + |
| " /**\n" + |
| " * @see RuntimeException#RuntimeException(java.lang.String)\n" + |
| " */\n" + |
| " public X(String message) {\n" + |
| " super(message);\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug47339b() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X implements Comparable {\n" + |
| " /** */\n" + |
| " public int compareTo(Object o) {\n" + |
| " return 0;\n" + |
| " }\n" + |
| " /** */\n" + |
| " public String toString(){\n" + |
| " return \"\";\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " public int compareTo(Object o) {\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " public int compareTo(Object o) {\n" + |
| " ^\n" + |
| "Javadoc: Missing tag for parameter o\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 8)\n" + |
| " public String toString(){\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug47339c() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X extends RuntimeException {\n" + |
| " \n" + |
| " /** */\n" + |
| " public X(String message) {\n" + |
| " super(message);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " public X(String message) {\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Missing tag for parameter message\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 48064. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48064">48064</a> |
| */ |
| public void testBug48064() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public X(String str) {}\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @see X#X(STRING)\n" + |
| " */\n" + |
| " public Y(String str) {super(str);}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 3)\n" + |
| " * @see X#X(STRING)\n" + |
| " ^^^^^^\n" + |
| "Javadoc: STRING cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 5)\n" + |
| " public Y(String str) {super(str);}\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter str\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug48064a() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public void foo(String str) {}\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @see X#foo(STRING)\n" + |
| " */\n" + |
| " public void foo(String str) {super.foo(str);}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 3)\n" + |
| " * @see X#foo(STRING)\n" + |
| " ^^^^^^\n" + |
| "Javadoc: STRING cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 5)\n" + |
| " public void foo(String str) {super.foo(str);}\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter str\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 48523. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48523">48523</a> |
| */ |
| public void testBug48523() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "import java.io.IOException;\n" + |
| "public class X {\n" + |
| " public void foo() throws IOException {}\n" + |
| "}\n", |
| "Y.java", |
| "import java.io.IOException;\n" + |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @throws IOException\n" + |
| " * @see X#foo()\n" + |
| " */\n" + |
| " public void foo() throws IOException {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 48711. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48711">48711</a> |
| */ |
| public void testBug48711() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "import java.io.*;\n" + |
| "\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @throws IOException\n" + |
| " * @throws EOFException\n" + |
| " * @throws FileNotFoundException\n" + |
| " */\n" + |
| " public void foo() throws IOException {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 45782. |
| * When this bug happened, compiler wrongly complained on missing parameters declaration |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=45782">45782</a> |
| */ |
| public void testBug45782() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X implements Comparable {\n" + |
| "\n" + |
| " /**\n" + |
| " * Overridden method with return value and parameters.\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " public boolean equals(Object obj) {\n" + |
| " return super.equals(obj);\n" + |
| " }\n" + |
| "\n" + |
| " /**\n" + |
| " * Overridden method with return value and thrown exception.\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " public Object clone() throws CloneNotSupportedException {\n" + |
| " return super.clone();\n" + |
| " }\n" + |
| "\n" + |
| " /**\n" + |
| " * Implemented method (Comparable) with return value and parameters.\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " public int compareTo(Object o) { return 0; }\n" + |
| "}\n" |
| }); |
| } |
| public void testBug45782a() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Unefficient inheritDoc tag on a method which is neither overridden nor implemented...\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " public int foo(String str) throws IllegalArgumentException { return 0; }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@inheritDoc}\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " public int foo(String str) throws IllegalArgumentException { return 0; }\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " public int foo(String str) throws IllegalArgumentException { return 0; }\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter str\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 6)\n" + |
| " public int foo(String str) throws IllegalArgumentException { return 0; }\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing tag for declared exception IllegalArgumentException\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 49260. |
| * When this bug happened, compiler wrongly complained on Invalid parameters declaration |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49260">49260</a> |
| */ |
| public void testBug49260() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public final class X {\n" + |
| " int bar(String str, int var, Vector list, char[] array) throws IllegalAccessException { return 0; }\n" + |
| " /**\n" + |
| " * Valid method reference on several lines\n" + |
| " * @see #bar(String str,\n" + |
| " * int var,\n" + |
| " * Vector list,\n" + |
| " * char[] array)\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" }); |
| } |
| |
| /** |
| * Bug 48385. |
| * When this bug happened, compiler does not complain on CharOperation references in @link tags |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48385">48385</a> |
| */ |
| public void testBug48385() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * Method outside javaDoc Comment\n" + |
| " * 1) {@link String} tag description not empty\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " * @param str\n" + |
| " * @param var tag description not empty\n" + |
| " * @param list third param with embedded tag: {@link Vector}\n" + |
| " * @param array fourth param with several embedded tags on several lines:\n" + |
| " * 1) {@link String} tag description not empty\n" + |
| " * 2) {@linkplain CharOperation Label not empty} tag description not empty\n" + |
| " * @throws IllegalAccessException\n" + |
| " * @throws NullPointerException tag description not empty\n" + |
| " * @return an integer\n" + |
| " * @see String\n" + |
| " * @see Vector tag description not empty\n" + |
| " * @see Object tag description includes embedded tags and several lines:\n" + |
| " * 1) {@link String} tag description not empty\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " */\n" + |
| " int foo(String str, int var, Vector list, char[] array) throws IllegalAccessException { return 0; }\n" + |
| "}\n"}, |
| "----------\n" + |
| "1. ERROR in X.java (at line 6)\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 12)\n" + |
| " * 2) {@linkplain CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 20)\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| public void testBug48385And49620() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * Method outside javaDoc Comment\n" + |
| " * 1) {@link\n" + |
| " * String} tag description not empty\n" + |
| " * 2) {@link\n" + |
| " * CharOperation Label not empty} tag description not empty\n" + |
| " * @param\n" + |
| " * str\n" + |
| " * @param\n" + |
| " * var tag description not empty\n" + |
| " * @param list third param with embedded tag: {@link\n" + |
| " * Vector} but also on several lines: {@link\n" + |
| " * CharOperation}\n" + |
| " * @param array fourth param with several embedded tags on several lines:\n" + |
| " * 1) {@link String} tag description not empty\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " * @throws\n" + |
| " * IllegalAccessException\n" + |
| " * @throws\n" + |
| " * NullPointerException tag description not empty\n" + |
| " * @return\n" + |
| " * an integer\n" + |
| " * @see\n" + |
| " * String\n" + |
| " * @see\n" + |
| " * Vector\n" + |
| " * tag description not empty\n" + |
| " * @see Object tag description includes embedded tags and several lines:\n" + |
| " * 1) {@link String} tag description not empty\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " */\n" + |
| " int foo(String str, int var, Vector list, char[] array) throws IllegalAccessException { return 0; }\n" + |
| "}\n"}, |
| "----------\n" + |
| "1. ERROR in X.java (at line 8)\n" + |
| " * CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 15)\n" + |
| " * CharOperation}\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 18)\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 32)\n" + |
| " * 2) {@link CharOperation Label not empty} tag description not empty\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: CharOperation cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug48385a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Method outside javaDoc Comment\n" + |
| " * 1) {@link } Missing reference\n" + |
| " * 2) {@link Unknown} Cannot be resolved\n" + |
| " * 3) {@link *} Missing reference\n" + |
| " * 4) {@link #} Invalid reference\n" + |
| " * 5) {@link String } } Valid reference\n" + |
| " * 6) {@link String {} Invalid tag\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int foo() {return 0;}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * 1) {@link } Missing reference\n" + |
| " ^^^^\n" + |
| "Javadoc: Missing reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 5)\n" + |
| " * 2) {@link Unknown} Cannot be resolved\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " * 3) {@link *} Missing reference\n" + |
| " ^^^^\n" + |
| "Javadoc: Missing reference\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 7)\n" + |
| " * 4) {@link #} Invalid reference\n" + |
| " ^\n" + |
| "Javadoc: Invalid reference\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 9)\n" + |
| " * 6) {@link String {} Invalid tag\n" + |
| " ^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing closing brace for inline tag\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 49491. |
| * When this bug happened, compiler complained on duplicated throws tag |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=49491">49491</a> |
| */ |
| public void testBug49491() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public final class X {\n" + |
| " /**\n" + |
| " * Now valid duplicated throws tag\n" + |
| " * @throws IllegalArgumentException First comment\n" + |
| " * @throws IllegalArgumentException Second comment\n" + |
| " * @throws IllegalArgumentException Last comment\n" + |
| " */\n" + |
| " void foo() throws IllegalArgumentException {}\n" + |
| "}\n" }); |
| } |
| public void testBug49491a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public final class X {\n" + |
| " /**\n" + |
| " * Duplicated param tags should be still flagged\n" + |
| " * @param str First comment\n" + |
| " * @param str Second comment\n" + |
| " * @param str Last comment\n" + |
| " */\n" + |
| " void foo(String str) {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * @param str Second comment\n" + |
| " ^^^\n" + |
| "Javadoc: Duplicate tag for parameter\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * @param str Last comment\n" + |
| " ^^^\n" + |
| "Javadoc: Duplicate tag for parameter\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 48376. |
| * When this bug happened, compiler complained on duplicated throws tag |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=48376">48376</a> |
| */ |
| public void testBug48376() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see <a href=\"http:/www.ibm.com\">IBM Home Page</a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " * IBM Home Page</a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " * IBM Home Page\n" + |
| " * </a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " *\n" + |
| " *\n" + |
| " * </a>\n" + |
| " * @see Object\n" + |
| " */\n" + |
| "public class X {\n" + |
| "}\n" |
| }); |
| } |
| public void testBug48376a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see <a href=\"http:/www.ibm.com\">IBM Home Page\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " * IBM Home Page\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " * IBM Home Page<\n" + |
| " * /a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " *\n" + |
| " *\n" + |
| " * \n" + |
| " * @see Unknown\n" + |
| " */\n" + |
| "public class X {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " * @see <a href=\"http:/www.ibm.com\">IBM Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " * IBM Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " * IBM Home Page<\n" + |
| " ^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 8)\n" + |
| " * @see <a href=\"http:/www.ibm.com\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 16)\n" + |
| " * @see Unknown\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 50644. |
| * When this bug happened, compiler complained on duplicated throws tag |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50644">50644</a> |
| */ |
| public void testBug50644() { |
| reportInvalidJavadoc = CompilerOptions.IGNORE; |
| runConformTest( |
| new String[] { |
| "p1/X.java", |
| "package p1;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * Should not be @deprecated\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "p2/Y.java", |
| "package p2;\n" + |
| "import p1.X;\n" + |
| "public class Y {\n" + |
| " public void foo() {\n" + |
| " X x = new X();\n" + |
| " x.foo();\n" + |
| " }\n" + |
| "}\n" |
| }); |
| } |
| |
| /** |
| * Bug 50695. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=50695">50695</a> |
| */ |
| public void testBug50695() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see java\n" + |
| " * @see java.util\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }); |
| } |
| public void testBug50695b() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see java.unknown\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see java.unknown\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Javadoc: java.unknown cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 51626. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51626">51626</a> |
| */ |
| public void testBug51626() { |
| runConformTest( |
| new String[] { |
| "p1/X.java", |
| "package p1;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @see String\n" + |
| " * toto @deprecated\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "p2/Y.java", |
| "package p2;\n" + |
| "import p1.*;\n" + |
| "public class Y {\n" + |
| " void foo() {\n" + |
| " X x = new X(); \n" + |
| " x.foo();\n" + |
| " }\n" + |
| "}\n" |
| }); |
| } |
| |
| /** |
| * Bug 52216. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=52216">52216</a> |
| */ |
| public void testBug52216() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * Valid ref with white spaces at the end\n" + |
| "* @see <a href=\"http://www.ietf.org/rfc/rfc2045.txt\">RFC 2045 - Section 6.8</a> \n" + |
| "*/\n" + |
| "public class X {\n" + |
| "}\n" |
| }); |
| } |
| public void testBug52216a() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| "* @see \"Valid ref with white spaces at the end\" \n" + |
| "*/\n" + |
| "public class X {\n" + |
| "}\n" |
| }); |
| } |
| public void testBug52216b() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| "* @see <a href=\"http://www.ietf.org/rfc/rfc2045.txt\">RFC 2045 - Section 6.8</a> \n" + |
| "* @see <a href=\"http://www.ietf.org/rfc/rfc2045.txt\">RFC 2045 - Section 6.8</a>\n" + |
| "* @see <a href=\"http://www.ietf.org/rfc/rfc2045.txt\">RFC 2045 - Section 6.8</a> ,\n" + |
| "* @see \"Valid ref with white spaces at the end\"\n" + |
| "* @see \"Valid ref with white spaces at the end\" \n" + |
| "* @see \"Invalid ref\" .\n" + |
| "*/\n" + |
| "public class X {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * @see <a href=\"http://www.ietf.org/rfc/rfc2045.txt\">RFC 2045 - Section 6.8</a> ,\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\n" + |
| " * @see \"Invalid ref\" .\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 51529. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51529">51529</a> |
| */ |
| public void testBug51529() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Vector\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }); |
| } |
| public void testBug51529a() { |
| reportInvalidJavadoc = CompilerOptions.IGNORE; |
| reportMissingJavadocComments = CompilerOptions.IGNORE; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Vector\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug51529b() { |
| docCommentSupport = CompilerOptions.DISABLED; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "import java.util.Vector;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Vector\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 1)\n" + |
| " import java.util.Vector;\n" + |
| " ^^^^^^^^^^^^^^^^\n" + |
| "The import java.util.Vector is never used\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 51911. |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51911">51911</a> |
| */ |
| public void testBug51911() { |
| // Warn an ambiguous method reference |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see #foo\n" + |
| " */\n" + |
| "public class X {\n" + |
| " public void foo(int i, float f) {}\n" + |
| " public void foo(String str) {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " * @see #foo\n" + |
| " ^^^\n" + |
| "Javadoc: foo is an ambiguous method reference or is not a field\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug51911a() { |
| // Accept unambiguous method reference |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see #foo\n" + |
| " */\n" + |
| "public class X {\n" + |
| " public void foo(String str) {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug51911b() { |
| // Accept field reference with method name |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see #foo\n" + |
| " */\n" + |
| "public class X {\n" + |
| " public int foo;\n" + |
| " public void foo(String str) {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug51911c() { |
| // Accept field reference with ambiguous method name |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see #foo\n" + |
| " */\n" + |
| "public class X {\n" + |
| " public int foo;\n" + |
| " public void foo() {}\n" + |
| " public void foo(String str) {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 53279: [Javadoc] Compiler should complain when inline tag is not terminated |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53279">53279</a> |
| */ |
| public void testBug53279() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Unterminated inline tags\n" + |
| " * {@link Object\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@link Object\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing closing brace for inline tag\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug53279a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Unterminated inline tags\n" + |
| " * {@link Object\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int foo() {return 0;}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@link Object\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing closing brace for inline tag\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug53279b() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Unterminated inline tags\n" + |
| " * {@link \n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@link \n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing closing brace for inline tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " * {@link \n" + |
| " ^^^^\n" + |
| "Javadoc: Missing reference\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug53279c() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Unterminated inline tags\n" + |
| " * {@link\n" + |
| " * @return int\n" + |
| " */\n" + |
| " int foo() {return 0;}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@link\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing closing brace for inline tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " * {@link\n" + |
| " ^^^^\n" + |
| "Javadoc: Missing reference\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 53290: [Javadoc] Compiler should complain when tag name is not correct |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=53290">53290</a> |
| */ |
| public void testBug53290() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * See as inline tag\n" + |
| " * {@see Object}\n" + |
| " * @see Object\n" + |
| " * @link Object\n" + |
| " * {@link Object}\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * {@see Object}\n" + |
| " ^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * @link Object\n" + |
| " ^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 62812: Some malformed javadoc tags are not reported as malformed |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=62812">62812</a> |
| */ |
| public void testBug62812() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * @see Object#clone())\n" + |
| " * @see Object#equals(Object)}\n" + |
| " * @see Object#equals(Object))\n" + |
| " * @see Object#equals(Object)xx\n" + |
| " */\n" + |
| "public class Test {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 2)\n" + |
| " * @see Object#clone())\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in Test.java (at line 3)\n" + |
| " * @see Object#equals(Object)}\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in Test.java (at line 4)\n" + |
| " * @see Object#equals(Object))\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "4. ERROR in Test.java (at line 5)\n" + |
| " * @see Object#equals(Object)xx\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug62812a() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * {@link Object#clone())}\n" + |
| " * {@link Object#equals(Object)}\n" + |
| " * {@link Object#equals(Object))}\n" + |
| " * {@link Object#equals(Object)xx}\n" + |
| " */\n" + |
| "public class Test {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 2)\n" + |
| " * {@link Object#clone())}\n" + |
| " ^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in Test.java (at line 4)\n" + |
| " * {@link Object#equals(Object))}\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in Test.java (at line 5)\n" + |
| " * {@link Object#equals(Object)xx}\n" + |
| " ^^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 51606: [Javadoc] Compiler should complain when tag name is not correct |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=51606">51606</a> |
| */ |
| public void testBug51606() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @param a aaa\n" + |
| " * @param b bbb\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * @param a {@inheritDoc}\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 5)\n" + |
| " public void foo(int a, int b) {\n" + |
| " ^\n" + |
| "Javadoc: Missing tag for parameter b\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug51606a() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @param a aaa\n" + |
| " * @param b bbb\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * {@inheritDoc}\n" + |
| " * @param a aaaaa\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "" |
| ); |
| } |
| public void testBug51606b() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @param a aaa\n" + |
| " * @param b bbb\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * Text before inherit tag\n" + |
| " * {@inheritDoc}\n" + |
| " * @param a aaaaa\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug51606c() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @param a aaa\n" + |
| " * @param b bbb\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n", |
| "Y.java", |
| "public class Y extends X {\n" + |
| " /**\n" + |
| " * Text before inherit tag {@inheritDoc}\n" + |
| " * @param a aaaaa\n" + |
| " */\n" + |
| " public void foo(int a, int b) {\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 65174: Spurious "Javadoc: Missing reference" error |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65174">65174</a> |
| */ |
| public void testBug65174() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * Comment with no error: {@link\n" + |
| " * Object valid} because it\'s not on first line\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " /** Comment previously with error: {@link\n" + |
| " * Object valid} because tag is on comment very first line\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug65174a() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * Comment with no error: {@link \n" + |
| " * Object valid} because it\'s not on first line\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " /** Comment previously with error: {@link \n" + |
| " * Object valid} because tag is on comment very first line\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug65174b() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * Comment with no error: {@link java.lang.\n" + |
| " * Object valid} because it\'s not on first line\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " /** Comment previously with error: {@link java.lang.\n" + |
| " * Object valid} because tag is on comment very first line\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug65174c() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * Comment with no error: {@link Object\n" + |
| " * valid} because it\'s not on first line\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " /** Comment previously with no error: {@link Object\n" + |
| " * valid} because tag is on comment very first line\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug65174d() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " /** Comment previously with no error: {@link Object valid} comment on one line */\n" + |
| " void foo1() {}\n" + |
| " /** Comment previously with no error: {@link Object valid} */\n" + |
| " void foo2() {}\n" + |
| " /** Comment previously with no error: {@link Object valid}*/\n" + |
| " void foo3() {}\n" + |
| " /** {@link Object valid} comment on one line */\n" + |
| " void foo4() {}\n" + |
| " /**{@link Object valid} comment on one line */\n" + |
| " void foo5() {}\n" + |
| " /** {@link Object valid} */\n" + |
| " void foo6() {}\n" + |
| " /**{@link Object valid} */\n" + |
| " void foo7() {}\n" + |
| " /** {@link Object valid}*/\n" + |
| " void foo8() {}\n" + |
| " /**{@link Object valid}*/\n" + |
| " void foo9() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 65180: Spurious "Javadoc: xxx cannot be resolved or is not a field" error with inner classes |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65180">65180</a> |
| */ |
| public void testBug65180() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public class Inner {\n" + |
| " /**\n" + |
| " * Does something.\n" + |
| " * \n" + |
| " * @see #testFunc\n" + |
| " */\n" + |
| " public void innerFunc() {\n" + |
| " testFunc();\n" + |
| " }\n" + |
| " }\n" + |
| " \n" + |
| " public void testFunc() {}\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 6)\r\n" + |
| " * @see #testFunc\r\n" + |
| " ^^^^^^^^\n" + |
| "Javadoc: testFunc cannot be resolved or is not a field\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug65180a() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public class Inner {\n" + |
| " /**\n" + |
| " * Does something.\n" + |
| " * \n" + |
| " * @see #testFunc()\n" + |
| " */\n" + |
| " public void innerFunc() {\n" + |
| " testFunc();\n" + |
| " }\n" + |
| " }\n" + |
| " \n" + |
| " public void testFunc() {}\n" + |
| "}\n" + |
| "\n" |
| } |
| ); |
| } |
| public void testBug65180b() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public class Inner {\n" + |
| " /**\n" + |
| " * Does something.\n" + |
| " * \n" + |
| " * @see Test#testFunc\n" + |
| " * @see Test#testFunc()\n" + |
| " */\n" + |
| " public void innerFunc() {\n" + |
| " testFunc();\n" + |
| " }\n" + |
| " }\n" + |
| " \n" + |
| " public void testFunc() {}\n" + |
| "}\n" + |
| "\n" |
| } |
| ); |
| } |
| public void testBug65180c() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public class Inner {\n" + |
| " /**\n" + |
| " * Does something.\n" + |
| " * \n" + |
| " * @see #testFunc\n" + |
| " */\n" + |
| " public void innerFunc() {\n" + |
| " testFunc();\n" + |
| " }\n" + |
| " }\n" + |
| " \n" + |
| " public void testFunc() {}\n" + |
| " public void testFunc(String str) {}\n" + |
| "}\n" + |
| "\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 6)\n" + |
| " * @see #testFunc\n" + |
| " ^^^^^^^^\n" + |
| "Javadoc: testFunc cannot be resolved or is not a field\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug65180d() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " int testField;\n" + |
| " public class Inner {\n" + |
| " /**\n" + |
| " * Does something.\n" + |
| " * \n" + |
| " * @see #testField\n" + |
| " * @see #testFunc(int)\n" + |
| " */\n" + |
| " public void innerFunc() {\n" + |
| " testFunc(testField);\n" + |
| " }\n" + |
| " }\n" + |
| " \n" + |
| " public void testFunc(int test) {\n" + |
| " testField = test; \n" + |
| " }\n" + |
| "}\n" + |
| "\n" |
| } |
| ); |
| } |
| public void testBug65180e() { |
| runConformTest( |
| new String[] { |
| "ITest.java", |
| "public interface ITest {\n" + |
| " /**\n" + |
| " * @see #foo() \n" + |
| " */\n" + |
| " public static int field = 0;\n" + |
| " /**\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " public void foo();\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug65180f() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " static class SuperInner {\n" + |
| " public int field;\n" + |
| " public void foo() {}\n" + |
| " }\n" + |
| " \n" + |
| " public static class Inner extends SuperInner {\n" + |
| " /**\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " public static int f;\n" + |
| " /**\n" + |
| " * @see #foo()\n" + |
| " */\n" + |
| " public static void bar() {}\n" + |
| " }\n" + |
| " \n" + |
| " public void foo() {}\n" + |
| "}" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 65253: [Javadoc] @@tag is wrongly parsed as @tag |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=65253">65253</a> |
| */ |
| public void testBug65253() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * Comment \n" + |
| " * @@@@see Unknown Should not complain on ref\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " /**\n" + |
| " * Comment\n" + |
| " * @@@param xxx Should not complain on param\n" + |
| " * @@return int\n" + |
| " */\n" + |
| " int foo() { // should warn on missing tag for return type\n" + |
| " return 0;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 3)\n" + |
| " * @@@@see Unknown Should not complain on ref\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" + |
| "2. ERROR in Test.java (at line 8)\n" + |
| " * @@@param xxx Should not complain on param\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" + |
| "3. ERROR in Test.java (at line 9)\n" + |
| " * @@return int\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" + |
| "4. ERROR in Test.java (at line 11)\n" + |
| " int foo() { // should warn on missing tag for return type\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 66551: Error in org.eclipse.swt project on class PrinterData |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66551">66551</a> |
| */ |
| public void testBug66551() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " int field;\n" + |
| " /**\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " void foo(int field) {\n" + |
| " }\n" + |
| "\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug66551a() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " static int field;\n" + |
| " /**\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " static void foo(int field) {\n" + |
| " }\n" + |
| "\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug66551b() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " int field;\n" + |
| " /**\n" + |
| " * {@link #field}\n" + |
| " */\n" + |
| " void foo(int field) {\n" + |
| " }\n" + |
| "\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug66551c() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " static int field;\n" + |
| " /**\n" + |
| " * {@link #field}\n" + |
| " */\n" + |
| " static void foo(int field) {\n" + |
| " }\n" + |
| "\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 66573: Shouldn't bind to local constructs |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=66573">66573</a> |
| */ |
| public void testBug66573() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " /**\n" + |
| " * @see Local\n" + |
| " */\n" + |
| " void foo() {\n" + |
| " class Local { \n" + |
| " // shouldn\'t be seen from javadoc\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 3)\n" + |
| " * @see Local\n" + |
| " ^^^^^\n" + |
| "Javadoc: Local cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 68017: Javadoc processing does not detect missing argument to @return |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68017">68017</a> |
| */ |
| public void testBug68017conform() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@return valid integer*/\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**\n" + |
| " * @return #\n" + |
| " */\n" + |
| " public int foo2() {return 0; }\n" + |
| "}\n", |
| } |
| ); |
| } |
| public void testBug68017negative() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@return*/\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**@return */\n" + |
| " public int foo2() {return 0; }\n" + |
| " /**@return****/\n" + |
| " public int foo3() {return 0; }\n" + |
| " /**\n" + |
| " * @return\n" + |
| " */\n" + |
| " public int foo4() {return 0; }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " /**@return*/\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " /**@return */\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " /**@return****/\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 9)\n" + |
| " * @return\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" |
| ); |
| } |
| // Javadoc issue a warning on following tests |
| public void testBug68017javadocWarning1() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return* */\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**@return** **/\n" + |
| " public int foo2() {return 0; }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @return* */\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 5)\n" + |
| " /**@return** **/\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug68017javadocWarning2() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return #\n" + |
| " */\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**\n" + |
| " * @return @\n" + |
| " */\n" + |
| " public int foo2() {return 0; }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug68017javadocWarning3() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return#\n" + |
| " * @return#text\n" + |
| " */\n" + |
| " public int foo() {return 0; }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @return#\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " * @return#text\n" + |
| " ^^^^^^^^^^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 68025: Javadoc processing does not detect some wrong links |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68025">68025</a> |
| */ |
| public void testBug68025conform() { |
| runConformTest( |
| new String[] { |
| "Y.java", |
| "public class Y {\n" + |
| " public int field;\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Z.java", |
| "public class Z {\n" + |
| " /**\n" + |
| " * @see Y#field #valid\n" + |
| " * @see Y#foo #valid\n" + |
| " */\n" + |
| " public void foo1() {}\n" + |
| " /**@see Y#field # valid*/\n" + |
| " public void foo2() {}\n" + |
| " /**@see Y#foo # valid*/\n" + |
| " public void foo3() {}\n" + |
| " /**@see Y#foo()\n" + |
| " *# valid*/\n" + |
| " public void foo4() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug68025negative() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public int field;\n" + |
| " public void foo() {}\n" + |
| " /**\n" + |
| " * @see #field#invalid\n" + |
| " * @see #foo#invalid\n" + |
| " */\n" + |
| " public void foo1() {}\n" + |
| " /**@see Y#field# invalid*/\n" + |
| " public void foo2() {}\n" + |
| " /**@see Y#foo# invalid*/\n" + |
| " public void foo3() {}\n" + |
| " /**@see Y#foo()#\n" + |
| " *valid*/\n" + |
| " public void foo4() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * @see #field#invalid\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * @see #foo#invalid\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 9)\n" + |
| " /**@see Y#field# invalid*/\n" + |
| " ^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 11)\n" + |
| " /**@see Y#foo# invalid*/\n" + |
| " ^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 13)\n" + |
| " /**@see Y#foo()#\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 68726: [Javadoc] Target attribute in @see link triggers warning |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=68726">68726</a> |
| */ |
| public void testBug68726conform1() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Object <a href=\"http://www.eclipse.org\" target=\"_top\">Eclipse</a>\n" + |
| " */\n" + |
| " void foo1() {}\n" + |
| " /**@see Object <a href=\"http://www.eclipse.org\" target=\"_top\" target1=\"_top1\" target2=\"_top2\">Eclipse</a>*/\n" + |
| " void foo2() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug68726conform2() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">IBM Home Page</a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " * IBM Home Page</a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " * IBM Home Page\n" + |
| " * </a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " *\n" + |
| " *\n" + |
| " * </a>\n" + |
| " * @see Object\n" + |
| " */\n" + |
| "public class X {\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug68726negative1() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Invalid URL link references\n" + |
| " *\n" + |
| " * @see <a href=\"invalid\" target\n" + |
| " * @see <a href=\"invalid\" target=\n" + |
| " * @see <a href=\"invalid\" target=\"\n" + |
| " * @see <a href=\"invalid\" target=\"_top\n" + |
| " * @see <a href=\"invalid\" target=\"_top\"\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid<\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</a\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</a> no text allowed after the href\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * @see <a href=\"invalid\" target\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * @see <a href=\"invalid\" target=\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " * @see <a href=\"invalid\" target=\"\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 8)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 9)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\"\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "6. ERROR in X.java (at line 10)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "7. ERROR in X.java (at line 11)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "8. ERROR in X.java (at line 12)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "9. ERROR in X.java (at line 13)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid<\n" + |
| " ^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "10. ERROR in X.java (at line 14)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</\n" + |
| " ^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "11. ERROR in X.java (at line 15)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</a\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "12. ERROR in X.java (at line 16)\n" + |
| " * @see <a href=\"invalid\" target=\"_top\">invalid</a> no text allowed after the href\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug68726negative2() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">IBM Home Page\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " * IBM Home Page\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " * IBM Home Page<\n" + |
| " * /a>\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " *\n" + |
| " *\n" + |
| " * \n" + |
| " * @see Unknown\n" + |
| " */\n" + |
| "public class X {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">IBM Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " * IBM Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " * IBM Home Page<\n" + |
| " ^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 8)\n" + |
| " * @see <a href=\"http:/www.ibm.com\" target=\"_top\">\n" + |
| " *\n" + |
| " * IBM\n" + |
| " *\n" + |
| " * Home Page\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 16)\n" + |
| " * @see Unknown\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 69272: [Javadoc] Invalid malformed reference (missing separator) |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69272">69272</a> |
| */ |
| public void testBug69272classValid() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see Object*/\n" + |
| " public void foo1() {}\n" + |
| " /**@see Object\n" + |
| " */\n" + |
| " public void foo2() {}\n" + |
| " /**@see Object */\n" + |
| " public void foo3() {}\n" + |
| " /**@see Object****/\n" + |
| " public void foo4() {}\n" + |
| " /**@see Object ****/\n" + |
| " public void foo5() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug69272classInvalid() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see Object* */\n" + |
| " public void foo1() {}\n" + |
| " /**@see Object*** ***/\n" + |
| " public void foo2() {}\n" + |
| " /**@see Object***\n" + |
| " */\n" + |
| " public void foo3() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " /**@see Object* */\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " /**@see Object*** ***/\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " /**@see Object***\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug69272fieldValid() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int field;\n" + |
| " /**@see #field*/\n" + |
| " public void foo1() {}\n" + |
| " /**@see #field\n" + |
| " */\n" + |
| " public void foo2() {}\n" + |
| " /**@see #field */\n" + |
| " public void foo3() {}\n" + |
| " /**@see #field****/\n" + |
| " public void foo4() {}\n" + |
| " /**@see #field ********/\n" + |
| " public void foo5() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug69272fieldInvalid() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int field;\n" + |
| " /**@see #field* */\n" + |
| " public void foo1() {}\n" + |
| " /**@see #field*** ***/\n" + |
| " public void foo2() {}\n" + |
| " /**@see #field***\n" + |
| " */\n" + |
| " public void foo3() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " /**@see #field* */\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 5)\n" + |
| " /**@see #field*** ***/\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " /**@see #field***\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug69272methodValid() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see Object#wait()*/\n" + |
| " public void foo1() {}\n" + |
| " /**@see Object#wait()\n" + |
| " */\n" + |
| " public void foo2() {}\n" + |
| " /**@see Object#wait() */\n" + |
| " public void foo3() {}\n" + |
| " /**@see Object#wait()****/\n" + |
| " public void foo4() {}\n" + |
| " /**@see Object#wait() ****/\n" + |
| " public void foo5() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug69272methodInvalid() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see Object#wait()* */\n" + |
| " public void foo1() {}\n" + |
| " /**@see Object#wait()*** ***/\n" + |
| " public void foo2() {}\n" + |
| " /**@see Object#wait()***\n" + |
| " */\n" + |
| " public void foo3() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " /**@see Object#wait()* */\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " /**@see Object#wait()*** ***/\n" + |
| " ^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 6)\n" + |
| " /**@see Object#wait()***\n" + |
| " ^^^^^\n" + |
| "Javadoc: Malformed reference (missing end space separator)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 69275: [Javadoc] Invalid warning on @see link |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=69275">69275</a> |
| */ |
| public void testBug69275conform() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>*/\n" + |
| " void foo1() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>\n" + |
| " */\n" + |
| " void foo2() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a> */\n" + |
| " void foo3() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>**/\n" + |
| " void foo4() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a> *****/\n" + |
| " void foo5() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug69275negative() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>* */\n" + |
| " void foo1() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a> ** **/\n" + |
| " void foo2() {}\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>**\n" + |
| " */\n" + |
| " void foo3() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a>* */\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " /**@see <a href=\"http://www.eclipse.org\">text</a> ** **/\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 69302: [Javadoc] Invalid reference warning inconsistent with javadoc tool |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=69302" |
| */ |
| public void testBug69302conform1() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Object <a href=\"http://www.eclipse.org\">Eclipse</a>\n" + |
| " */\n" + |
| " void foo1() {}\n" + |
| " /**\n" + |
| " * @see Object \"Valid string reference\"\n" + |
| " */\n" + |
| " void foo2() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug69302negative1() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see Unknown <a href=\"http://www.eclipse.org\">Eclipse</a>\n" + |
| " */\n" + |
| " void foo1() {}\n" + |
| " /**\n" + |
| " * @see Unknown \"Valid string reference\"\n" + |
| " */\n" + |
| " void foo2() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see Unknown <a href=\"http://www.eclipse.org\">Eclipse</a>\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\n" + |
| " * @see Unknown \"Valid string reference\"\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug69302negative2() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**@see Unknown blabla <a href=\"http://www.eclipse.org\">text</a>*/\n" + |
| " void foo1() {}\n" + |
| " /**@see Unknown blabla \"Valid string reference\"*/\n" + |
| " void foo2() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " /**@see Unknown blabla <a href=\"http://www.eclipse.org\">text</a>*/\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " /**@see Unknown blabla \"Valid string reference\"*/\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Unknown cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * @bug 70892: [1.5][Javadoc] Compiler should parse reference for inline tag @value |
| * @test Ensure that reference in tag 'value' is only verified when source level >= 1.5 |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=70892" |
| */ |
| public void testBug70892a() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * {@value}\n" + |
| " */\n" + |
| " static int field1;\n" + |
| " /**\n" + |
| " * {@value }\n" + |
| " */\n" + |
| " static int field2;\n" + |
| " /**\n" + |
| " * {@value #field}\n" + |
| " */\n" + |
| " static int field;\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug70892b() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * {@value \"invalid\"}\n" + |
| " */\n" + |
| " final static int field1 = 1;\n" + |
| " /**\n" + |
| " * {@value <a href=\"invalid\">invalid</a>} invalid\n" + |
| " */\n" + |
| " final static int field2 = 2;\n" + |
| " /**\n" + |
| " * {@value #field}\n" + |
| " */\n" + |
| " final static int field3 = 3;\n" + |
| " /**\n" + |
| " * {@value #foo}\n" + |
| " */\n" + |
| " final static int field4 = 4;\n" + |
| " /**\n" + |
| " * {@value #foo()}\n" + |
| " */\n" + |
| " final static int field5 = 5;\n" + |
| " void foo() {}\n" + |
| "}\n" |
| }; |
| if (this.complianceLevel.equals(COMPLIANCE_1_3) || this.complianceLevel.equals(COMPLIANCE_1_4)) { |
| runConformTest(testFiles); |
| } else { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\r\n" + |
| " * {@value \"invalid\"}\r\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Only static field reference is allowed for @value tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\r\n" + |
| " * {@value <a href=\"invalid\">invalid</a>} invalid\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Only static field reference is allowed for @value tag\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 11)\r\n" + |
| " * {@value #field}\r\n" + |
| " ^^^^^\n" + |
| "Javadoc: field cannot be resolved or is not a field\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 15)\r\n" + |
| " * {@value #foo}\r\n" + |
| " ^^^\n" + |
| "Javadoc: Only static field reference is allowed for @value tag\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 19)\r\n" + |
| " * {@value #foo()}\r\n" + |
| " ^^^^^\n" + |
| "Javadoc: Only static field reference is allowed for @value tag\n" + |
| "----------\n" |
| ); |
| } |
| } |
| |
| /** |
| * Bug 73348: [Javadoc] Missing description for return tag is not always warned |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73348">73348</a> |
| */ |
| public void testBug73348conform() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return \n" + |
| " * int\n" + |
| " */\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**\n" + |
| " * @return \n" + |
| " * int\n" + |
| " * @see Object\n" + |
| " */\n" + |
| " public int foo2() {return 0; }\n" + |
| "}\n", |
| } |
| ); |
| } |
| public void testBug73348negative() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return\n" + |
| " * @see Object\n" + |
| " */\n" + |
| " public int foo1() {return 0; }\n" + |
| " /**\n" + |
| " * @return \n" + |
| " * @see Object\n" + |
| " */\n" + |
| " public int foo2() {return 0; }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @return\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 8)\n" + |
| " * @return \n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 73479: [Javadoc] Improve error message for invalid link in @see tags |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73479">73479</a> |
| */ |
| public void testBug73479() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see <a href=\"spec.html#section\">Java Spec<a>\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see <a href=\"spec.html#section\">Java Spec<a>\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 73995: [Javadoc] Wrong warning for missing return type description for @return {@inheritdoc} |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=73995">73995</a> |
| */ |
| public void testBug73995() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return {@link Object} \n" + |
| " */\n" + |
| " public int foo1() {return 0; }\n" + |
| " /** @return {@inheritedDoc} */\n" + |
| " public int foo2() {return 0; }\n" + |
| " /**\n" + |
| " * @return\n" + |
| " * {@unknown_tag}\n" + |
| " */\n" + |
| " public int foo3() {return 0; }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 74369: [Javadoc] incorrect javadoc in local class |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=74369">74369</a> |
| */ |
| public void testBug74369() { |
| runConformTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " public void method() {\n" + |
| " /**\n" + |
| " * @see #hsgdfdj\n" + |
| " */\n" + |
| " System.out.println(\"println\");\n" + |
| " class Local {}\n" + |
| " }\n" + |
| "}" |
| } |
| ); |
| } |
| public void testBug74369deprecated() { |
| runNegativeTest( |
| new String[] { |
| "p/Y.java", |
| "package p;\n" + |
| "\n" + |
| "\n" + |
| "public class Y {\n" + |
| " /**\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public void bar() {}\n" + |
| "}\n", |
| "X.java", |
| "import p.Y;\n" + |
| "\n" + |
| "public class X {\n" + |
| " Object obj = new Object() {\n" + |
| " public boolean equals(Object o) {\n" + |
| " /**\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " System.out.println(\"println\");\n" + |
| " class Local {\n" + |
| " void bar() {\n" + |
| " new Y().bar();\n" + |
| " }\n" + |
| " }\n" + |
| " return super.equals(o);\n" + |
| " }\n" + |
| " };\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 12)\n" + |
| " new Y().bar();\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "The method bar() from the type Y is deprecated\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 76324: [Javadoc] Wrongly reports invalid link format in @see and @link |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=76324">76324</a> |
| */ |
| public void testBug76324() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "\n" + |
| "/**\n" + |
| " * Subclasses perform GUI-related work in a dedicated thread. For instructions\n" + |
| " * on using this class, see\n" + |
| " * {@link <a href=\"http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html\"> Swing tutorial </a>}\n" + |
| " * \n" + |
| " * @see <a\n" + |
| " * href=\"http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html\">\n" + |
| " * EDU.oswego.cs.dl.util.concurrent </a>\n" + |
| " * @see <a\n" + |
| " * href=\"http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html\">\n" + |
| " * JDK 5.0 </a>\n" + |
| " * @author {@link <a href=\"http://gee.cs.oswego.edu/dl\">Doug Lea</a>}\n" + |
| " * @author {@link <a href=\"http://home.pacbell.net/jfai\">J?rgen Failenschmid</a>}\n" + |
| " *\n" + |
| " * It is assumed that you have read the introductory document\n" + |
| " * {@link <a HREF=\"../../../../../internat/overview.htm\">\n" + |
| " * Internationalization</a>}\n" + |
| " * and are familiar with \n" + |
| " */\n" + |
| "public class X {\n" + |
| "\n" + |
| "}\n" |
| } |
| ); |
| } |
| // URL Link references |
| public void testBug76324url() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Invalid inline URL link references \n" + |
| " *\n" + |
| " * {@link <}\n" + |
| " * {@link <a}\n" + |
| " * {@link <a hre}\n" + |
| " * {@link <a href}\n" + |
| " * {@link <a href=}\n" + |
| " * {@link <a href=\"}\n" + |
| " * {@link <a href=\"invalid}\n" + |
| " * {@link <a href=\"invalid\"}\n" + |
| " * {@link <a href=\"invalid\">}\n" + |
| " * {@link <a href=\"invalid\">invalid}\n" + |
| " * {@link <a href=\"invalid\">invalid<}\n" + |
| " * {@link <a href=\"invalid\">invalid</}\n" + |
| " * {@link <a href=\"invalid\">invalid</a}\n" + |
| " * {@link <a href=\"invalid\">invalid</a> no text allowed after}\n" + |
| " */\n" + |
| " public void s_foo() {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * {@link <}\n" + |
| " ^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * {@link <a}\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " * {@link <a hre}\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 8)\n" + |
| " * {@link <a href}\n" + |
| " ^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 9)\n" + |
| " * {@link <a href=}\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "6. ERROR in X.java (at line 10)\n" + |
| " * {@link <a href=\"}\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "7. ERROR in X.java (at line 11)\n" + |
| " * {@link <a href=\"invalid}\n" + |
| " ^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "8. ERROR in X.java (at line 12)\n" + |
| " * {@link <a href=\"invalid\"}\n" + |
| " ^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "9. ERROR in X.java (at line 13)\n" + |
| " * {@link <a href=\"invalid\">}\n" + |
| " ^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "10. ERROR in X.java (at line 14)\n" + |
| " * {@link <a href=\"invalid\">invalid}\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "11. ERROR in X.java (at line 15)\n" + |
| " * {@link <a href=\"invalid\">invalid<}\n" + |
| " ^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "12. ERROR in X.java (at line 16)\n" + |
| " * {@link <a href=\"invalid\">invalid</}\n" + |
| " ^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "13. ERROR in X.java (at line 17)\n" + |
| " * {@link <a href=\"invalid\">invalid</a}\n" + |
| " ^^^^\n" + |
| "Javadoc: Malformed link reference\n" + |
| "----------\n" + |
| "14. ERROR in X.java (at line 18)\n" + |
| " * {@link <a href=\"invalid\">invalid</a> no text allowed after}\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" |
| ); |
| } |
| // String references |
| public void testBug76324string() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Inline string references \n" + |
| " *\n" + |
| " * {@link \"}\n" + |
| " * {@link \"unterminated string}\n" + |
| " * {@link \"invalid string\"\"}\n" + |
| " * {@link \"valid string\"}\n" + |
| " * {@link \"invalid\" no text allowed after the string}\n" + |
| " */\n" + |
| " public void s_foo() {\n" + |
| " }\n" + |
| "}\n" }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * {@link \"}\n" + |
| " ^^\n" + |
| "Javadoc: Invalid reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " * {@link \"unterminated string}\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " * {@link \"invalid string\"\"}\n" + |
| " ^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 9)\n" + |
| " * {@link \"invalid\" no text allowed after the string}\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Unexpected text\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 77510: [javadoc] compiler wrongly report deprecation when option "process javadoc comments" is not set |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=77510">77510</a> |
| */ |
| public void testBug77510enabled() { |
| runNegativeTest( |
| new String[] { |
| "A.java", |
| "public class A {\n" + |
| " /** \\u0009 @deprecated */\n" + |
| " static int i0009;\n" + |
| " /** \\u000a @deprecated */\n" + |
| " static int i000a;\n" + |
| " /** \\u000b @deprecated */\n" + |
| " static int i000b;\n" + |
| " /** \\u000c @deprecated */\n" + |
| " static int i000c;\n" + |
| " /** \\u001c @deprecated */\n" + |
| " static int i001c;\n" + |
| " /** \\u001d @deprecated */\n" + |
| " static int i001d;\n" + |
| " /** \\u001e @deprecated */\n" + |
| " static int i001e;\n" + |
| " /** \\u001f @deprecated */\n" + |
| " static int i001f;\n" + |
| " /** \\u2007 @deprecated */\n" + |
| " static int i2007;\n" + |
| " /** \\u202f @deprecated */\n" + |
| " static int i202f;\n" + |
| "}\n", |
| "X.java", |
| "public class X {\n" + |
| " int i0 = A.i0009;\n" + |
| " int i1 = A.i000a;\n" + |
| " int i2 = A.i000b;\n" + |
| " int i3 = A.i000c;\n" + |
| " int i4 = A.i001c;\n" + |
| " int i5 = A.i001d;\n" + |
| " int i6 = A.i001e;\n" + |
| " int i7 = A.i001f;\n" + |
| " int i8 = A.i2007;\n" + |
| " int i9 = A.i202f;\n" + |
| "}\n" }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " int i0 = A.i0009;\n" + |
| " ^^^^^\n" + |
| "The field A.i0009 is deprecated\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " int i1 = A.i000a;\n" + |
| " ^^^^^\n" + |
| "The field A.i000a is deprecated\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 5)\n" + |
| " int i3 = A.i000c;\n" + |
| " ^^^^^\n" + |
| "The field A.i000c is deprecated\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug77510disabled() { |
| docCommentSupport = CompilerOptions.IGNORE; |
| runNegativeTest( |
| new String[] { |
| "A.java", |
| "public class A {\n" + |
| " /** \\u0009 @deprecated */\n" + |
| " static int i0009;\n" + |
| " /** \\u000a @deprecated */\n" + |
| " static int i000a;\n" + |
| " /** \\u000b @deprecated */\n" + |
| " static int i000b;\n" + |
| " /** \\u000c @deprecated */\n" + |
| " static int i000c;\n" + |
| " /** \\u001c @deprecated */\n" + |
| " static int i001c;\n" + |
| " /** \\u001d @deprecated */\n" + |
| " static int i001d;\n" + |
| " /** \\u001e @deprecated */\n" + |
| " static int i001e;\n" + |
| " /** \\u001f @deprecated */\n" + |
| " static int i001f;\n" + |
| " /** \\u2007 @deprecated */\n" + |
| " static int i2007;\n" + |
| " /** \\u202f @deprecated */\n" + |
| " static int i202f;\n" + |
| "}\n", |
| "X.java", |
| "public class X {\n" + |
| " int i0 = A.i0009;\n" + |
| " int i1 = A.i000a;\n" + |
| " int i2 = A.i000b;\n" + |
| " int i3 = A.i000c;\n" + |
| " int i4 = A.i001c;\n" + |
| " int i5 = A.i001d;\n" + |
| " int i6 = A.i001e;\n" + |
| " int i7 = A.i001f;\n" + |
| " int i8 = A.i2007;\n" + |
| " int i9 = A.i202f;\n" + |
| "}\n" }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " int i0 = A.i0009;\n" + |
| " ^^^^^\n" + |
| "The field A.i0009 is deprecated\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " int i1 = A.i000a;\n" + |
| " ^^^^^\n" + |
| "The field A.i000a is deprecated\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 5)\n" + |
| " int i3 = A.i000c;\n" + |
| " ^^^^^\n" + |
| "The field A.i000c is deprecated\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Test bug 77260: [Javadoc] deprecation warning should not be reported when @deprecated tag is set |
| */ |
| public void testBug77260() { |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/** @deprecated */\n" + |
| "public class X {\n" + |
| " public int x;\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Y.java", |
| "/**\n" + |
| " * @see X\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| "public class Y {\n" + |
| " /** @see X#x */\n" + |
| " public int x;\n" + |
| " /** @see X#foo() */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Z.java", |
| "public class Z {\n" + |
| " /** \n" + |
| " * @see X#x\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public int x;\n" + |
| " /**\n" + |
| " * @see X#foo()\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n" } |
| ); |
| } |
| public void testBug77260nested() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode, CompilerOptions.ENABLED); |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/** @deprecated */\n" + |
| "public class X {\n" + |
| " public int x;\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Y.java", |
| "/**\n" + |
| " * @see X\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| "public class Y {\n" + |
| " /** @see X#x */\n" + |
| " public int x;\n" + |
| " /** @see X#foo() */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Z.java", |
| "public class Z {\n" + |
| " /** \n" + |
| " * @see X#x\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public int x;\n" + |
| " /**\n" + |
| " * @see X#foo()\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n" }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 2)\n" + |
| " * @see X\n" + |
| " ^\n" + |
| "Javadoc: The type X is deprecated\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 6)\n" + |
| " /** @see X#x */\n" + |
| " ^\n" + |
| "Javadoc: The type X is deprecated\n" + |
| "----------\n" + |
| "3. ERROR in Y.java (at line 6)\n" + |
| " /** @see X#x */\n" + |
| " ^\n" + |
| "Javadoc: The field X.x is deprecated\n" + |
| "----------\n" + |
| "4. ERROR in Y.java (at line 8)\n" + |
| " /** @see X#foo() */\n" + |
| " ^\n" + |
| "Javadoc: The type X is deprecated\n" + |
| "----------\n" + |
| "5. ERROR in Y.java (at line 8)\n" + |
| " /** @see X#foo() */\n" + |
| " ^^^^^\n" + |
| "Javadoc: The method foo() from the type X is deprecated\n" + |
| "----------\n" + |
| "----------\n" + |
| "1. ERROR in Z.java (at line 3)\n" + |
| " * @see X#x\n" + |
| " ^\n" + |
| "Javadoc: The type X is deprecated\n" + |
| "----------\n" + |
| "2. ERROR in Z.java (at line 3)\n" + |
| " * @see X#x\n" + |
| " ^\n" + |
| "Javadoc: The field X.x is deprecated\n" + |
| "----------\n" + |
| "3. ERROR in Z.java (at line 8)\n" + |
| " * @see X#foo()\n" + |
| " ^\n" + |
| "Javadoc: The type X is deprecated\n" + |
| "----------\n" + |
| "4. ERROR in Z.java (at line 8)\n" + |
| " * @see X#foo()\n" + |
| " ^^^^^\n" + |
| "Javadoc: The method foo() from the type X is deprecated\n" + |
| "----------\n", |
| null, |
| true, |
| options |
| ); |
| } |
| public void testBug77260nested_disabled() { |
| Map options = getCompilerOptions(); |
| options.put(CompilerOptions.OPTION_ReportDeprecationInDeprecatedCode, CompilerOptions.ENABLED); |
| options.put(CompilerOptions.OPTION_ReportInvalidJavadocTagsDeprecatedRef, CompilerOptions.DISABLED); |
| runConformTest( |
| new String[] { |
| "X.java", |
| "/** @deprecated */\n" + |
| "public class X {\n" + |
| " public int x;\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Y.java", |
| "/**\n" + |
| " * @see X\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| "public class Y {\n" + |
| " /** @see X#x */\n" + |
| " public int x;\n" + |
| " /** @see X#foo() */\n" + |
| " public void foo() {}\n" + |
| "}\n", |
| "Z.java", |
| "public class Z {\n" + |
| " /** \n" + |
| " * @see X#x\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public int x;\n" + |
| " /**\n" + |
| " * @see X#foo()\n" + |
| " * @deprecated\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| "}\n" |
| }, |
| "", |
| null, |
| true, |
| null, |
| options, |
| null |
| ); |
| } |
| |
| /** |
| * Bug 77602: [javadoc] "Only consider members as visible as" is does not work for syntax error |
| */ |
| public void testBug77602() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see\n" + |
| " * @see UnknownClass\n" + |
| " */\n" + |
| " protected void foo() {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see\n" + |
| " ^^^\n" + |
| "Javadoc: Missing reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " * @see UnknownClass\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Javadoc: UnknownClass cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug77602_Public() { |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see\n" + |
| " * @see UnknownClass\n" + |
| " */\n" + |
| " protected void foo() {\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 78091: [1.5][javadoc] Compiler should accept new 1.5 syntax for @param |
| * @see <a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=78091">78091</a> |
| */ |
| public void testBug78091() { |
| reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * Valid type parameter reference\n" + |
| " * @param xxx.yyy invalid\n" + |
| " * @param obj(x) invalid\n" + |
| " */\n" + |
| " public void foo(int xxx, Object obj) {}\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " * @param xxx.yyy invalid\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: Invalid param tag name\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 5)\n" + |
| " * @param obj(x) invalid\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Invalid param tag name\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " public void foo(int xxx, Object obj) {}\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter xxx\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 7)\n" + |
| " public void foo(int xxx, Object obj) {}\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter obj\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 80910: [javadoc] Invalid missing reference warning on @see or @link tags |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=80910" |
| */ |
| public void testBug80910() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " int field;\n" + |
| "\n" + |
| " /**\n" + |
| " * @param key\'s toto\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " public void foo(int x) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 5)\n" + |
| " * @param key\'s toto\n" + |
| " ^^^^^\n" + |
| "Javadoc: Invalid param tag name\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 82088: [search][javadoc] Method parameter types references not found in @see/@link tags |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=82088" |
| */ |
| public void testBug82088() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class Test {\n" + |
| " int field;\n" + |
| "\n" + |
| " /**\n" + |
| " * @param key\'s toto\n" + |
| " * @see #field\n" + |
| " */\n" + |
| " public void foo(int x) {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 5)\n" + |
| " * @param key\'s toto\n" + |
| " ^^^^^\n" + |
| "Javadoc: Invalid param tag name\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 83285: [javadoc] Javadoc reference to constructor of secondary type has no binding / not found by search |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=83285" |
| */ |
| public void testBug83285a() { |
| runConformTest( |
| new String[] { |
| "p/A.java", |
| "package p;\n" + |
| "class A { }\n" + |
| "class C {\n" + |
| " /**\n" + |
| " * Link {@link #C(String)} was also wrongly warned...\n" + |
| " */\n" + |
| " private String fGerman;\n" + |
| " public C(String german) {\n" + |
| " fGerman = german;\n" + |
| " }\n" + |
| "}" |
| } |
| ); |
| } |
| public void testBug83285b() { |
| runConformTest( |
| new String[] { |
| "p/A.java", |
| "package p;\n" + |
| "class A {\n" + |
| " A(char c) {}\n" + |
| "}\n" + |
| "class B {\n" + |
| " B(Exception ex) {}\n" + |
| " void foo() {} \n" + |
| " class C { \n" + |
| " /**\n" + |
| " * Link {@link #B(Exception)} OK\n" + |
| " * Link {@link #B.C(String)} OK\n" + |
| " * Link {@link #foo()} OK\n" + |
| " * Link {@link #bar()} OK\n" + |
| " */\n" + |
| " public C(String str) {}\n" + |
| " void bar() {}\n" + |
| " }\n" + |
| "}" |
| } |
| ); |
| } |
| public void testBug83285c() { |
| runNegativeTest( |
| new String[] { |
| "p/A.java", |
| "package p;\n" + |
| "class A {\n" + |
| " A(char c) {}\n" + |
| "}\n" + |
| "class B {\n" + |
| " B(Exception ex) {}\n" + |
| " void foo() {}\n" + |
| " class C { \n" + |
| " /**\n" + |
| " * Link {@link #A(char)} KO\n" + |
| " * Link {@link #B(char)} KO\n" + |
| " * Link {@link #C(char)} KO\n" + |
| " * Link {@link #foo(int)} KO\n" + |
| " * Link {@link #bar(int)} KO\n" + |
| " */\n" + |
| " public C(String str) {}\n" + |
| " void bar() {}\n" + |
| " }\n" + |
| "}" |
| }, |
| "----------\n" + |
| "1. ERROR in p\\A.java (at line 10)\n" + |
| " * Link {@link #A(char)} KO\n" + |
| " ^\n" + |
| "Javadoc: The method A(char) is undefined for the type B.C\n" + |
| "----------\n" + |
| "2. ERROR in p\\A.java (at line 11)\n" + |
| " * Link {@link #B(char)} KO\n" + |
| " ^\n" + |
| "Javadoc: The method B(char) is undefined for the type B.C\n" + |
| "----------\n" + |
| "3. ERROR in p\\A.java (at line 12)\n" + |
| " * Link {@link #C(char)} KO\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: The constructor B.C(char) is undefined\n" + |
| "----------\n" + |
| "4. ERROR in p\\A.java (at line 13)\n" + |
| " * Link {@link #foo(int)} KO\n" + |
| " ^^^\n" + |
| "Javadoc: The method foo(int) is undefined for the type B.C\n" + |
| "----------\n" + |
| "5. ERROR in p\\A.java (at line 14)\n" + |
| " * Link {@link #bar(int)} KO\n" + |
| " ^^^\n" + |
| "Javadoc: The method bar() in the type B.C is not applicable for the arguments (int)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 87404: [javadoc] Unexpected not defined warning on constructor |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=87404" |
| */ |
| public void testBug87404() { |
| runConformTest( |
| new String[] { |
| "p/A.java", |
| "package p;\n" + |
| "class A {\n" + |
| " A(char c) {}\n" + |
| " class B {\n" + |
| " B(Exception ex) {}\n" + |
| " }\n" + |
| " void foo() {}\n" + |
| " /**\n" + |
| " * Link {@link #A(char)} OK \n" + |
| " * Link {@link #A(String)} OK\n" + |
| " * Link {@link #foo()} OK\n" + |
| " * Link {@link #bar()} OK\n" + |
| " */\n" + |
| " public A(String str) {}\n" + |
| " void bar() {}\n" + |
| "}" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 90302: [javadoc] {@inheritedDoc} should be inactive for non-overridden method |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=90302" |
| */ |
| public void testBug90302() { |
| this.reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * @see #foo(String)\n" + |
| " */\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * Static method\n" + |
| " * @param str\n" + |
| " * @return int\n" + |
| " * @throws NumberFormatException\n" + |
| " */\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " return Integer.parseInt(str);\n" + |
| " }\n" + |
| "}\n", |
| "Y.java", |
| "/**\n" + |
| " * @see #foo(String)\n" + |
| " */\n" + |
| "public class Y extends X { \n" + |
| " /**\n" + |
| " * Static method: does not override super\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " return Integer.parseInt(str);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 7)\n" + |
| " * {@inheritDoc}\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" + |
| "3. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter str\n" + |
| "----------\n" + |
| "4. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing tag for declared exception NumberFormatException\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug90302b() { |
| this.reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/** */\n" + |
| "public class X {\n" + |
| "}\n", |
| "Y.java", |
| "/**\n" + |
| " * @see #foo(String)\n" + |
| " */\n" + |
| "public class Y extends X { \n" + |
| " /**\n" + |
| " * Simple method: does not override super\n" + |
| " * {@inheritDoc}\n" + |
| " */\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " return Integer.parseInt(str);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Y.java (at line 7)\n" + |
| " * {@inheritDoc}\n" + |
| " ^^^^^^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for return type\n" + |
| "----------\n" + |
| "3. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^\n" + |
| "Javadoc: Missing tag for parameter str\n" + |
| "----------\n" + |
| "4. ERROR in Y.java (at line 9)\n" + |
| " static int foo(String str) throws NumberFormatException{\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Missing tag for declared exception NumberFormatException\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 103304: [Javadoc] Wrong reference proposal for inner classes. |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=103304" |
| */ |
| public void testBug103304a() { |
| runNegativeTest( |
| new String[] { |
| "boden/IAFAState.java", |
| "package boden;\n" + |
| "public interface IAFAState {\n" + |
| " public class ValidationException extends Exception {\n" + |
| " public ValidationException(String variableName, IAFAState subformula) {\n" + |
| " super(\"Variable \'\"+variableName+\"\' may be unbound in \'\"+subformula+\"\'\");\n" + |
| " }\n" + |
| " public void method() {}\n" + |
| " }\n" + |
| " /**\n" + |
| " * Validates a formula for consistent bindings. Bindings are consistent, when at each point in time,\n" + |
| " * the set of povided variables can be guaranteed to be a superset of the set of required variables.\n" + |
| " * @throws ValidationException Thrown if a variable is unbound. \n" + |
| " * @see ValidationException#IAFAState.ValidationException(String, IAFAState)\n" + |
| " * @see IAFAState.ValidationException#method()\n" + |
| " * @see ValidationException\n" + |
| " * {@link ValidationException}\n" + |
| " */\n" + |
| " public void validate() throws ValidationException;\n" + |
| "}\n", |
| "boden/TestValid.java", |
| "package boden;\n" + |
| "import boden.IAFAState.ValidationException;\n" + |
| "/**\n" + |
| " * @see ValidationException\n" + |
| " * @see IAFAState.ValidationException\n" + |
| " */\n" + |
| "public class TestValid {\n" + |
| " /** \n" + |
| " * @see ValidationException#IAFAState.ValidationException(String, IAFAState)\n" + |
| " */\n" + |
| " IAFAState.ValidationException valid1;\n" + |
| " /**\n" + |
| " * @see IAFAState.ValidationException#IAFAState.ValidationException(String, IAFAState)\n" + |
| " */\n" + |
| " IAFAState.ValidationException valid2;\n" + |
| "}\n" |
| }, |
| //boden\TestValid.java:8: warning - Tag @see: reference not found: ValidationException |
| //boden\TestValid.java:12: warning - Tag @see: reference not found: ValidationException#IAFAState.ValidationException(String, IAFAState) |
| "----------\n" + |
| "1. ERROR in boden\\TestValid.java (at line 4)\n" + |
| " * @see ValidationException\n" + |
| " ^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "2. ERROR in boden\\TestValid.java (at line 9)\n" + |
| " * @see ValidationException#IAFAState.ValidationException(String, IAFAState)\n" + |
| " ^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug103304b() { |
| runNegativeTest( |
| new String[] { |
| "boden/IAFAState.java", |
| "package boden;\n" + |
| "public interface IAFAState {\n" + |
| " public class ValidationException extends Exception {\n" + |
| " public ValidationException(String variableName, IAFAState subformula) {\n" + |
| " super(\"Variable \'\"+variableName+\"\' may be unbound in \'\"+subformula+\"\'\");\n" + |
| " }\n" + |
| " public void method() {}\n" + |
| " }\n" + |
| "}\n", |
| "boden/TestInvalid1.java", |
| "package boden;\n" + |
| "import boden.IAFAState.ValidationException;\n" + |
| "public class TestInvalid1 {\n" + |
| " /** \n" + |
| " * @see ValidationException#ValidationException(String, IAFAState)\n" + |
| " */ \n" + |
| " IAFAState.ValidationException invalid;\n" + |
| "}\n", |
| "boden/TestInvalid2.java", |
| "package boden;\n" + |
| "public class TestInvalid2 {\n" + |
| " /**\n" + |
| " * @see IAFAState.ValidationException#ValidationException(String, IAFAState)\n" + |
| " */\n" + |
| " IAFAState.ValidationException invalid;\n" + |
| "}\n", |
| "boden/TestInvalid3.java", |
| "package boden;\n" + |
| "import boden.IAFAState.ValidationException;\n" + |
| "public class TestInvalid3 {\n" + |
| " /**\n" + |
| " * @see IAFAState.ValidationException#IAFA.State.ValidationException(String, IAFAState)\n" + |
| " */\n" + |
| " IAFAState.ValidationException invalid;\n" + |
| "}\n", |
| "boden/TestInvalid4.java", |
| "package boden;\n" + |
| "import boden.IAFAState.ValidationException;\n" + |
| "public class TestInvalid4 {\n" + |
| " /**\n" + |
| " * @see IAFAState.ValidationException#IAFAState .ValidationException(String, IAFAState)\n" + |
| " */\n" + |
| " IAFAState.ValidationException invalid;\n" + |
| "}\n" |
| }, |
| //boden\TestInvalid1.java:7: warning - Tag @see: reference not found: ValidationException#ValidationException(String, IAFAState) |
| //boden\TestInvalid2.java:6: warning - Tag @see: can't find ValidationException(String, IAFAState) in boden.IAFAState.ValidationException => bug ID: 4288720 |
| //boden\TestInvalid3.java:6: warning - Tag @see: can't find IAFA.State.ValidationException(String, IAFAState) in boden.IAFAState.ValidationException |
| //boden\TestInvalid4.java:6: warning - Tag @see: can't find IAFAState in boden.IAFAState.ValidationException |
| "----------\n" + |
| "1. ERROR in boden\\TestInvalid1.java (at line 5)\n" + |
| " * @see ValidationException#ValidationException(String, IAFAState)\n" + |
| " ^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "----------\n" + |
| "1. ERROR in boden\\TestInvalid3.java (at line 5)\n" + |
| " * @see IAFAState.ValidationException#IAFA.State.ValidationException(String, IAFAState)\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "----------\n" + |
| "1. ERROR in boden\\TestInvalid4.java (at line 5)\n" + |
| " * @see IAFAState.ValidationException#IAFAState .ValidationException(String, IAFAState)\n" + |
| " ^^^^^^^^^\n" + |
| "Javadoc: IAFAState cannot be resolved or is not a field\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug103304c() { |
| runConformTest( |
| new String[] { |
| "test/Test.java", |
| "package test;\n" + |
| "public interface Test {\n" + |
| " public class Level0 {\n" + |
| " public Level0() {}\n" + |
| " }\n" + |
| " public interface Member {\n" + |
| " public class Level1 {\n" + |
| " public Level1() {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test/C.java", |
| "package test;\n" + |
| "public class C {\n" + |
| " /**\n" + |
| " * @see Test.Level0#Test.Level0()\n" + |
| " */\n" + |
| " Test.Level0 valid = new Test.Level0();\n" + |
| " /**\n" + |
| " * @see Test.Level0#Level0()\n" + |
| " */\n" + |
| " Test.Level0 invalid = new Test.Level0();\n" + |
| "}\n" |
| } |
| //test\C.java:10: warning - Tag @see: can't find Level0() in test.Test.Level0 => bug ID: 4288720 |
| ); |
| } |
| public void testBug103304d() { |
| runNegativeTest( |
| new String[] { |
| "test/Test.java", |
| "package test;\n" + |
| "public interface Test {\n" + |
| " public class Level0 {\n" + |
| " public Level0() {}\n" + |
| " }\n" + |
| " public interface Member {\n" + |
| " public class Level1 {\n" + |
| " public Level1() {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test/C2.java", |
| "package test;\n" + |
| "public class C2 {\n" + |
| " /**\n" + |
| " * @see Test.Member.Level1#Test.Member.Level1()\n" + |
| " */\n" + |
| " Test.Member.Level1 valid = new Test.Member.Level1();\n" + |
| " /**\n" + |
| " * @see Test.Member.Level1#Level1()\n" + |
| " */\n" + |
| " Test.Member.Level1 invalid = new Test.Member.Level1();\n" + |
| " /**\n" + |
| " * @see Test.Member.Level1#Test.Level1()\n" + |
| " */\n" + |
| " Test.Member.Level1 wrong = new Test.Member.Level1();\n" + |
| "}\n" |
| }, |
| //test\C2.java:10: warning - Tag @see: can't find Level1() in test.Test.Member.Level1 => Bug ID: 4288720 |
| //test\C2.java:14: warning - Tag @see: can't find Test.Level1() in test.Test.Member.Level1 |
| "----------\n" + |
| "1. ERROR in test\\C2.java (at line 12)\n" + |
| " * @see Test.Member.Level1#Test.Level1()\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug103304e() { |
| runConformTest( |
| new String[] { |
| "implicit/Valid.java", |
| "package implicit;\n" + |
| "public interface Valid {\n" + |
| " public class Level0 {\n" + |
| " /**\n" + |
| " * @see #Valid.Level0() Valid\n" + |
| " */\n" + |
| " public Level0() {}\n" + |
| " /**\n" + |
| " * @see #Valid.Level0(String) Valid\n" + |
| " */\n" + |
| " public Level0(String str) {}\n" + |
| " }\n" + |
| " public interface Member {\n" + |
| " public class Level1 {\n" + |
| " /**\n" + |
| " * @see #Valid.Member.Level1() Valid\n" + |
| " */\n" + |
| " public Level1() {}\n" + |
| " /**\n" + |
| " * @see #Valid.Member.Level1(int) Valid\n" + |
| " */\n" + |
| " public Level1(int x) {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug103304f() { |
| runNegativeTest( |
| new String[] { |
| "implicit/Invalid.java", |
| "package implicit;\n" + |
| "public interface Invalid {\n" + |
| " public class Level0 {\n" + |
| " /**\n" + |
| " * @see #Level0() Invalid\n" + |
| " */\n" + |
| " public Level0() {}\n" + |
| " /**\n" + |
| " * @see #Level0(String) Invalid\n" + |
| " */\n" + |
| " public Level0(String str) {}\n" + |
| " }\n" + |
| " public interface Member {\n" + |
| " public class Level1 {\n" + |
| " /**\n" + |
| " * @see #Level1() Invalid\n" + |
| " * @see #Member.Level1() Invalid\n" + |
| " * @see #Invalid.Level1() Invalid\n" + |
| " */\n" + |
| " public Level1() {}\n" + |
| " /**\n" + |
| " * @see #Level1(int) Invalid\n" + |
| " * @see #Invalid.Level1(int) Invalid\n" + |
| " * @see #Member.Level1(int) Invalid\n" + |
| " */\n" + |
| " public Level1(int x) {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| //implicit\Invalid.java:7: warning - Tag @see: can't find Level0() in implicit.Invalid.Level0 => bug ID: 4288720 |
| //implicit\Invalid.java:11: warning - Tag @see: can't find Level0(String) in implicit.Invalid.Level0 => bug ID: 4288720 |
| //implicit\Invalid.java:20: warning - Tag @see: can't find Level1() in implicit.Invalid.Member.Level1 => bug ID: 4288720 |
| //implicit\Invalid.java:20: warning - Tag @see: can't find Member.Level1() in implicit.Invalid.Member.Level1 |
| //implicit\Invalid.java:20: warning - Tag @see: can't find Invalid.Level1() in implicit.Invalid.Member.Level1 |
| //implicit\Invalid.java:26: warning - Tag @see: can't find Level1(int) in implicit.Invalid.Member.Level1 => bug ID: 4288720 |
| //implicit\Invalid.java:26: warning - Tag @see: can't find Invalid.Level1(int) in implicit.Invalid.Member.Level1 |
| //implicit\Invalid.java:26: warning - Tag @see: can't find Member.Level1(int) in implicit.Invalid.Member.Level1 |
| "----------\n" + |
| "1. ERROR in implicit\\Invalid.java (at line 17)\n" + |
| " * @see #Member.Level1() Invalid\n" + |
| " ^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "2. ERROR in implicit\\Invalid.java (at line 18)\n" + |
| " * @see #Invalid.Level1() Invalid\n" + |
| " ^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "3. ERROR in implicit\\Invalid.java (at line 23)\n" + |
| " * @see #Invalid.Level1(int) Invalid\n" + |
| " ^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" + |
| "4. ERROR in implicit\\Invalid.java (at line 24)\n" + |
| " * @see #Member.Level1(int) Invalid\n" + |
| " ^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: Invalid member type qualification\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 116464: [javadoc] Unicode tag name are not correctly parsed |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=116464" |
| */ |
| public void testBug116464() { |
| this.reportMissingJavadocTags = CompilerOptions.ERROR; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @\\u0070\\u0061\\u0072\\u0061\\u006d str xxx\n" + |
| " */\n" + |
| " void foo(String str) {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 125903: [javadoc] Treat whitespace in javadoc tags as invalid tags |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=125903" |
| */ |
| public void testBug125903() { |
| this.reportMissingJavadocTags = CompilerOptions.ERROR; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "/**\n" + |
| " * {@ link java.lang.String}\n" + |
| " * @ since 2.1\n" + |
| " */\n" + |
| "public class X {\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " * {@ link java.lang.String}\n" + |
| " ^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\n" + |
| " * @ since 2.1\n" + |
| " ^^\n" + |
| "Javadoc: Invalid tag\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 128954: Javadoc problems with category CAT_INTERNAL |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=128954" |
| */ |
| public void testBug128954() { |
| this.reportInvalidJavadoc = CompilerOptions.WARNING; |
| this.reportDeprecation = CompilerOptions.WARNING; |
| runNegativeTest( |
| new String[] { |
| "X.java", //======================== |
| "public class X {\n" + |
| " /**\n" + |
| " * @see p.A#bar()\n" + |
| " */\n" + |
| " void foo() {\n" + |
| " Zork z;\n" + |
| " }\n" + |
| "}\n", |
| "p/A.java", //======================== |
| "package p;\n" + |
| "public class A {\n" + |
| " /** @deprecated */\n" + |
| " public void bar() {\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " * @see p.A#bar()\n" + |
| " ^^^^^\n" + |
| "[@cat:javadoc] Javadoc: The method bar() from the type A is deprecated\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "[@cat:type] Zork cannot be resolved to a type\n" + |
| "----------\n", |
| null, |
| true, |
| null, |
| false, |
| true, |
| true); |
| } |
| /** |
| * Bug 128954: Javadoc problems with category CAT_INTERNAL - variation |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=128954" |
| */ |
| public void testBug128954a() { |
| this.reportInvalidJavadoc = CompilerOptions.WARNING; |
| this.reportDeprecation = CompilerOptions.WARNING; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " \n" + |
| " /**\n" + |
| " * @see p.A#bar()\n" + |
| " */\n" + |
| " void foo() {\n" + |
| " Zork z;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " * @see p.A#bar()\n" + |
| " ^^^\n" + |
| "[@cat:javadoc] Javadoc: p cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "[@cat:type] Zork cannot be resolved to a type\n" + |
| "----------\n", |
| null, |
| true, |
| null, |
| false, |
| true, |
| true); |
| } |
| |
| /** |
| * Bug 129241: [Javadoc] deprecation warning wrongly reported when ignoring Malformed Javadoc comments |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=129241" |
| */ |
| public void testBug129241a() { |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see p.A#bar\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n", |
| "p/A.java", |
| "package p;\n" + |
| "/** @deprecated */\n" + |
| "public class A {\n" + |
| " void bar() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see p.A#bar\n" + |
| " ^^^\n" + |
| "Javadoc: The type A is deprecated\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug129241b() { |
| this.reportDeprecation = CompilerOptions.IGNORE; |
| runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see p.A#bar\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n", |
| "p/A.java", |
| "package p;\n" + |
| "/** @deprecated */\n" + |
| "public class A {\n" + |
| " void bar() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * @see p.A#bar\n" + |
| " ^^^\n" + |
| "Javadoc: The type A is deprecated\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug129241c() { |
| this.reportJavadocDeprecation = CompilerOptions.DISABLED; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see p.A#bar\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n", |
| "p/A.java", |
| "package p;\n" + |
| "/** @deprecated */\n" + |
| "public class A {\n" + |
| " void bar() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| public void testBug129241d() { |
| this.reportInvalidJavadoc = CompilerOptions.IGNORE; |
| runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @see p.A#bar\n" + |
| " */\n" + |
| " void foo() {}\n" + |
| "}\n", |
| "p/A.java", |
| "package p;\n" + |
| "/** @deprecated */\n" + |
| "public class A {\n" + |
| " void bar() {}\n" + |
| "}\n" |
| } |
| ); |
| } |
| |
| /** |
| * Bug 132813: NPE in Javadoc.resolve(Javadoc.java:196) + log swamped |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=132813" |
| */ |
| public void testBug132813() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "public class X { \n" + |
| " /** */ \n" + |
| " public Test() {}\n" + |
| " /** */\n" + |
| " public test() {}\n" + |
| "}\n" }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 1)\n" + |
| " public class X { \n" + |
| " ^\n" + |
| "The public type X must be defined in its own file\n" + |
| "----------\n" + |
| "2. ERROR in Test.java (at line 3)\n" + |
| " public Test() {}\n" + |
| " ^^^^^^\n" + |
| "Return type for the method is missing\n" + |
| "----------\n" + |
| "3. ERROR in Test.java (at line 5)\n" + |
| " public test() {}\n" + |
| " ^^^^^^\n" + |
| "Return type for the method is missing\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * Bug 149013: [javadoc] In latest 3.3 build, there is a javadoc error in org.eclipse.core.resources |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=149013" |
| */ |
| public void testBug149013_Private01() { |
| this.reportMissingJavadocTags = CompilerOptions.IGNORE; |
| runConformTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test1/Test.java", |
| "package test1;\n" + |
| "/**\n" + |
| " * @see X.Inner\n" + |
| " * @see X.Inner.Level2\n" + |
| " * @see X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {}\n", |
| "test1/X.java" |
| } |
| ); |
| } |
| public void testBug149013_Public01() { |
| this.reportMissingJavadocTags = CompilerOptions.DISABLED; |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| runNegativeTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test1/Test.java", |
| "package test1;\n" + |
| "/**\n" + |
| " * @see X.Inner\n" + |
| " * @see X.Inner.Level2\n" + |
| " * @see X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {\n" + |
| "}\n" |
| }, |
| //test1\Test.java:7: warning - Tag @see: reference not found: X.Inner |
| //test1\Test.java:7: warning - Tag @see: reference not found: X.Inner.Level2 |
| //test1\Test.java:7: warning - Tag @see: reference not found: X.Inner.Level2.Level3 |
| "----------\n" + |
| "1. ERROR in test1\\Test.java (at line 3)\n" + |
| " * @see X.Inner\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'default\' reference\n" + |
| "----------\n" + |
| "2. ERROR in test1\\Test.java (at line 4)\n" + |
| " * @see X.Inner.Level2\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'default\' reference\n" + |
| "----------\n" + |
| "3. ERROR in test1\\Test.java (at line 5)\n" + |
| " * @see X.Inner.Level2.Level3\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'default\' reference\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug149013_Private02() { |
| this.reportMissingJavadocTags = CompilerOptions.IGNORE; |
| runNegativeTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test2/Test.java", |
| "package test2;\n" + |
| "import test1.X;\n" + |
| "/**\n" + |
| " * @see X.Inner\n" + |
| " * @see X.Inner.Level2\n" + |
| " * @see X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {}\n", |
| }, |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner.Level2 |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner.Level2.Level3 |
| "----------\n" + |
| "1. ERROR in test2\\Test.java (at line 4)\r\n" + |
| " * @see X.Inner\r\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" + |
| "2. ERROR in test2\\Test.java (at line 5)\r\n" + |
| " * @see X.Inner.Level2\r\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" + |
| "3. ERROR in test2\\Test.java (at line 6)\r\n" + |
| " * @see X.Inner.Level2.Level3\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug149013_Public02() { |
| this.reportMissingJavadocTags = CompilerOptions.DISABLED; |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| runNegativeTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test2/Test.java", |
| "package test2;\n" + |
| "import test1.X;\n" + |
| "/**\n" + |
| " * @see X.Inner\n" + |
| " * @see X.Inner.Level2\n" + |
| " * @see X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {}\n", |
| }, |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner.Level2 |
| //test2\Test.java:10: warning - Tag @see: reference not found: X.Inner.Level2.Level3 |
| "----------\n" + |
| "1. ERROR in test2\\Test.java (at line 4)\r\n" + |
| " * @see X.Inner\r\n" + |
| " ^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" + |
| "2. ERROR in test2\\Test.java (at line 5)\r\n" + |
| " * @see X.Inner.Level2\r\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" + |
| "3. ERROR in test2\\Test.java (at line 6)\r\n" + |
| " * @see X.Inner.Level2.Level3\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type X.Inner is not visible\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug149013_Private03() { |
| this.reportMissingJavadocTags = CompilerOptions.IGNORE; |
| runNegativeTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test3/Test.java", |
| "package test3;\n" + |
| "/**\n" + |
| " * @see test1.X.Inner\n" + |
| " * @see test1.X.Inner.Level2\n" + |
| " * @see test1.X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {}\n" |
| }, |
| // no warning |
| "----------\n" + |
| "1. ERROR in test3\\Test.java (at line 3)\r\n" + |
| " * @see test1.X.Inner\r\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" + |
| "2. ERROR in test3\\Test.java (at line 4)\r\n" + |
| " * @see test1.X.Inner.Level2\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" + |
| "3. ERROR in test3\\Test.java (at line 5)\r\n" + |
| " * @see test1.X.Inner.Level2.Level3\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" |
| ); |
| } |
| public void testBug149013_Public03() { |
| this.reportMissingJavadocTags = CompilerOptions.DISABLED; |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| runNegativeTest( |
| new String[] { |
| "test1/X.java", |
| "package test1;\n" + |
| "public class X {\n" + |
| " class Inner {\n" + |
| " class Level2 {\n" + |
| " class Level3 {}\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| "test3/Test.java", |
| "package test3;\n" + |
| "/**\n" + |
| " * @see test1.X.Inner\n" + |
| " * @see test1.X.Inner.Level2\n" + |
| " * @see test1.X.Inner.Level2.Level3\n" + |
| " */\n" + |
| "public class Test {}\n" |
| }, |
| // no warning |
| "----------\n" + |
| "1. ERROR in test3\\Test.java (at line 3)\r\n" + |
| " * @see test1.X.Inner\r\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" + |
| "2. ERROR in test3\\Test.java (at line 4)\r\n" + |
| " * @see test1.X.Inner.Level2\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" + |
| "3. ERROR in test3\\Test.java (at line 5)\r\n" + |
| " * @see test1.X.Inner.Level2.Level3\r\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: The type test1.X.Inner is not visible\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * @bug 153399: [javadoc] JDT Core should warn if the @value tag is not used correctly |
| * @test Ensure that 'value' tag is well warned when not used correctly |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=153399" |
| */ |
| public void testBug153399a() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X { \n" + |
| " /**\n" + |
| " * {@value #MY_VALUE}\n" + |
| " */\n" + |
| " public final static int MY_VALUE = 0; \n" + |
| " /**\n" + |
| " * {@value #MY_VALUE}\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| " /**\n" + |
| " * {@value #MY_VALUE}\n" + |
| " */\n" + |
| " class Sub {} \n" + |
| "}\n" |
| }; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 7)\n" + |
| " * {@value #MY_VALUE}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 11)\n" + |
| " * {@value #MY_VALUE}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } else { |
| runConformTest(testFiles); |
| } |
| } |
| public void testBug153399b() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X { \n" + |
| " /**\n" + |
| " * {@value}\n" + |
| " */\n" + |
| " public final static int MY_VALUE = 0; \n" + |
| " /**\n" + |
| " * {@value}\n" + |
| " */\n" + |
| " public void foo() {}\n" + |
| " /**\n" + |
| " * {@value}\n" + |
| " */\n" + |
| " class Sub {} \n" + |
| "}\n" |
| }; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 7)\n" + |
| " * {@value}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 11)\n" + |
| " * {@value}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } else { |
| runConformTest(testFiles); |
| } |
| } |
| public void testBug153399c() { |
| String[] testFiles = new String[] { |
| "p1/X.java", |
| "package p1;\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * @return a\n" + |
| " */\n" + |
| " boolean get() {\n" + |
| " return false;\n" + |
| " }\n" + |
| "}\n" |
| }; |
| runConformTest(testFiles); |
| } |
| public void testBug153399d() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X { \n" + |
| " /**\n" + |
| " * {@value #MY_VALUE}\n" + |
| " * {@value}\n" + |
| " * {@value Invalid}\n" + |
| " */\n" + |
| " public final static int MY_VALUE = 0; \n" + |
| "}\n" |
| }; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * {@value #MY_VALUE}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " * {@value}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } else { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " * {@value Invalid}\n" + |
| " ^^^^^^^^\n" + |
| "Javadoc: Invalid reference\n" + |
| "----------\n" |
| ); |
| } |
| } |
| public void testBug153399e() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X { \n" + |
| " /**\n" + |
| " * {@value Invalid}\n" + |
| " * {@value #MY_VALUE}\n" + |
| " */\n" + |
| " public final static int MY_VALUE = 0; \n" + |
| "}\n" |
| }; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * {@value Invalid}\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } else { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " * {@value Invalid}\n" + |
| " ^^^^^^^^\n" + |
| "Javadoc: Invalid reference\n" + |
| "----------\n" |
| ); |
| } |
| } |
| |
| /** |
| * @bug 160015: [1.5][javadoc] Missing warning on autoboxing compatible methods |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=160015" |
| */ |
| public void testBug160015() { |
| runNegativeTest(new String[] { |
| "Test.java", |
| "/**\n" + |
| " * @see #method(Long) Warning!\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " public void method(long l) {}\n" + |
| " /**\n" + |
| " * @see #method(Long) Warning!\n" + |
| " */\n" + |
| " void bar() {}\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 2)\n" + |
| " * @see #method(Long) Warning!\n" + |
| " ^^^^^^\n" + |
| "Javadoc: The method method(long) in the type Test is not applicable for the arguments (Long)\n" + |
| "----------\n" + |
| "2. ERROR in Test.java (at line 7)\n" + |
| " * @see #method(Long) Warning!\n" + |
| " ^^^^^^\n" + |
| "Javadoc: The method method(long) in the type Test is not applicable for the arguments (Long)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * @bug 163659: [javadoc] Compiler should warn when method parameters are not identical |
| * @test Ensure that a warning is raised when method parameter types are not identical |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=163659" |
| */ |
| public void testBug163659() { |
| runNegativeTest( |
| new String[] { |
| "Test.java", |
| "/**\n" + |
| " * @see #foo(MyInterface)\n" + |
| " * @see #foo(MySubInterface)\n" + |
| " */\n" + |
| "public class Test {\n" + |
| " public void foo(MyInterface mi) {\n" + |
| " }\n" + |
| "}\n" + |
| "interface MyInterface {}\n" + |
| "interface MySubInterface extends MyInterface {} \n" |
| }, |
| "----------\n" + |
| "1. ERROR in Test.java (at line 3)\n" + |
| " * @see #foo(MySubInterface)\n" + |
| " ^^^\n" + |
| "Javadoc: The method foo(MyInterface) in the type Test is not applicable for the arguments (MySubInterface)\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * @bug 165794: [javadoc] Should not report ambiguous on method with parameterized types as parameters |
| * @test Ensure that no warning are raised when ambiguous parameterized methods are present in javadoc comments |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=165794" |
| */ |
| public void testBug165794() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "/**\n" + |
| " * No reasonable hint for resolving the {@link #getMax(A)}.\n" + |
| " */\n" + |
| "public class X {\n" + |
| " /**\n" + |
| " * Extends Number method.\n" + |
| " * @see #getMax(A ipZ)\n" + |
| " */\n" + |
| " public <T extends Y> T getMax(final A<T> ipY) {\n" + |
| " return ipY.t();\n" + |
| " }\n" + |
| " \n" + |
| " /**\n" + |
| " * Extends Exception method.\n" + |
| " * @see #getMax(A ipY)\n" + |
| " */\n" + |
| " public <T extends Z> T getMax(final A<T> ipZ) {\n" + |
| " return ipZ.t();\n" + |
| " }\n" + |
| "}\n" + |
| "class A<T> {\n" + |
| " T t() { return null; }\n" + |
| "}\n" + |
| "class Y {}\n" + |
| "class Z {}" |
| }; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| return; |
| } |
| runConformTest(testFiles); |
| } |
| |
| /** |
| * @bug 166365: [javadoc] severity level of malformed javadoc comments did not work properly |
| * @test Ensure that no warning is raised when visibility is lower than the javadoc option one |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=166365" |
| */ |
| public void testBug166365() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X {\n" + |
| " /**\n" + |
| " * @return\n" + |
| " */\n" + |
| " private String getSomePrivate() {\n" + |
| " return \"SomePrivate\";\n" + |
| " }\n" + |
| " /**\n" + |
| " * @return\n" + |
| " */\n" + |
| " protected String getSomeProtected() {\n" + |
| " return \"SomeProtected\";\n" + |
| " }\n" + |
| " /**\n" + |
| " * @return\n" + |
| " */\n" + |
| " String getSomeDefault() {\n" + |
| " return \"SomeDefault\";\n" + |
| " }\n" + |
| " /**\n" + |
| " * @return\n" + |
| " */\n" + |
| " public String getSomePublic() {\n" + |
| " return \"SomePublic\";\n" + |
| " }\n" + |
| "}\n" |
| }; |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 21)\n" + |
| " * @return\n" + |
| " ^^^^^^\n" + |
| "Javadoc: Missing return type description\n" + |
| "----------\n" |
| ); |
| } |
| |
| /** |
| * @bug 166436: [javadoc] Potentially wrong javadoc warning for unexpected duplicate tag value |
| * @test Ensure that no duplicate warning is raised for value tag |
| * @see "http://bugs.eclipse.org/bugs/show_bug.cgi?id=166436" |
| */ |
| public void testBug166436() { |
| String[] testFiles = new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static final String PUBLIC_CONST = \"public\";\n" + |
| " protected static final String PROTECTED_CONST = \"protected\";\n" + |
| " static final String DEFAULT_CONST = \"default\"; \n" + |
| " private static final String PRIVATE_CONST = \"private\"; \n" + |
| " /**\n" + |
| " * Values:\n" + |
| " * <ul>\n" + |
| " * <li>{@value #PUBLIC_CONST}</li>\n" + |
| " * <li>{@value #PROTECTED_CONST}</li>\n" + |
| " * <li>{@value #DEFAULT_CONST}</li>\n" + |
| " * <li>{@value #PRIVATE_CONST}</li>\n" + |
| " * </ul>\n" + |
| " */\n" + |
| " public X() {\n" + |
| " }\n" + |
| "}\n" |
| }; |
| this.reportInvalidJavadocVisibility = CompilerOptions.PUBLIC; |
| if (complianceLevel.equals(COMPLIANCE_1_3) || complianceLevel.equals(COMPLIANCE_1_4)) { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 9)\n" + |
| " * <li>{@value #PUBLIC_CONST}</li>\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 10)\n" + |
| " * <li>{@value #PROTECTED_CONST}</li>\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 11)\n" + |
| " * <li>{@value #DEFAULT_CONST}</li>\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 12)\n" + |
| " * <li>{@value #PRIVATE_CONST}</li>\n" + |
| " ^^^^^\n" + |
| "Javadoc: Unexpected tag\n" + |
| "----------\n" |
| ); |
| } else { |
| runNegativeTest(testFiles, |
| "----------\n" + |
| "1. ERROR in X.java (at line 10)\n" + |
| " * <li>{@value #PROTECTED_CONST}</li>\n" + |
| " ^^^^^^^^^^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'protected\' reference\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 11)\n" + |
| " * <li>{@value #DEFAULT_CONST}</li>\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'default\' reference\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 12)\n" + |
| " * <li>{@value #PRIVATE_CONST}</li>\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "Javadoc: \'public\' visibility for malformed doc comments hides this \'private\' reference\n" + |
| "----------\n" |
| ); |
| } |
| } |
| } |