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); } }