src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/RootDocImpl.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 21,45 ****
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
! package com.sun.tools.javadoc;
! import java.io.IOException;
! import java.util.Collection;
! import java.util.Locale;
import javax.tools.JavaFileManager;
- import javax.tools.JavaFileObject;
- import javax.tools.StandardJavaFileManager;
! import com.sun.javadoc.*;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
! import com.sun.tools.javac.util.List;
! import com.sun.tools.javac.util.ListBuffer;
! import com.sun.tools.javac.util.Position;
/**
* This class holds the information from one run of javadoc.
* Particularly the packages, classes and options specified
* by the user.
--- 21,50 ----
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
! package jdk.javadoc.internal.tool;
! import java.util.Collections;
! import java.util.LinkedHashSet;
! import java.util.List;
! import java.util.Set;
! import java.util.stream.Collectors;
+ import javax.lang.model.SourceVersion;
+ import javax.lang.model.element.Element;
+ import javax.lang.model.element.PackageElement;
+ import javax.lang.model.element.TypeElement;
+ import javax.lang.model.util.Elements;
+ import javax.lang.model.util.Types;
import javax.tools.JavaFileManager;
! import com.sun.source.util.DocTrees;
! import com.sun.tools.javac.code.Source;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
! import jdk.javadoc.doclet.DocletEnvironment;
/**
* This class holds the information from one run of javadoc.
* Particularly the packages, classes and options specified
* by the user.
*** 52,113 ****
* @since 1.2
* @author Robert Field
* @author Atul M Dambalkar
* @author Neal Gafter (rewrite)
*/
! public class RootDocImpl extends DocImpl implements RootDoc {
/**
* list of classes specified on the command line.
*/
! private List<ClassDocImpl> cmdLineClasses;
/**
* list of packages specified on the command line.
*/
! private List<PackageDocImpl> cmdLinePackages;
! /**
! * a collection of all options.
! */
! private List<String[]> options;
/**
* Constructor used when reading source files.
*
* @param env the documentation environment, state for this javadoc run
* @param classes list of classes specified on the commandline
* @param packages list of package names specified on the commandline
- * @param options list of options
*/
! public RootDocImpl(DocEnv env, List<JCClassDecl> classes, List<String> packages, List<String[]> options) {
! super(env, null);
! this.options = options;
setPackages(env, packages);
setClasses(env, classes);
}
/**
* Constructor used when reading class files.
*
* @param env the documentation environment, state for this javadoc run
* @param classes list of class names specified on the commandline
- * @param options list of options
*/
! public RootDocImpl(DocEnv env, List<String> classes, List<String[]> options) {
! super(env, null);
! this.options = options;
! cmdLinePackages = List.nil();
! ListBuffer<ClassDocImpl> classList = new ListBuffer<>();
for (String className : classes) {
! ClassDocImpl c = env.loadClass(className);
if (c == null)
env.error(null, "javadoc.class_not_found", className);
else
! classList = classList.append(c);
}
! cmdLineClasses = classList.toList();
}
/**
* Initialize classes information. Those classes are input from
* command line.
--- 57,112 ----
* @since 1.2
* @author Robert Field
* @author Atul M Dambalkar
* @author Neal Gafter (rewrite)
*/
! public class RootDocImpl implements DocletEnvironment {
/**
* list of classes specified on the command line.
*/
! private Set<TypeElement> cmdLineClasses;
/**
* list of packages specified on the command line.
*/
! private Set<PackageElement> cmdLinePackages;
! public final DocEnv env;
/**
* Constructor used when reading source files.
*
* @param env the documentation environment, state for this javadoc run
* @param classes list of classes specified on the commandline
* @param packages list of package names specified on the commandline
*/
! public RootDocImpl(DocEnv env, List<JCClassDecl> classes, List<String> packages) {
! this.env = env;
setPackages(env, packages);
setClasses(env, classes);
}
/**
* Constructor used when reading class files.
*
* @param env the documentation environment, state for this javadoc run
* @param classes list of class names specified on the commandline
*/
! public RootDocImpl(DocEnv env, List<String> classes) {
! //super(env, null);
! this.env = env;
!
! Set<TypeElement> classList = new LinkedHashSet<>();
for (String className : classes) {
! TypeElement c = env.loadClass(className);
if (c == null)
env.error(null, "javadoc.class_not_found", className);
else
! classList.add(c);
}
! cmdLineClasses = classList;
}
/**
* Initialize classes information. Those classes are input from
* command line.
*** 114,239 ****
*
* @param env the compilation environment
* @param classes a list of ClassDeclaration
*/
private void setClasses(DocEnv env, List<JCClassDecl> classes) {
! ListBuffer<ClassDocImpl> result = new ListBuffer<>();
! for (JCClassDecl def : classes) {
! //### Do we want modifier check here?
! if (env.shouldDocument(def.sym)) {
! ClassDocImpl cd = env.getClassDoc(def.sym);
! if (cd != null) {
! cd.isIncluded = true;
! result.append(cd);
! } //else System.out.println(" (classdoc is null)");//DEBUG
! } //else System.out.println(" (env.shouldDocument() returned false)");//DEBUG
}
! cmdLineClasses = result.toList();
}
/**
* Initialize packages information.
*
* @param env the compilation environment
* @param packages a list of package names (String)
*/
private void setPackages(DocEnv env, List<String> packages) {
! ListBuffer<PackageDocImpl> packlist = new ListBuffer<>();
! for (String name : packages) {
! PackageDocImpl pkg = env.lookupPackage(name);
if (pkg != null) {
! pkg.isIncluded = true;
! packlist.append(pkg);
} else {
! env.warning(null, "main.no_source_files_for_package", name);
}
}
- cmdLinePackages = packlist.toList();
- }
/**
- * Command line options.
- *
- * <pre>
- * For example, given:
- * javadoc -foo this that -bar other ...
- *
- * This method will return:
- * options()[0][0] = "-foo"
- * options()[0][1] = "this"
- * options()[0][2] = "that"
- * options()[1][0] = "-bar"
- * options()[1][1] = "other"
- * </pre>
- *
- * @return an array of arrays of String.
- */
- public String[][] options() {
- return options.toArray(new String[options.length()][]);
- }
-
- /**
* Packages specified on the command line.
*/
! public PackageDoc[] specifiedPackages() {
! return (PackageDoc[])cmdLinePackages
! .toArray(new PackageDocImpl[cmdLinePackages.length()]);
}
/**
! * Classes and interfaces specified on the command line.
*/
! public ClassDoc[] specifiedClasses() {
! ListBuffer<ClassDocImpl> classesToDocument = new ListBuffer<>();
! for (ClassDocImpl cd : cmdLineClasses) {
! cd.addAllClasses(classesToDocument, true);
}
- return (ClassDoc[])classesToDocument.toArray(new ClassDocImpl[classesToDocument.length()]);
- }
/**
* Return all classes and interfaces (including those inside
* packages) to be documented.
*/
! public ClassDoc[] classes() {
! ListBuffer<ClassDocImpl> classesToDocument = new ListBuffer<>();
! for (ClassDocImpl cd : cmdLineClasses) {
! cd.addAllClasses(classesToDocument, true);
! }
! for (PackageDocImpl pd : cmdLinePackages) {
! pd.addAllClassesTo(classesToDocument);
! }
! return classesToDocument.toArray(new ClassDocImpl[classesToDocument.length()]);
! }
! /**
! * Return a ClassDoc for the specified class/interface name
! *
! * @param qualifiedName qualified class name
! * (i.e. includes package name).
! *
! * @return a ClassDocImpl holding the specified class, null if
! * this class is not referenced.
! */
! public ClassDoc classNamed(String qualifiedName) {
! return env.lookupClass(qualifiedName);
}
!
! /**
! * Return a PackageDoc for the specified package name
! *
! * @param name package name
! *
! * @return a PackageDoc holding the specified package, null if
! * this package is not referenced.
! */
! public PackageDoc packageNamed(String name) {
! return env.lookupPackage(name);
}
/**
! * Return the name of this Doc item.
*
* @return the string <code>"*RootDocImpl*"</code>.
*/
public String name() {
return "*RootDocImpl*";
--- 113,194 ----
*
* @param env the compilation environment
* @param classes a list of ClassDeclaration
*/
private void setClasses(DocEnv env, List<JCClassDecl> classes) {
! Set<TypeElement> result = new LinkedHashSet<>();
! classes.stream().filter((def) -> (env.shouldDocument(def.sym))).forEach((def) -> {
! TypeElement te = (TypeElement)def.sym;
! if (te != null) {
! env.setIncluded((Element)def.sym);
! result.add(te);
}
! });
! cmdLineClasses = Collections.unmodifiableSet(result);
}
/**
* Initialize packages information.
*
* @param env the compilation environment
* @param packages a list of package names (String)
*/
private void setPackages(DocEnv env, List<String> packages) {
! Set<PackageElement> packlist = new LinkedHashSet<>();
! packages.stream().forEach((name) -> {
! PackageElement pkg = getElementUtils().getPackageElement(name);
if (pkg != null) {
! env.setIncluded(pkg);
! packlist.add(pkg);
} else {
! env.warning("main.no_source_files_for_package", name);
}
+ });
+ cmdLinePackages = Collections.unmodifiableSet(packlist);
}
/**
* Packages specified on the command line.
*/
! public Set<PackageElement> specifiedPackages() {
! return cmdLinePackages;
}
/**
! * Classes and interfaces specified on the command line,
! * including their inner classes
*/
! public Set<TypeElement> specifiedClasses() {
! Set<TypeElement> out = new LinkedHashSet<>();
! cmdLineClasses.stream().forEach((te) -> {
! env.addAllClasses(out, te, true);
! });
! return out;
}
+ private Set<TypeElement> classesToDocument = null;
/**
* Return all classes and interfaces (including those inside
* packages) to be documented.
*/
! public Set<TypeElement> getIncludedClasses() {
! if (classesToDocument == null) {
! Set<TypeElement> classes = new LinkedHashSet<>();
! cmdLineClasses.stream().forEach((te) -> {
! env.addAllClasses(classes, te, true);
! });
! cmdLinePackages.stream().forEach((pkg) -> {
! env.addAllClasses(classes, pkg);
! });
! classesToDocument = Collections.unmodifiableSet(classes);
}
! return classesToDocument;
}
/**
! * Return the name of this item.
*
* @return the string <code>"*RootDocImpl*"</code>.
*/
public String name() {
return "*RootDocImpl*";
*** 247,394 ****
public String qualifiedName() {
return "*RootDocImpl*";
}
/**
! * Return true if this Doc is include in the active set.
* RootDocImpl isn't even a program entity so it is always false.
*/
! public boolean isIncluded() {
! return false;
}
! /**
! * Print error message, increment error count.
! *
! * @param msg message to print
! */
! public void printError(String msg) {
! env.printError(msg);
! }
/**
! * Print error message, increment error count.
! *
! * @param msg message to print
*/
! public void printError(SourcePosition pos, String msg) {
! env.printError(pos, msg);
}
! /**
! * Print warning message, increment warning count.
! *
! * @param msg message to print
! */
! public void printWarning(String msg) {
! env.printWarning(msg);
}
! /**
! * Print warning message, increment warning count.
! *
! * @param msg message to print
! */
! public void printWarning(SourcePosition pos, String msg) {
! env.printWarning(pos, msg);
}
! /**
! * Print a message.
! *
! * @param msg message to print
! */
! public void printNotice(String msg) {
! env.printNotice(msg);
}
- /**
- * Print a message.
- *
- * @param msg message to print
- */
- public void printNotice(SourcePosition pos, String msg) {
- env.printNotice(pos, msg);
- }
-
- /**
- * Return the path of the overview file and null if it does not exist.
- * @return the path of the overview file and null if it does not exist.
- */
- private JavaFileObject getOverviewPath() {
- for (String[] opt : options) {
- if (opt[0].equals("-overview")) {
- if (env.fileManager instanceof StandardJavaFileManager) {
- StandardJavaFileManager fm = (StandardJavaFileManager) env.fileManager;
- return fm.getJavaFileObjects(opt[1]).iterator().next();
- }
- }
- }
- return null;
- }
-
- /**
- * Do lazy initialization of "documentation" string.
- */
@Override
! protected String documentation() {
! if (documentation == null) {
! JavaFileObject overviewPath = getOverviewPath();
! if (overviewPath == null) {
! // no doc file to be had
! documentation = "";
! } else {
! // read from file
! try {
! documentation = readHTMLDocumentation(
! overviewPath.openInputStream(),
! overviewPath);
! } catch (IOException exc) {
! documentation = "";
! env.error(null, "javadoc.File_Read_Error", overviewPath.getName());
}
- }
- }
- return documentation;
- }
- /**
- * Return the source position of the entity, or null if
- * no position is available.
- */
@Override
! public SourcePosition position() {
! JavaFileObject path;
! return ((path = getOverviewPath()) == null) ?
! null :
! SourcePositionImpl.make(path, Position.NOPOS, null);
}
! /**
! * Return the locale provided by the user or the default locale value.
! */
! public Locale getLocale() {
! return env.doclocale.locale;
! }
!
! /**
! * Return the current file manager.
! */
! public JavaFileManager getFileManager() {
return env.fileManager;
}
! public void initDocLint(Collection<String> opts, Collection<String> customTagNames,
! String htmlVersion) {
! env.initDoclint(opts, customTagNames, htmlVersion);
}
-
- public boolean isFunctionalInterface(AnnotationDesc annotationDesc) {
- return env.source.allowLambda()
- && annotationDesc.annotationType().qualifiedName().equals(
- env.syms.functionalInterfaceType.toString());
- }
-
- public boolean showTagMessages() {
- return env.showTagMessages();
- }
}
--- 202,305 ----
public String qualifiedName() {
return "*RootDocImpl*";
}
/**
! * Return true if this Element is included in the active set.
* RootDocImpl isn't even a program entity so it is always false.
*/
! @Override
! public boolean isIncluded(Element e) {
! return env.isIncluded(e);
}
! // Note: these reporting methods are no longer used.
! // /**
! // * Print error message, increment error count.
! // *
! // * @param msg message to print
! // */
! // public void printError(String msg) {
! // env.printError(msg);
! // }
! //
! // /**
! // * Print error message, increment error count.
! // *
! // * @param msg message to print
! // */
! // public void printError(DocTreePath path, String msg) {
! // env.printError(path, msg);
! // }
! //
! // public void printError(Element e, String msg) {
! // env.printError(e, msg);
! // }
! //
! // public void printWarning(Element e, String msg) {
! // env.printWarning(e, msg);
! // }
! //
! // public void printNotice(Element e, String msg) {
! // env.printNotice(e, msg);
! // }
! //
! // /**
! // * Print warning message, increment warning count.
! // *
! // * @param msg message to print
! // */
! // public void printWarning(String msg) {
! // env.printWarning(msg);
! // }
/**
! * Return the current file manager.
*/
! public JavaFileManager getFileManager() {
! return env.fileManager;
}
! @Override
! public DocTrees getDocTrees() {
! return env.docTrees;
}
! @Override
! public Elements getElementUtils() {
! return env.elements;
}
! @Override
! public List<Element> getSelectedElements(List<? extends Element> elements) {
! return elements.stream()
! .filter(e -> isIncluded(e))
! .collect(Collectors.toList());
}
@Override
! public Set<Element> getSpecifiedElements() {
! Set<Element> out = new LinkedHashSet<>();
! specifiedPackages().stream().forEach((pe) -> {
! out.add(pe);
! });
! specifiedClasses().stream().forEach((e) -> {
! out.add(e);
! });
! return out;
}
@Override
! public Types getTypeUtils() {
! return env.typeutils;
}
! @Override
! public JavaFileManager getJavaFileManager() {
return env.fileManager;
}
! @Override
! public SourceVersion getSourceVersion() {
! return Source.toSourceVersion(env.source);
}
}