blob: 77f298fe907168ef8f4ebdf5f170bc97d85a02ca [file] [log] [blame]
/*
* Copyright (c) 2015, 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
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* 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.doclet;
import java.util.Set;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject.Kind;
import com.sun.source.util.DocTrees;
/**
* Represents the operating environment of a single invocation
* of the doclet. This object can be used to access the program
* structures, various utilities and the user specified elements
* on the command line.
*
* @since 9
*/
public interface DocletEnvironment {
/**
* Returns the elements <a href="package-summary.html#specified">specified</a>
* when the tool is invoked.
*
* @return the set of specified elements
*/
Set<? extends Element> getSpecifiedElements();
/**
* Returns the module, package and type elements that should be
* <a href="package-summary.html#included">included</a> in the
* documentation.
*
* @return the set of included elements
*/
Set<? extends Element> getIncludedElements();
/**
* Returns an instance of the {@code DocTrees} utility class.
* This class provides methods to access {@code TreePath}s, {@code DocCommentTree}s
* and so on.
*
* @return a utility class to operate on doc trees
*/
DocTrees getDocTrees();
/**
* Returns an instance of the {@code Elements} utility class.
* This class provides methods for operating on
* {@link javax.lang.model.element.Element elements}.
*
* @return a utility class to operate on elements
*/
Elements getElementUtils();
/**
* Returns an instance of the {@code Types} utility class.
* This class provides methods for operating on
* {@link javax.lang.model.type.TypeMirror type mirrors}.
*
* @return a utility class to operate on type mirrors
*/
Types getTypeUtils();
/**
* Returns true if an element should be
* <a href="package-summary.html#included">included</a> in the
* documentation.
*
* @param e the element
* @return true if included, false otherwise
*/
boolean isIncluded(Element e);
/**
* Returns true if the element is <a href="package-summary.html#selected">selected</a>.
*
* @param e the element
* @return true if selected, false otherwise
*/
boolean isSelected(Element e);
/**
* Returns the file manager used to read and write files.
*
* @return the file manager used to read and write files
*/
JavaFileManager getJavaFileManager();
/**
* Returns the source version of the source files that were read.
*
* @return the source version
*/
SourceVersion getSourceVersion();
/**
* Returns the required level of module documentation.
*
* @return the required level of module documentation
*/
ModuleMode getModuleMode();
/**
* Returns the file kind of a type element.
*
* @param type the type element
* @return the file kind
*/
Kind getFileKind(TypeElement type);
enum ModuleMode {
/** Indicate API level documentation is required */
API,
/** Indicate Detailed documentation is required */
ALL
}
}