/* * Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * @test * @bug 4789689 4905985 4927164 4827184 4993906 5004549 7025314 7010344 8025633 8026567 8162363 * 8175200 8186332 8182765 8196202 8187288 8173730 8215307 8312445 * @summary Run Javadoc on a set of source files that demonstrate new * language features. Check the output to ensure that the new * language features are properly documented. * @library ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build javadoc.tester.* * @run main TestNewLanguageFeatures */ import javadoc.tester.JavadocTester; public class TestNewLanguageFeatures extends JavadocTester { public static void main(String... args) throws Exception { var tester = new TestNewLanguageFeatures(); tester.runTests(); } @Test public void test() { javadoc("-Xdoclint:none", "-d", "out", "-use", "--no-platform-links", "-sourcepath", testSrc, "pkg", "pkg1", "pkg2"); checkExit(Exit.OK); checkEnums(); checkTypeParameters(); checkVarArgs(); checkAnnotationTypeUsage(); } //================================= // ENUM TESTING //================================= void checkEnums() { checkOutput("pkg/Coin.html", true, // Make sure enum header is correct. "Enum Class Coin", // Make sure enum signature is correct. """
""", // Check for enum constant section """name - the name of the enum constant to be returned.java.lang.IllegalArgumentException - if this enum class has no constant with the specified namejava.lang.NullPointerException - if the argument is nullE - the type parameter for this class.T - Th\
is is the first type parameter.V - Th\
is is the second type parameter.E[]methodThatReturnsTypeParameterA(E[] \
e) """,
"""
""",
"""
<T extends java.lang.Object & java.l\
ang.Comparable<? super T>>
TmethodtThatReturnsTypeParamete\
rsB(java.util.Collection<? extends T> coll) """,
"""
<X extends java.lang.Throwable>
E\
orElseThrow(java.util.function.\
Supplier<? extends X> exceptionSupplier) """
);
checkOutput("pkg/Wildcards.html", true,
// Wildcard testing.
"""
TypeParameters<? super java.lang.String> a""",
"""
TypeParameters<? extends java.lang.StringBuffer> b""",
"""
TypeParameters c""");
checkOutput(Output.OUT, true,
// Bad type parameter warnings.
"""
warning: @param argument "SubInterface&\
lt;E>, SuperInterface<\
/a><E>SubInterface<V>SuperInterface<V>ClassUseTest1<T extends Foo & Foo2>method(T t) ClassUseTest1<T extends Foo & Foo2>method(T t) ClassUseTest2<T extends ParamTest<Foo3>>method(T t) <T extends ParamTest<Foo3>>
Pa\
ramTest<Foo3>\
code> ClassUseTest2<T extends ParamTest<Foo3>>method(T t) <T extends ParamTest<Foo3>>
Pa\
ramTest<Foo3>\
code> ClassUseTest3<T extends ParamTest2<java.util.List&\
lt;? extends Foo4>>><\
/code>method(T t) <T extends ParamTest2<java.util.List<? extends Foo4>>>
ParamTest2<java.util.List<? ext\
ends Foo4>> ClassUseTest3<T extends ParamTest2<java.util.List&\
lt;? extends Foo4>>><\
/code>method(T t) <T extends ParamTest2<java.util.List<? extends Foo4>>>
ParamTest2<java.util.List<? ex\
tends Foo4>> void