Skip to content

Commit 6b8261b

Browse files
committed
8315464: Uncouple AllClassesIndexWriter from IndexBuilder
Reviewed-by: jjg
1 parent 9b65b7d commit 6b8261b

13 files changed

+68
-115
lines changed

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

+24-17
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.ArrayList;
2929
import java.util.List;
3030
import java.util.Set;
31+
import java.util.TreeSet;
3132

3233
import javax.lang.model.element.TypeElement;
3334

@@ -39,34 +40,26 @@
3940
import jdk.javadoc.internal.doclets.formats.html.Navigation.PageMode;
4041
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
4142
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
42-
import jdk.javadoc.internal.doclets.toolkit.util.IndexBuilder;
43-
import jdk.javadoc.internal.doclets.toolkit.util.IndexItem;
4443
import jdk.javadoc.internal.doclets.toolkit.util.Utils.ElementFlag;
4544

4645
/**
4746
* Generate the file with list of all the classes in this run.
4847
*/
4948
public class AllClassesIndexWriter extends HtmlDocletWriter {
5049

51-
/**
52-
* Index of all the classes.
53-
*/
54-
protected IndexBuilder indexBuilder;
55-
5650
/**
5751
* Construct AllClassesIndexWriter object. Also initializes the indexBuilder variable in this
5852
* class.
5953
*
6054
* @param configuration The current configuration
61-
* @param indexBuilder Unicode based Index from {@link IndexBuilder}
6255
*/
63-
public AllClassesIndexWriter(HtmlConfiguration configuration, IndexBuilder indexBuilder) {
56+
public AllClassesIndexWriter(HtmlConfiguration configuration) {
6457
super(configuration, DocPaths.ALLCLASSES_INDEX);
65-
this.indexBuilder = indexBuilder;
6658
}
6759

6860
@Override
6961
public void buildPage() throws DocFileIOException {
62+
messages.notice("doclet.Building_Index_For_All_Classes");
7063
String label = resources.getText("doclet.All_Classes_And_Interfaces");
7164
Content allClassesContent = new ContentBuilder();
7265
addContents(allClassesContent);
@@ -97,13 +90,9 @@ protected void addContents(Content target) {
9790
.addTab(contents.records, utils::isRecord)
9891
.addTab(contents.exceptionClasses, utils::isThrowable)
9992
.addTab(contents.annotationTypes, utils::isAnnotationInterface);
100-
for (Character unicode : indexBuilder.getFirstCharacters()) {
101-
for (IndexItem indexItem : indexBuilder.getItems(unicode)) {
102-
TypeElement typeElement = (TypeElement) indexItem.getElement();
103-
if (typeElement != null && utils.isCoreClass(typeElement)) {
104-
addTableRow(table, typeElement);
105-
}
106-
}
93+
Set<TypeElement> typeElements = getTypeElements();
94+
for (TypeElement typeElement : typeElements) {
95+
addTableRow(table, typeElement);
10796
}
10897
Content titleContent = contents.allClassesAndInterfacesLabel;
10998
var pHeading = HtmlTree.HEADING_TITLE(Headings.PAGE_TITLE_HEADING,
@@ -115,6 +104,24 @@ protected void addContents(Content target) {
115104
}
116105
}
117106

107+
private Set<TypeElement> getTypeElements() {
108+
Set<TypeElement> classes = new TreeSet<>(utils.comparators.allClassesComparator());
109+
boolean noDeprecated = options.noDeprecated();
110+
Set<TypeElement> includedTypes = configuration.getIncludedTypeElements();
111+
for (TypeElement typeElement : includedTypes) {
112+
if (utils.hasHiddenTag(typeElement) || !utils.isCoreClass(typeElement)) {
113+
continue;
114+
}
115+
if (noDeprecated
116+
&& (utils.isDeprecated(typeElement)
117+
|| utils.isDeprecated(utils.containingPackage(typeElement)))) {
118+
continue;
119+
}
120+
classes.add(typeElement);
121+
}
122+
return classes;
123+
}
124+
118125
/**
119126
* Add table row.
120127
*

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -475,8 +475,8 @@ void printDocument(Content content) throws DocFileIOException {
475475
content.add(bodyContents);
476476
printHtmlDocument(null, "summary of constants", content);
477477

478-
if (hasConstants && configuration.mainIndex != null) {
479-
configuration.mainIndex.add(IndexItem.of(IndexItem.Category.TAGS,
478+
if (hasConstants && configuration.indexBuilder != null) {
479+
configuration.indexBuilder.add(IndexItem.of(IndexItem.Category.TAGS,
480480
resources.getText("doclet.Constants_Summary"), path));
481481
}
482482
}

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

+6-6
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ public ExternalSpecsWriter(HtmlConfiguration configuration) {
8686
*/
8787
@Override
8888
public void buildPage() throws DocFileIOException {
89-
boolean hasExternalSpecs = configuration.mainIndex != null
90-
&& !configuration.mainIndex.getItems(DocTree.Kind.SPEC).isEmpty();
89+
boolean hasExternalSpecs = configuration.indexBuilder != null
90+
&& !configuration.indexBuilder.getItems(DocTree.Kind.SPEC).isEmpty();
9191
if (!hasExternalSpecs) {
9292
return;
9393
}
@@ -110,15 +110,15 @@ public void buildPage() throws DocFileIOException {
110110
.setFooter(getFooter()));
111111
printHtmlDocument(null, "external specifications", body);
112112

113-
if (configuration.mainIndex != null) {
114-
configuration.mainIndex.add(IndexItem.of(IndexItem.Category.TAGS, title, path));
113+
if (configuration.indexBuilder != null) {
114+
configuration.indexBuilder.add(IndexItem.of(IndexItem.Category.TAGS, title, path));
115115
}
116116
}
117117

118118
protected void checkUniqueItems() {
119119
Map<String, Map<String, List<IndexItem>>> itemsByURL = new HashMap<>();
120120
Map<String, Map<String, List<IndexItem>>> itemsByTitle = new HashMap<>();
121-
for (IndexItem ii : configuration.mainIndex.getItems(DocTree.Kind.SPEC)) {
121+
for (IndexItem ii : configuration.indexBuilder.getItems(DocTree.Kind.SPEC)) {
122122
if (ii.getDocTree() instanceof SpecTree st) {
123123
String url = st.getURL().toString();
124124
String title = ii.getLabel(); // normalized form of st.getTitle()
@@ -230,7 +230,7 @@ protected void addExternalSpecs(Content content) {
230230
}
231231

232232
private Map<String, List<IndexItem>> groupExternalSpecs() {
233-
return configuration.mainIndex.getItems(DocTree.Kind.SPEC).stream()
233+
return configuration.indexBuilder.getItems(DocTree.Kind.SPEC).stream()
234234
.collect(groupingBy(IndexItem::getLabel, () -> new TreeMap<>(getTitleComparator()), toList()));
235235
}
236236

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public class HtmlConfiguration extends BaseConfiguration {
112112
* 2. items for elements are added in bulk before generating the index files
113113
* 3. additional items are added as needed
114114
*/
115-
public HtmlIndexBuilder mainIndex;
115+
public HtmlIndexBuilder indexBuilder;
116116

117117
/**
118118
* The collection of deprecated items, if any, to be displayed on the deprecated-list page,
@@ -307,7 +307,7 @@ public boolean finishOptionSettings() {
307307
}
308308
}
309309
if (options.createIndex()) {
310-
mainIndex = new HtmlIndexBuilder(this);
310+
indexBuilder = new HtmlIndexBuilder(this);
311311
}
312312
docPaths = new DocPaths(utils);
313313
setCreateOverview();

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

+3-6
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
6060
import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
6161
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
62-
import jdk.javadoc.internal.doclets.toolkit.util.IndexBuilder;
6362
import jdk.javadoc.internal.doclets.toolkit.util.NewAPIBuilder;
6463
import jdk.javadoc.internal.doclets.toolkit.util.PreviewAPIListBuilder;
6564
import jdk.javadoc.internal.doclets.toolkit.util.ResourceIOException;
@@ -273,16 +272,14 @@ protected void generateOtherFiles(ClassTree classTree)
273272
}
274273
writerFactory.newSystemPropertiesWriter().buildPage();
275274

276-
configuration.mainIndex.addElements();
277-
IndexBuilder allClassesIndex = new IndexBuilder(configuration, nodeprecated, true);
278-
allClassesIndex.addElements();
275+
configuration.indexBuilder.addElements();
279276

280-
writerFactory.newAllClassesIndexWriter(allClassesIndex).buildPage();
277+
writerFactory.newAllClassesIndexWriter().buildPage();
281278
if (!configuration.packages.isEmpty()) {
282279
writerFactory.newAllPackagesIndexWriter().buildPage();
283280
}
284281

285-
configuration.mainIndex.createSearchIndexFiles();
282+
configuration.indexBuilder.createSearchIndexFiles();
286283
IndexWriter.generate(configuration);
287284
writerFactory.newSearchWriter().buildPage();
288285
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -1470,13 +1470,13 @@ && equalsIgnoreCase(endElement.getName(), tagName)) {
14701470
attrs.add("id=\"").add(htmlId.name()).add("\"");
14711471
}
14721472
// Generate index item
1473-
if (!headingContent.isEmpty() && configuration.mainIndex != null) {
1473+
if (!headingContent.isEmpty() && configuration.indexBuilder != null) {
14741474
String tagText = headingContent.replaceAll("\\s+", " ");
14751475
IndexItem item = IndexItem.of(element, node, tagText,
14761476
getTagletWriterInstance(context).getHolderName(element),
14771477
resources.getText("doclet.Section"),
14781478
new DocLink(path, id));
1479-
configuration.mainIndex.add(item);
1479+
configuration.indexBuilder.add(item);
14801480
}
14811481
}
14821482

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

+4-12
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
4343
import jdk.javadoc.internal.doclets.toolkit.util.IndexBuilder;
4444
import jdk.javadoc.internal.doclets.toolkit.util.IndexItem;
45-
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
4645

4746
/**
4847
* Extensions to {@code IndexBuilder} to fill in remaining fields
@@ -51,10 +50,8 @@
5150
* JavaScript files.
5251
*/
5352
public class HtmlIndexBuilder extends IndexBuilder {
54-
private final HtmlConfiguration configuration;
5553

5654
private final Resources resources;
57-
private final Utils utils;
5855
private final HtmlIds htmlIds;
5956

6057
/**
@@ -63,11 +60,9 @@ public class HtmlIndexBuilder extends IndexBuilder {
6360
* @param configuration the current configuration of the doclet
6461
*/
6562
HtmlIndexBuilder(HtmlConfiguration configuration) {
66-
super(configuration, configuration.getOptions().noDeprecated());
67-
this.configuration = configuration;
68-
resources = configuration.docResources;
69-
utils = configuration.utils;
70-
htmlIds = configuration.htmlIds;
63+
super(configuration);
64+
this.resources = configuration.docResources;
65+
this.htmlIds = configuration.htmlIds;
7166
}
7267

7368
/**
@@ -79,15 +74,12 @@ public class HtmlIndexBuilder extends IndexBuilder {
7974
@Override
8075
public void addElements() {
8176
super.addElements();
82-
if (classesOnly) {
83-
return;
84-
}
8577

8678
Map<String,Integer> duplicateLabelCheck = new HashMap<>();
8779
for (Character ch : getFirstCharacters()) {
8880
for (IndexItem item : getItems(ch)) {
8981
duplicateLabelCheck.compute(item.getFullyQualifiedLabel(utils),
90-
(k, v) -> v == null ? 1 : v + 1);
82+
(k, v) -> v == null ? 1 : v + 1);
9183
}
9284
}
9385

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public class IndexWriter extends HtmlDocletWriter {
7979
*/
8080
public static void generate(HtmlConfiguration configuration) throws DocletException {
8181
var writerFactory = configuration.getWriterFactory();
82-
IndexBuilder mainIndex = configuration.mainIndex;
82+
IndexBuilder mainIndex = configuration.indexBuilder;
8383
List<Character> firstCharacters = mainIndex.getFirstCharacters();
8484
if (configuration.getOptions().splitIndex()) {
8585
ListIterator<Character> iter = firstCharacters.listIterator();
@@ -104,7 +104,7 @@ public static void generate(HtmlConfiguration configuration) throws DocletExcept
104104
protected IndexWriter(HtmlConfiguration configuration, DocPath path,
105105
List<Character> allFirstCharacters, List<Character> displayFirstCharacters) {
106106
super(configuration, path);
107-
this.mainIndex = configuration.mainIndex;
107+
this.mainIndex = configuration.indexBuilder;
108108
this.splitIndex = configuration.getOptions().splitIndex();
109109
this.allFirstCharacters = allFirstCharacters;
110110
this.displayFirstCharacters = displayFirstCharacters;

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -696,8 +696,8 @@ void printDocument(Content source) throws DocFileIOException {
696696
source.add(bodyContents);
697697
printHtmlDocument(null, "serialized forms", source);
698698

699-
if (configuration.mainIndex != null) {
700-
configuration.mainIndex.add(IndexItem.of(IndexItem.Category.TAGS,
699+
if (configuration.indexBuilder != null) {
700+
configuration.indexBuilder.add(IndexItem.of(IndexItem.Category.TAGS,
701701
resources.getText("doclet.Serialized_Form"), path));
702702
}
703703
}

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ public SystemPropertiesWriter(HtmlConfiguration configuration) {
7373

7474
@Override
7575
public void buildPage() throws DocFileIOException {
76-
boolean hasSystemProperties = configuration.mainIndex != null
77-
&& !configuration.mainIndex.getItems(DocTree.Kind.SYSTEM_PROPERTY).isEmpty();
76+
boolean hasSystemProperties = configuration.indexBuilder != null
77+
&& !configuration.indexBuilder.getItems(DocTree.Kind.SYSTEM_PROPERTY).isEmpty();
7878
if (!hasSystemProperties) {
7979
return;
8080
}
@@ -95,8 +95,8 @@ public void buildPage() throws DocFileIOException {
9595
.setFooter(getFooter()));
9696
printHtmlDocument(null, "system properties", body);
9797

98-
if (configuration.mainIndex != null) {
99-
configuration.mainIndex.add(IndexItem.of(IndexItem.Category.TAGS, title, path));
98+
if (configuration.indexBuilder != null) {
99+
configuration.indexBuilder.add(IndexItem.of(IndexItem.Category.TAGS, title, path));
100100
}
101101
}
102102

@@ -127,7 +127,7 @@ protected void addSystemProperties(Content target) {
127127
}
128128

129129
private Map<String, List<IndexItem>> groupSystemProperties() {
130-
return configuration.mainIndex.getItems(DocTree.Kind.SYSTEM_PROPERTY).stream()
130+
return configuration.indexBuilder.getItems(DocTree.Kind.SYSTEM_PROPERTY).stream()
131131
.collect(groupingBy(IndexItem::getLabel, TreeMap::new, Collectors.toCollection(ArrayList::new)));
132132
}
133133

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,8 @@ public HtmlDocletWriter newClassUseWriter(TypeElement typeElement, ClassUseMappe
103103
/**
104104
* {@return a new writer for the list of "all classes"}
105105
*/
106-
public HtmlDocletWriter newAllClassesIndexWriter(IndexBuilder indexBuilder) {
107-
return new AllClassesIndexWriter(configuration, indexBuilder);
106+
public HtmlDocletWriter newAllClassesIndexWriter() {
107+
return new AllClassesIndexWriter(configuration);
108108
}
109109

110110
/**

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ Content createAnchorAndSearchIndex(Element element, String tagText, Content tagC
379379
String holder = getHolderName(element);
380380
IndexItem item = IndexItem.of(element, tree, tagText, holder, desc,
381381
new DocLink(htmlWriter.path, id.name()));
382-
configuration.mainIndex.add(item);
382+
configuration.indexBuilder.add(item);
383383
}
384384
}
385385
return result;

0 commit comments

Comments
 (0)