diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java index e15eb8431ebfe..5a015980d7099 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/AbstractMemberWriter.java @@ -202,8 +202,9 @@ protected void addModifiersAndType(Element member, TypeMirror type, if (list != null && !list.isEmpty()) { Content typeParameters = ((AbstractExecutableMemberWriter) this) .getTypeParameters((ExecutableElement)member); - code.add(typeParameters); - //Code to avoid ugly wrapping in member summary table. + code.add(typeParameters); + // Add explicit line break between method type parameters and + // return type in member summary table to avoid random wrapping. if (typeParameters.charCount() > 10) { code.add(new HtmlTree(TagName.BR)); } else { @@ -212,7 +213,8 @@ protected void addModifiersAndType(Element member, TypeMirror type, } code.add( writer.getLink(new HtmlLinkInfo(configuration, - HtmlLinkInfo.Kind.LINK_TYPE_PARAMS, type))); + HtmlLinkInfo.Kind.LINK_TYPE_PARAMS, type) + .addLineBreakOpportunitiesInTypeParameters(true))); } target.add(code); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkFactory.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkFactory.java index 52da85ce37511..99815eca71f77 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkFactory.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkFactory.java @@ -327,6 +327,9 @@ protected Content getTypeParameterLinks(HtmlLinkInfo linkInfo) { return links; } if (!vars.isEmpty()) { + if (linkInfo.addLineBreakOpportunitiesInTypeParameters()) { + links.add(new HtmlTree(TagName.WBR)); + } links.add("<"); boolean many = false; for (TypeMirror t : vars) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkInfo.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkInfo.java index 315eb5b164aa5..a7be9e3b10d53 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkInfo.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlLinkInfo.java @@ -122,9 +122,12 @@ public enum Kind { // True iff the preview flags should be skipped for this link. private boolean skipPreview; - // True if type parameters should be separated by line breaks. + // True if type parameters should be separated by hard line breaks. private boolean addLineBreaksInTypeParameters = false; + // True if additional tags should be added to type parameters + private boolean addLineBreakOpportunitiesInTypeParameters = false; + // True if annotations on type parameters should be shown. private boolean showTypeParameterAnnotations = false; @@ -311,6 +314,23 @@ public boolean addLineBreaksInTypeParameters() { return addLineBreaksInTypeParameters; } + /** + * Sets the addLineBreakOpportunitiesInTypeParameters flag for this link. + * @param addLineBreakOpportunities the new value + * @return this object + */ + public HtmlLinkInfo addLineBreakOpportunitiesInTypeParameters(boolean addLineBreakOpportunities) { + this.addLineBreakOpportunitiesInTypeParameters = addLineBreakOpportunities; + return this; + } + + /** + * {@return true if line break opportunities should be added to type parameters} + */ + public boolean addLineBreakOpportunitiesInTypeParameters() { + return addLineBreakOpportunitiesInTypeParameters; + } + /** * Set the linkToSelf flag for this link. * @param linkToSelf the new value diff --git a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java index da10634d25029..01221185c13c8 100644 --- a/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java +++ b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFX.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, 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 @@ -369,16 +369,16 @@ public void test3() {
 
final java.util.List<java.util.Set<? \ - super java.lang.Object>>
+ ab2 method-summary-table-tab4">final java.util.List<java.util.Set&\ + lt;? super java.lang.Object>>
deltaProperty()
 
final java.util.List<java.lang.String>\ -
+ b2 method-summary-table-tab4">final java.util.List<java.lang.Strin\ + g>
gammaProperty()
diff --git a/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java b/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java index 47b6dcffbfe50..0778a22152e57 100644 --- a/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java +++ b/test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2023, 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 @@ -272,7 +272,7 @@ void checkTypeParameters() { >""", """
ParamTest<Foo&g\ + in pkg2">ParamTest<Foo&g\ t;
""" ); @@ -283,7 +283,7 @@ void checkTypeParameters() { pan>""", """
ParamTest<Foo&\ + in pkg2">ParamTest<Foo&\ gt;
""" ); @@ -331,9 +331,9 @@ void checkTypeParameters() { declared as ParamTest""", """ -
ParamTest<Foo&\ - gt;
""", +
ParamTest<Foo>
""", """
Methods in pkg2 with type parameters of type <T extends ParamTest<Foo3>>
Pa\ - ramTest<Foo3>
\ -
""" + ramTest<Foo3>""" ); checkOutput("pkg2/class-use/Foo3.html", true, @@ -372,8 +372,8 @@ void checkTypeParameters() {
<T extends ParamTest<Foo3>>
Pa\ - ramTest<Foo3>
\ -
""" + ramTest<Foo3>""" ); // ClassUseTest3: >> @@ -400,8 +400,8 @@ void checkTypeParameters() {
<T extends ParamTest2<java.util.List<? extends Foo4>>>
ParamTest2<java.util.List<? extends\ - Foo4>>
""" + est2.html" title="class in pkg2">ParamTest2<java.util.List<? ext\ + ends Foo4>>""" ); checkOutput("pkg2/class-use/Foo4.html", true, @@ -431,8 +431,8 @@ void checkTypeParameters() {
<T extends ParamTest2<java.util.List<? extends Foo4>>>
ParamTest2<java.util.List<? extends\ - Foo4>>
""" + mTest2.html" title="class in pkg2">ParamTest2<java.util.List<? ex\ + tends Foo4>>""" ); // Type parameters in constructor and method args diff --git a/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java b/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java index 240cddf2d6ce6..7ce046c07575c 100644 --- a/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java +++ b/test/langtools/jdk/javadoc/doclet/testProperty/TestProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 @@ -89,8 +89,8 @@ public void testArrays() { // no tab classes should be used in the property table """
final ObjectProperty<MyObj[]>
+ title="class in pkg">ObjectProperty<MyObj[]>
bad
""", @@ -99,8 +99,8 @@ public void testArrays() { """ + class in pkg">ObjectProperty<MyObj[]>
badProperty()
"""