Skip to content

Commit 02a0473

Browse files
committed
8312445: Array types in annotation elements show square brackets twice
Reviewed-by: prappo
1 parent c22cadf commit 02a0473

File tree

4 files changed

+34
-22
lines changed

4 files changed

+34
-22
lines changed

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java

+11-8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import javax.lang.model.element.QualifiedNameable;
5353
import javax.lang.model.element.TypeElement;
5454
import javax.lang.model.element.VariableElement;
55+
import javax.lang.model.type.ArrayType;
5556
import javax.lang.model.type.DeclaredType;
5657
import javax.lang.model.type.TypeMirror;
5758
import javax.lang.model.util.SimpleAnnotationValueVisitor9;
@@ -90,6 +91,7 @@
9091
import jdk.javadoc.internal.doclets.formats.html.markup.Script;
9192
import jdk.javadoc.internal.doclets.formats.html.markup.TagName;
9293
import jdk.javadoc.internal.doclets.formats.html.markup.Text;
94+
import jdk.javadoc.internal.doclets.formats.html.markup.TextBuilder;
9395
import jdk.javadoc.internal.doclets.formats.html.taglets.Taglet;
9496
import jdk.javadoc.internal.doclets.formats.html.taglets.TagletWriter;
9597
import jdk.javadoc.internal.doclets.toolkit.Messages;
@@ -1868,23 +1870,24 @@ private Content annotationValueToContent(AnnotationValue annotationValue) {
18681870
return new SimpleAnnotationValueVisitor9<Content, Void>() {
18691871

18701872
@Override
1871-
public Content visitType(TypeMirror t, Void p) {
1873+
public Content visitType(TypeMirror type, Void p) {
18721874
return new SimpleTypeVisitor9<Content, Void>() {
18731875
@Override
18741876
public Content visitDeclared(DeclaredType t, Void p) {
18751877
HtmlLinkInfo linkInfo = new HtmlLinkInfo(configuration,
18761878
HtmlLinkInfo.Kind.PLAIN, t);
1877-
String name = utils.isIncluded(t.asElement())
1878-
? t.asElement().getSimpleName().toString()
1879-
: utils.getFullyQualifiedName(t.asElement());
1880-
linkInfo.label(name + utils.getDimension(t) + ".class");
18811879
return getLink(linkInfo);
18821880
}
18831881
@Override
1884-
protected Content defaultAction(TypeMirror e, Void p) {
1885-
return Text.of(t + utils.getDimension(t) + ".class");
1882+
public Content visitArray(ArrayType t, Void p) {
1883+
// render declared base component type as link
1884+
return visit(t.getComponentType()).add("[]");
18861885
}
1887-
}.visit(t);
1886+
@Override
1887+
protected Content defaultAction(TypeMirror t, Void p) {
1888+
return new TextBuilder(t.toString());
1889+
}
1890+
}.visit(type).add(".class");
18881891
}
18891892

18901893
@Override

test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/TestNewLanguageFeatures.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
/*
2525
* @test
2626
* @bug 4789689 4905985 4927164 4827184 4993906 5004549 7025314 7010344 8025633 8026567 8162363
27-
* 8175200 8186332 8182765 8196202 8187288 8173730 8215307
27+
* 8175200 8186332 8182765 8196202 8187288 8173730 8215307 8312445
2828
* @summary Run Javadoc on a set of source files that demonstrate new
2929
* language features. Check the output to ensure that the new
3030
* language features are properly documented.
@@ -675,11 +675,11 @@ public class <span class="type-name-label">AnnotationTypeUsage</span></dt><dt>ex
675675
<a href="A.html#s()">s</a>="sigh",""",
676676
// Class
677677
"""
678-
<a href="A.html#c()">c</a>=<a href="../pkg2/Foo.html" title="class in pkg2">Foo.class</a>,""",
678+
<a href="A.html#c()">c</a>=<a href="../pkg2/Foo.html" title="class in pkg2">Foo</a>.class,""",
679679
// Bounded Class
680680
"""
681681
<a href="A.html#w()">w</a>=<a href="../pkg/TypeParameterSubClass.html" title="cl\
682-
ass in pkg">TypeParameterSubClass.class</a>,""",
682+
ass in pkg">TypeParameterSubClass</a>.class,""",
683683
// Enum
684684
"""
685685
<a href="A.html#e()">e</a>=<a href="../pkg/Coin.html#Penny">Penny</a>,""",
@@ -694,10 +694,17 @@ n interface in pkg">@AnnotationType</a>(<a href="../pkg/AnnotationType.html#opti
694694
<a href="A.html#sa()">sa</a>={"up","down"},""",
695695
// Primitive
696696
"""
697-
<a href="A.html#primitiveClassTest()">primitiveClassTest</a>=boolean.class,""");
697+
<a href="A.html#primitiveClassTest()">primitiveClassTest</a>=boolean.class,""",
698+
// Arrays
699+
"""
700+
<a href="A.html#arrayClassTest()">arrayClassTest</a>=java.lang.String[][].class,""",
701+
"""
702+
<a href="A.html#arrayPrimitiveTest()">arrayPrimitiveTest</a>=boolean[].class,""",
703+
"""
704+
<a href="A.html#classArrayTest()">classArrayTest</a>={<a href="../pkg/TypeParame\
705+
terSubClass.html" title="class in pkg">TypeParameterSubClass</a>[][].class,java.\
706+
lang.String.class,long[][][].class})""");
698707

699-
// XXX: Add array test case after this if fixed:
700-
//5020899: Incorrect internal representation of class-valued annotation elements
701708
checkOutput("pkg1/B.html", true,
702709
"""
703710
<div class="type-signature"><span class="annotations"><a href="A.html" title="an\

test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/pkg1/A.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -32,12 +32,13 @@
3232
double d();
3333
boolean b();
3434
String s();
35-
Class c();
35+
Class<?> c();
3636
Class<? extends TypeParameterSuperClass> w();
3737
Coin[] e();
3838
AnnotationType a();
3939
String[] sa();
40-
Class primitiveClassTest();
41-
Class arrayClassTest();
42-
Class arrayPrimitiveTest();
40+
Class<?> primitiveClassTest();
41+
Class<?> arrayClassTest();
42+
Class<?> arrayPrimitiveTest();
43+
Class<?>[] classArrayTest();
4344
}

test/langtools/jdk/javadoc/doclet/testNewLanguageFeatures/pkg1/B.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -36,7 +36,8 @@
3636
a = @AnnotationType(optional="foo",required=1994),
3737
sa = {"up", "down"},
3838
primitiveClassTest = boolean.class,
39-
arrayClassTest = String[].class,
40-
arrayPrimitiveTest = boolean[].class)
39+
arrayClassTest = String[][].class,
40+
arrayPrimitiveTest = boolean[].class,
41+
classArrayTest = {TypeParameterSubClass[][].class, String.class, long[][][].class})
4142
public interface B {
4243
}

0 commit comments

Comments
 (0)