Skip to content

Commit 4fc43b0

Browse files
committed
8345770: javadoc: API documentation builds are not always reproducible
Reviewed-by: nbenalla, liach
1 parent ee1c5ad commit 4fc43b0

File tree

13 files changed

+32
-35
lines changed

13 files changed

+32
-35
lines changed

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

-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ public ClassUseWriter(HtmlConfiguration configuration,
106106
pkgToPackageAnnotations = new TreeSet<>(comparators.classUseComparator());
107107
pkgToPackageAnnotations.addAll(mapper.classToPackageAnnotations.get(typeElement));
108108
}
109-
configuration.currentTypeElement = typeElement;
110109
this.pkgSet = new TreeSet<>(comparators.packageComparator());
111110
this.pkgToClassTypeParameter = pkgDivide(mapper.classToClassTypeParam);
112111
this.pkgToSubclassTypeParameter = pkgDivide(mapper.classToSubclassTypeParam);

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ public ClassWriter(HtmlConfiguration configuration, TypeElement typeElement,
9494
ClassTree classTree) {
9595
super(configuration, configuration.docPaths.forClass(typeElement));
9696
this.typeElement = typeElement;
97-
configuration.currentTypeElement = typeElement;
9897
this.classTree = classTree;
9998

10099
pHelper = new PropertyUtils.PropertyHelper(configuration, typeElement);
@@ -506,7 +505,7 @@ protected Content getClassInfo(Content classInfo) {
506505
}
507506

508507
@Override
509-
public TypeElement getCurrentPageElement() {
508+
public TypeElement getCurrentTypeElement() {
510509
return typeElement;
511510
}
512511

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

-5
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,6 @@ public class HtmlConfiguration extends BaseConfiguration {
104104
*/
105105
public DocPath topFile = DocPath.empty;
106106

107-
/**
108-
* The TypeElement for the class file getting generated.
109-
*/
110-
public TypeElement currentTypeElement = null; // Set this TypeElement in the ClassWriter.
111-
112107
/**
113108
* The collections of items for the main index.
114109
* This field is only initialized if {@code options.createIndex()}

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -1024,11 +1024,10 @@ public String getEnclosingPackageName(TypeElement te) {
10241024
}
10251025

10261026
/**
1027-
* Return the main type element of the current page or null for pages that don't have one.
1028-
*
1029-
* @return the type element of the current page.
1027+
* {@return the type element documented by this writer if it is a {@code ClassWriter},
1028+
* or null for any other kind of writer}
10301029
*/
1031-
public TypeElement getCurrentPageElement() {
1030+
public TypeElement getCurrentTypeElement() {
10321031
return null;
10331032
}
10341033

@@ -1912,7 +1911,7 @@ private boolean shouldRedirectRelativeLinks(Element element) {
19121911
// Retrieve the element of this writer if it is a "primary" writer for an element.
19131912
// Note: It would be nice to have getCurrentPageElement() return package and module elements
19141913
// in their respective writers, but other uses of the method are only interested in TypeElements.
1915-
Element currentPageElement = getCurrentPageElement();
1914+
Element currentPageElement = getCurrentTypeElement();
19161915
if (currentPageElement == null) {
19171916
if (this instanceof PackageWriter packageWriter) {
19181917
currentPageElement = packageWriter.packageElement;
@@ -1951,7 +1950,7 @@ public Content invalidTagOutput(String summary, Optional<Content> detail) {
19511950
*/
19521951
private boolean inSamePackage(Element element) {
19531952
Element currentPageElement = (this instanceof PackageWriter packageWriter)
1954-
? packageWriter.packageElement : getCurrentPageElement();
1953+
? packageWriter.packageElement : getCurrentTypeElement();
19551954
return currentPageElement != null && !utils.isModule(element)
19561955
&& Objects.equals(utils.containingPackage(currentPageElement),
19571956
utils.containingPackage(element));

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ protected Content getClassLink(HtmlLinkInfo linkInfo) {
270270
TypeElement enclosing = utils.getEnclosingTypeElement(linkInfo.getTargetMember());
271271
Set<ElementFlag> enclosingFlags = utils.elementFlags(enclosing);
272272
if (flags.contains(ElementFlag.PREVIEW) && enclosingFlags.contains(ElementFlag.PREVIEW)) {
273-
if (enclosing.equals(m_writer.getCurrentPageElement())) {
273+
if (enclosing.equals(m_writer.getCurrentTypeElement())) {
274274
//skip the PREVIEW tag:
275275
flags = EnumSet.copyOf(flags);
276276
flags.remove(ElementFlag.PREVIEW);
@@ -294,7 +294,7 @@ protected Content getClassLink(HtmlLinkInfo linkInfo) {
294294
if (utils.isIncluded(typeElement)) {
295295
if (configuration.isGeneratedDoc(typeElement) && !utils.hasHiddenTag(typeElement)) {
296296
DocPath fileName = getPath(linkInfo);
297-
if (linkInfo.linkToSelf() || typeElement != m_writer.getCurrentPageElement()) {
297+
if (linkInfo.linkToSelf() || typeElement != m_writer.getCurrentTypeElement()) {
298298
link.add(m_writer.links.createLink(
299299
fileName.fragment(linkInfo.getFragment()),
300300
label, linkInfo.getStyle(), linkInfo.getTitle()));

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private Content retrieveInheritedDocumentation(TagletWriter writer,
133133
}
134134
} catch (DocFinder.NoOverriddenMethodFound e) {
135135
String signature = utils.getSimpleName(method)
136-
+ utils.flatSignature(method, writer.getCurrentPageElement());
136+
+ utils.flatSignature(method, writer.getCurrentTypeElement());
137137
messages.warning(method, "doclet.noInheritedDoc", signature);
138138
}
139139
return replacement;
@@ -157,7 +157,7 @@ private Content retrieveInheritedDocumentation(TagletWriter writer,
157157
}
158158
} else {
159159
String signature = utils.getSimpleName(method)
160-
+ utils.flatSignature(method, writer.getCurrentPageElement());
160+
+ utils.flatSignature(method, writer.getCurrentTypeElement());
161161
messages.warning(method, "doclet.noInheritedDoc", signature);
162162
}
163163
return replacement;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ Content linkSeeReferenceOutput(Element holder,
264264
}
265265
}
266266
String refMemName = refFragment;
267-
if (config.currentTypeElement != containing) {
267+
if (htmlWriter.getCurrentTypeElement() != containing) {
268268
refMemName = (utils.isConstructor(refMem))
269269
? refMemName
270270
: utils.getSimpleName(containing) + "." + refMemName;

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public Content getAllBlockTagOutput(Element holder, TagletWriter tagletWriter) {
9494
List<? extends ReturnTree> tags = utils.getReturnTrees(holder);
9595

9696
// make sure we are not using @return on a method with the void return type
97-
TypeMirror returnType = utils.getReturnType(tagletWriter.getCurrentPageElement(), method);
97+
TypeMirror returnType = utils.getReturnType(tagletWriter.getCurrentTypeElement(), method);
9898
if (returnType != null && utils.isVoid(returnType)) {
9999
if (!tags.isEmpty() && !config.isDocLintReferenceGroupEnabled()) {
100100
messages.warning(holder, "doclet.Return_tag_on_void_method");

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

+6-8
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,10 @@ public Content invalidTagOutput(String summary, Optional<String> detail) {
201201
}
202202

203203
/**
204-
* Returns the main type element of the current page or null for pages that don't have one.
205-
*
206-
* @return the type element of the current page or null.
204+
* {@return the type element documented by the current {@code HtmlDocletWriter} (may be null)}
207205
*/
208-
public TypeElement getCurrentPageElement() {
209-
return htmlWriter.getCurrentPageElement();
206+
public TypeElement getCurrentTypeElement() {
207+
return htmlWriter.getCurrentTypeElement();
210208
}
211209

212210
/**
@@ -411,7 +409,7 @@ public String visitType(TypeElement e, Void p) {
411409
public String visitExecutable(ExecutableElement e, Void p) {
412410
return utils.getFullyQualifiedName(utils.getEnclosingTypeElement(e))
413411
+ "." + utils.getSimpleName(e)
414-
+ utils.flatSignature(e, htmlWriter.getCurrentPageElement());
412+
+ utils.flatSignature(e, htmlWriter.getCurrentTypeElement());
415413
}
416414

417415
@Override
@@ -476,11 +474,11 @@ private boolean isLongOrHasComma(Content c) {
476474
// Test if element is the same as or belongs to the current page element
477475
private boolean isDifferentTypeElement(Element element) {
478476
if (element.getKind().isDeclaredType()) {
479-
return element != getCurrentPageElement();
477+
return element != getCurrentTypeElement();
480478
} else if (element.getKind() == ElementKind.OTHER) {
481479
return false;
482480
} else {
483-
return utils.getEnclosingTypeElement(element) != getCurrentPageElement();
481+
return utils.getEnclosingTypeElement(element) != getCurrentTypeElement();
484482
}
485483
}
486484
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ public Content getAllBlockTagOutput(Element holder, TagletWriter tagletWriter) {
211211
// since {@inheritDoc} in @throws is processed by ThrowsTaglet (this taglet) rather than
212212
// InheritDocTaglet, we have to duplicate some of the behavior of the latter taglet
213213
String signature = utils.getSimpleName(holder)
214-
+ utils.flatSignature((ExecutableElement) holder, tagletWriter.getCurrentPageElement());
214+
+ utils.flatSignature((ExecutableElement) holder, tagletWriter.getCurrentTypeElement());
215215
messages.warning(holder, "doclet.noInheritedDoc", signature);
216216
}
217217
return tagletWriter.getOutputInstance(); // TODO: consider invalid rather than empty output
@@ -235,7 +235,7 @@ private Content getAllBlockTagOutput0(Element holder)
235235
}
236236
var executable = (ExecutableElement) holder;
237237
ExecutableType instantiatedType = utils.asInstantiatedMethodType(
238-
tagletWriter.getCurrentPageElement(), executable);
238+
tagletWriter.getCurrentTypeElement(), executable);
239239
List<? extends TypeMirror> substitutedExceptionTypes = instantiatedType.getThrownTypes();
240240
List<? extends TypeMirror> originalExceptionTypes = executable.getThrownTypes();
241241
Map<TypeMirror, TypeMirror> typeSubstitutions = getSubstitutedThrownTypes(

test/langtools/jdk/javadoc/doclet/testModules/TestModules.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ void checkModuleTags() {
621621
estpkgmdltags"><code>TestClassInModuleTags</code></a>.""",
622622
"""
623623
Member Link: <a href="testpkgmdltags/TestClassInModuleTags.html#testMethod(java.\
624-
lang.String)"><code>testMethod(String)</code></a>.""",
624+
lang.String)"><code>TestClassInModuleTags.testMethod(String)</code></a>.""",
625625
"""
626626
Package Link: <a href="testpkgmdltags/package-summary.html"><code>testpkgmdltags</code></a>.""",
627627
"""
@@ -892,7 +892,7 @@ void checkModuleModeCommon() {
892892
Type Link: <a href="moduletags/testpkgmdltags/TestClassInModuleTags.html" title\
893893
="class in testpkgmdltags"><code>TestClassInModuleTags</code></a>.<br>
894894
Member Link: <a href="moduletags/testpkgmdltags/TestClassInModuleTags.html#test\
895-
Method(java.lang.String)"><code>testMethod(String)</code></a>.<br>
895+
Method(java.lang.String)"><code>TestClassInModuleTags.testMethod(String)</code></a>.<br>
896896
Package Link: <a href="moduletags/testpkgmdltags/package-summary.html"><code>testpkgmdltags</code></a>.<br></div>
897897
</div>""");
898898
checkOutput("moduleA/module-summary.html", true,

test/langtools/jdk/javadoc/doclet/testUseOption/TestUseOption.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
/*
2525
* @test
2626
* @bug 4496290 4985072 7006178 7068595 8016328 8050031 8048351 8081854 8071982 8162363 8175200 8186332
27-
* 8182765 8196202 8202626 8261976 8323698
27+
* 8182765 8196202 8202626 8261976 8323698 8345770
2828
* @summary A simple test to ensure class-use files are correct.
2929
* @library /tools/lib ../../lib
3030
* @modules jdk.javadoc/jdk.javadoc.internal.tool
@@ -107,7 +107,10 @@ public void test1() {
107107
);
108108
checkOutput("pkg1/class-use/UsedInterface.html", true,
109109
"""
110-
<a href="../AnAbstract.html" class="type-name-link" title="class in pkg1">AnAbstract</a>"""
110+
<a href="../AnAbstract.html" class="type-name-link" title="class in pkg1">AnAbstract</a>""",
111+
"""
112+
Link to interface method: <a href="../UsedInterface.html#doNothing()"><code>Use\
113+
dInterface.doNothing()</code></a>."""
111114
);
112115
checkOutput("pkg1/class-use/UsedInterface.html", true,
113116
"../C10.html#withReturningTypeParameters()"

test/langtools/jdk/javadoc/doclet/testUseOption/pkg1/AnAbstract.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2014, 2024, 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
@@ -22,4 +22,8 @@
2222
*/
2323

2424
package pkg1;
25+
26+
/**
27+
* Link to interface method: {@link #doNothing}.
28+
*/
2529
public abstract class AnAbstract implements UsedInterface {}

0 commit comments

Comments
 (0)