Skip to content

Commit 7778047

Browse files
8253736: Cleanup some of WorkArounds and usage thereof
Reviewed-by: vromero, ksrini
1 parent 87d77eb commit 7778047

File tree

9 files changed

+268
-233
lines changed

9 files changed

+268
-233
lines changed

src/jdk.compiler/share/classes/com/sun/tools/doclint/DocLint.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@
3030
import com.sun.source.util.JavacTask;
3131
import com.sun.source.util.Plugin;
3232

33+
/**
34+
* The base class for the DocLint service used by javac.
35+
*
36+
* <p><b>This is NOT part of any supported API.
37+
* If you write code that depends on this, you do so at your own risk.
38+
* This code and its internal interfaces are subject to change or
39+
* deletion without notice.</b>
40+
*/
3341
public abstract class DocLint implements Plugin {
3442
public static final String XMSGS_OPTION = "-Xmsgs";
3543
public static final String XMSGS_CUSTOM_PREFIX = "-Xmsgs:";

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@
2525

2626
package jdk.javadoc.internal.doclets.formats.html;
2727

28-
import java.util.*;
28+
import java.util.ArrayList;
29+
import java.util.Date;
30+
import java.util.HashMap;
31+
import java.util.List;
32+
import java.util.Locale;
33+
import java.util.Map;
2934
import java.util.stream.Collectors;
30-
3135
import javax.lang.model.element.Element;
3236
import javax.lang.model.element.PackageElement;
3337
import javax.lang.model.element.TypeElement;
@@ -36,7 +40,6 @@
3640
import javax.tools.StandardJavaFileManager;
3741

3842
import com.sun.source.util.DocTreePath;
39-
4043
import jdk.javadoc.doclet.Doclet;
4144
import jdk.javadoc.doclet.DocletEnvironment;
4245
import jdk.javadoc.doclet.Reporter;
@@ -201,7 +204,7 @@ public boolean finishOptionSettings() {
201204
docPaths = new DocPaths(utils);
202205
setCreateOverview();
203206
setTopFile(docEnv);
204-
workArounds.initDocLint(options.doclintOpts(), tagletManager.getAllTagletNames());
207+
initDocLint(options.doclintOpts(), tagletManager.getAllTagletNames());
205208
return true;
206209
}
207210

@@ -321,12 +324,12 @@ public JavaFileManager getFileManager() {
321324

322325
@Override
323326
public boolean showMessage(DocTreePath path, String key) {
324-
return (path == null || workArounds.haveDocLint());
327+
return (path == null || !haveDocLint());
325328
}
326329

327330
@Override
328331
public boolean showMessage(Element e, String key) {
329-
return (e == null || workArounds.haveDocLint());
332+
return (e == null || !haveDocLint());
330333
}
331334

332335
@Override

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

Lines changed: 119 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,43 @@
2525

2626
package jdk.javadoc.internal.doclets.toolkit;
2727

28-
import java.io.*;
29-
import java.util.*;
3028

29+
import java.io.IOException;
30+
import java.io.InputStream;
31+
import java.util.ArrayList;
32+
import java.util.Collections;
33+
import java.util.HashMap;
34+
import java.util.HashSet;
35+
import java.util.LinkedHashSet;
36+
import java.util.List;
37+
import java.util.Locale;
38+
import java.util.Map;
39+
import java.util.Set;
40+
import java.util.SortedMap;
41+
import java.util.SortedSet;
42+
import java.util.TreeMap;
43+
import java.util.TreeSet;
44+
45+
import javax.lang.model.SourceVersion;
3146
import javax.lang.model.element.Element;
3247
import javax.lang.model.element.ModuleElement;
3348
import javax.lang.model.element.PackageElement;
3449
import javax.lang.model.element.TypeElement;
50+
import javax.lang.model.util.Elements;
3551
import javax.lang.model.util.SimpleElementVisitor14;
3652
import javax.tools.JavaFileManager;
3753
import javax.tools.JavaFileObject;
3854

55+
import com.sun.source.tree.CompilationUnitTree;
3956
import com.sun.source.util.DocTreePath;
57+
import com.sun.source.util.TreePath;
4058
import com.sun.tools.javac.util.DefinedBy;
4159
import com.sun.tools.javac.util.DefinedBy.Api;
4260
import jdk.javadoc.doclet.Doclet;
4361
import jdk.javadoc.doclet.DocletEnvironment;
4462
import jdk.javadoc.doclet.Reporter;
4563
import jdk.javadoc.doclet.StandardDoclet;
4664
import jdk.javadoc.doclet.Taglet;
47-
import jdk.javadoc.internal.doclets.formats.html.HtmlDoclet;
4865
import jdk.javadoc.internal.doclets.toolkit.builders.BuilderFactory;
4966
import jdk.javadoc.internal.doclets.toolkit.taglets.TagletManager;
5067
import jdk.javadoc.internal.doclets.toolkit.util.Comparators;
@@ -60,6 +77,7 @@
6077
import jdk.javadoc.internal.doclets.toolkit.util.Utils.Pair;
6178
import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberCache;
6279
import jdk.javadoc.internal.doclets.toolkit.util.VisibleMemberTable;
80+
import jdk.javadoc.internal.doclint.DocLint;
6381

6482
/**
6583
* Configure the output based on the options. Doclets should sub-class
@@ -201,7 +219,7 @@ public abstract class BaseConfiguration {
201219
* @apiNote The {@code doclet} parameter is used when
202220
* {@link Taglet#init(DocletEnvironment, Doclet) initializing tags}.
203221
* Some doclets (such as the {@link StandardDoclet}), may delegate to another
204-
* (such as the {@link HtmlDoclet}). In such cases, the primary doclet (i.e
222+
* (such as the {@code HtmlDoclet}). In such cases, the primary doclet (i.e
205223
* {@code StandardDoclet}) should be provided here, and not any internal
206224
* class like {@code HtmlDoclet}.
207225
*
@@ -367,7 +385,16 @@ protected boolean finishOptionSettings0() throws DocletException {
367385
group.checkPackageGroups(grp.first, grp.second);
368386
}
369387
});
370-
overviewElement = new OverviewElement(workArounds.getUnnamedPackage(), getOverviewPath());
388+
389+
PackageElement unnamedPackage;
390+
Elements elementUtils = utils.elementUtils;
391+
if (docEnv.getSourceVersion().compareTo(SourceVersion.RELEASE_9) >= 0) {
392+
ModuleElement unnamedModule = elementUtils.getModuleElement("");
393+
unnamedPackage = elementUtils.getPackageElement(unnamedModule, "");
394+
} else {
395+
unnamedPackage = elementUtils.getPackageElement("");
396+
}
397+
overviewElement = new OverviewElement(unnamedPackage, getOverviewPath());
371398
return true;
372399
}
373400

@@ -690,4 +717,91 @@ public boolean isJavaFXMode() {
690717
|| javafxModule.isUnnamed()
691718
|| javafxModule.getQualifiedName().contentEquals("javafx.base");
692719
}
720+
721+
722+
//<editor-fold desc="DocLint support">
723+
724+
private DocLint doclint;
725+
726+
Map<CompilationUnitTree, Boolean> shouldCheck = new HashMap<>();
727+
728+
public void runDocLint(TreePath path) {
729+
CompilationUnitTree unit = path.getCompilationUnit();
730+
if (doclint != null && shouldCheck.computeIfAbsent(unit, doclint::shouldCheck)) {
731+
doclint.scan(path);
732+
}
733+
}
734+
735+
/**
736+
* Initializes DocLint, if appropriate, depending on options derived
737+
* from the doclet command-line options, and the set of custom tags
738+
* that should be ignored by DocLint.
739+
*
740+
* DocLint is not enabled if the option {@code -Xmsgs:none} is given,
741+
* and it is not followed by any options to enable any groups.
742+
* Note that arguments for {@code -Xmsgs:} can be given individually
743+
* in separate {@code -Xmsgs:} options, or in a comma-separated list
744+
* for a single option. For example, the following are equivalent:
745+
* <ul>
746+
* <li>{@code -Xmsgs:all} {@code -Xmsgs:-html}
747+
* <li>{@code -Xmsgs:all,-html}
748+
* </ul>
749+
*
750+
* @param opts options for DocLint, derived from the corresponding doclet
751+
* command-line options
752+
* @param customTagNames the names of custom tags, to be ignored by doclint
753+
*/
754+
public void initDocLint(List<String> opts, Set<String> customTagNames) {
755+
List<String> doclintOpts = new ArrayList<>();
756+
757+
// basic analysis of -Xmsgs and -Xmsgs: options to see if doclint is enabled
758+
Set<String> groups = new HashSet<>();
759+
boolean seenXmsgs = false;
760+
for (String opt : opts) {
761+
if (opt.equals(DocLint.XMSGS_OPTION)) {
762+
groups.add("all");
763+
seenXmsgs = true;
764+
} else if (opt.startsWith(DocLint.XMSGS_CUSTOM_PREFIX)) {
765+
String[] args = opt.substring(DocLint.XMSGS_CUSTOM_PREFIX.length())
766+
.split(DocLint.SEPARATOR);
767+
for (String a : args) {
768+
if (a.equals("none")) {
769+
groups.clear();
770+
} else if (a.startsWith("-")) {
771+
groups.remove(a.substring(1));
772+
} else {
773+
groups.add(a);
774+
}
775+
}
776+
seenXmsgs = true;
777+
}
778+
doclintOpts.add(opt);
779+
}
780+
781+
if (seenXmsgs) {
782+
if (groups.isEmpty()) {
783+
// no groups enabled; do not init doclint
784+
return;
785+
}
786+
} else {
787+
// no -Xmsgs options of any kind, use default
788+
doclintOpts.add(DocLint.XMSGS_OPTION);
789+
}
790+
791+
if (!customTagNames.isEmpty()) {
792+
String customTags = String.join(DocLint.SEPARATOR, customTagNames);
793+
doclintOpts.add(DocLint.XCUSTOM_TAGS_PREFIX + customTags);
794+
}
795+
796+
doclintOpts.add(DocLint.XHTML_VERSION_PREFIX + "html5");
797+
798+
doclint = new DocLint();
799+
doclint.init(docEnv.getDocTrees(), docEnv.getElementUtils(), docEnv.getTypeUtils(),
800+
doclintOpts.toArray(new String[0]));
801+
}
802+
803+
public boolean haveDocLint() {
804+
return (doclint != null);
805+
}
806+
//</editor-fold>
693807
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,8 @@ public DocCommentInfo getHtmlCommentInfo(Element e) {
427427
}
428428
break;
429429
case PACKAGE:
430-
fo = configuration.workArounds.getJavaFileObject((PackageElement)e);
431-
pe = (PackageElement)e;
430+
pe = (PackageElement) e;
431+
fo = configuration.workArounds.getJavaFileObject(pe);
432432
break;
433433
default:
434434
return null;

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ public void warning(String key, Object... args) {
116116
* @param args optional arguments to be replaced in the message.
117117
*/
118118
public void warning(DocTreePath path, String key, Object... args) {
119-
if (configuration.showMessage(path, key))
119+
if (configuration.showMessage(path, key)) {
120120
report(WARNING, path, resources.getText(key, args));
121+
}
121122
}
122123

123124
/**

0 commit comments

Comments
 (0)