Skip to content

Commit f9b593d

Browse files
committed
8266748: Move modifiers code to Signatures.java
Reviewed-by: jjg
1 parent 4dd0e7e commit f9b593d

File tree

5 files changed

+138
-143
lines changed

5 files changed

+138
-143
lines changed

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

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ public class ClassWriterImpl extends SubWriterHolderWriter implements ClassWrite
8585
"java.lang.constant.ConstantDesc",
8686
"java.io.Serializable");
8787

88-
private static final Set<String> previewModifiers = Collections.emptySet();
89-
9088
protected final TypeElement typeElement;
9189

9290
protected final ClassTree classtree;
@@ -197,28 +195,9 @@ protected TypeElement getCurrentPageElement() {
197195
}
198196

199197
@Override
200-
public void addClassSignature(String modifiers, Content classInfoTree) {
201-
ContentBuilder mods = new ContentBuilder();
202-
String sep = null;
203-
for (String modifiersPart : modifiers.split(" ")) {
204-
if (sep != null) {
205-
mods.add(sep);
206-
}
207-
if (previewModifiers.contains(modifiersPart)) {
208-
mods.add(modifiersPart);
209-
mods.add(HtmlTree.SUP(links.createLink(htmlIds.forPreviewSection(typeElement),
210-
contents.previewMark)));
211-
} else {
212-
mods.add(modifiersPart);
213-
}
214-
sep = " ";
215-
}
216-
if (modifiers.endsWith(" ")) {
217-
mods.add(" ");
218-
}
198+
public void addClassSignature(Content classInfoTree) {
219199
classInfoTree.add(new HtmlTree(TagName.HR));
220200
classInfoTree.add(new Signatures.TypeSignature(typeElement, this)
221-
.setModifiers(mods)
222201
.toContent());
223202
}
224203

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

Lines changed: 135 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,29 @@
3737
import jdk.javadoc.internal.doclets.toolkit.util.Utils;
3838

3939
import javax.lang.model.element.Element;
40+
import javax.lang.model.element.ElementKind;
4041
import javax.lang.model.element.Modifier;
4142
import javax.lang.model.element.ModuleElement;
4243
import javax.lang.model.element.PackageElement;
4344
import javax.lang.model.element.RecordComponentElement;
4445
import javax.lang.model.element.TypeElement;
4546
import javax.lang.model.type.TypeMirror;
47+
import javax.lang.model.util.ElementKindVisitor14;
48+
import java.util.ArrayList;
49+
import java.util.Collections;
4650
import java.util.List;
4751
import java.util.Set;
52+
import java.util.SortedSet;
4853
import java.util.TreeSet;
4954
import java.util.stream.Collectors;
5055

5156
import static javax.lang.model.element.Modifier.ABSTRACT;
57+
import static javax.lang.model.element.Modifier.FINAL;
5258
import static javax.lang.model.element.Modifier.NATIVE;
59+
import static javax.lang.model.element.Modifier.PRIVATE;
60+
import static javax.lang.model.element.Modifier.PROTECTED;
5361
import static javax.lang.model.element.Modifier.PUBLIC;
62+
import static javax.lang.model.element.Modifier.STATIC;
5463
import static javax.lang.model.element.Modifier.STRICTFP;
5564
import static javax.lang.model.element.Modifier.SYNCHRONIZED;
5665

@@ -92,17 +101,20 @@ public static Content getPackageSignature(PackageElement pkg, PackageWriterImpl
92101
static class TypeSignature {
93102

94103
private final TypeElement typeElement;
95-
private final ClassWriterImpl classWriter;
104+
private final HtmlDocletWriter writer;
96105
private final Utils utils;
97106
private final HtmlConfiguration configuration;
98107
private Content modifiers;
99108

100-
TypeSignature(TypeElement typeElement, ClassWriterImpl classWriter) {
101-
this.typeElement = typeElement;
102-
this.classWriter = classWriter;
103-
this.utils = classWriter.utils;
104-
this.configuration = classWriter.configuration;
105-
}
109+
private static final Set<String> previewModifiers = Collections.emptySet();
110+
111+
TypeSignature(TypeElement typeElement, HtmlDocletWriter writer) {
112+
this.typeElement = typeElement;
113+
this.writer = writer;
114+
this.utils = writer.utils;
115+
this.configuration = writer.configuration;
116+
this.modifiers = markPreviewModifiers(getModifiers());
117+
}
106118

107119
public TypeSignature setModifiers(Content modifiers) {
108120
this.modifiers = modifiers;
@@ -111,24 +123,24 @@ public TypeSignature setModifiers(Content modifiers) {
111123

112124
public Content toContent() {
113125
Content content = new ContentBuilder();
114-
Content annotationInfo = classWriter.getAnnotationInfo(typeElement, true);
126+
Content annotationInfo = writer.getAnnotationInfo(typeElement, true);
115127
if (!annotationInfo.isEmpty()) {
116128
content.add(HtmlTree.SPAN(HtmlStyle.annotations, annotationInfo));
117129
}
118130
content.add(HtmlTree.SPAN(HtmlStyle.modifiers, modifiers));
119131

120132
HtmlTree nameSpan = new HtmlTree(TagName.SPAN).setStyle(HtmlStyle.elementName);
121133
Content className = Text.of(utils.getSimpleName(typeElement));
122-
if (classWriter.options.linkSource()) {
123-
classWriter.addSrcLink(typeElement, className, nameSpan);
134+
if (configuration.getOptions().linkSource()) {
135+
writer.addSrcLink(typeElement, className, nameSpan);
124136
} else {
125137
nameSpan.addStyle(HtmlStyle.typeNameLabel).add(className);
126138
}
127139
HtmlLinkInfo linkInfo = new HtmlLinkInfo(configuration,
128140
HtmlLinkInfo.Kind.CLASS_SIGNATURE, typeElement);
129141
//Let's not link to ourselves in the signature.
130142
linkInfo.linkToSelf = false;
131-
nameSpan.add(classWriter.getTypeParameterLinks(linkInfo));
143+
nameSpan.add(writer.getTypeParameterLinks(linkInfo));
132144
content.add(nameSpan);
133145

134146
if (utils.isRecord(typeElement)) {
@@ -142,7 +154,7 @@ public Content toContent() {
142154
if (superclass != null) {
143155
content.add(DocletConstants.NL);
144156
extendsImplements.add("extends ");
145-
Content link = classWriter.getLink(new HtmlLinkInfo(configuration,
157+
Content link = writer.getLink(new HtmlLinkInfo(configuration,
146158
HtmlLinkInfo.Kind.CLASS_SIGNATURE_PARENT_NAME,
147159
superclass));
148160
extendsImplements.add(link);
@@ -163,7 +175,7 @@ public Content toContent() {
163175
} else {
164176
extendsImplements.add(", ");
165177
}
166-
Content link = classWriter.getLink(new HtmlLinkInfo(configuration,
178+
Content link = writer.getLink(new HtmlLinkInfo(configuration,
167179
HtmlLinkInfo.Kind.CLASS_SIGNATURE_PARENT_NAME,
168180
type));
169181
extendsImplements.add(link);
@@ -189,13 +201,13 @@ public Content toContent() {
189201
} else {
190202
permitsSpan.add(", ");
191203
}
192-
Content link = classWriter.getLink(new HtmlLinkInfo(configuration,
204+
Content link = writer.getLink(new HtmlLinkInfo(configuration,
193205
HtmlLinkInfo.Kind.PERMITTED_SUBCLASSES,
194206
type));
195207
permitsSpan.add(link);
196208
}
197209
if (linkablePermits.size() < permits.size()) {
198-
Content c = Text.of(classWriter.resources.getText("doclet.not.exhaustive"));
210+
Content c = Text.of(configuration.getDocResources().getText("doclet.not.exhaustive"));
199211
permitsSpan.add(" ");
200212
permitsSpan.add(HtmlTree.SPAN(HtmlStyle.permitsNote, c));
201213
}
@@ -210,9 +222,9 @@ private Content getRecordComponents() {
210222
String sep = "";
211223
for (RecordComponentElement e : typeElement.getRecordComponents()) {
212224
content.add(sep);
213-
classWriter.getAnnotations(e.getAnnotationMirrors(), false)
225+
writer.getAnnotations(e.getAnnotationMirrors(), false)
214226
.forEach(a -> { content.add(a).add(" "); });
215-
Content link = classWriter.getLink(new HtmlLinkInfo(configuration, HtmlLinkInfo.Kind.RECORD_COMPONENT,
227+
Content link = writer.getLink(new HtmlLinkInfo(configuration, HtmlLinkInfo.Kind.RECORD_COMPONENT,
216228
e.asType()));
217229
content.add(link);
218230
content.add(Entity.NO_BREAK_SPACE);
@@ -222,6 +234,112 @@ private Content getRecordComponents() {
222234
content.add(")");
223235
return content;
224236
}
237+
238+
private Content markPreviewModifiers(List<String> modifiers) {
239+
Content content = new ContentBuilder();
240+
String sep = null;
241+
for (String modifier : modifiers) {
242+
if (sep != null) {
243+
content.add(sep);
244+
}
245+
content.add(modifier);
246+
if (previewModifiers.contains(modifier)) {
247+
content.add(HtmlTree.SUP(writer.links.createLink(
248+
configuration.htmlIds.forPreviewSection(typeElement),
249+
configuration.contents.previewMark)));
250+
}
251+
sep = " ";
252+
}
253+
content.add(" ");
254+
return content;
255+
}
256+
257+
private List<String> getModifiers() {
258+
SortedSet<Modifier> modifiers = new TreeSet<>(typeElement.getModifiers());
259+
modifiers.remove(NATIVE);
260+
modifiers.remove(STRICTFP);
261+
modifiers.remove(SYNCHRONIZED);
262+
263+
return new ElementKindVisitor14<List<String>, SortedSet<Modifier>>() {
264+
final List<String> list = new ArrayList<>();
265+
266+
void addVisibilityModifier(Set<Modifier> modifiers) {
267+
if (modifiers.contains(PUBLIC)) {
268+
list.add("public");
269+
} else if (modifiers.contains(PROTECTED)) {
270+
list.add("protected");
271+
} else if (modifiers.contains(PRIVATE)) {
272+
list.add("private");
273+
}
274+
}
275+
276+
void addStatic(Set<Modifier> modifiers) {
277+
if (modifiers.contains(STATIC)) {
278+
list.add("static");
279+
}
280+
}
281+
282+
void addSealed(TypeElement e) {
283+
if (e.getModifiers().contains(Modifier.SEALED)) {
284+
list.add("sealed");
285+
} else if (e.getModifiers().contains(Modifier.NON_SEALED)) {
286+
list.add("non-sealed");
287+
}
288+
}
289+
290+
void addModifiers(Set<Modifier> modifiers) {
291+
modifiers.stream()
292+
.map(Modifier::toString)
293+
.forEachOrdered(list::add);
294+
}
295+
296+
@Override
297+
public List<String> visitTypeAsInterface(TypeElement e, SortedSet<Modifier> mods) {
298+
addVisibilityModifier(mods);
299+
addStatic(mods);
300+
addSealed(e);
301+
list.add("interface");
302+
return list;
303+
}
304+
305+
@Override
306+
public List<String> visitTypeAsEnum(TypeElement e, SortedSet<Modifier> mods) {
307+
addVisibilityModifier(mods);
308+
addStatic(mods);
309+
list.add("enum");
310+
return list;
311+
}
312+
313+
@Override
314+
public List<String> visitTypeAsAnnotationType(TypeElement e, SortedSet<Modifier> mods) {
315+
addVisibilityModifier(mods);
316+
addStatic(mods);
317+
list.add("@interface");
318+
return list;
319+
}
320+
321+
@Override
322+
public List<String> visitTypeAsRecord(TypeElement e, SortedSet<Modifier> mods) {
323+
mods.remove(FINAL); // suppress the implicit `final`
324+
return visitTypeAsClass(e, mods);
325+
}
326+
327+
@Override
328+
public List<String> visitTypeAsClass(TypeElement e, SortedSet<Modifier> mods) {
329+
addModifiers(mods);
330+
String keyword = e.getKind() == ElementKind.RECORD ? "record" : "class";
331+
list.add(keyword);
332+
return list;
333+
}
334+
335+
@Override
336+
protected List<String> defaultAction(Element e, SortedSet<Modifier> mods) {
337+
addModifiers(mods);
338+
return list;
339+
}
340+
341+
}.visit(typeElement, modifiers);
342+
}
225343
}
226344

227345
/**

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/ClassWriter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,10 +145,9 @@ public interface ClassWriter {
145145
/**
146146
* Add the signature of the current class content tree.
147147
*
148-
* @param modifiers the modifiers for the signature
149148
* @param classInfoTree the class content tree to which the signature will be added
150149
*/
151-
void addClassSignature(String modifiers, Content classInfoTree);
150+
void addClassSignature(Content classInfoTree);
152151

153152
/**
154153
* Build the class description.

src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/builders/ClassBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ private void copyDocFiles() throws DocletException {
295295
* @param classInfoTree the content tree to which the documentation will be added
296296
*/
297297
protected void buildClassSignature(Content classInfoTree) {
298-
writer.addClassSignature(utils.modifiersToString(typeElement, true), classInfoTree);
298+
writer.addClassSignature(classInfoTree);
299299
}
300300

301301
/**

0 commit comments

Comments
 (0)