mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-16 02:43:20 +00:00
8215584: Remove support for the "old" doclet API in com/sun/javadoc
Reviewed-by: jjg, hannesw
This commit is contained in:
parent
d06f3e7e28
commit
151e628a8e
@ -1,59 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an annotated type.
|
||||
* For example:
|
||||
* <pre>
|
||||
* {@code @NonNull String}
|
||||
* {@code @Positive int}
|
||||
* </pre>
|
||||
*
|
||||
* @author Mahmood Ali
|
||||
* @since 1.8
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface AnnotatedType extends Type {
|
||||
|
||||
/**
|
||||
* Returns the annotations associated with this type.
|
||||
* @return the annotations associated with this type
|
||||
*/
|
||||
AnnotationDesc[] annotations();
|
||||
|
||||
/**
|
||||
* Returns the underlying type.
|
||||
* @return the underlying type
|
||||
*/
|
||||
Type underlyingType();
|
||||
}
|
||||
@ -1,98 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an annotation.
|
||||
* An annotation associates a value with each element of an annotation type.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface AnnotationDesc {
|
||||
|
||||
/**
|
||||
* Returns the annotation type of this annotation.
|
||||
*
|
||||
* @return the annotation type of this annotation.
|
||||
*/
|
||||
AnnotationTypeDoc annotationType();
|
||||
|
||||
/**
|
||||
* Returns this annotation's elements and their values.
|
||||
* Only those explicitly present in the annotation are
|
||||
* included, not those assuming their default values.
|
||||
* Returns an empty array if there are none.
|
||||
*
|
||||
* @return this annotation's elements and their values.
|
||||
*/
|
||||
ElementValuePair[] elementValues();
|
||||
|
||||
/**
|
||||
* Check for the synthesized bit on the annotation.
|
||||
*
|
||||
* @return true if the annotation is synthesized.
|
||||
*/
|
||||
boolean isSynthesized();
|
||||
|
||||
/**
|
||||
* Represents an association between an annotation type element
|
||||
* and one of its values.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
public interface ElementValuePair {
|
||||
|
||||
/**
|
||||
* Returns the annotation type element.
|
||||
*
|
||||
* @return the annotation type element.
|
||||
*/
|
||||
AnnotationTypeElementDoc element();
|
||||
|
||||
/**
|
||||
* Returns the value associated with the annotation type element.
|
||||
*
|
||||
* @return the value associated with the annotation type element.
|
||||
*/
|
||||
AnnotationValue value();
|
||||
}
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an annotation type.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface AnnotationTypeDoc extends ClassDoc {
|
||||
|
||||
/**
|
||||
* Returns the elements of this annotation type.
|
||||
* Returns an empty array if there are none.
|
||||
*
|
||||
* @return the elements of this annotation type.
|
||||
*/
|
||||
AnnotationTypeElementDoc[] elements();
|
||||
}
|
||||
@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an element of an annotation type.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface AnnotationTypeElementDoc extends MethodDoc {
|
||||
|
||||
/**
|
||||
* Returns the default value of this element.
|
||||
* Returns null if this element has no default.
|
||||
*
|
||||
* @return the default value of this element.
|
||||
*/
|
||||
AnnotationValue defaultValue();
|
||||
}
|
||||
@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a value of an annotation type element.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface AnnotationValue {
|
||||
|
||||
/**
|
||||
* Returns the value.
|
||||
* The type of the returned object is one of the following:
|
||||
* <ul><li> a wrapper class for a primitive type
|
||||
* <li> {@code String}
|
||||
* <li> {@code Type} (representing a class literal)
|
||||
* <li> {@code FieldDoc} (representing an enum constant)
|
||||
* <li> {@code AnnotationDesc}
|
||||
* <li> {@code AnnotationValue[]}
|
||||
* </ul>
|
||||
*
|
||||
* @return the value.
|
||||
*/
|
||||
Object value();
|
||||
|
||||
/**
|
||||
* Returns a string representation of the value.
|
||||
*
|
||||
* @return the text of a Java language annotation value expression
|
||||
* whose value is the value of this element.
|
||||
*/
|
||||
String toString();
|
||||
}
|
||||
@ -1,362 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a java class or interface and provides access to
|
||||
* information about the class, the class's comment and tags, and the
|
||||
* members of the class. A ClassDoc only exists if it was
|
||||
* processed in this run of javadoc. References to classes
|
||||
* which may or may not have been processed in this run are
|
||||
* referred to using Type (which can be converted to ClassDoc,
|
||||
* if possible).
|
||||
*
|
||||
* @see Type
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ClassDoc extends ProgramElementDoc, Type {
|
||||
|
||||
/**
|
||||
* Return true if this class is abstract. Return true
|
||||
* for all interfaces.
|
||||
*
|
||||
* @return true if this class is abstract. Return true
|
||||
* for all interfaces.
|
||||
*/
|
||||
boolean isAbstract();
|
||||
|
||||
/**
|
||||
* Return true if this class implements or interface extends
|
||||
* {@code java.io.Serializable}.
|
||||
*
|
||||
* Since {@code java.io.Externalizable} extends
|
||||
* {@code java.io.Serializable},
|
||||
* Externalizable objects are also Serializable.
|
||||
*
|
||||
* @return true if this class implements or interface extends
|
||||
* {@code java.io.Serializable}.
|
||||
*/
|
||||
boolean isSerializable();
|
||||
|
||||
/**
|
||||
* Return true if this class implements or interface extends
|
||||
* {@code java.io.Externalizable}.
|
||||
*
|
||||
* @return true if this class implements or interface extends
|
||||
* {@code java.io.Externalizable}.
|
||||
*/
|
||||
boolean isExternalizable();
|
||||
|
||||
/**
|
||||
* Return the serialization methods for this class or
|
||||
* interface.
|
||||
*
|
||||
* @return an array of MethodDoc objects that represents
|
||||
* the serialization methods for this class or interface.
|
||||
*/
|
||||
MethodDoc[] serializationMethods();
|
||||
|
||||
/**
|
||||
* Return the Serializable fields of this class or interface.
|
||||
* <p>
|
||||
* Return either a list of default fields documented by
|
||||
* {@code serial} tag<br>
|
||||
* or return a single {@code FieldDoc} for
|
||||
* {@code serialPersistentField} member.
|
||||
* There should be a {@code serialField} tag for
|
||||
* each Serializable field defined by an {@code ObjectStreamField}
|
||||
* array component of {@code serialPersistentField}.
|
||||
*
|
||||
* @return an array of {@code FieldDoc} objects for the Serializable
|
||||
* fields of this class or interface.
|
||||
*
|
||||
* @see #definesSerializableFields()
|
||||
* @see SerialFieldTag
|
||||
*/
|
||||
FieldDoc[] serializableFields();
|
||||
|
||||
/**
|
||||
* Return true if Serializable fields are explicitly defined with
|
||||
* the special class member {@code serialPersistentFields}.
|
||||
*
|
||||
* @return true if Serializable fields are explicitly defined with
|
||||
* the special class member {@code serialPersistentFields}.
|
||||
*
|
||||
* @see #serializableFields()
|
||||
* @see SerialFieldTag
|
||||
*/
|
||||
boolean definesSerializableFields();
|
||||
|
||||
/**
|
||||
* Return the superclass of this class. Return null if this is an
|
||||
* interface.
|
||||
*
|
||||
* <p> <i>This method cannot accommodate certain generic type constructs.
|
||||
* The {@code superclassType} method should be used instead.</i>
|
||||
*
|
||||
* @return the ClassDoc for the superclass of this class, null if
|
||||
* there is no superclass.
|
||||
* @see #superclassType
|
||||
*/
|
||||
ClassDoc superclass();
|
||||
|
||||
/**
|
||||
* Return the superclass of this class. Return null if this is an
|
||||
* interface. A superclass is represented by either a
|
||||
* {@code ClassDoc} or a {@code ParametrizedType}.
|
||||
*
|
||||
* @return the superclass of this class, or null if there is no superclass.
|
||||
* @since 1.5
|
||||
*/
|
||||
Type superclassType();
|
||||
|
||||
/**
|
||||
* Test whether this class is a subclass of the specified class.
|
||||
* If this is an interface, return false for all classes except
|
||||
* {@code java.lang.Object} (we must keep this unexpected
|
||||
* behavior for compatibility reasons).
|
||||
*
|
||||
* @param cd the candidate superclass.
|
||||
* @return true if cd is a superclass of this class.
|
||||
*/
|
||||
boolean subclassOf(ClassDoc cd);
|
||||
|
||||
/**
|
||||
* Return interfaces implemented by this class or interfaces extended
|
||||
* by this interface. Includes only directly-declared interfaces, not
|
||||
* inherited interfaces.
|
||||
* Return an empty array if there are no interfaces.
|
||||
*
|
||||
* <p> <i>This method cannot accommodate certain generic type constructs.
|
||||
* The {@code interfaceTypes} method should be used instead.</i>
|
||||
*
|
||||
* @return an array of ClassDoc objects representing the interfaces.
|
||||
* @see #interfaceTypes
|
||||
*/
|
||||
ClassDoc[] interfaces();
|
||||
|
||||
/**
|
||||
* Return interfaces implemented by this class or interfaces extended
|
||||
* by this interface. Includes only directly-declared interfaces, not
|
||||
* inherited interfaces.
|
||||
* Return an empty array if there are no interfaces.
|
||||
*
|
||||
* @return an array of interfaces, each represented by a
|
||||
* {@code ClassDoc} or a {@code ParametrizedType}.
|
||||
* @since 1.5
|
||||
*/
|
||||
Type[] interfaceTypes();
|
||||
|
||||
/**
|
||||
* Return the formal type parameters of this class or interface.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the formal type parameters of this class or interface.
|
||||
* @since 1.5
|
||||
*/
|
||||
TypeVariable[] typeParameters();
|
||||
|
||||
/**
|
||||
* Return the type parameter tags of this class or interface.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the type parameter tags of this class or interface.
|
||||
* @since 1.5
|
||||
*/
|
||||
ParamTag[] typeParamTags();
|
||||
|
||||
/**
|
||||
* Return
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* fields in this class or interface.
|
||||
* Excludes enum constants if this is an enum type.
|
||||
*
|
||||
* @return an array of FieldDoc objects representing the included
|
||||
* fields in this class or interface.
|
||||
*/
|
||||
FieldDoc[] fields();
|
||||
|
||||
/**
|
||||
* Return fields in this class or interface, filtered to the specified
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
|
||||
* modifier option</a>.
|
||||
* Excludes enum constants if this is an enum type.
|
||||
*
|
||||
* @param filter Specify true to filter according to the specified access
|
||||
* modifier option.
|
||||
* Specify false to include all fields regardless of
|
||||
* access modifier option.
|
||||
* @return an array of FieldDoc objects representing the included
|
||||
* fields in this class or interface.
|
||||
*/
|
||||
FieldDoc[] fields(boolean filter);
|
||||
|
||||
/**
|
||||
* Return the enum constants if this is an enum type.
|
||||
* Return an empty array if there are no enum constants, or if
|
||||
* this is not an enum type.
|
||||
*
|
||||
* @return the enum constants if this is an enum type.
|
||||
*/
|
||||
FieldDoc[] enumConstants();
|
||||
|
||||
/**
|
||||
* Return
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* methods in this class or interface.
|
||||
* Same as {@code methods(true)}.
|
||||
*
|
||||
* @return an array of MethodDoc objects representing the included
|
||||
* methods in this class or interface. Does not include
|
||||
* constructors or annotation type elements.
|
||||
*/
|
||||
MethodDoc[] methods();
|
||||
|
||||
/**
|
||||
* Return methods in this class or interface, filtered to the specified
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
|
||||
* modifier option</a>. Does not include constructors or annotation
|
||||
* type elements.
|
||||
*
|
||||
* @param filter Specify true to filter according to the specified access
|
||||
* modifier option.
|
||||
* Specify false to include all methods regardless of
|
||||
* access modifier option.
|
||||
*
|
||||
* @return an array of MethodDoc objects representing the included
|
||||
* methods in this class or interface.
|
||||
*/
|
||||
MethodDoc[] methods(boolean filter);
|
||||
|
||||
/**
|
||||
* Return
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* constructors in this class. An array containing the default
|
||||
* no-arg constructor is returned if no other constructors exist.
|
||||
* Return empty array if this is an interface.
|
||||
*
|
||||
* @return an array of ConstructorDoc objects representing the included
|
||||
* constructors in this class.
|
||||
*/
|
||||
ConstructorDoc[] constructors();
|
||||
|
||||
/**
|
||||
* Return constructors in this class, filtered to the specified
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
|
||||
* modifier option</a>. Return an array containing the default
|
||||
* no-arg constructor if no other constructors exist.
|
||||
*
|
||||
* @param filter Specify true to filter according to the specified access
|
||||
* modifier option.
|
||||
* Specify false to include all constructors regardless of
|
||||
* access modifier option.
|
||||
* @return an array of ConstructorDoc objects representing the included
|
||||
* constructors in this class.
|
||||
*/
|
||||
ConstructorDoc[] constructors(boolean filter);
|
||||
|
||||
|
||||
/**
|
||||
* Return
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* nested classes and interfaces within this class or interface.
|
||||
* This includes both static and non-static nested classes.
|
||||
* (This method should have been named {@code nestedClasses()},
|
||||
* as inner classes are technically non-static.) Anonymous and local classes
|
||||
* or interfaces are not included.
|
||||
*
|
||||
* @return an array of ClassDoc objects representing the included classes
|
||||
* and interfaces defined in this class or interface.
|
||||
*/
|
||||
ClassDoc[] innerClasses();
|
||||
|
||||
/**
|
||||
* Return nested classes and interfaces within this class or interface
|
||||
* filtered to the specified
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
|
||||
* modifier option</a>.
|
||||
* This includes both static and non-static nested classes.
|
||||
* Anonymous and local classes are not included.
|
||||
*
|
||||
* @param filter Specify true to filter according to the specified access
|
||||
* modifier option.
|
||||
* Specify false to include all nested classes regardless of
|
||||
* access modifier option.
|
||||
* @return a filtered array of ClassDoc objects representing the included
|
||||
* classes and interfaces defined in this class or interface.
|
||||
*/
|
||||
ClassDoc[] innerClasses(boolean filter);
|
||||
|
||||
/**
|
||||
* Find the specified class or interface within the context of this class doc.
|
||||
* Search order: 1) qualified name, 2) nested in this class or interface,
|
||||
* 3) in this package, 4) in the class imports, 5) in the package imports.
|
||||
* Return the ClassDoc if found, null if not found.
|
||||
* @param className Specify the class name to find as a String.
|
||||
* @return the ClassDoc if found, null if not found.
|
||||
*/
|
||||
ClassDoc findClass(String className);
|
||||
|
||||
/**
|
||||
* Get the list of classes and interfaces declared as imported.
|
||||
* These are called "single-type-import declarations" in
|
||||
* <cite>The Java™ Language Specification</cite>.
|
||||
*
|
||||
* @return an array of ClassDoc representing the imported classes.
|
||||
*
|
||||
* @deprecated Import declarations are implementation details that
|
||||
* should not be exposed here. In addition, not all imported
|
||||
* classes are imported through single-type-import declarations.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
ClassDoc[] importedClasses();
|
||||
|
||||
/**
|
||||
* Get the list of packages declared as imported.
|
||||
* These are called "type-import-on-demand declarations" in
|
||||
* <cite>The Java™ Language Specification</cite>.
|
||||
*
|
||||
* @return an array of PackageDoc representing the imported packages.
|
||||
*
|
||||
* @deprecated Import declarations are implementation details that
|
||||
* should not be exposed here. In addition, this method's
|
||||
* return type does not allow for all type-import-on-demand
|
||||
* declarations to be returned.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
PackageDoc[] importedPackages();
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a constructor of a java class.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ConstructorDoc extends ExecutableMemberDoc {
|
||||
}
|
||||
@ -1,286 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
import java.text.BreakIterator;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Represents Java language constructs (package, class, constructor,
|
||||
* method, field) which have comments and have been processed by this
|
||||
* run of javadoc. All Doc objects are unique, that is, they
|
||||
* are == comparable.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Scott Seligman (generics, enums, annotations)
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface Doc extends Comparable<Object> {
|
||||
|
||||
/**
|
||||
* Return the text of the comment for this doc item.
|
||||
* Tags have been removed.
|
||||
*
|
||||
* @return the text of the comment for this doc item.
|
||||
*/
|
||||
String commentText();
|
||||
|
||||
/**
|
||||
* Return all tags in this Doc item.
|
||||
*
|
||||
* @return an array of {@link Tag} objects containing all tags on
|
||||
* this Doc item.
|
||||
*/
|
||||
Tag[] tags();
|
||||
|
||||
/**
|
||||
* Return tags of the specified {@linkplain Tag#kind() kind} in
|
||||
* this Doc item.
|
||||
*
|
||||
* For example, if 'tagname' has value "@serial", all tags in
|
||||
* this Doc item of kind "@serial" will be returned.
|
||||
*
|
||||
* @param tagname name of the tag kind to search for.
|
||||
* @return an array of Tag containing all tags whose 'kind()'
|
||||
* matches 'tagname'.
|
||||
*/
|
||||
Tag[] tags(String tagname);
|
||||
|
||||
/**
|
||||
* Return the see also tags in this Doc item.
|
||||
*
|
||||
* @return an array of SeeTag containing all @see tags.
|
||||
*/
|
||||
SeeTag[] seeTags();
|
||||
|
||||
/**
|
||||
* Return comment as an array of tags. Includes inline tags
|
||||
* (i.e. {@link <i>reference</i>} tags) but not
|
||||
* block tags.
|
||||
* Each section of plain text is represented as a {@link Tag}
|
||||
* of {@linkplain Tag#kind() kind} "Text".
|
||||
* Inline tags are represented as a {@link SeeTag} of kind "@see"
|
||||
* and name "@link".
|
||||
*
|
||||
* @return an array of {@link Tag}s representing the comment
|
||||
*/
|
||||
Tag[] inlineTags();
|
||||
|
||||
/**
|
||||
* Return the first sentence of the comment as an array of tags.
|
||||
* Includes inline tags
|
||||
* (i.e. {@link <i>reference</i>} tags) but not
|
||||
* block tags.
|
||||
* Each section of plain text is represented as a {@link Tag}
|
||||
* of {@linkplain Tag#kind() kind} "Text".
|
||||
* Inline tags are represented as a {@link SeeTag} of kind "@see"
|
||||
* and name "@link".
|
||||
* <p>
|
||||
* If the locale is English language, the first sentence is
|
||||
* determined by the rules described in the Java Language
|
||||
* Specification (first version): "This sentence ends
|
||||
* at the first period that is followed by a blank, tab, or
|
||||
* line terminator or at the first tagline.", in
|
||||
* addition a line will be terminated by block
|
||||
* HTML tags: <p> </p> <h1>
|
||||
* <h2> <h3> <h4> <h5> <h6>
|
||||
* <hr> <pre> or </pre>.
|
||||
* If the locale is not English, the sentence end will be
|
||||
* determined by
|
||||
* {@link BreakIterator#getSentenceInstance(Locale)}.
|
||||
|
||||
* @return an array of {@link Tag}s representing the
|
||||
* first sentence of the comment
|
||||
*/
|
||||
Tag[] firstSentenceTags();
|
||||
|
||||
/**
|
||||
* Return the full unprocessed text of the comment. Tags
|
||||
* are included as text. Used mainly for store and retrieve
|
||||
* operations like internalization.
|
||||
*
|
||||
* @return the full unprocessed text of the comment.
|
||||
*/
|
||||
String getRawCommentText();
|
||||
|
||||
/**
|
||||
* Set the full unprocessed text of the comment. Tags
|
||||
* are included as text. Used mainly for store and retrieve
|
||||
* operations like internalization.
|
||||
*
|
||||
* @param rawDocumentation A String containing the full unprocessed text of the comment.
|
||||
*/
|
||||
void setRawCommentText(String rawDocumentation);
|
||||
|
||||
/**
|
||||
* Returns the non-qualified name of this Doc item.
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Compares this doc object with the specified object for order. Returns a
|
||||
* negative integer, zero, or a positive integer as this doc object is less
|
||||
* than, equal to, or greater than the given object.
|
||||
* <p>
|
||||
* This method satisfies the {@link java.lang.Comparable} interface.
|
||||
*
|
||||
* @param obj the {@code Object} to be compared.
|
||||
* @return a negative integer, zero, or a positive integer as this Object
|
||||
* is less than, equal to, or greater than the given Object.
|
||||
* @exception ClassCastException the specified Object's type prevents it
|
||||
* from being compared to this Object.
|
||||
*/
|
||||
int compareTo(Object obj);
|
||||
|
||||
/**
|
||||
* Is this Doc item a field (but not an enum constant)?
|
||||
*
|
||||
* @return true if it represents a field
|
||||
*/
|
||||
boolean isField();
|
||||
|
||||
/**
|
||||
* Is this Doc item an enum constant?
|
||||
*
|
||||
* @return true if it represents an enum constant
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isEnumConstant();
|
||||
|
||||
/**
|
||||
* Is this Doc item a constructor?
|
||||
*
|
||||
* @return true if it represents a constructor
|
||||
*/
|
||||
boolean isConstructor();
|
||||
|
||||
/**
|
||||
* Is this Doc item a method (but not a constructor or annotation
|
||||
* type element)?
|
||||
*
|
||||
* @return true if it represents a method
|
||||
*/
|
||||
boolean isMethod();
|
||||
|
||||
/**
|
||||
* Is this Doc item an annotation type element?
|
||||
*
|
||||
* @return true if it represents an annotation type element
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isAnnotationTypeElement();
|
||||
|
||||
/**
|
||||
* Is this Doc item an interface (but not an annotation type)?
|
||||
*
|
||||
* @return true if it represents an interface
|
||||
*/
|
||||
boolean isInterface();
|
||||
|
||||
/**
|
||||
* Is this Doc item an exception class?
|
||||
*
|
||||
* @return true if it represents an exception
|
||||
*/
|
||||
boolean isException();
|
||||
|
||||
/**
|
||||
* Is this Doc item an error class?
|
||||
*
|
||||
* @return true if it represents a error
|
||||
*/
|
||||
boolean isError();
|
||||
|
||||
/**
|
||||
* Is this Doc item an enum type?
|
||||
*
|
||||
* @return true if it represents an enum type
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isEnum();
|
||||
|
||||
/**
|
||||
* Is this Doc item an annotation type?
|
||||
*
|
||||
* @return true if it represents an annotation type
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isAnnotationType();
|
||||
|
||||
/**
|
||||
* Is this Doc item an
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">ordinary
|
||||
* class</a>?
|
||||
* (i.e. not an interface, annotation type, enum, exception, or error)?
|
||||
*
|
||||
* @return true if it represents an ordinary class
|
||||
*/
|
||||
boolean isOrdinaryClass();
|
||||
|
||||
/**
|
||||
* Is this Doc item a
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">class</a>
|
||||
* (and not an interface or annotation type)?
|
||||
* This includes ordinary classes, enums, errors and exceptions.
|
||||
*
|
||||
* @return true if it represents a class
|
||||
*/
|
||||
boolean isClass();
|
||||
|
||||
/**
|
||||
* Return true if this Doc item is
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* in the result set.
|
||||
*
|
||||
* @return true if this Doc item is
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* in the result set.
|
||||
*/
|
||||
boolean isIncluded();
|
||||
|
||||
/**
|
||||
* Return the source position of the first line of the
|
||||
* corresponding declaration, or null if
|
||||
* no position is available. A default constructor returns
|
||||
* null because it has no location in the source file.
|
||||
*
|
||||
* @since 1.4
|
||||
* @return the source positino of the first line of the
|
||||
* corresponding declaration, or null if
|
||||
* no position is available. A default constructor returns
|
||||
* null because it has no location in the source file.
|
||||
*/
|
||||
SourcePosition position();
|
||||
}
|
||||
@ -1,90 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* This interface provides error, warning and notice printing.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface DocErrorReporter {
|
||||
|
||||
/**
|
||||
* Print error message and increment error count.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
void printError(String msg);
|
||||
|
||||
/**
|
||||
* Print an error message and increment error count.
|
||||
*
|
||||
* @param pos the position item where the error occurs
|
||||
* @param msg message to print
|
||||
* @since 1.4
|
||||
*/
|
||||
void printError(SourcePosition pos, String msg);
|
||||
|
||||
/**
|
||||
* Print warning message and increment warning count.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
void printWarning(String msg);
|
||||
|
||||
/**
|
||||
* Print warning message and increment warning count.
|
||||
*
|
||||
* @param pos the position item where the warning occurs
|
||||
* @param msg message to print
|
||||
* @since 1.4
|
||||
*/
|
||||
void printWarning(SourcePosition pos, String msg);
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
void printNotice(String msg);
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param pos the position item where the message occurs
|
||||
* @param msg message to print
|
||||
* @since 1.4
|
||||
*/
|
||||
void printNotice(SourcePosition pos, String msg);
|
||||
}
|
||||
@ -1,122 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* This is an example of a starting class for a doclet,
|
||||
* showing the entry-point methods. A starting class must
|
||||
* import com.sun.javadoc.* and implement the
|
||||
* {@code start(RootDoc)} method, as described in the
|
||||
* <a href="package-summary.html#package.description">package
|
||||
* description</a>. If the doclet takes command line options,
|
||||
* it must also implement {@code optionLength} and
|
||||
* {@code validOptions}.
|
||||
*
|
||||
* <p> A doclet supporting the language features added since 1.1
|
||||
* (such as generics and annotations) should indicate this
|
||||
* by implementing {@code languageVersion}. In the absence of
|
||||
* this the doclet should not invoke any of the Doclet API methods
|
||||
* added since 1.5, and
|
||||
* the results of several other methods are modified so as
|
||||
* to conceal the new constructs (such as type parameters) from
|
||||
* the doclet.
|
||||
*
|
||||
* <p> To start the doclet, pass
|
||||
* {@code -doclet} followed by the fully-qualified
|
||||
* name of the starting class on the javadoc tool command line.
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public abstract class Doclet {
|
||||
|
||||
/**
|
||||
* Generate documentation here.
|
||||
* This method is required for all doclets.
|
||||
*
|
||||
* @param root Supply the RootDoc to the method.
|
||||
* @return true on success.
|
||||
*/
|
||||
public static boolean start(RootDoc root) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for doclet-added options. Returns the number of
|
||||
* arguments you must specify on the command line for the
|
||||
* given option. For example, "-d docs" would return 2.
|
||||
* <P>
|
||||
* This method is required if the doclet contains any options.
|
||||
* If this method is missing, Javadoc will print an invalid flag
|
||||
* error for every option.
|
||||
*
|
||||
* @param option the option for which the number of arguements is returned.
|
||||
* @return number of arguments on the command line for an option
|
||||
* including the option name itself. Zero return means
|
||||
* option not known. Negative value means error occurred.
|
||||
*/
|
||||
public static int optionLength(String option) {
|
||||
return 0; // default is option unknown
|
||||
}
|
||||
|
||||
/**
|
||||
* Check that options have the correct arguments.
|
||||
* <P>
|
||||
* This method is not required, but is recommended,
|
||||
* as every option will be considered valid if this method
|
||||
* is not present. It will default gracefully (to true)
|
||||
* if absent.
|
||||
* <P>
|
||||
* Printing option related error messages (using the provided
|
||||
* DocErrorReporter) is the responsibility of this method.
|
||||
*
|
||||
* @param options Supply valid options as an array of Strings.
|
||||
* @param reporter The DocErrorReporter responsible for these options.
|
||||
* @return true if the options are valid.
|
||||
*/
|
||||
public static boolean validOptions(String options[][],
|
||||
DocErrorReporter reporter) {
|
||||
return true; // default is options are valid
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the version of the Java Programming Language supported
|
||||
* by this doclet.
|
||||
* <p>
|
||||
* This method is required by any doclet supporting a language version
|
||||
* newer than 1.1.
|
||||
*
|
||||
* @return the language version supported by this doclet.
|
||||
* @since 1.5
|
||||
*/
|
||||
public static LanguageVersion languageVersion() {
|
||||
return LanguageVersion.JAVA_1_1;
|
||||
}
|
||||
}
|
||||
@ -1,164 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a method or constructor of a java class.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ExecutableMemberDoc extends MemberDoc {
|
||||
|
||||
/**
|
||||
* Return exceptions this method or constructor throws.
|
||||
* If the type of the exception is a type variable, return the
|
||||
* {@code ClassDoc} of its erasure.
|
||||
*
|
||||
* <p> <i>The {@code thrownExceptions} method cannot
|
||||
* accommodate certain generic type constructs. The
|
||||
* {@code thrownExceptionTypes} method should be used
|
||||
* instead.</i>
|
||||
*
|
||||
* @return an array of ClassDoc[] representing the exceptions
|
||||
* thrown by this method.
|
||||
* @see #thrownExceptionTypes
|
||||
*/
|
||||
ClassDoc[] thrownExceptions();
|
||||
|
||||
/**
|
||||
* Return exceptions this method or constructor throws.
|
||||
*
|
||||
* @return an array representing the exceptions thrown by this method.
|
||||
* Each array element is either a {@code ClassDoc} or a
|
||||
* {@code TypeVariable}.
|
||||
* @since 1.5
|
||||
*/
|
||||
Type[] thrownExceptionTypes();
|
||||
|
||||
/**
|
||||
* Return true if this method is native
|
||||
*
|
||||
* @return true if this method is native
|
||||
*/
|
||||
boolean isNative();
|
||||
|
||||
/**
|
||||
* Return true if this method is synchronized
|
||||
*
|
||||
* @return true if this method is synchronized
|
||||
*/
|
||||
boolean isSynchronized();
|
||||
|
||||
/**
|
||||
* Return true if this method was declared to take a variable number
|
||||
* of arguments.
|
||||
*
|
||||
* @since 1.5
|
||||
* @return true if this method was declared to take a variable number of arguments.
|
||||
*/
|
||||
public boolean isVarArgs();
|
||||
|
||||
/**
|
||||
* Get argument information.
|
||||
*
|
||||
* @see Parameter
|
||||
*
|
||||
* @return an array of Parameter, one element per argument
|
||||
* in the order the arguments are present.
|
||||
*/
|
||||
Parameter[] parameters();
|
||||
|
||||
/**
|
||||
* Get the receiver type of this executable element.
|
||||
*
|
||||
* @return the receiver type of this executable element.
|
||||
* @since 1.8
|
||||
*/
|
||||
Type receiverType();
|
||||
|
||||
/**
|
||||
* Return the throws tags in this method.
|
||||
*
|
||||
* @return an array of ThrowTag containing all {@code @exception}
|
||||
* and {@code @throws} tags.
|
||||
*/
|
||||
ThrowsTag[] throwsTags();
|
||||
|
||||
/**
|
||||
* Return the param tags in this method, excluding the type
|
||||
* parameter tags.
|
||||
*
|
||||
* @return an array of ParamTag containing all {@code @param} tags
|
||||
* corresponding to the parameters of this method.
|
||||
*/
|
||||
ParamTag[] paramTags();
|
||||
|
||||
/**
|
||||
* Return the type parameter tags in this method.
|
||||
*
|
||||
* @return an array of ParamTag containing all {@code @param} tags
|
||||
* corresponding to the type parameters of this method.
|
||||
* @since 1.5
|
||||
*/
|
||||
ParamTag[] typeParamTags();
|
||||
|
||||
/**
|
||||
* Get the signature. It is the parameter list, type is qualified.
|
||||
* For instance, for a method {@code mymethod(String x, int y)},
|
||||
* it will return {@code (java.lang.String,int)}.
|
||||
*
|
||||
* @return the parameter list where type is qualified.
|
||||
*/
|
||||
String signature();
|
||||
|
||||
/**
|
||||
* get flat signature. all types are not qualified.
|
||||
* return a String, which is the flat signiture of this member.
|
||||
* It is the parameter list, type is not qualified.
|
||||
* For instance, for a method {@code mymethod(String x, int y)},
|
||||
* it will return {@code (String, int)}.
|
||||
*
|
||||
* @return a String, which is the flat signiture of this member.
|
||||
*/
|
||||
String flatSignature();
|
||||
|
||||
/**
|
||||
* Return the formal type parameters of this method or constructor.
|
||||
* Return an empty array if this method or constructor is not generic.
|
||||
*
|
||||
* @return the formal type parameters of this method or constructor.
|
||||
* @since 1.5
|
||||
*/
|
||||
TypeVariable[] typeParameters();
|
||||
}
|
||||
@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a field in a java class.
|
||||
*
|
||||
* @see MemberDoc
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface FieldDoc extends MemberDoc {
|
||||
|
||||
/**
|
||||
* Get type of this field.
|
||||
*
|
||||
* @return the type of this field.
|
||||
*/
|
||||
Type type();
|
||||
|
||||
/**
|
||||
* Return true if this field is transient
|
||||
*
|
||||
* @return true if this field is transient
|
||||
*/
|
||||
boolean isTransient();
|
||||
|
||||
/**
|
||||
* Return true if this field is volatile
|
||||
*
|
||||
* @return true if this field is volatile
|
||||
*/
|
||||
boolean isVolatile();
|
||||
|
||||
/**
|
||||
* Return the serialField tags in this FieldDoc item.
|
||||
*
|
||||
* @return an array of {@code SerialFieldTag} objects containing
|
||||
* all {@code @serialField} tags.
|
||||
*/
|
||||
SerialFieldTag[] serialFieldTags();
|
||||
|
||||
/**
|
||||
* Get the value of a constant field.
|
||||
*
|
||||
* @return the value of a constant field. The value is
|
||||
* automatically wrapped in an object if it has a primitive type.
|
||||
* If the field is not constant, returns null.
|
||||
*/
|
||||
Object constantValue();
|
||||
|
||||
/**
|
||||
* Get the value of a constant field.
|
||||
*
|
||||
* @return the text of a Java language expression whose value
|
||||
* is the value of the constant. The expression uses no identifiers
|
||||
* other than primitive literals. If the field is
|
||||
* not constant, returns null.
|
||||
*/
|
||||
String constantValueExpression();
|
||||
}
|
||||
@ -1,54 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Java Programming Language version. The constants of this enum
|
||||
* identify the JDK and J2SE releases containing language changes
|
||||
* relevant to doclets.
|
||||
* <p>
|
||||
* All doclets support at least the 1.1 language version.
|
||||
* The first release subsequent to this with language changes
|
||||
* affecting doclets is 1.5.
|
||||
*
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public enum LanguageVersion {
|
||||
|
||||
/** 1.1 added nested classes and interfaces. */
|
||||
JAVA_1_1,
|
||||
|
||||
/** 1.5 added generic types, annotations, enums, and varArgs. */
|
||||
JAVA_1_5
|
||||
}
|
||||
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a member of a java class: field, constructor, or method.
|
||||
* This is an abstract class dealing with information common to
|
||||
* method, constructor and field members. Class members of a class
|
||||
* (innerclasses) are represented instead by ClassDoc.
|
||||
*
|
||||
* @see MethodDoc
|
||||
* @see FieldDoc
|
||||
* @see ClassDoc
|
||||
*
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface MemberDoc extends ProgramElementDoc {
|
||||
|
||||
/**
|
||||
* Returns true if this member was synthesized by the compiler.
|
||||
*
|
||||
* @return true if this member was synthesized by the compiler.
|
||||
*/
|
||||
boolean isSynthetic();
|
||||
}
|
||||
@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a method of a java class.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface MethodDoc extends ExecutableMemberDoc {
|
||||
|
||||
/**
|
||||
* Return true if this method is abstract
|
||||
*
|
||||
* @return true if this method is abstract
|
||||
*/
|
||||
boolean isAbstract();
|
||||
|
||||
/**
|
||||
* Return true if this method is default
|
||||
*
|
||||
* @return true if this method is default
|
||||
*/
|
||||
boolean isDefault();
|
||||
|
||||
/**
|
||||
* Get return type.
|
||||
*
|
||||
* @return the return type of this method, null if it
|
||||
* is a constructor.
|
||||
*/
|
||||
Type returnType();
|
||||
|
||||
/**
|
||||
* Return the class containing the method that this method overrides.
|
||||
*
|
||||
* <p> <i>The {@code overriddenClass} method cannot
|
||||
* accommodate certain generic type constructs. The
|
||||
* {@code overriddenType} method should be used instead.</i>
|
||||
*
|
||||
* @return a ClassDoc representing the superclass
|
||||
* defining a method that this method overrides, or null if
|
||||
* this method does not override.
|
||||
*/
|
||||
ClassDoc overriddenClass();
|
||||
|
||||
/**
|
||||
* Return the type containing the method that this method overrides.
|
||||
* It may be a {@code ClassDoc} or a {@code ParameterizedType}.
|
||||
*
|
||||
* @return the supertype whose method is overridden, or null if this
|
||||
* method does not override another in a superclass
|
||||
* @since 1.5
|
||||
*/
|
||||
Type overriddenType();
|
||||
|
||||
/**
|
||||
* Return the method that this method overrides.
|
||||
*
|
||||
* @return a MethodDoc representing a method definition
|
||||
* in a superclass this method overrides, null if
|
||||
* this method does not override.
|
||||
*/
|
||||
MethodDoc overriddenMethod();
|
||||
|
||||
/**
|
||||
* Tests whether this method overrides another.
|
||||
* The overridden method may be one declared in a superclass or
|
||||
* a superinterface (unlike {@link #overriddenMethod()}).
|
||||
*
|
||||
* <p> When a non-abstract method overrides an abstract one, it is
|
||||
* also said to <i>implement</i> the other.
|
||||
*
|
||||
* @param meth the other method to examine
|
||||
* @return {@code true} if this method overrides the other
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean overrides(MethodDoc meth);
|
||||
}
|
||||
@ -1,137 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a java package. Provides access to information
|
||||
* about the package, the package's comment and tags, and the
|
||||
* classes in the package.
|
||||
* <p>
|
||||
* Each method whose return type is an array will return an empty
|
||||
* array (never null) when there are no objects in the result.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface PackageDoc extends Doc {
|
||||
|
||||
/**
|
||||
* Get all classes and interfaces in the package, filtered to the specified
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">access
|
||||
* modifier option</a>.
|
||||
*
|
||||
* @return filtered classes and interfaces in this package
|
||||
* @param filter Specifying true filters according to the specified access
|
||||
* modifier option.
|
||||
* Specifying false includes all classes and interfaces
|
||||
* regardless of access modifier option.
|
||||
* @since 1.4
|
||||
*/
|
||||
ClassDoc[] allClasses(boolean filter);
|
||||
|
||||
/**
|
||||
* Get all
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#included">included</a>
|
||||
* classes and interfaces in the package. Same as allClasses(true).
|
||||
*
|
||||
* @return all included classes and interfaces in this package.
|
||||
*/
|
||||
ClassDoc[] allClasses();
|
||||
|
||||
/**
|
||||
* Get included
|
||||
* <a href="{@docRoot}/jdk.javadoc/com/sun/javadoc/package-summary.html#class">ordinary</a>
|
||||
* classes (that is, exclude exceptions, errors, enums, interfaces, and
|
||||
* annotation types)
|
||||
* in this package.
|
||||
*
|
||||
* @return included ordinary classes in this package.
|
||||
*/
|
||||
ClassDoc[] ordinaryClasses();
|
||||
|
||||
/**
|
||||
* Get included Exception classes in this package.
|
||||
*
|
||||
* @return included Exceptions in this package.
|
||||
*/
|
||||
ClassDoc[] exceptions();
|
||||
|
||||
/**
|
||||
* Get included Error classes in this package.
|
||||
*
|
||||
* @return included Errors in this package.
|
||||
*/
|
||||
ClassDoc[] errors();
|
||||
|
||||
/**
|
||||
* Get included enum types in this package.
|
||||
*
|
||||
* @return included enum types in this package.
|
||||
* @since 1.5
|
||||
*/
|
||||
ClassDoc[] enums();
|
||||
|
||||
/**
|
||||
* Get included interfaces in this package, omitting annotation types.
|
||||
*
|
||||
* @return included interfaces in this package.
|
||||
*/
|
||||
ClassDoc[] interfaces();
|
||||
|
||||
/**
|
||||
* Get included annotation types in this package.
|
||||
*
|
||||
* @return included annotation types in this package.
|
||||
* @since 1.5
|
||||
*/
|
||||
AnnotationTypeDoc[] annotationTypes();
|
||||
|
||||
/**
|
||||
* Get the annotations of this package.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the annotations of this package.
|
||||
* @since 1.5
|
||||
*/
|
||||
AnnotationDesc[] annotations();
|
||||
|
||||
/**
|
||||
* Lookup a class or interface within this package.
|
||||
*
|
||||
* @param className A String containing the name of the class to look up.
|
||||
* @return ClassDoc of found class or interface,
|
||||
* or null if not found.
|
||||
*/
|
||||
ClassDoc findClass(String className);
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents an @param documentation tag.
|
||||
* Stores the name and comment parts of the parameter tag.
|
||||
* An @param tag may represent either a method or constructor parameter,
|
||||
* or a type parameter.
|
||||
*
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ParamTag extends Tag {
|
||||
|
||||
/**
|
||||
* Return the name of the parameter or type parameter
|
||||
* associated with this {@code ParamTag}.
|
||||
* The angle brackets delimiting a type parameter are not part of
|
||||
* its name.
|
||||
*
|
||||
* @return the parameter name.
|
||||
*/
|
||||
String parameterName();
|
||||
|
||||
/**
|
||||
* Return the parameter comment
|
||||
* associated with this {@code ParamTag}.
|
||||
*
|
||||
* @return the parameter comment.
|
||||
*/
|
||||
String parameterComment();
|
||||
|
||||
/**
|
||||
* Return true if this {@code ParamTag} corresponds to a type
|
||||
* parameter. Return false if it corresponds to an ordinary parameter
|
||||
* of a method or constructor.
|
||||
*
|
||||
* @return true if this {@code ParamTag} corresponds to a type
|
||||
* parameter.
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isTypeParameter();
|
||||
}
|
||||
@ -1,87 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Parameter information.
|
||||
* This includes a parameter type and parameter name.
|
||||
*
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface Parameter {
|
||||
|
||||
/**
|
||||
* Get the type of this parameter.
|
||||
*
|
||||
* @return the type of this parameter.
|
||||
*/
|
||||
Type type();
|
||||
|
||||
/**
|
||||
* Get local name of this parameter.
|
||||
* For example if parameter is the short 'index', returns "index".
|
||||
*
|
||||
* @return the name of this parameter as a string.
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Get type name of this parameter.
|
||||
* For example if parameter is the short 'index', returns "short".
|
||||
* <p>
|
||||
* This method returns a complete string
|
||||
* representation of the type, including the dimensions of arrays and
|
||||
* the type arguments of parameterized types. Names are qualified.
|
||||
*
|
||||
* @return a complete string representation of the type.
|
||||
*/
|
||||
String typeName();
|
||||
|
||||
/**
|
||||
* Returns a string representation of the parameter.
|
||||
* <p>
|
||||
* For example if parameter is the short 'index', returns "short index".
|
||||
*
|
||||
* @return type and parameter name of this parameter.
|
||||
*/
|
||||
String toString();
|
||||
|
||||
/**
|
||||
* Get the annotations of this parameter.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the annotations of this parameter.
|
||||
* @since 1.5
|
||||
*/
|
||||
AnnotationDesc[] annotations();
|
||||
}
|
||||
@ -1,115 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an invocation of a generic class or interface. For example,
|
||||
* given the generic interface {@code List<E>}, possible invocations
|
||||
* include:
|
||||
* <pre>
|
||||
* {@code List<String>}
|
||||
* {@code List<T extends Number>}
|
||||
* {@code List<?>}
|
||||
* </pre>
|
||||
* A generic inner class {@code Outer<T>.Inner<S>} might be invoked as:
|
||||
* <pre>
|
||||
* {@code Outer<Number>.Inner<String>}
|
||||
* </pre>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ParameterizedType extends Type {
|
||||
|
||||
/**
|
||||
* Return the generic class or interface that declared this type.
|
||||
*
|
||||
* @return the generic class or interface that declared this type.
|
||||
*/
|
||||
ClassDoc asClassDoc();
|
||||
|
||||
/**
|
||||
* Return the actual type arguments of this type.
|
||||
* For a generic type that is nested within some other generic type
|
||||
* (such as {@code Outer<T>.Inner<S>}),
|
||||
* only the type arguments of the innermost type are included.
|
||||
*
|
||||
* @return the actual type arguments of this type.
|
||||
*/
|
||||
Type[] typeArguments();
|
||||
|
||||
/**
|
||||
* Return the class type that is a direct supertype of this one.
|
||||
* This is the superclass of this type's declaring class,
|
||||
* with type arguments substituted in.
|
||||
* Return null if this is an interface type.
|
||||
*
|
||||
* <p> For example, if this parameterized type is
|
||||
* {@code java.util.ArrayList<String>}, the result will be
|
||||
* {@code java.util.AbstractList<String>}.
|
||||
*
|
||||
* @return the class type that is a direct supertype of this one.
|
||||
*/
|
||||
Type superclassType();
|
||||
|
||||
/**
|
||||
* Return the interface types directly implemented by or extended by this
|
||||
* parameterized type.
|
||||
* These are the interfaces directly implemented or extended
|
||||
* by this type's declaring class or interface,
|
||||
* with type arguments substituted in.
|
||||
* Return an empty array if there are no interfaces.
|
||||
*
|
||||
* <p> For example, the interface extended by
|
||||
* {@code java.util.Set<String>} is {@code java.util.Collection<String>}.
|
||||
*
|
||||
* @return the interface types directly implemented by or extended by this
|
||||
* parameterized type.
|
||||
*/
|
||||
Type[] interfaceTypes();
|
||||
|
||||
/**
|
||||
* Return the type that contains this type as a member.
|
||||
* Return null is this is a top-level type.
|
||||
*
|
||||
* <p> For example, the containing type of
|
||||
* {@code AnInterface.Nested<Number>} is the {@code ClassDoc}
|
||||
* representing {@code AnInterface}, and the containing type of
|
||||
* {@code Outer<String>.Inner<Number>} is the
|
||||
* {@code ParameterizedType} representing {@code Outer<String>}.
|
||||
*
|
||||
* @return the type that contains this type as a member.
|
||||
*/
|
||||
Type containingType();
|
||||
}
|
||||
@ -1,148 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a java program element: class, interface, field,
|
||||
* constructor, or method.
|
||||
* This is an abstract class dealing with information common to
|
||||
* these elements.
|
||||
*
|
||||
* @see MemberDoc
|
||||
* @see ClassDoc
|
||||
*
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ProgramElementDoc extends Doc {
|
||||
|
||||
/**
|
||||
* Get the containing class or interface of this program element.
|
||||
*
|
||||
* @return a ClassDoc for this element's containing class or interface.
|
||||
* If this is a top-level class or interface, return null.
|
||||
*/
|
||||
ClassDoc containingClass();
|
||||
|
||||
/**
|
||||
* Get the package that this program element is contained in.
|
||||
*
|
||||
* @return a PackageDoc for this element containing package.
|
||||
* If in the unnamed package, this PackageDoc will have the
|
||||
* name "".
|
||||
*/
|
||||
PackageDoc containingPackage();
|
||||
|
||||
/**
|
||||
* Get the fully qualified name of this program element.
|
||||
* For example, for the class {@code java.util.Hashtable},
|
||||
* return "java.util.Hashtable".
|
||||
* <p>
|
||||
* For the method {@code bar()} in class {@code Foo}
|
||||
* in the unnamed package, return "Foo.bar".
|
||||
*
|
||||
* @return the qualified name of the program element as a String.
|
||||
*/
|
||||
String qualifiedName();
|
||||
|
||||
/**
|
||||
* Get the modifier specifier integer.
|
||||
*
|
||||
* @see java.lang.reflect.Modifier
|
||||
*
|
||||
* @return Get the modifier specifier integer.
|
||||
*/
|
||||
int modifierSpecifier();
|
||||
|
||||
/**
|
||||
* Get modifiers string.
|
||||
* For example, for:
|
||||
* <pre>
|
||||
* public abstract int foo() { ... }
|
||||
* </pre>
|
||||
* return "public abstract".
|
||||
* Annotations are not included.
|
||||
*
|
||||
* @return "public abstract".
|
||||
*/
|
||||
String modifiers();
|
||||
|
||||
/**
|
||||
* Get the annotations of this program element.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the annotations of this program element.
|
||||
* @since 1.5
|
||||
*/
|
||||
AnnotationDesc[] annotations();
|
||||
|
||||
/**
|
||||
* Return true if this program element is public.
|
||||
*
|
||||
* @return true if this program element is public.
|
||||
*/
|
||||
boolean isPublic();
|
||||
|
||||
/**
|
||||
* Return true if this program element is protected.
|
||||
*
|
||||
* @return true if this program element is protected.
|
||||
*/
|
||||
boolean isProtected();
|
||||
|
||||
/**
|
||||
* Return true if this program element is private.
|
||||
*
|
||||
* @return true if this program element is private.
|
||||
*/
|
||||
boolean isPrivate();
|
||||
|
||||
/**
|
||||
* Return true if this program element is package private.
|
||||
*
|
||||
* @return true if this program element is package private.
|
||||
*/
|
||||
boolean isPackagePrivate();
|
||||
/**
|
||||
* Return true if this program element is static.
|
||||
*
|
||||
* @return true if this program element is static.
|
||||
*/
|
||||
boolean isStatic();
|
||||
|
||||
/**
|
||||
* Return true if this program element is final.
|
||||
*
|
||||
* @return true if this program element is final.
|
||||
*/
|
||||
boolean isFinal();
|
||||
}
|
||||
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents the root of the program structure information
|
||||
* for one run of javadoc. From this root all other program
|
||||
* structure information can be extracted.
|
||||
* Also represents the command line information -- the
|
||||
* packages, classes and options specified by the user.
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface RootDoc extends Doc, DocErrorReporter {
|
||||
|
||||
/**
|
||||
* Command line options.
|
||||
* <p>
|
||||
* For example, given:
|
||||
* <pre>
|
||||
* javadoc -foo this that -bar other ...</pre>
|
||||
*
|
||||
* this method will return:
|
||||
* <pre>
|
||||
* 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.
|
||||
*/
|
||||
String[][] options();
|
||||
|
||||
/**
|
||||
* Return the packages
|
||||
* <a href="package-summary.html#included">specified</a>
|
||||
* on the command line.
|
||||
* If {@code -subpackages} and {@code -exclude} options
|
||||
* are used, return all the non-excluded packages.
|
||||
*
|
||||
* @return packages specified on the command line.
|
||||
*/
|
||||
PackageDoc[] specifiedPackages();
|
||||
|
||||
/**
|
||||
* Return the classes and interfaces
|
||||
* <a href="package-summary.html#included">specified</a>
|
||||
* as source file names on the command line.
|
||||
*
|
||||
* @return classes and interfaces specified on the command line.
|
||||
*/
|
||||
ClassDoc[] specifiedClasses();
|
||||
|
||||
/**
|
||||
* Return the
|
||||
* <a href="package-summary.html#included">included</a>
|
||||
classes and interfaces in all packages.
|
||||
*
|
||||
* @return included classes and interfaces in all packages.
|
||||
*/
|
||||
ClassDoc[] classes();
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
PackageDoc packageNamed(String name);
|
||||
|
||||
/**
|
||||
* Return a ClassDoc for the specified class or interface name.
|
||||
*
|
||||
* @param qualifiedName
|
||||
* <a href="package-summary.html#qualified">qualified</a>
|
||||
* class or package name
|
||||
*
|
||||
* @return a ClassDoc holding the specified class, null if
|
||||
* this class is not referenced.
|
||||
*/
|
||||
ClassDoc classNamed(String qualifiedName);
|
||||
}
|
||||
@ -1,145 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a user-defined cross-reference to related documentation.
|
||||
* The tag can reference a package, class or member, or can hold
|
||||
* plain text. (The plain text might be a reference
|
||||
* to something not online, such as a printed book, or be a hard-coded
|
||||
* HTML link.) The reference can either be inline with the comment,
|
||||
* using {@code {@link}}, or a separate block comment,
|
||||
* using {@code @see}.
|
||||
* Method {@code name()} returns "@link" (no curly braces) or
|
||||
* "@see", depending on the tag.
|
||||
* Method {@code kind()} returns "@see" for both tags.
|
||||
*
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Atul M Dambalkar
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface SeeTag extends Tag {
|
||||
|
||||
/**
|
||||
* Get the label of the {@code @see} tag.
|
||||
* Return null if no label is present.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see String#trim() the trim method}
|
||||
* </p>
|
||||
* return "the trim method".
|
||||
*
|
||||
* @return "the trim method".
|
||||
*/
|
||||
String label();
|
||||
|
||||
/**
|
||||
* Get the package doc when {@code @see} references only a package.
|
||||
* Return null if the package cannot be found, or if
|
||||
* {@code @see} references any other element (class,
|
||||
* interface, field, constructor, method) or non-element.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see java.lang}
|
||||
* </p>
|
||||
* return the {@code PackageDoc} for {@code java.lang}.
|
||||
*
|
||||
* @return the {@code PackageDoc} for {@code java.lang}.
|
||||
*/
|
||||
public PackageDoc referencedPackage();
|
||||
|
||||
/**
|
||||
* Get the class or interface name of the {@code @see} reference.
|
||||
* The name is fully qualified if the name specified in the
|
||||
* original {@code @see} tag was fully qualified, or if the class
|
||||
* or interface can be found; otherwise it is unqualified.
|
||||
* If {@code @see} references only a package name, then return
|
||||
* the package name instead.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see String#valueOf(java.lang.Object)}
|
||||
* </p>
|
||||
* return "java.lang.String".
|
||||
* For "{@code @see java.lang}", return "java.lang".
|
||||
* Return null if {@code @see} references a non-element, such as
|
||||
* {@code @see <a href="java.sun.com">}.
|
||||
*
|
||||
* @return null if {@code @see} references a non-element, such as
|
||||
* {@code @see <a href="java.sun.com">}.
|
||||
*/
|
||||
String referencedClassName();
|
||||
|
||||
/**
|
||||
* Get the class doc referenced by the class name part of @see.
|
||||
* Return null if the class cannot be found.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see String#valueOf(java.lang.Object)}
|
||||
* </p>
|
||||
* return the {@code ClassDoc} for {@code java.lang.String}.
|
||||
*
|
||||
* @return the {@code ClassDoc} for {@code java.lang.String}.
|
||||
*/
|
||||
ClassDoc referencedClass();
|
||||
|
||||
/**
|
||||
* Get the field, constructor or method substring of the {@code @see}
|
||||
* reference. Return null if the reference is to any other
|
||||
* element or to any non-element.
|
||||
* References to member classes (nested classes) return null.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see String#startsWith(String)}
|
||||
* </p>
|
||||
* return "startsWith(String)".
|
||||
*
|
||||
* @return "startsWith(String)".
|
||||
*/
|
||||
String referencedMemberName();
|
||||
|
||||
/**
|
||||
* Get the member doc for the field, constructor or method
|
||||
* referenced by {@code @see}. Return null if the member cannot
|
||||
* be found or if the reference is to any other element or to any
|
||||
* non-element.
|
||||
* References to member classes (nested classes) return null.
|
||||
* For example, for:
|
||||
* <p>
|
||||
* {@code @see String#startsWith(java.lang.String)}
|
||||
* </p>
|
||||
* return the {@code MethodDoc} for {@code startsWith}.
|
||||
*
|
||||
* @return the {@code MethodDoc} for {@code startsWith}.
|
||||
*/
|
||||
MemberDoc referencedMember();
|
||||
}
|
||||
@ -1,101 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Documents a Serializable field defined by an ObjectStreamField.
|
||||
* <pre>
|
||||
* The class parses and stores the three serialField tag parameters:
|
||||
*
|
||||
* - field name
|
||||
* - field type name
|
||||
* (fully-qualified or visible from the current import context)
|
||||
* - description of the valid values for the field
|
||||
|
||||
* </pre>
|
||||
* This tag is only allowed in the javadoc for the special member
|
||||
* serialPersistentFields.
|
||||
*
|
||||
* @author Joe Fialli
|
||||
*
|
||||
* @see java.io.ObjectStreamField
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface SerialFieldTag extends Tag, Comparable<Object> {
|
||||
|
||||
/**
|
||||
* Return the serializable field name.
|
||||
*
|
||||
* @return the serializable field name.
|
||||
*/
|
||||
public String fieldName();
|
||||
|
||||
/**
|
||||
* Return the field type string.
|
||||
*
|
||||
* @return the field type string.
|
||||
*/
|
||||
public String fieldType();
|
||||
|
||||
/**
|
||||
* Return the ClassDoc for field type.
|
||||
*
|
||||
* @return null if no ClassDoc for field type is visible from
|
||||
* containingClass context.
|
||||
*/
|
||||
public ClassDoc fieldTypeDoc();
|
||||
|
||||
/**
|
||||
* Return the field comment. If there is no serialField comment, return
|
||||
* javadoc comment of corresponding FieldDoc.
|
||||
*
|
||||
* @return the field comment. If there is no serialField comment, return
|
||||
* javadoc comment of corresponding FieldDoc.
|
||||
*/
|
||||
public String description();
|
||||
|
||||
/**
|
||||
* Compares this Object with the specified Object for order. Returns a
|
||||
* negative integer, zero, or a positive integer as this Object is less
|
||||
* than, equal to, or greater than the given Object.
|
||||
* <p>
|
||||
* Included to make SerialFieldTag items java.lang.Comparable.
|
||||
*
|
||||
* @param obj the {@code Object} to be compared.
|
||||
* @return a negative integer, zero, or a positive integer as this Object
|
||||
* is less than, equal to, or greater than the given Object.
|
||||
* @exception ClassCastException the specified Object's type prevents it
|
||||
* from being compared to this Object.
|
||||
* @since 1.2
|
||||
*/
|
||||
public int compareTo(Object obj);
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.javadoc;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* This interface describes a source position: filename, line number,
|
||||
* and column number.
|
||||
*
|
||||
* @since 1.4
|
||||
* @author Neal M Gafter
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface SourcePosition {
|
||||
/** The source file. Returns null if no file information is
|
||||
* available.
|
||||
*
|
||||
* @return the source file as a File.
|
||||
*/
|
||||
File file();
|
||||
|
||||
/** The line in the source file. The first line is numbered 1;
|
||||
* 0 means no line number information is available.
|
||||
*
|
||||
* @return the line number in the source file as an integer.
|
||||
*/
|
||||
int line();
|
||||
|
||||
/** The column in the source file. The first column is
|
||||
* numbered 1; 0 means no column information is available.
|
||||
* Columns count characters in the input stream; a tab
|
||||
* advances the column number to the next 8-column tab stop.
|
||||
*
|
||||
* @return the column on the source line as an integer.
|
||||
*/
|
||||
int column();
|
||||
|
||||
/** Convert the source position to the form "Filename:line". */
|
||||
String toString();
|
||||
}
|
||||
@ -1,177 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
import java.text.BreakIterator;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Represents a simple documentation tag, such as @since, @author, @version.
|
||||
* Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since")
|
||||
* and tag text (e.g. "1.2"). Tags with structure or which require
|
||||
* special processing are handled by subclasses such as ParamTag
|
||||
* (for @param), SeeTag (for @see and {@link}), and ThrowsTag
|
||||
* (for @throws).
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @see SeeTag
|
||||
* @see ParamTag
|
||||
* @see ThrowsTag
|
||||
* @see SerialFieldTag
|
||||
* @see Doc#tags()
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface Tag {
|
||||
|
||||
/**
|
||||
* Return the name of this tag. The name is the string
|
||||
* starting with "@" that is used in a doc comment, such as
|
||||
* {@code @return}. For inline tags, such as
|
||||
* {@code {@link}}, the curly brackets
|
||||
* are not part of the name, so in this example the name
|
||||
* would be simply {@code @link}.
|
||||
*
|
||||
* @return the name of this tag
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
* Return the containing {@link Doc} of this Tag element.
|
||||
*
|
||||
* @return the containing {@link Doc} of this Tag element
|
||||
*/
|
||||
Doc holder();
|
||||
|
||||
/**
|
||||
* Return the kind of this tag.
|
||||
* For most tags,
|
||||
* {@code kind() == name()};
|
||||
* the following table lists those cases where there is more
|
||||
* than one tag of a given kind:
|
||||
*
|
||||
* <table class="striped">
|
||||
* <caption>Related Tags</caption>
|
||||
* <thead>
|
||||
* <tr><th scope="col">{@code name() } <th scope="col">{@code kind() }
|
||||
* </thead>
|
||||
* <tbody style="text-align:left">
|
||||
* <tr><th scope="row">{@code @exception } <td>{@code @throws }
|
||||
* <tr><th scope="row">{@code @link } <td>{@code @see }
|
||||
* <tr><th scope="row">{@code @linkplain } <td>{@code @see }
|
||||
* <tr><th scope="row">{@code @see } <td>{@code @see }
|
||||
* <tr><th scope="row">{@code @serial } <td>{@code @serial }
|
||||
* <tr><th scope="row">{@code @serialData } <td>{@code @serial }
|
||||
* <tr><th scope="row">{@code @throws } <td>{@code @throws }
|
||||
* </tbody>
|
||||
* </table>
|
||||
*
|
||||
* @return the kind of this tag.
|
||||
*/
|
||||
String kind();
|
||||
|
||||
/**
|
||||
* Return the text of this tag, that is, the portion beyond tag name.
|
||||
*
|
||||
* @return the text of this tag
|
||||
*/
|
||||
String text();
|
||||
|
||||
/**
|
||||
* Convert this object to a string.
|
||||
*/
|
||||
String toString();
|
||||
|
||||
/**
|
||||
* For a documentation comment with embedded {@code {@link}}
|
||||
* tags, return an array of {@code Tag} objects. The entire
|
||||
* doc comment is broken down into strings separated by
|
||||
* {@code {@link}} tags, where each successive element
|
||||
* of the array represents either a string or
|
||||
* {@code {@link}} tag, in order, from start to end.
|
||||
* Each string is represented by a {@code Tag} object of
|
||||
* name "Text", where {@link #text()} returns the string. Each
|
||||
* {@code {@link}} tag is represented by a
|
||||
* {@link SeeTag} of name "@link" and kind "@see".
|
||||
* For example, given the following comment
|
||||
* tag:
|
||||
* <p>
|
||||
* {@code This is a {@link Doc commentlabel} example.}
|
||||
* <p>
|
||||
* return an array of Tag objects:
|
||||
* <ul>
|
||||
* <li> tags[0] is a {@link Tag} with name "Text" and text consisting
|
||||
* of "This is a "
|
||||
* <li> tags[1] is a {@link SeeTag} with name "@link", referenced
|
||||
* class {@code Doc} and label "commentlabel"
|
||||
* <li> tags[2] is a {@link Tag} with name "Text" and text consisting
|
||||
* of " example."
|
||||
* </ul>
|
||||
*
|
||||
* @return Tag[] array of tags
|
||||
* @see ParamTag
|
||||
* @see ThrowsTag
|
||||
*/
|
||||
Tag[] inlineTags();
|
||||
|
||||
/**
|
||||
* Return the first sentence of the comment as an array of tags.
|
||||
* Includes inline tags
|
||||
* (i.e. {@link <i>reference</i>} tags) but not
|
||||
* block tags.
|
||||
* Each section of plain text is represented as a {@link Tag}
|
||||
* of kind "Text".
|
||||
* Inline tags are represented as a {@link SeeTag} of kind "@link".
|
||||
* If the locale is English language, the first sentence is
|
||||
* determined by the rules described in the Java Language
|
||||
* Specification (first version): "This sentence ends
|
||||
* at the first period that is followed by a blank, tab, or
|
||||
* line terminator or at the first tagline.", in
|
||||
* addition a line will be terminated by paragraph and
|
||||
* section terminating HTML tags: <p> </p> <h1>
|
||||
* <h2> <h3> <h4> <h5> <h6>
|
||||
* <hr> <pre> or </pre>.
|
||||
* If the locale is not English, the sentence end will be
|
||||
* determined by
|
||||
* {@link BreakIterator#getSentenceInstance(Locale)}.
|
||||
*
|
||||
* @return an array of {@link Tag} objects representing the
|
||||
* first sentence of the comment
|
||||
*/
|
||||
Tag[] firstSentenceTags();
|
||||
|
||||
/**
|
||||
* Return the source position of this tag.
|
||||
* @return the source position of this tag.
|
||||
*/
|
||||
public SourcePosition position();
|
||||
}
|
||||
@ -1,85 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a @throws or @exception documentation tag.
|
||||
* Parses and holds the exception name and exception comment.
|
||||
* Note: @exception is a backwards compatible synonymy for @throws.
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @see ExecutableMemberDoc#throwsTags()
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface ThrowsTag extends Tag {
|
||||
|
||||
/**
|
||||
* Return the name of the exception
|
||||
* associated with this {@code ThrowsTag}.
|
||||
*
|
||||
* @return name of the exception.
|
||||
*/
|
||||
String exceptionName();
|
||||
|
||||
/**
|
||||
* Return the exception comment
|
||||
* associated with this {@code ThrowsTag}.
|
||||
*
|
||||
* @return exception comment.
|
||||
*/
|
||||
String exceptionComment();
|
||||
|
||||
/**
|
||||
* Return a {@code ClassDoc} that represents the exception.
|
||||
* If the type of the exception is a type variable, return the
|
||||
* {@code ClassDoc} of its erasure.
|
||||
*
|
||||
* <p> <i>This method cannot accommodate certain generic type
|
||||
* constructs. The {@code exceptionType} method
|
||||
* should be used instead.</i>
|
||||
*
|
||||
* @return {@code ClassDoc} that represents the exception.
|
||||
* @see #exceptionType
|
||||
*/
|
||||
ClassDoc exception();
|
||||
|
||||
/**
|
||||
* Return the type of the exception
|
||||
* associated with this {@code ThrowsTag}.
|
||||
* This may be a {@code ClassDoc} or a {@code TypeVariable}.
|
||||
*
|
||||
* @return the type of the exception.
|
||||
* @since 1.5
|
||||
*/
|
||||
Type exceptionType();
|
||||
}
|
||||
@ -1,183 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.javadoc;
|
||||
|
||||
/**
|
||||
* Represents a type. A type can be a class or interface, an
|
||||
* invocation (like {@code List<String>}) of a generic class or interface,
|
||||
* a type variable, a wildcard type ("{@code ?}"),
|
||||
* or a primitive data type (like {@code char}).
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Scott Seligman (generics)
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface Type {
|
||||
|
||||
/**
|
||||
* Return unqualified name of type excluding any dimension information.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns
|
||||
* "{@code String}".
|
||||
* @return unqualified name of type excluding any dimension information.
|
||||
*/
|
||||
String typeName();
|
||||
|
||||
/**
|
||||
* Return qualified name of type excluding any dimension information.
|
||||
*<p>
|
||||
* For example, a two dimensional array of String
|
||||
* returns "{@code java.lang.String}".
|
||||
* @return qualified name of this type excluding any dimension information.
|
||||
*/
|
||||
String qualifiedTypeName();
|
||||
|
||||
/**
|
||||
* Return the simple name of this type excluding any dimension information.
|
||||
* This is the unqualified name of the type, except that for nested types
|
||||
* only the identifier of the innermost type is included.
|
||||
* <p>
|
||||
* For example, the class {@code Outer.Inner} returns
|
||||
* "{@code Inner}".
|
||||
*
|
||||
* @since 1.5
|
||||
* @return the simple name of this type excluding any dimension information.
|
||||
*/
|
||||
String simpleTypeName();
|
||||
|
||||
/**
|
||||
* Return the type's dimension information, as a string.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns
|
||||
* "{@code [][]}".
|
||||
* @return the type's dimension information as a string.
|
||||
*/
|
||||
String dimension();
|
||||
|
||||
/**
|
||||
* Return a string representation of the type.
|
||||
* This includes any dimension information and type arguments.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String may return
|
||||
* "{@code java.lang.String[][]}",
|
||||
* and the parameterized type {@code List<Integer>} may return
|
||||
* "{@code java.util.List<java.lang.Integer>}".
|
||||
*
|
||||
* @return a string representation of the type.
|
||||
*/
|
||||
String toString();
|
||||
|
||||
/**
|
||||
* Return true if this type represents a primitive type.
|
||||
*
|
||||
* @return true if this type represents a primitive type.
|
||||
* @since 1.5
|
||||
*/
|
||||
boolean isPrimitive();
|
||||
|
||||
/**
|
||||
* Return this type as a {@code ClassDoc} if it represents a class
|
||||
* or interface. Array dimensions are ignored.
|
||||
* If this type is a {@code ParameterizedType},
|
||||
* {@code TypeVariable}, or {@code WildcardType}, return
|
||||
* the {@code ClassDoc} of the type's erasure. If this is an
|
||||
* {@code AnnotationTypeDoc}, return this as a {@code ClassDoc}
|
||||
* (but see {@link #asAnnotationTypeDoc()}).
|
||||
* If this is a primitive type, return null.
|
||||
*
|
||||
* @return the {@code ClassDoc} of this type,
|
||||
* or null if it is a primitive type.
|
||||
*/
|
||||
ClassDoc asClassDoc();
|
||||
|
||||
/**
|
||||
* Return this type as a {@code ParameterizedType} if it represents
|
||||
* an invocation of a generic class or interface. Array dimensions
|
||||
* are ignored.
|
||||
*
|
||||
* @return a {@code ParameterizedType} if the type is an
|
||||
* invocation of a generic type, or null if it is not.
|
||||
* @since 1.5
|
||||
*/
|
||||
ParameterizedType asParameterizedType();
|
||||
|
||||
/**
|
||||
* Return this type as a {@code TypeVariable} if it represents
|
||||
* a type variable. Array dimensions are ignored.
|
||||
*
|
||||
* @return a {@code TypeVariable} if the type is a type variable,
|
||||
* or null if it is not.
|
||||
* @since 1.5
|
||||
*/
|
||||
TypeVariable asTypeVariable();
|
||||
|
||||
/**
|
||||
* Return this type as a {@code WildcardType} if it represents
|
||||
* a wildcard type.
|
||||
*
|
||||
* @return a {@code WildcardType} if the type is a wildcard type,
|
||||
* or null if it is not.
|
||||
* @since 1.5
|
||||
*/
|
||||
WildcardType asWildcardType();
|
||||
|
||||
/**
|
||||
* Returns this type as a {@code AnnotatedType} if it represents
|
||||
* an annotated type.
|
||||
*
|
||||
* @return a {@code AnnotatedType} if the type if an annotated type,
|
||||
* or null if it is not
|
||||
* @since 1.8
|
||||
*/
|
||||
AnnotatedType asAnnotatedType();
|
||||
|
||||
/**
|
||||
* Return this type as an {@code AnnotationTypeDoc} if it represents
|
||||
* an annotation type. Array dimensions are ignored.
|
||||
*
|
||||
* @return an {@code AnnotationTypeDoc} if the type is an annotation
|
||||
* type, or null if it is not.
|
||||
* @since 1.5
|
||||
*/
|
||||
AnnotationTypeDoc asAnnotationTypeDoc();
|
||||
|
||||
/**
|
||||
* If this type is an array type, return the element type of the
|
||||
* array. Otherwise, return null.
|
||||
*
|
||||
* @return a {@code Type} representing the element type or null.
|
||||
* @since 1.8
|
||||
*/
|
||||
Type getElementType();
|
||||
}
|
||||
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a type variable.
|
||||
* For example, the generic interface {@code List<E>} has a single
|
||||
* type variable {@code E}.
|
||||
* A type variable may have explicit bounds, as in
|
||||
* {@code C<R extends Remote>}.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface TypeVariable extends Type {
|
||||
|
||||
/**
|
||||
* Return the bounds of this type variable.
|
||||
* These are the types given by the <i>extends</i> clause.
|
||||
* Return an empty array if there are no explicit bounds.
|
||||
*
|
||||
* @return the bounds of this type variable.
|
||||
*/
|
||||
Type[] bounds();
|
||||
|
||||
/**
|
||||
* Return the class, interface, method, or constructor within
|
||||
* which this type variable is declared.
|
||||
*
|
||||
* @return the class, interface, method, or constructor within
|
||||
* which this type variable is declared.
|
||||
*/
|
||||
ProgramElementDoc owner();
|
||||
|
||||
/**
|
||||
* Get the annotations of this program element.
|
||||
* Return an empty array if there are none.
|
||||
*
|
||||
* @return the annotations of this program element or
|
||||
* an empty array if there are none.
|
||||
*/
|
||||
public AnnotationDesc[] annotations();
|
||||
|
||||
}
|
||||
@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.javadoc;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a wildcard type argument.
|
||||
* Examples include: <pre>
|
||||
* {@code <?>}
|
||||
* {@code <? extends E>}
|
||||
* {@code <? super T>}
|
||||
* </pre>
|
||||
* A wildcard type can have explicit <i>extends</i> bounds
|
||||
* or explicit <i>super</i> bounds or neither, but not both.
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*
|
||||
* @deprecated
|
||||
* The declarations in this package have been superseded by those
|
||||
* in the package {@code jdk.javadoc.doclet}.
|
||||
* For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public interface WildcardType extends Type {
|
||||
|
||||
/**
|
||||
* Return the upper bounds of this wildcard type argument
|
||||
* as given by the <i>extends</i> clause.
|
||||
* Return an empty array if no such bounds are explicitly given.
|
||||
*
|
||||
* @return the extends bounds of this wildcard type argument
|
||||
*/
|
||||
Type[] extendsBounds();
|
||||
|
||||
/**
|
||||
* Return the lower bounds of this wildcard type argument
|
||||
* as given by the <i>super</i> clause.
|
||||
* Return an empty array if no such bounds are explicitly given.
|
||||
*
|
||||
* @return the super bounds of this wildcard type argument
|
||||
*/
|
||||
Type[] superBounds();
|
||||
}
|
||||
@ -1,153 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2017, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
<p style="font-style: italic; font-size:larger">
|
||||
<b>Note:</b> The declarations in this package have been superseded by those
|
||||
in the package {@link jdk.javadoc.doclet}.
|
||||
For more information, see the <i>Migration Guide</i> in the documentation for that package.
|
||||
</p>
|
||||
|
||||
The Doclet API (also called the Javadoc API) provides a mechanism
|
||||
for clients to inspect the source-level structure of programs and
|
||||
libraries, including javadoc comments embedded in the source.
|
||||
This is useful for documentation, program checking, automatic
|
||||
code generation and many other tools.
|
||||
<p>
|
||||
|
||||
Doclets are invoked by javadoc and use this API to write out
|
||||
program information to files. For example, the standard doclet is called
|
||||
by default and writes out documentation to HTML files.
|
||||
<p>
|
||||
|
||||
The invocation is defined by the abstract {@link com.sun.javadoc.Doclet} class
|
||||
-- the entry point is the {@link com.sun.javadoc.Doclet#start(RootDoc) start} method:
|
||||
<pre>
|
||||
public static boolean <b>start</b>(RootDoc root)
|
||||
</pre>
|
||||
The {@link com.sun.javadoc.RootDoc} instance holds the root of the program structure
|
||||
information. From this root all other program structure
|
||||
information can be extracted.
|
||||
<p>
|
||||
|
||||
<a id="terminology"></a>
|
||||
<h3>Terminology</h3>
|
||||
|
||||
<a id="included"></a>
|
||||
When calling javadoc, you pass in package names and source file names --
|
||||
these are called the <em>specified</em> packages and classes.
|
||||
You also pass in Javadoc options; the <em>access control</em> Javadoc options
|
||||
({@code -public}, {@code -protected}, {@code -package},
|
||||
and {@code -private}) filter program elements, producing a
|
||||
result set, called the <em>included</em> set, or "documented" set.
|
||||
(The unfiltered set is also available through
|
||||
{@link com.sun.javadoc.PackageDoc#allClasses(boolean) allClasses(false)}.)
|
||||
<p>
|
||||
|
||||
<a id="class"></a>
|
||||
Throughout this API, the term <em>class</em> is normally a
|
||||
shorthand for "class or interface", as in: {@link com.sun.javadoc.ClassDoc},
|
||||
{@link com.sun.javadoc.PackageDoc#allClasses() allClasses()}, and
|
||||
{@link com.sun.javadoc.PackageDoc#findClass(String) findClass(String)}.
|
||||
In only a couple of other places, it means "class, as opposed to interface",
|
||||
as in: {@link com.sun.javadoc.Doc#isClass()}.
|
||||
In the second sense, this API calls out four kinds of classes:
|
||||
{@linkplain com.sun.javadoc.Doc#isOrdinaryClass() ordinary classes},
|
||||
{@linkplain com.sun.javadoc.Doc#isEnum() enums},
|
||||
{@linkplain com.sun.javadoc.Doc#isError() errors} and
|
||||
{@linkplain com.sun.javadoc.Doc#isException() exceptions}.
|
||||
Throughout the API, the detailed description of each program element
|
||||
describes explicitly which meaning is being used.
|
||||
<p>
|
||||
|
||||
<a id="qualified"></a>
|
||||
A <em>qualified</em> class or interface name is one that has its package
|
||||
name prepended to it, such as {@code java.lang.String}. A non-qualified
|
||||
name has no package name, such as {@code String}.
|
||||
<p>
|
||||
|
||||
<a id="example"></a>
|
||||
<h3>Example</h3>
|
||||
|
||||
The following is an example doclet that
|
||||
displays information in the {@code @param} tags of the processed
|
||||
classes:
|
||||
<pre>
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
public class ListParams extends <span style="color:#E00000" >Doclet</span> {
|
||||
|
||||
public static boolean start(<span style="color:#E00000" >RootDoc</span> root) {
|
||||
<span style="color:#E00000" >ClassDoc</span>[] classes = root.<span style="color:#E00000" >classes</span>();
|
||||
for (int i = 0; i < classes.length; ++i) {
|
||||
<span style="color:#E00000" >ClassDoc</span> cd = classes[i];
|
||||
printMembers(cd.<span style="color:#E00000" >constructors</span>());
|
||||
printMembers(cd.<span style="color:#E00000" >methods</span>());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static void printMembers(<span style="color:#E00000" >ExecutableMemberDoc</span>[] mems) {
|
||||
for (int i = 0; i < mems.length; ++i) {
|
||||
<span style="color:#E00000" >ParamTag</span>[] params = mems[i].<span style="color:#E00000" >paramTags</span>();
|
||||
System.out.println(mems[i].<span style="color:#E00000" >qualifiedName</span>());
|
||||
for (int j = 0; j < params.length; ++j) {
|
||||
System.out.println(" " + params[j].<span style="color:#E00000" >parameterName</span>()
|
||||
+ " - " + params[j].<span style="color:#E00000" >parameterComment</span>());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</pre>
|
||||
Interfaces and methods from the Javadoc API are marked in
|
||||
<span style="color:#E00000" >red</span>.
|
||||
{@link com.sun.javadoc.Doclet Doclet} is an abstract class that specifies
|
||||
the invocation interface for doclets,
|
||||
{@link com.sun.javadoc.Doclet Doclet} holds class or interface information,
|
||||
{@link com.sun.javadoc.ExecutableMemberDoc} is a
|
||||
superinterface of {@link com.sun.javadoc.MethodDoc} and
|
||||
{@link com.sun.javadoc.ConstructorDoc},
|
||||
and {@link com.sun.javadoc.ParamTag} holds information
|
||||
from "{@code @param}" tags.
|
||||
<p>
|
||||
This doclet when invoked with a command line like:
|
||||
<pre>
|
||||
javadoc -doclet ListParams -sourcepath <source-location> java.util
|
||||
</pre>
|
||||
producing output like:
|
||||
<pre>
|
||||
...
|
||||
java.util.ArrayList.add
|
||||
index - index at which the specified element is to be inserted.
|
||||
element - element to be inserted.
|
||||
java.util.ArrayList.remove
|
||||
index - the index of the element to removed.
|
||||
...
|
||||
|
||||
</pre>
|
||||
@see com.sun.javadoc.Doclet
|
||||
@see com.sun.javadoc.RootDoc
|
||||
*/
|
||||
package com.sun.javadoc;
|
||||
@ -1,48 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 2018, 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 com.sun.tools.doclets.standard;
|
||||
|
||||
import com.sun.javadoc.RootDoc;
|
||||
|
||||
/**
|
||||
* This is not the doclet you are looking for.
|
||||
* @deprecated The doclet has been superseded by its replacement,
|
||||
* {@link jdk.javadoc.doclet.StandardDoclet}.
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
|
||||
public class Standard {
|
||||
|
||||
public static boolean start(RootDoc root) {
|
||||
root.printNotice("Notice: " + "This is not the Standard Doclet");
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int optionLength(String option) {
|
||||
return 0; // all options are unsupported
|
||||
}
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2017, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
<p style="font-style: italic; font-size:larger">
|
||||
<b>Note:</b> The declarations in this package have been replaced by those
|
||||
in the new package {@link jdk.javadoc.doclet}.
|
||||
</p>
|
||||
*/
|
||||
|
||||
package com.sun.tools.doclets.standard;
|
||||
@ -1,205 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2018, 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 com.sun.tools.javadoc;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
|
||||
import com.sun.tools.javadoc.main.Start;
|
||||
|
||||
/**
|
||||
* Provides external entry points (tool and programmatic)
|
||||
* for the javadoc program.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @deprecated
|
||||
* This class is now deprecated and may be removed in a future release.
|
||||
* See
|
||||
* {@code javax.tools.ToolProvider::getSystemDocumentationTool}
|
||||
* and
|
||||
* {@code javax.tools.DocumentationTool}
|
||||
* for replacement functionality.
|
||||
*
|
||||
* @since 1.4
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class Main {
|
||||
|
||||
/**
|
||||
* Constructor should never be called.
|
||||
*/
|
||||
private Main() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Command line interface.
|
||||
* @param args The command line parameters.
|
||||
*/
|
||||
public static void main(String... args) {
|
||||
System.exit(execute(args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
*/
|
||||
public static int execute(String... args) {
|
||||
Start jdoc = new Start();
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param args The command line parameters.
|
||||
* @param docletParentClassLoader The parent class loader used when
|
||||
* creating the doclet classloader. If null, the class loader used
|
||||
* to instantiate doclets will be created without specifying a parent
|
||||
* class loader.
|
||||
* @return The return code.
|
||||
* @since 1.7
|
||||
*/
|
||||
public static int execute(ClassLoader docletParentClassLoader, String... args) {
|
||||
Start jdoc = new Start(docletParentClassLoader);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
*/
|
||||
public static int execute(String programName, String... args) {
|
||||
Start jdoc = new Start(programName);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param args The command line parameters.
|
||||
* @param docletParentClassLoader The parent class loader used when
|
||||
* creating the doclet classloader. If null, the class loader used
|
||||
* to instantiate doclets will be created without specifying a parent
|
||||
* class loader.
|
||||
* @return The return code.
|
||||
* @since 1.7
|
||||
*/
|
||||
public static int execute(String programName, ClassLoader docletParentClassLoader, String... args) {
|
||||
Start jdoc = new Start(programName, docletParentClassLoader);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param defaultDocletClassName Fully qualified class name.
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
*/
|
||||
public static int execute(String programName,
|
||||
String defaultDocletClassName,
|
||||
String... args) {
|
||||
Start jdoc = new Start(programName, defaultDocletClassName);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param defaultDocletClassName Fully qualified class name.
|
||||
* @param docletParentClassLoader The parent class loader used when
|
||||
* creating the doclet classloader. If null, the class loader used
|
||||
* to instantiate doclets will be created without specifying a parent
|
||||
* class loader.
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
* @since 1.7
|
||||
*/
|
||||
public static int execute(String programName,
|
||||
String defaultDocletClassName,
|
||||
ClassLoader docletParentClassLoader,
|
||||
String... args) {
|
||||
Start jdoc = new Start(programName, defaultDocletClassName, docletParentClassLoader);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param errWriter PrintWriter to receive error messages.
|
||||
* @param warnWriter PrintWriter to receive error messages.
|
||||
* @param noticeWriter PrintWriter to receive error messages.
|
||||
* @param defaultDocletClassName Fully qualified class name.
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
*/
|
||||
public static int execute(String programName,
|
||||
PrintWriter errWriter,
|
||||
PrintWriter warnWriter,
|
||||
PrintWriter noticeWriter,
|
||||
String defaultDocletClassName,
|
||||
String... args) {
|
||||
Start jdoc = new Start(programName,
|
||||
errWriter, warnWriter, noticeWriter,
|
||||
defaultDocletClassName);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Programmatic interface.
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param errWriter PrintWriter to receive error messages.
|
||||
* @param warnWriter PrintWriter to receive error messages.
|
||||
* @param noticeWriter PrintWriter to receive error messages.
|
||||
* @param defaultDocletClassName Fully qualified class name.
|
||||
* @param docletParentClassLoader The parent class loader used when
|
||||
* creating the doclet classloader. If null, the class loader used
|
||||
* to instantiate doclets will be created without specifying a parent
|
||||
* class loader.
|
||||
* @param args The command line parameters.
|
||||
* @return The return code.
|
||||
* @since 1.7
|
||||
*/
|
||||
public static int execute(String programName,
|
||||
PrintWriter errWriter,
|
||||
PrintWriter warnWriter,
|
||||
PrintWriter noticeWriter,
|
||||
String defaultDocletClassName,
|
||||
ClassLoader docletParentClassLoader,
|
||||
String... args) {
|
||||
Start jdoc = new Start(programName,
|
||||
errWriter, warnWriter, noticeWriter,
|
||||
defaultDocletClassName,
|
||||
docletParentClassLoader);
|
||||
return jdoc.begin(args);
|
||||
}
|
||||
}
|
||||
@ -1,117 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Type;
|
||||
|
||||
|
||||
/**
|
||||
* Abstract implementation of <code>Type</code>, with useful
|
||||
* defaults for the methods in <code>Type</code> (and a couple from
|
||||
* <code>ProgramElementDoc</code>).
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
abstract class AbstractTypeImpl implements com.sun.javadoc.Type {
|
||||
|
||||
protected final DocEnv env;
|
||||
protected final Type type;
|
||||
|
||||
protected AbstractTypeImpl(DocEnv env, Type type) {
|
||||
this.env = env;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String typeName() {
|
||||
return type.tsym.name.toString();
|
||||
}
|
||||
|
||||
public String qualifiedTypeName() {
|
||||
return type.tsym.getQualifiedName().toString();
|
||||
}
|
||||
|
||||
public com.sun.javadoc.Type getElementType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String simpleTypeName() {
|
||||
return type.tsym.name.toString();
|
||||
}
|
||||
|
||||
public String name() {
|
||||
return typeName();
|
||||
}
|
||||
|
||||
public String qualifiedName() {
|
||||
return qualifiedTypeName();
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return qualifiedTypeName();
|
||||
}
|
||||
|
||||
public String dimension() {
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean isPrimitive() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public ClassDoc asClassDoc() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public TypeVariable asTypeVariable() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public WildcardType asWildcardType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public AnnotationTypeDoc asAnnotationTypeDoc() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public AnnotatedType asAnnotatedType() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@ -1,127 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Attribute.TypeCompound;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
/**
|
||||
* Implementation of <code>AnnotatedType</code>, which
|
||||
* represents an annotated type.
|
||||
*
|
||||
* @author Mahmood Ali
|
||||
* @since 1.8
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class AnnotatedTypeImpl
|
||||
extends AbstractTypeImpl implements AnnotatedType {
|
||||
|
||||
AnnotatedTypeImpl(DocEnv env, com.sun.tools.javac.code.Type type) {
|
||||
super(env, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the annotations of this program element.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
@Override
|
||||
public AnnotationDesc[] annotations() {
|
||||
List<? extends TypeCompound> tas = type.getAnnotationMirrors();
|
||||
if (tas == null ||
|
||||
tas.isEmpty()) {
|
||||
return new AnnotationDesc[0];
|
||||
}
|
||||
AnnotationDesc res[] = new AnnotationDesc[tas.length()];
|
||||
int i = 0;
|
||||
for (Attribute.Compound a : tas) {
|
||||
res[i++] = new AnnotationDescImpl(env, a);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public com.sun.javadoc.Type underlyingType() {
|
||||
return TypeMaker.getType(env, type, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AnnotatedType asAnnotatedType() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return typeName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String typeName() {
|
||||
return this.underlyingType().typeName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String qualifiedTypeName() {
|
||||
return this.underlyingType().qualifiedTypeName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String simpleTypeName() {
|
||||
return this.underlyingType().simpleTypeName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String dimension() {
|
||||
return this.underlyingType().dimension();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPrimitive() {
|
||||
return this.underlyingType().isPrimitive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassDoc asClassDoc() {
|
||||
return this.underlyingType().asClassDoc();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeVariable asTypeVariable() {
|
||||
return this.underlyingType().asTypeVariable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildcardType asWildcardType() {
|
||||
return this.underlyingType().asWildcardType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return this.underlyingType().asParameterizedType();
|
||||
}
|
||||
}
|
||||
@ -1,179 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.Pair;
|
||||
|
||||
|
||||
/**
|
||||
* Represents an annotation.
|
||||
* An annotation associates a value with each element of an annotation type.
|
||||
* Sure it ought to be called "Annotation", but that clashes with
|
||||
* java.lang.annotation.Annotation.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class AnnotationDescImpl implements AnnotationDesc {
|
||||
|
||||
private final DocEnv env;
|
||||
private final Attribute.Compound annotation;
|
||||
|
||||
|
||||
AnnotationDescImpl(DocEnv env, Attribute.Compound annotation) {
|
||||
this.env = env;
|
||||
this.annotation = annotation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the annotation type of this annotation.
|
||||
*/
|
||||
public AnnotationTypeDoc annotationType() {
|
||||
ClassSymbol atsym = (ClassSymbol)annotation.type.tsym;
|
||||
if (annotation.type.isErroneous()) {
|
||||
env.warning(null, "javadoc.class_not_found", annotation.type.toString());
|
||||
return new AnnotationTypeDocImpl(env, atsym);
|
||||
} else {
|
||||
return (AnnotationTypeDoc)env.getClassDoc(atsym);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns this annotation's elements and their values.
|
||||
* Only those explicitly present in the annotation are
|
||||
* included, not those assuming their default values.
|
||||
* Returns an empty array if there are none.
|
||||
*/
|
||||
public ElementValuePair[] elementValues() {
|
||||
List<Pair<MethodSymbol,Attribute>> vals = annotation.values;
|
||||
ElementValuePair res[] = new ElementValuePair[vals.length()];
|
||||
int i = 0;
|
||||
for (Pair<MethodSymbol,Attribute> val : vals) {
|
||||
res[i++] = new ElementValuePairImpl(env, val.fst, val.snd);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for the synthesized bit on the annotation.
|
||||
*
|
||||
* @return true if the annotation is synthesized.
|
||||
*/
|
||||
public boolean isSynthesized() {
|
||||
return annotation.isSynthesized();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of this annotation.
|
||||
* String is of one of the forms:
|
||||
* <pre>
|
||||
* {@code @com.example.foo(name1=val1, name2=val2)}
|
||||
* {@code @com.example.foo(val)}
|
||||
* {@code @com.example.foo}
|
||||
* </pre>
|
||||
* Omit parens for marker annotations, and omit "value=" when allowed.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder("@");
|
||||
sb.append(annotation.type.tsym);
|
||||
|
||||
ElementValuePair vals[] = elementValues();
|
||||
if (vals.length > 0) { // omit parens for marker annotation
|
||||
sb.append('(');
|
||||
boolean first = true;
|
||||
for (ElementValuePair val : vals) {
|
||||
if (!first) {
|
||||
sb.append(", ");
|
||||
}
|
||||
first = false;
|
||||
|
||||
String name = val.element().name();
|
||||
if (vals.length == 1 && name.equals("value")) {
|
||||
sb.append(val.value());
|
||||
} else {
|
||||
sb.append(val);
|
||||
}
|
||||
}
|
||||
sb.append(')');
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Represents an association between an annotation type element
|
||||
* and one of its values.
|
||||
*/
|
||||
public static class ElementValuePairImpl implements ElementValuePair {
|
||||
|
||||
private final DocEnv env;
|
||||
private final MethodSymbol meth;
|
||||
private final Attribute value;
|
||||
|
||||
ElementValuePairImpl(DocEnv env, MethodSymbol meth, Attribute value) {
|
||||
this.env = env;
|
||||
this.meth = meth;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the annotation type element.
|
||||
*/
|
||||
public AnnotationTypeElementDoc element() {
|
||||
return env.getAnnotationTypeElementDoc(meth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value associated with the annotation type element.
|
||||
*/
|
||||
public AnnotationValue value() {
|
||||
return new AnnotationValueImpl(env, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of this pair
|
||||
* of the form "name=value".
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return meth.name + "=" + value();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,108 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
|
||||
|
||||
import static com.sun.tools.javac.code.Kinds.Kind.*;
|
||||
|
||||
/**
|
||||
* Represents an annotation type.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class AnnotationTypeDocImpl
|
||||
extends ClassDocImpl implements AnnotationTypeDoc {
|
||||
|
||||
public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym) {
|
||||
this(env, sym, null);
|
||||
}
|
||||
|
||||
public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true, as this is an annotation type.
|
||||
* (For legacy doclets, return false.)
|
||||
*/
|
||||
public boolean isAnnotationType() {
|
||||
return !isInterface();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false. Though technically an interface, an annotation
|
||||
* type is not considered an interface for this purpose.
|
||||
* (For legacy doclets, returns true.)
|
||||
*/
|
||||
public boolean isInterface() {
|
||||
return env.legacyDoclet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an empty array, as all methods are annotation type elements.
|
||||
* (For legacy doclets, returns the elements.)
|
||||
* @see #elements()
|
||||
*/
|
||||
public MethodDoc[] methods(boolean filter) {
|
||||
return env.legacyDoclet
|
||||
? (MethodDoc[])elements()
|
||||
: new MethodDoc[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the elements of this annotation type.
|
||||
* Returns an empty array if there are none.
|
||||
* Elements are always public, so no need to filter them.
|
||||
*/
|
||||
public AnnotationTypeElementDoc[] elements() {
|
||||
List<AnnotationTypeElementDoc> elements = List.nil();
|
||||
for (Symbol sym : tsym.members().getSymbols(NON_RECURSIVE)) {
|
||||
if (sym != null && sym.kind == MTH) {
|
||||
MethodSymbol s = (MethodSymbol)sym;
|
||||
elements = elements.prepend(env.getAnnotationTypeElementDoc(s));
|
||||
}
|
||||
}
|
||||
return
|
||||
elements.toArray(new AnnotationTypeElementDoc[elements.length()]);
|
||||
}
|
||||
}
|
||||
@ -1,92 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
|
||||
/**
|
||||
* Represents an element of an annotation type.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class AnnotationTypeElementDocImpl
|
||||
extends MethodDocImpl implements AnnotationTypeElementDoc {
|
||||
|
||||
public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym) {
|
||||
super(env, sym);
|
||||
}
|
||||
|
||||
public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true, as this is an annotation type element.
|
||||
* (For legacy doclets, return false.)
|
||||
*/
|
||||
public boolean isAnnotationTypeElement() {
|
||||
return !isMethod();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false. Although this is technically a method, we don't
|
||||
* consider it one for this purpose.
|
||||
* (For legacy doclets, return true.)
|
||||
*/
|
||||
public boolean isMethod() {
|
||||
return env.legacyDoclet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false, even though this is indeed abstract. See
|
||||
* MethodDocImpl.isAbstract() for the (il)logic behind this.
|
||||
*/
|
||||
public boolean isAbstract() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default value of this element.
|
||||
* Returns null if this element has no default.
|
||||
*/
|
||||
public AnnotationValue defaultValue() {
|
||||
return (sym.defaultValue == null)
|
||||
? null
|
||||
: new AnnotationValueImpl(env, sym.defaultValue);
|
||||
}
|
||||
}
|
||||
@ -1,178 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
|
||||
import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
|
||||
|
||||
/**
|
||||
* Represents a value of an annotation type element.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class AnnotationValueImpl implements AnnotationValue {
|
||||
|
||||
private final DocEnv env;
|
||||
private final Attribute attr;
|
||||
|
||||
|
||||
AnnotationValueImpl(DocEnv env, Attribute attr) {
|
||||
this.env = env;
|
||||
this.attr = attr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value.
|
||||
* The type of the returned object is one of the following:
|
||||
* <ul><li> a wrapper class for a primitive type
|
||||
* <li> <code>String</code>
|
||||
* <li> <code>Type</code> (representing a class literal)
|
||||
* <li> <code>FieldDoc</code> (representing an enum constant)
|
||||
* <li> <code>AnnotationDesc</code>
|
||||
* <li> <code>AnnotationValue[]</code>
|
||||
* </ul>
|
||||
*/
|
||||
public Object value() {
|
||||
ValueVisitor vv = new ValueVisitor();
|
||||
attr.accept(vv);
|
||||
return vv.value;
|
||||
}
|
||||
|
||||
private class ValueVisitor implements Attribute.Visitor {
|
||||
public Object value;
|
||||
|
||||
public void visitConstant(Attribute.Constant c) {
|
||||
if (c.type.hasTag(BOOLEAN)) {
|
||||
// javac represents false and true as integers 0 and 1
|
||||
value = Boolean.valueOf(
|
||||
((Integer)c.value).intValue() != 0);
|
||||
} else {
|
||||
value = c.value;
|
||||
}
|
||||
}
|
||||
|
||||
public void visitClass(Attribute.Class c) {
|
||||
value = TypeMaker.getType(env,
|
||||
env.types.erasure(c.classType));
|
||||
}
|
||||
|
||||
public void visitEnum(Attribute.Enum e) {
|
||||
value = env.getFieldDoc(e.value);
|
||||
}
|
||||
|
||||
public void visitCompound(Attribute.Compound c) {
|
||||
value = new AnnotationDescImpl(env, c);
|
||||
}
|
||||
|
||||
public void visitArray(Attribute.Array a) {
|
||||
AnnotationValue vals[] = new AnnotationValue[a.values.length];
|
||||
for (int i = 0; i < vals.length; i++) {
|
||||
vals[i] = new AnnotationValueImpl(env, a.values[i]);
|
||||
}
|
||||
value = vals;
|
||||
}
|
||||
|
||||
public void visitError(Attribute.Error e) {
|
||||
value = "<error>";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the value.
|
||||
*
|
||||
* @return the text of a Java language annotation value expression
|
||||
* whose value is the value of this annotation type element.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
ToStringVisitor tv = new ToStringVisitor();
|
||||
attr.accept(tv);
|
||||
return tv.toString();
|
||||
}
|
||||
|
||||
private class ToStringVisitor implements Attribute.Visitor {
|
||||
private final StringBuilder sb = new StringBuilder();
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public void visitConstant(Attribute.Constant c) {
|
||||
if (c.type.hasTag(BOOLEAN)) {
|
||||
// javac represents false and true as integers 0 and 1
|
||||
sb.append(((Integer)c.value).intValue() != 0);
|
||||
} else {
|
||||
sb.append(FieldDocImpl.constantValueExpression(c.value));
|
||||
}
|
||||
}
|
||||
|
||||
public void visitClass(Attribute.Class c) {
|
||||
sb.append(c);
|
||||
}
|
||||
|
||||
public void visitEnum(Attribute.Enum e) {
|
||||
sb.append(e);
|
||||
}
|
||||
|
||||
public void visitCompound(Attribute.Compound c) {
|
||||
sb.append(new AnnotationDescImpl(env, c));
|
||||
}
|
||||
|
||||
public void visitArray(Attribute.Array a) {
|
||||
// Omit braces from singleton.
|
||||
if (a.values.length != 1) sb.append('{');
|
||||
|
||||
boolean first = true;
|
||||
for (Attribute elem : a.values) {
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
sb.append(", ");
|
||||
}
|
||||
elem.accept(this);
|
||||
}
|
||||
// Omit braces from singleton.
|
||||
if (a.values.length != 1) sb.append('}');
|
||||
}
|
||||
|
||||
public void visitError(Attribute.Error e) {
|
||||
sb.append("<error>");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,462 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
|
||||
/**
|
||||
* Comment contains all information in comment part.
|
||||
* It allows users to get first sentence of this comment, get
|
||||
* comment for different tags...
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Atul M Dambalkar
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class Comment {
|
||||
|
||||
/**
|
||||
* sorted comments with different tags.
|
||||
*/
|
||||
private final ListBuffer<Tag> tagList = new ListBuffer<>();
|
||||
|
||||
/**
|
||||
* text minus any tags.
|
||||
*/
|
||||
private String text;
|
||||
|
||||
/**
|
||||
* Doc environment
|
||||
*/
|
||||
private final DocEnv docenv;
|
||||
|
||||
/**
|
||||
* constructor of Comment.
|
||||
*/
|
||||
Comment(final DocImpl holder, final String commentString) {
|
||||
this.docenv = holder.env;
|
||||
|
||||
/**
|
||||
* Separate the comment into the text part and zero to N tags.
|
||||
* Simple state machine is in one of three states:
|
||||
* <pre>
|
||||
* IN_TEXT: parsing the comment text or tag text.
|
||||
* TAG_NAME: parsing the name of a tag.
|
||||
* TAG_GAP: skipping through the gap between the tag name and
|
||||
* the tag text.
|
||||
* </pre>
|
||||
*/
|
||||
@SuppressWarnings("fallthrough")
|
||||
class CommentStringParser {
|
||||
/**
|
||||
* The entry point to the comment string parser
|
||||
*/
|
||||
void parseCommentStateMachine() {
|
||||
final int IN_TEXT = 1;
|
||||
final int TAG_GAP = 2;
|
||||
final int TAG_NAME = 3;
|
||||
int state = TAG_GAP;
|
||||
boolean newLine = true;
|
||||
String tagName = null;
|
||||
int tagStart = 0;
|
||||
int textStart = 0;
|
||||
int lastNonWhite = -1;
|
||||
int len = commentString.length();
|
||||
for (int inx = 0; inx < len; ++inx) {
|
||||
char ch = commentString.charAt(inx);
|
||||
boolean isWhite = Character.isWhitespace(ch);
|
||||
switch (state) {
|
||||
case TAG_NAME:
|
||||
if (isWhite) {
|
||||
tagName = commentString.substring(tagStart, inx);
|
||||
state = TAG_GAP;
|
||||
}
|
||||
break;
|
||||
case TAG_GAP:
|
||||
if (isWhite) {
|
||||
break;
|
||||
}
|
||||
textStart = inx;
|
||||
state = IN_TEXT;
|
||||
/* fall thru */
|
||||
case IN_TEXT:
|
||||
if (newLine && ch == '@') {
|
||||
parseCommentComponent(tagName, textStart,
|
||||
lastNonWhite+1);
|
||||
tagStart = inx;
|
||||
state = TAG_NAME;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (ch == '\n') {
|
||||
newLine = true;
|
||||
} else if (!isWhite) {
|
||||
lastNonWhite = inx;
|
||||
newLine = false;
|
||||
}
|
||||
}
|
||||
// Finish what's currently being processed
|
||||
switch (state) {
|
||||
case TAG_NAME:
|
||||
tagName = commentString.substring(tagStart, len);
|
||||
/* fall thru */
|
||||
case TAG_GAP:
|
||||
textStart = len;
|
||||
/* fall thru */
|
||||
case IN_TEXT:
|
||||
parseCommentComponent(tagName, textStart, lastNonWhite+1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Save away the last parsed item.
|
||||
*/
|
||||
void parseCommentComponent(String tagName,
|
||||
int from, int upto) {
|
||||
String tx = upto <= from ? "" : commentString.substring(from, upto);
|
||||
if (tagName == null) {
|
||||
text = tx;
|
||||
} else {
|
||||
TagImpl tag;
|
||||
switch (tagName) {
|
||||
case "@exception":
|
||||
case "@throws":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new ThrowsTagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@param":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new ParamTagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@see":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new SeeTagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@serialField":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new SerialFieldTagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@return":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new TagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@author":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new TagImpl(holder, tagName, tx);
|
||||
break;
|
||||
case "@version":
|
||||
warnIfEmpty(tagName, tx);
|
||||
tag = new TagImpl(holder, tagName, tx);
|
||||
break;
|
||||
default:
|
||||
tag = new TagImpl(holder, tagName, tx);
|
||||
break;
|
||||
}
|
||||
tagList.append(tag);
|
||||
}
|
||||
}
|
||||
|
||||
void warnIfEmpty(String tagName, String tx) {
|
||||
if (tx.length() == 0) {
|
||||
docenv.warning(holder, "tag.tag_has_no_arguments", tagName);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
new CommentStringParser().parseCommentStateMachine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the text of the comment.
|
||||
*/
|
||||
String commentText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all tags in this comment.
|
||||
*/
|
||||
Tag[] tags() {
|
||||
return tagList.toArray(new Tag[tagList.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return tags of the specified kind in this comment.
|
||||
*/
|
||||
Tag[] tags(String tagname) {
|
||||
ListBuffer<Tag> found = new ListBuffer<>();
|
||||
String target = tagname;
|
||||
if (target.charAt(0) != '@') {
|
||||
target = "@" + target;
|
||||
}
|
||||
for (Tag tag : tagList) {
|
||||
if (tag.kind().equals(target)) {
|
||||
found.append(tag);
|
||||
}
|
||||
}
|
||||
return found.toArray(new Tag[found.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return throws tags in this comment.
|
||||
*/
|
||||
ThrowsTag[] throwsTags() {
|
||||
ListBuffer<ThrowsTag> found = new ListBuffer<>();
|
||||
for (Tag next : tagList) {
|
||||
if (next instanceof ThrowsTag) {
|
||||
found.append((ThrowsTag)next);
|
||||
}
|
||||
}
|
||||
return found.toArray(new ThrowsTag[found.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return param tags (excluding type param tags) in this comment.
|
||||
*/
|
||||
ParamTag[] paramTags() {
|
||||
return paramTags(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return type param tags in this comment.
|
||||
*/
|
||||
ParamTag[] typeParamTags() {
|
||||
return paramTags(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return param tags in this comment. If typeParams is true
|
||||
* include only type param tags, otherwise include only ordinary
|
||||
* param tags.
|
||||
*/
|
||||
private ParamTag[] paramTags(boolean typeParams) {
|
||||
ListBuffer<ParamTag> found = new ListBuffer<>();
|
||||
for (Tag next : tagList) {
|
||||
if (next instanceof ParamTag) {
|
||||
ParamTag p = (ParamTag)next;
|
||||
if (typeParams == p.isTypeParameter()) {
|
||||
found.append(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
return found.toArray(new ParamTag[found.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return see also tags in this comment.
|
||||
*/
|
||||
SeeTag[] seeTags() {
|
||||
ListBuffer<SeeTag> found = new ListBuffer<>();
|
||||
for (Tag next : tagList) {
|
||||
if (next instanceof SeeTag) {
|
||||
found.append((SeeTag)next);
|
||||
}
|
||||
}
|
||||
return found.toArray(new SeeTag[found.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return serialField tags in this comment.
|
||||
*/
|
||||
SerialFieldTag[] serialFieldTags() {
|
||||
ListBuffer<SerialFieldTag> found = new ListBuffer<>();
|
||||
for (Tag next : tagList) {
|
||||
if (next instanceof SerialFieldTag) {
|
||||
found.append((SerialFieldTag)next);
|
||||
}
|
||||
}
|
||||
return found.toArray(new SerialFieldTag[found.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return array of tags with text and inline See Tags for a Doc comment.
|
||||
*/
|
||||
static Tag[] getInlineTags(DocImpl holder, String inlinetext) {
|
||||
ListBuffer<Tag> taglist = new ListBuffer<>();
|
||||
int delimend = 0, textstart = 0, len = inlinetext.length();
|
||||
boolean inPre = false;
|
||||
DocEnv docenv = holder.env;
|
||||
|
||||
if (len == 0) {
|
||||
return taglist.toArray(new Tag[taglist.length()]);
|
||||
}
|
||||
while (true) {
|
||||
int linkstart;
|
||||
if ((linkstart = inlineTagFound(holder, inlinetext,
|
||||
textstart)) == -1) {
|
||||
taglist.append(new TagImpl(holder, "Text",
|
||||
inlinetext.substring(textstart)));
|
||||
break;
|
||||
} else {
|
||||
inPre = scanForPre(inlinetext, textstart, linkstart, inPre);
|
||||
int seetextstart = linkstart;
|
||||
for (int i = linkstart; i < inlinetext.length(); i++) {
|
||||
char c = inlinetext.charAt(i);
|
||||
if (Character.isWhitespace(c) ||
|
||||
c == '}') {
|
||||
seetextstart = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
String linkName = inlinetext.substring(linkstart+2, seetextstart);
|
||||
if (!(inPre && (linkName.equals("code") || linkName.equals("literal")))) {
|
||||
//Move past the white space after the inline tag name.
|
||||
while (Character.isWhitespace(inlinetext.
|
||||
charAt(seetextstart))) {
|
||||
if (inlinetext.length() <= seetextstart) {
|
||||
taglist.append(new TagImpl(holder, "Text",
|
||||
inlinetext.substring(textstart, seetextstart)));
|
||||
docenv.warning(holder,
|
||||
"tag.Improper_Use_Of_Link_Tag",
|
||||
inlinetext);
|
||||
return taglist.toArray(new Tag[taglist.length()]);
|
||||
} else {
|
||||
seetextstart++;
|
||||
}
|
||||
}
|
||||
}
|
||||
taglist.append(new TagImpl(holder, "Text",
|
||||
inlinetext.substring(textstart, linkstart)));
|
||||
textstart = seetextstart; // this text is actually seetag
|
||||
if ((delimend = findInlineTagDelim(inlinetext, textstart)) == -1) {
|
||||
//Missing closing '}' character.
|
||||
// store the text as it is with the {@link.
|
||||
taglist.append(new TagImpl(holder, "Text",
|
||||
inlinetext.substring(textstart)));
|
||||
docenv.warning(holder,
|
||||
"tag.End_delimiter_missing_for_possible_SeeTag",
|
||||
inlinetext);
|
||||
return taglist.toArray(new Tag[taglist.length()]);
|
||||
} else {
|
||||
//Found closing '}' character.
|
||||
if (linkName.equals("see")
|
||||
|| linkName.equals("link")
|
||||
|| linkName.equals("linkplain")) {
|
||||
taglist.append( new SeeTagImpl(holder, "@" + linkName,
|
||||
inlinetext.substring(textstart, delimend)));
|
||||
} else {
|
||||
taglist.append( new TagImpl(holder, "@" + linkName,
|
||||
inlinetext.substring(textstart, delimend)));
|
||||
}
|
||||
textstart = delimend + 1;
|
||||
}
|
||||
}
|
||||
if (textstart == inlinetext.length()) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return taglist.toArray(new Tag[taglist.length()]);
|
||||
}
|
||||
|
||||
/** regex for case-insensitive match for {@literal <pre> } and {@literal </pre> }. */
|
||||
private static final Pattern prePat = Pattern.compile("(?i)<(/?)pre>");
|
||||
|
||||
private static boolean scanForPre(String inlinetext, int start, int end, boolean inPre) {
|
||||
Matcher m = prePat.matcher(inlinetext).region(start, end);
|
||||
while (m.find()) {
|
||||
inPre = m.group(1).isEmpty();
|
||||
}
|
||||
return inPre;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively find the index of the closing '}' character for an inline tag
|
||||
* and return it. If it can't be found, return -1.
|
||||
* @param inlineText the text to search in.
|
||||
* @param searchStart the index of the place to start searching at.
|
||||
* @return the index of the closing '}' character for an inline tag.
|
||||
* If it can't be found, return -1.
|
||||
*/
|
||||
private static int findInlineTagDelim(String inlineText, int searchStart) {
|
||||
int delimEnd, nestedOpenBrace;
|
||||
if ((delimEnd = inlineText.indexOf("}", searchStart)) == -1) {
|
||||
return -1;
|
||||
} else if (((nestedOpenBrace = inlineText.indexOf("{", searchStart)) != -1) &&
|
||||
nestedOpenBrace < delimEnd){
|
||||
//Found a nested open brace.
|
||||
int nestedCloseBrace = findInlineTagDelim(inlineText, nestedOpenBrace + 1);
|
||||
return (nestedCloseBrace != -1) ?
|
||||
findInlineTagDelim(inlineText, nestedCloseBrace + 1) :
|
||||
-1;
|
||||
} else {
|
||||
return delimEnd;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively search for the characters '{', '@', followed by
|
||||
* name of inline tag and white space,
|
||||
* if found
|
||||
* return the index of the text following the white space.
|
||||
* else
|
||||
* return -1.
|
||||
*/
|
||||
private static int inlineTagFound(DocImpl holder, String inlinetext, int start) {
|
||||
DocEnv docenv = holder.env;
|
||||
int linkstart = inlinetext.indexOf("{@", start);
|
||||
if (start == inlinetext.length() || linkstart == -1) {
|
||||
return -1;
|
||||
} else if (inlinetext.indexOf('}', linkstart) == -1) {
|
||||
//Missing '}'.
|
||||
docenv.warning(holder, "tag.Improper_Use_Of_Link_Tag",
|
||||
inlinetext.substring(linkstart, inlinetext.length()));
|
||||
return -1;
|
||||
} else {
|
||||
return linkstart;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return array of tags for the locale specific first sentence in the text.
|
||||
*/
|
||||
static Tag[] firstSentenceTags(DocImpl holder, String text) {
|
||||
DocLocale doclocale = holder.env.doclocale;
|
||||
return getInlineTags(holder,
|
||||
doclocale.localeSpecificFirstSentence(holder, text));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return text for this Doc comment.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return text;
|
||||
}
|
||||
}
|
||||
@ -1,105 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
||||
|
||||
/**
|
||||
* Represents a constructor of a java class.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class ConstructorDocImpl
|
||||
extends ExecutableMemberDocImpl implements ConstructorDoc {
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*/
|
||||
public ConstructorDocImpl(DocEnv env, MethodSymbol sym) {
|
||||
super(env, sym);
|
||||
}
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*/
|
||||
public ConstructorDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if it is a constructor, which it is.
|
||||
*
|
||||
* @return true
|
||||
*/
|
||||
public boolean isConstructor() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name.
|
||||
*
|
||||
* @return the name of the member.
|
||||
*/
|
||||
public String name() {
|
||||
ClassSymbol c = sym.enclClass();
|
||||
return c.name.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the name.
|
||||
*
|
||||
* @return the qualified name of the member.
|
||||
*/
|
||||
public String qualifiedName() {
|
||||
return sym.enclClass().getQualifiedName().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of this constructor. Includes the
|
||||
* qualified signature and any type parameters.
|
||||
* Type parameters precede the class name, as they do in the syntax
|
||||
* for invoking constructors with explicit type parameters using "new".
|
||||
* (This is unlike the syntax for invoking methods with explicit type
|
||||
* parameters.)
|
||||
*/
|
||||
public String toString() {
|
||||
return typeParametersString() + qualifiedName() + signature();
|
||||
}
|
||||
}
|
||||
@ -1,881 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
|
||||
import javax.tools.JavaFileManager;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.source.tree.CompilationUnitTree;
|
||||
import com.sun.source.util.JavacTask;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.doclint.DocLint;
|
||||
import com.sun.tools.javac.api.BasicJavacTask;
|
||||
import com.sun.tools.javac.code.*;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.CompletionFailure;
|
||||
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.PackageSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
import com.sun.tools.javac.comp.Check;
|
||||
import com.sun.tools.javac.comp.Enter;
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.tree.JCTree.JCPackageDecl;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.Convert;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
import com.sun.tools.javac.util.Names;
|
||||
|
||||
/**
|
||||
* Holds the environment for a run of javadoc.
|
||||
* Holds only the information needed throughout the
|
||||
* run and not the compiler info that could be GC'ed
|
||||
* or ported.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.4
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
* @author Scott Seligman (generics)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class DocEnv {
|
||||
protected static final Context.Key<DocEnv> docEnvKey = new Context.Key<>();
|
||||
|
||||
public static DocEnv instance(Context context) {
|
||||
DocEnv instance = context.get(docEnvKey);
|
||||
if (instance == null)
|
||||
instance = new DocEnv(context);
|
||||
return instance;
|
||||
}
|
||||
|
||||
DocLocale doclocale;
|
||||
|
||||
private final Messager messager;
|
||||
|
||||
/** Predefined symbols known to the compiler. */
|
||||
final Symtab syms;
|
||||
|
||||
/** Referenced directly in RootDocImpl. */
|
||||
private final ClassFinder finder;
|
||||
|
||||
/** Javadoc's own version of the compiler's enter phase. */
|
||||
final Enter enter;
|
||||
|
||||
/** The name table. */
|
||||
private final Names names;
|
||||
|
||||
/** The encoding name. */
|
||||
private String encoding;
|
||||
|
||||
final Symbol externalizableSym;
|
||||
|
||||
/** Access filter (public, protected, ...). */
|
||||
protected ModifierFilter showAccess;
|
||||
|
||||
/** True if we are using a sentence BreakIterator. */
|
||||
boolean breakiterator;
|
||||
|
||||
/**
|
||||
* True if we do not want to print any notifications at all.
|
||||
*/
|
||||
boolean quiet = false;
|
||||
|
||||
Check chk;
|
||||
Types types;
|
||||
JavaFileManager fileManager;
|
||||
Context context;
|
||||
DocLint doclint;
|
||||
JavaScriptScanner javaScriptScanner;
|
||||
|
||||
WeakHashMap<JCTree, TreePath> treePaths = new WeakHashMap<>();
|
||||
|
||||
/** Allow documenting from class files? */
|
||||
boolean docClasses = false;
|
||||
|
||||
/** Does the doclet only expect pre-1.5 doclet API? */
|
||||
protected boolean legacyDoclet = true;
|
||||
|
||||
/**
|
||||
* Set this to true if you would like to not emit any errors, warnings and
|
||||
* notices.
|
||||
*/
|
||||
private boolean silent = false;
|
||||
|
||||
/**
|
||||
* The source language version.
|
||||
*/
|
||||
protected Source source;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param context Context for this javadoc instance.
|
||||
*/
|
||||
protected DocEnv(Context context) {
|
||||
context.put(docEnvKey, this);
|
||||
this.context = context;
|
||||
|
||||
messager = Messager.instance0(context);
|
||||
syms = Symtab.instance(context);
|
||||
finder = JavadocClassFinder.instance(context);
|
||||
enter = JavadocEnter.instance(context);
|
||||
names = Names.instance(context);
|
||||
externalizableSym = syms.enterClass(syms.java_base, names.fromString("java.io.Externalizable"));
|
||||
chk = Check.instance(context);
|
||||
types = Types.instance(context);
|
||||
fileManager = context.get(JavaFileManager.class);
|
||||
if (fileManager instanceof JavacFileManager) {
|
||||
((JavacFileManager)fileManager).setSymbolFileEnabled(false);
|
||||
}
|
||||
|
||||
// Default. Should normally be reset with setLocale.
|
||||
this.doclocale = new DocLocale(this, "", breakiterator);
|
||||
source = Source.instance(context);
|
||||
}
|
||||
|
||||
public void setSilent(boolean silent) {
|
||||
this.silent = silent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up ClassDoc by qualified name.
|
||||
*/
|
||||
public ClassDocImpl lookupClass(String name) {
|
||||
ClassSymbol c = getClassSymbol(name);
|
||||
if (c != null) {
|
||||
return getClassDoc(c);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load ClassDoc by qualified name.
|
||||
*/
|
||||
public ClassDocImpl loadClass(String name) {
|
||||
try {
|
||||
Name nameImpl = names.fromString(name);
|
||||
ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl));
|
||||
ClassSymbol c = finder.loadClass(mod != null ? mod : syms.errModule, nameImpl);
|
||||
return getClassDoc(c);
|
||||
} catch (CompletionFailure ex) {
|
||||
chk.completionError(null, ex);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up PackageDoc by qualified name.
|
||||
*/
|
||||
public PackageDocImpl lookupPackage(String name) {
|
||||
//### Jing alleges that class check is needed
|
||||
//### to avoid a compiler bug. Most likely
|
||||
//### instead a dummy created for error recovery.
|
||||
//### Should investigate this.
|
||||
Name nameImpl = names.fromString(name);
|
||||
ModuleSymbol mod = syms.inferModule(nameImpl);
|
||||
PackageSymbol p = mod != null ? syms.getPackage(mod, nameImpl) : null;
|
||||
ClassSymbol c = getClassSymbol(name);
|
||||
if (p != null && c == null) {
|
||||
return getPackageDoc(p);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// where
|
||||
/** Retrieve class symbol by fully-qualified name.
|
||||
*/
|
||||
ClassSymbol getClassSymbol(String name) {
|
||||
// Name may contain nested class qualification.
|
||||
// Generate candidate flatnames with successively shorter
|
||||
// package qualifiers and longer nested class qualifiers.
|
||||
int nameLen = name.length();
|
||||
char[] nameChars = name.toCharArray();
|
||||
int idx = name.length();
|
||||
for (;;) {
|
||||
Name nameImpl = names.fromChars(nameChars, 0, nameLen);
|
||||
ModuleSymbol mod = syms.inferModule(Convert.packagePart(nameImpl));
|
||||
ClassSymbol s = mod != null ? syms.getClass(mod, nameImpl) : null;
|
||||
if (s != null)
|
||||
return s; // found it!
|
||||
idx = name.substring(0, idx).lastIndexOf('.');
|
||||
if (idx < 0) break;
|
||||
nameChars[idx] = '$';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the locale.
|
||||
*/
|
||||
public void setLocale(String localeName) {
|
||||
// create locale specifics
|
||||
doclocale = new DocLocale(this, localeName, breakiterator);
|
||||
// update Messager if locale has changed.
|
||||
messager.setLocale(doclocale.locale);
|
||||
}
|
||||
|
||||
/** Check whether this member should be documented. */
|
||||
public boolean shouldDocument(VarSymbol sym) {
|
||||
long mod = sym.flags();
|
||||
|
||||
if ((mod & Flags.SYNTHETIC) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return showAccess.checkModifier(translateModifiers(mod));
|
||||
}
|
||||
|
||||
/** Check whether this member should be documented. */
|
||||
public boolean shouldDocument(MethodSymbol sym) {
|
||||
long mod = sym.flags();
|
||||
|
||||
if ((mod & Flags.SYNTHETIC) != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return showAccess.checkModifier(translateModifiers(mod));
|
||||
}
|
||||
|
||||
/** check whether this class should be documented. */
|
||||
public boolean shouldDocument(ClassSymbol sym) {
|
||||
return
|
||||
(sym.flags_field&Flags.SYNTHETIC) == 0 && // no synthetics
|
||||
(docClasses || getClassDoc(sym).tree != null) &&
|
||||
isVisible(sym);
|
||||
}
|
||||
|
||||
//### Comment below is inaccurate wrt modifier filter testing
|
||||
/**
|
||||
* Check the visibility if this is an nested class.
|
||||
* if this is not a nested class, return true.
|
||||
* if this is an static visible nested class,
|
||||
* return true.
|
||||
* if this is an visible nested class
|
||||
* if the outer class is visible return true.
|
||||
* else return false.
|
||||
* IMPORTANT: This also allows, static nested classes
|
||||
* to be defined inside an nested class, which is not
|
||||
* allowed by the compiler. So such an test case will
|
||||
* not reach upto this method itself, but if compiler
|
||||
* allows it, then that will go through.
|
||||
*/
|
||||
protected boolean isVisible(ClassSymbol sym) {
|
||||
long mod = sym.flags_field;
|
||||
if (!showAccess.checkModifier(translateModifiers(mod))) {
|
||||
return false;
|
||||
}
|
||||
ClassSymbol encl = sym.owner.enclClass();
|
||||
return (encl == null || (mod & Flags.STATIC) != 0 || isVisible(encl));
|
||||
}
|
||||
|
||||
//---------------- print forwarders ----------------//
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printError(String msg) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.printError(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void error(DocImpl doc, String key) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.error(doc==null ? null : doc.position(), key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void error(SourcePosition pos, String key) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.error(pos, key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printError(SourcePosition pos, String msg) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.printError(pos, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
*/
|
||||
public void error(DocImpl doc, String key, String a1) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.error(doc==null ? null : doc.position(), key, a1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
*/
|
||||
public void error(DocImpl doc, String key, String a1, String a2) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.error(doc==null ? null : doc.position(), key, a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
* @param a3 third argument
|
||||
*/
|
||||
public void error(DocImpl doc, String key, String a1, String a2, String a3) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.error(doc==null ? null : doc.position(), key, a1, a2, a3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printWarning(String msg) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.printWarning(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void warning(DocImpl doc, String key) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.warning(doc==null ? null : doc.position(), key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printWarning(SourcePosition pos, String msg) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.printWarning(pos, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
*/
|
||||
public void warning(DocImpl doc, String key, String a1) {
|
||||
if (silent)
|
||||
return;
|
||||
// suppress messages that have (probably) been covered by doclint
|
||||
if (doclint != null && doc != null && key.startsWith("tag"))
|
||||
return;
|
||||
messager.warning(doc==null ? null : doc.position(), key, a1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
*/
|
||||
public void warning(DocImpl doc, String key, String a1, String a2) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.warning(doc==null ? null : doc.position(), key, a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
* @param a3 third argument
|
||||
*/
|
||||
public void warning(DocImpl doc, String key, String a1, String a2, String a3) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.warning(doc==null ? null : doc.position(), key, a1, a2, a3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
* @param a3 third argument
|
||||
*/
|
||||
public void warning(DocImpl doc, String key, String a1, String a2, String a3,
|
||||
String a4) {
|
||||
if (silent)
|
||||
return;
|
||||
messager.warning(doc==null ? null : doc.position(), key, a1, a2, a3, a4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printNotice(String msg) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.printNotice(msg);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void notice(String key) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.notice(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param msg message to print.
|
||||
*/
|
||||
public void printNotice(SourcePosition pos, String msg) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.printNotice(pos, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
*/
|
||||
public void notice(String key, String a1) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.notice(key, a1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
*/
|
||||
public void notice(String key, String a1, String a2) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.notice(key, a1, a2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param a1 first argument
|
||||
* @param a2 second argument
|
||||
* @param a3 third argument
|
||||
*/
|
||||
public void notice(String key, String a1, String a2, String a3) {
|
||||
if (silent || quiet)
|
||||
return;
|
||||
messager.notice(key, a1, a2, a3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit, reporting errors and warnings.
|
||||
*/
|
||||
public void exit() {
|
||||
// Messager should be replaced by a more general
|
||||
// compilation environment. This can probably
|
||||
// subsume DocEnv as well.
|
||||
messager.exit();
|
||||
}
|
||||
|
||||
protected Map<PackageSymbol, PackageDocImpl> packageMap = new HashMap<>();
|
||||
/**
|
||||
* Return the PackageDoc of this package symbol.
|
||||
*/
|
||||
public PackageDocImpl getPackageDoc(PackageSymbol pack) {
|
||||
PackageDocImpl result = packageMap.get(pack);
|
||||
if (result != null) return result;
|
||||
result = new PackageDocImpl(this, pack);
|
||||
packageMap.put(pack, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the PackageDoc (or a subtype) for a package symbol.
|
||||
*/
|
||||
void makePackageDoc(PackageSymbol pack, TreePath treePath) {
|
||||
PackageDocImpl result = packageMap.get(pack);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
} else {
|
||||
result = new PackageDocImpl(this, pack, treePath);
|
||||
packageMap.put(pack, result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected Map<ClassSymbol, ClassDocImpl> classMap = new HashMap<>();
|
||||
/**
|
||||
* Return the ClassDoc (or a subtype) of this class symbol.
|
||||
*/
|
||||
public ClassDocImpl getClassDoc(ClassSymbol clazz) {
|
||||
ClassDocImpl result = classMap.get(clazz);
|
||||
if (result != null) return result;
|
||||
if (isAnnotationType(clazz)) {
|
||||
result = new AnnotationTypeDocImpl(this, clazz);
|
||||
} else {
|
||||
result = new ClassDocImpl(this, clazz);
|
||||
}
|
||||
classMap.put(clazz, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the ClassDoc (or a subtype) for a class symbol.
|
||||
*/
|
||||
protected void makeClassDoc(ClassSymbol clazz, TreePath treePath) {
|
||||
ClassDocImpl result = classMap.get(clazz);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
return;
|
||||
}
|
||||
if (isAnnotationType((JCClassDecl) treePath.getLeaf())) { // flags of clazz may not yet be set
|
||||
result = new AnnotationTypeDocImpl(this, clazz, treePath);
|
||||
} else {
|
||||
result = new ClassDocImpl(this, clazz, treePath);
|
||||
}
|
||||
classMap.put(clazz, result);
|
||||
}
|
||||
|
||||
protected static boolean isAnnotationType(ClassSymbol clazz) {
|
||||
return ClassDocImpl.isAnnotationType(clazz);
|
||||
}
|
||||
|
||||
protected static boolean isAnnotationType(JCClassDecl tree) {
|
||||
return (tree.mods.flags & Flags.ANNOTATION) != 0;
|
||||
}
|
||||
|
||||
protected Map<VarSymbol, FieldDocImpl> fieldMap = new HashMap<>();
|
||||
/**
|
||||
* Return the FieldDoc of this var symbol.
|
||||
*/
|
||||
public FieldDocImpl getFieldDoc(VarSymbol var) {
|
||||
FieldDocImpl result = fieldMap.get(var);
|
||||
if (result != null) return result;
|
||||
result = new FieldDocImpl(this, var);
|
||||
fieldMap.put(var, result);
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* Create a FieldDoc for a var symbol.
|
||||
*/
|
||||
protected void makeFieldDoc(VarSymbol var, TreePath treePath) {
|
||||
FieldDocImpl result = fieldMap.get(var);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
} else {
|
||||
result = new FieldDocImpl(this, var, treePath);
|
||||
fieldMap.put(var, result);
|
||||
}
|
||||
}
|
||||
|
||||
protected Map<MethodSymbol, ExecutableMemberDocImpl> methodMap = new HashMap<>();
|
||||
/**
|
||||
* Create a MethodDoc for this MethodSymbol.
|
||||
* Should be called only on symbols representing methods.
|
||||
*/
|
||||
protected void makeMethodDoc(MethodSymbol meth, TreePath treePath) {
|
||||
MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
} else {
|
||||
result = new MethodDocImpl(this, meth, treePath);
|
||||
methodMap.put(meth, result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the MethodDoc for a MethodSymbol.
|
||||
* Should be called only on symbols representing methods.
|
||||
*/
|
||||
public MethodDocImpl getMethodDoc(MethodSymbol meth) {
|
||||
assert !meth.isConstructor() : "not expecting a constructor symbol";
|
||||
MethodDocImpl result = (MethodDocImpl)methodMap.get(meth);
|
||||
if (result != null) return result;
|
||||
result = new MethodDocImpl(this, meth);
|
||||
methodMap.put(meth, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the ConstructorDoc for a MethodSymbol.
|
||||
* Should be called only on symbols representing constructors.
|
||||
*/
|
||||
protected void makeConstructorDoc(MethodSymbol meth, TreePath treePath) {
|
||||
ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
} else {
|
||||
result = new ConstructorDocImpl(this, meth, treePath);
|
||||
methodMap.put(meth, result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ConstructorDoc for a MethodSymbol.
|
||||
* Should be called only on symbols representing constructors.
|
||||
*/
|
||||
public ConstructorDocImpl getConstructorDoc(MethodSymbol meth) {
|
||||
assert meth.isConstructor() : "expecting a constructor symbol";
|
||||
ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth);
|
||||
if (result != null) return result;
|
||||
result = new ConstructorDocImpl(this, meth);
|
||||
methodMap.put(meth, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the AnnotationTypeElementDoc for a MethodSymbol.
|
||||
* Should be called only on symbols representing annotation type elements.
|
||||
*/
|
||||
protected void makeAnnotationTypeElementDoc(MethodSymbol meth, TreePath treePath) {
|
||||
AnnotationTypeElementDocImpl result =
|
||||
(AnnotationTypeElementDocImpl)methodMap.get(meth);
|
||||
if (result != null) {
|
||||
if (treePath != null) result.setTreePath(treePath);
|
||||
} else {
|
||||
result =
|
||||
new AnnotationTypeElementDocImpl(this, meth, treePath);
|
||||
methodMap.put(meth, result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the AnnotationTypeElementDoc for a MethodSymbol.
|
||||
* Should be called only on symbols representing annotation type elements.
|
||||
*/
|
||||
public AnnotationTypeElementDocImpl getAnnotationTypeElementDoc(
|
||||
MethodSymbol meth) {
|
||||
|
||||
AnnotationTypeElementDocImpl result =
|
||||
(AnnotationTypeElementDocImpl)methodMap.get(meth);
|
||||
if (result != null) return result;
|
||||
result = new AnnotationTypeElementDocImpl(this, meth);
|
||||
methodMap.put(meth, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
// private Map<ClassType, ParameterizedTypeImpl> parameterizedTypeMap =
|
||||
// new HashMap<ClassType, ParameterizedTypeImpl>();
|
||||
/**
|
||||
* Return the ParameterizedType of this instantiation.
|
||||
// * ### Could use Type.sameTypeAs() instead of equality matching in hashmap
|
||||
// * ### to avoid some duplication.
|
||||
*/
|
||||
ParameterizedTypeImpl getParameterizedType(ClassType t) {
|
||||
return new ParameterizedTypeImpl(this, t);
|
||||
// ParameterizedTypeImpl result = parameterizedTypeMap.get(t);
|
||||
// if (result != null) return result;
|
||||
// result = new ParameterizedTypeImpl(this, t);
|
||||
// parameterizedTypeMap.put(t, result);
|
||||
// return result;
|
||||
}
|
||||
|
||||
TreePath getTreePath(JCCompilationUnit tree) {
|
||||
TreePath p = treePaths.get(tree);
|
||||
if (p == null)
|
||||
treePaths.put(tree, p = new TreePath(tree));
|
||||
return p;
|
||||
}
|
||||
|
||||
TreePath getTreePath(JCCompilationUnit toplevel, JCPackageDecl tree) {
|
||||
TreePath p = treePaths.get(tree);
|
||||
if (p == null)
|
||||
treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree));
|
||||
return p;
|
||||
}
|
||||
|
||||
TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl tree) {
|
||||
TreePath p = treePaths.get(tree);
|
||||
if (p == null)
|
||||
treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree));
|
||||
return p;
|
||||
}
|
||||
|
||||
TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl cdecl, JCTree tree) {
|
||||
return new TreePath(getTreePath(toplevel, cdecl), tree);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the encoding.
|
||||
*/
|
||||
public void setEncoding(String encoding) {
|
||||
this.encoding = encoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the encoding.
|
||||
*/
|
||||
public String getEncoding() {
|
||||
return encoding;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert modifier bits from private coding used by
|
||||
* the compiler to that of java.lang.reflect.Modifier.
|
||||
*/
|
||||
static int translateModifiers(long flags) {
|
||||
int result = 0;
|
||||
if ((flags & Flags.ABSTRACT) != 0)
|
||||
result |= Modifier.ABSTRACT;
|
||||
if ((flags & Flags.FINAL) != 0)
|
||||
result |= Modifier.FINAL;
|
||||
if ((flags & Flags.INTERFACE) != 0)
|
||||
result |= Modifier.INTERFACE;
|
||||
if ((flags & Flags.NATIVE) != 0)
|
||||
result |= Modifier.NATIVE;
|
||||
if ((flags & Flags.PRIVATE) != 0)
|
||||
result |= Modifier.PRIVATE;
|
||||
if ((flags & Flags.PROTECTED) != 0)
|
||||
result |= Modifier.PROTECTED;
|
||||
if ((flags & Flags.PUBLIC) != 0)
|
||||
result |= Modifier.PUBLIC;
|
||||
if ((flags & Flags.STATIC) != 0)
|
||||
result |= Modifier.STATIC;
|
||||
if ((flags & Flags.SYNCHRONIZED) != 0)
|
||||
result |= Modifier.SYNCHRONIZED;
|
||||
if ((flags & Flags.TRANSIENT) != 0)
|
||||
result |= Modifier.TRANSIENT;
|
||||
if ((flags & Flags.VOLATILE) != 0)
|
||||
result |= Modifier.VOLATILE;
|
||||
return result;
|
||||
}
|
||||
|
||||
void initDoclint(Collection<String> opts, Collection<String> customTagNames, String htmlVersion) {
|
||||
ArrayList<String> doclintOpts = new ArrayList<>();
|
||||
boolean msgOptionSeen = false;
|
||||
|
||||
for (String opt : opts) {
|
||||
if (opt.startsWith(DocLint.XMSGS_OPTION)) {
|
||||
if (opt.equals(DocLint.XMSGS_CUSTOM_PREFIX + "none"))
|
||||
return;
|
||||
msgOptionSeen = true;
|
||||
}
|
||||
doclintOpts.add(opt);
|
||||
}
|
||||
|
||||
if (!msgOptionSeen) {
|
||||
doclintOpts.add(DocLint.XMSGS_OPTION);
|
||||
}
|
||||
|
||||
String sep = "";
|
||||
StringBuilder customTags = new StringBuilder();
|
||||
for (String customTag : customTagNames) {
|
||||
customTags.append(sep);
|
||||
customTags.append(customTag);
|
||||
sep = DocLint.SEPARATOR;
|
||||
}
|
||||
doclintOpts.add(DocLint.XCUSTOM_TAGS_PREFIX + customTags.toString());
|
||||
doclintOpts.add(DocLint.XHTML_VERSION_PREFIX + htmlVersion);
|
||||
|
||||
JavacTask t = BasicJavacTask.instance(context);
|
||||
doclint = new DocLint();
|
||||
// standard doclet normally generates H1, H2
|
||||
doclintOpts.add(DocLint.XIMPLICIT_HEADERS + "2");
|
||||
doclint.init(t, doclintOpts.toArray(new String[doclintOpts.size()]), false);
|
||||
}
|
||||
|
||||
JavaScriptScanner initJavaScriptScanner(boolean allowScriptInComments) {
|
||||
if (allowScriptInComments) {
|
||||
javaScriptScanner = null;
|
||||
} else {
|
||||
javaScriptScanner = new JavaScriptScanner();
|
||||
}
|
||||
return javaScriptScanner;
|
||||
}
|
||||
|
||||
boolean showTagMessages() {
|
||||
return (doclint == null);
|
||||
}
|
||||
|
||||
Map<CompilationUnitTree, Boolean> shouldCheck = new HashMap<>();
|
||||
|
||||
boolean shouldCheck(CompilationUnitTree unit) {
|
||||
return shouldCheck.computeIfAbsent(unit, doclint :: shouldCheck);
|
||||
}
|
||||
}
|
||||
@ -1,455 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.CollationKey;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.tools.FileObject;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
/**
|
||||
* abstract base class of all Doc classes. Doc item's are representations
|
||||
* of java language constructs (class, package, method,...) which have
|
||||
* comments and have been processed by this run of javadoc. All Doc items
|
||||
* are unique, that is, they are == comparable.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public abstract class DocImpl implements Doc, Comparable<Object> {
|
||||
|
||||
/**
|
||||
* Doc environment
|
||||
*/
|
||||
protected final DocEnv env; //### Rename this everywhere to 'docenv' ?
|
||||
|
||||
/**
|
||||
* Back pointer to the tree node for this doc item.
|
||||
* May be null if there is no associated tree.
|
||||
*/
|
||||
protected TreePath treePath;
|
||||
|
||||
/**
|
||||
* The complex comment object, lazily initialized.
|
||||
*/
|
||||
private Comment comment;
|
||||
|
||||
/**
|
||||
* The cached sort key, to take care of Natural Language Text sorting.
|
||||
*/
|
||||
private CollationKey collationkey = null;
|
||||
|
||||
/**
|
||||
* Raw documentation string.
|
||||
*/
|
||||
protected String documentation; // Accessed in PackageDocImpl, RootDocImpl
|
||||
|
||||
/**
|
||||
* Cached first sentence.
|
||||
*/
|
||||
private Tag[] firstSentence;
|
||||
|
||||
/**
|
||||
* Cached inline tags.
|
||||
*/
|
||||
private Tag[] inlineTags;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
DocImpl(DocEnv env, TreePath treePath) {
|
||||
this.treePath = treePath;
|
||||
this.documentation = getCommentText(treePath);
|
||||
this.env = env;
|
||||
}
|
||||
|
||||
private static String getCommentText(TreePath p) {
|
||||
if (p == null)
|
||||
return null;
|
||||
|
||||
JCCompilationUnit topLevel = (JCCompilationUnit) p.getCompilationUnit();
|
||||
JCTree tree = (JCTree) p.getLeaf();
|
||||
return topLevel.docComments.getCommentText(tree);
|
||||
}
|
||||
|
||||
/**
|
||||
* So subclasses have the option to do lazy initialization of
|
||||
* "documentation" string.
|
||||
*/
|
||||
protected String documentation() {
|
||||
if (documentation == null) documentation = "";
|
||||
return documentation;
|
||||
}
|
||||
|
||||
/**
|
||||
* For lazy initialization of comment.
|
||||
*/
|
||||
Comment comment() {
|
||||
if (comment == null) {
|
||||
String d = documentation();
|
||||
if (env.javaScriptScanner != null) {
|
||||
env.javaScriptScanner.parse(d, new JavaScriptScanner.Reporter() {
|
||||
@Override
|
||||
public void report() {
|
||||
env.error(DocImpl.this, "javadoc.JavaScript_in_comment");
|
||||
throw new Error();
|
||||
}
|
||||
});
|
||||
}
|
||||
if (env.doclint != null
|
||||
&& treePath != null
|
||||
&& env.shouldCheck(treePath.getCompilationUnit())
|
||||
&& d.equals(getCommentText(treePath))) {
|
||||
env.doclint.scan(treePath);
|
||||
}
|
||||
comment = new Comment(this, d);
|
||||
}
|
||||
return comment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the text of the comment for this doc item.
|
||||
* TagImpls have been removed.
|
||||
*/
|
||||
public String commentText() {
|
||||
return comment().commentText();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all tags in this Doc item.
|
||||
*
|
||||
* @return an array of TagImpl containing all tags on this Doc item.
|
||||
*/
|
||||
public Tag[] tags() {
|
||||
return comment().tags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return tags of the specified kind in this Doc item.
|
||||
*
|
||||
* @param tagname name of the tag kind to search for.
|
||||
* @return an array of TagImpl containing all tags whose 'kind()'
|
||||
* matches 'tagname'.
|
||||
*/
|
||||
public Tag[] tags(String tagname) {
|
||||
return comment().tags(tagname);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the see also tags in this Doc item.
|
||||
*
|
||||
* @return an array of SeeTag containing all @see tags.
|
||||
*/
|
||||
public SeeTag[] seeTags() {
|
||||
return comment().seeTags();
|
||||
}
|
||||
|
||||
public Tag[] inlineTags() {
|
||||
if (inlineTags == null) {
|
||||
inlineTags = Comment.getInlineTags(this, commentText());
|
||||
}
|
||||
return inlineTags;
|
||||
}
|
||||
|
||||
public Tag[] firstSentenceTags() {
|
||||
if (firstSentence == null) {
|
||||
//Parse all sentences first to avoid duplicate warnings.
|
||||
inlineTags();
|
||||
try {
|
||||
env.setSilent(true);
|
||||
firstSentence = Comment.firstSentenceTags(this, commentText());
|
||||
} finally {
|
||||
env.setSilent(false);
|
||||
}
|
||||
}
|
||||
return firstSentence;
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility for subclasses which read HTML documentation files.
|
||||
*/
|
||||
String readHTMLDocumentation(InputStream input, FileObject filename) throws IOException {
|
||||
byte[] filecontents = new byte[input.available()];
|
||||
try {
|
||||
DataInputStream dataIn = new DataInputStream(input);
|
||||
dataIn.readFully(filecontents);
|
||||
} finally {
|
||||
input.close();
|
||||
}
|
||||
String encoding = env.getEncoding();
|
||||
String rawDoc = (encoding!=null)
|
||||
? new String(filecontents, encoding)
|
||||
: new String(filecontents);
|
||||
Pattern bodyPat = Pattern.compile("(?is).*<body\\b[^>]*>(.*)</body\\b.*");
|
||||
Matcher m = bodyPat.matcher(rawDoc);
|
||||
if (m.matches()) {
|
||||
return m.group(1);
|
||||
} else {
|
||||
String key = rawDoc.matches("(?is).*<body\\b.*")
|
||||
? "javadoc.End_body_missing_from_html_file"
|
||||
: "javadoc.Body_missing_from_html_file";
|
||||
env.error(SourcePositionImpl.make(filename, Position.NOPOS, null), key);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the full unprocessed text of the comment. Tags
|
||||
* are included as text. Used mainly for store and retrieve
|
||||
* operations like internalization.
|
||||
*/
|
||||
public String getRawCommentText() {
|
||||
return documentation();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the full unprocessed text of the comment. Tags
|
||||
* are included as text. Used mainly for store and retrieve
|
||||
* operations like internalization.
|
||||
*/
|
||||
public void setRawCommentText(String rawDocumentation) {
|
||||
treePath = null;
|
||||
documentation = rawDocumentation;
|
||||
comment = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the full unprocessed text of the comment and tree path.
|
||||
*/
|
||||
void setTreePath(TreePath treePath) {
|
||||
this.treePath = treePath;
|
||||
documentation = getCommentText(treePath);
|
||||
comment = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* return a key for sorting.
|
||||
*/
|
||||
CollationKey key() {
|
||||
if (collationkey == null) {
|
||||
collationkey = generateKey();
|
||||
}
|
||||
return collationkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a key for sorting.
|
||||
* <p>
|
||||
* Default is name().
|
||||
*/
|
||||
CollationKey generateKey() {
|
||||
String k = name();
|
||||
// System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
|
||||
return env.doclocale.collator.getCollationKey(k);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of this Doc item.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return qualifiedName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of this Doc item.
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
public abstract String name();
|
||||
|
||||
/**
|
||||
* Returns the qualified name of this Doc item.
|
||||
*
|
||||
* @return the name
|
||||
*/
|
||||
public abstract String qualifiedName();
|
||||
|
||||
/**
|
||||
* Compares this Object with the specified Object for order. Returns a
|
||||
* negative integer, zero, or a positive integer as this Object is less
|
||||
* than, equal to, or greater than the given Object.
|
||||
* <p>
|
||||
* Included so that Doc item are java.lang.Comparable.
|
||||
*
|
||||
* @param obj the {@code Object} to be compared.
|
||||
* @return a negative integer, zero, or a positive integer as this Object
|
||||
* is less than, equal to, or greater than the given Object.
|
||||
* @exception ClassCastException the specified Object's type prevents it
|
||||
* from being compared to this Object.
|
||||
*/
|
||||
public int compareTo(Object obj) {
|
||||
// System.out.println("COMPARE \"" + this + "\" to \"" + obj + "\" = " + key().compareTo(((DocImpl)obj).key()));
|
||||
return key().compareTo(((DocImpl)obj).key());
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a field? False until overridden.
|
||||
*
|
||||
* @return true if it represents a field
|
||||
*/
|
||||
public boolean isField() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an enum constant? False until overridden.
|
||||
*
|
||||
* @return true if it represents an enum constant
|
||||
*/
|
||||
public boolean isEnumConstant() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a constructor? False until overridden.
|
||||
*
|
||||
* @return true if it represents a constructor
|
||||
*/
|
||||
public boolean isConstructor() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a method (but not a constructor or annotation
|
||||
* type element)?
|
||||
* False until overridden.
|
||||
*
|
||||
* @return true if it represents a method
|
||||
*/
|
||||
public boolean isMethod() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an annotation type element?
|
||||
* False until overridden.
|
||||
*
|
||||
* @return true if it represents an annotation type element
|
||||
*/
|
||||
public boolean isAnnotationTypeElement() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a interface (but not an annotation type)?
|
||||
* False until overridden.
|
||||
*
|
||||
* @return true if it represents a interface
|
||||
*/
|
||||
public boolean isInterface() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a exception class? False until overridden.
|
||||
*
|
||||
* @return true if it represents a exception
|
||||
*/
|
||||
public boolean isException() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a error class? False until overridden.
|
||||
*
|
||||
* @return true if it represents a error
|
||||
*/
|
||||
public boolean isError() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an enum type? False until overridden.
|
||||
*
|
||||
* @return true if it represents an enum type
|
||||
*/
|
||||
public boolean isEnum() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an annotation type? False until overridden.
|
||||
*
|
||||
* @return true if it represents an annotation type
|
||||
*/
|
||||
public boolean isAnnotationType() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an ordinary class (i.e. not an interface,
|
||||
* annotation type, enumeration, exception, or error)?
|
||||
* False until overridden.
|
||||
*
|
||||
* @return true if it represents an ordinary class
|
||||
*/
|
||||
public boolean isOrdinaryClass() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a class
|
||||
* (and not an interface or annotation type)?
|
||||
* This includes ordinary classes, enums, errors and exceptions.
|
||||
* False until overridden.
|
||||
*
|
||||
* @return true if it represents a class
|
||||
*/
|
||||
public boolean isClass() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* return true if this Doc is include in the active set.
|
||||
*/
|
||||
public abstract boolean isIncluded();
|
||||
|
||||
/**
|
||||
* Return the source position of the entity, or null if
|
||||
* no position is available.
|
||||
*/
|
||||
public SourcePosition position() { return null; }
|
||||
}
|
||||
@ -1,243 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.text.BreakIterator;
|
||||
import java.text.Collator;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* This class holds the information about locales.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.4
|
||||
* @author Robert Field
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class DocLocale {
|
||||
|
||||
/**
|
||||
* The locale name will be set by Main, if option is provided on the
|
||||
* command line.
|
||||
*/
|
||||
final String localeName;
|
||||
|
||||
/**
|
||||
* The locale to be used. If user doesn't provide this,
|
||||
* then set it to default locale value.
|
||||
*/
|
||||
final Locale locale;
|
||||
|
||||
/**
|
||||
* The collator for this application. This is to take care of Locale
|
||||
* Specific or Natural Language Text sorting.
|
||||
*/
|
||||
final Collator collator;
|
||||
|
||||
/**
|
||||
* Enclosing DocEnv
|
||||
*/
|
||||
private final DocEnv docenv;
|
||||
|
||||
/**
|
||||
* Sentence instance from the BreakIterator.
|
||||
*/
|
||||
private final BreakIterator sentenceBreaker;
|
||||
|
||||
/**
|
||||
* True is we should use <code>BreakIterator</code>
|
||||
* to compute first sentence.
|
||||
*/
|
||||
private boolean useBreakIterator = false;
|
||||
|
||||
/**
|
||||
* The HTML sentence terminators.
|
||||
*/
|
||||
static final String[] sentenceTerminators =
|
||||
{
|
||||
"<p>", "</p>", "<h1>", "<h2>",
|
||||
"<h3>", "<h4>", "<h5>", "<h6>",
|
||||
"</h1>", "</h2>", "</h3>", "</h4>", "</h5>",
|
||||
"</h6>", "<hr>", "<pre>", "</pre>"
|
||||
};
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
DocLocale(DocEnv docenv, String localeName, boolean useBreakIterator) {
|
||||
this.docenv = docenv;
|
||||
this.localeName = localeName;
|
||||
this.useBreakIterator = useBreakIterator;
|
||||
locale = getLocale();
|
||||
if (locale == null) {
|
||||
docenv.exit();
|
||||
} else {
|
||||
Locale.setDefault(locale); // NOTE: updating global state
|
||||
}
|
||||
collator = Collator.getInstance(locale);
|
||||
sentenceBreaker = BreakIterator.getSentenceInstance(locale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the locale if specified on the command line
|
||||
* else return null and if locale option is not used
|
||||
* then return default locale.
|
||||
*/
|
||||
private Locale getLocale() {
|
||||
Locale userlocale = null;
|
||||
if (localeName.length() > 0) {
|
||||
int firstuscore = localeName.indexOf('_');
|
||||
int seconduscore = -1;
|
||||
String language = null;
|
||||
String country = null;
|
||||
String variant = null;
|
||||
if (firstuscore == 2) {
|
||||
language = localeName.substring(0, firstuscore);
|
||||
seconduscore = localeName.indexOf('_', firstuscore + 1);
|
||||
if (seconduscore > 0) {
|
||||
if (seconduscore != firstuscore + 3 ||
|
||||
localeName.length() <= seconduscore + 1) {
|
||||
docenv.error(null, "main.malformed_locale_name", localeName);
|
||||
return null;
|
||||
}
|
||||
country = localeName.substring(firstuscore + 1,
|
||||
seconduscore);
|
||||
variant = localeName.substring(seconduscore + 1);
|
||||
} else if (localeName.length() == firstuscore + 3) {
|
||||
country = localeName.substring(firstuscore + 1);
|
||||
} else {
|
||||
docenv.error(null, "main.malformed_locale_name", localeName);
|
||||
return null;
|
||||
}
|
||||
} else if (firstuscore == -1 && localeName.length() == 2) {
|
||||
language = localeName;
|
||||
} else {
|
||||
docenv.error(null, "main.malformed_locale_name", localeName);
|
||||
return null;
|
||||
}
|
||||
userlocale = searchLocale(language, country, variant);
|
||||
if (userlocale == null) {
|
||||
docenv.error(null, "main.illegal_locale_name", localeName);
|
||||
return null;
|
||||
} else {
|
||||
return userlocale;
|
||||
}
|
||||
} else {
|
||||
return Locale.getDefault();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the locale for specified language, specified country and
|
||||
* specified variant.
|
||||
*/
|
||||
private Locale searchLocale(String language, String country,
|
||||
String variant) {
|
||||
for (Locale loc : Locale.getAvailableLocales()) {
|
||||
if (loc.getLanguage().equals(language) &&
|
||||
(country == null || loc.getCountry().equals(country)) &&
|
||||
(variant == null || loc.getVariant().equals(variant))) {
|
||||
return loc;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
String localeSpecificFirstSentence(DocImpl doc, String s) {
|
||||
if (s == null || s.length() == 0) {
|
||||
return "";
|
||||
}
|
||||
int index = s.indexOf("-->");
|
||||
if(s.trim().startsWith("<!--") && index != -1) {
|
||||
return localeSpecificFirstSentence(doc, s.substring(index + 3, s.length()));
|
||||
}
|
||||
if (useBreakIterator || !locale.getLanguage().equals("en")) {
|
||||
sentenceBreaker.setText(s.replace('\n', ' '));
|
||||
int start = sentenceBreaker.first();
|
||||
int end = sentenceBreaker.next();
|
||||
return s.substring(start, end).trim();
|
||||
} else {
|
||||
return englishLanguageFirstSentence(s).trim();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the first sentence of a string, where a sentence ends
|
||||
* with a period followed be white space.
|
||||
*/
|
||||
private String englishLanguageFirstSentence(String s) {
|
||||
if (s == null) {
|
||||
return null;
|
||||
}
|
||||
int len = s.length();
|
||||
boolean period = false;
|
||||
for (int i = 0 ; i < len ; i++) {
|
||||
switch (s.charAt(i)) {
|
||||
case '.':
|
||||
period = true;
|
||||
break;
|
||||
case ' ':
|
||||
case '\t':
|
||||
case '\n':
|
||||
case '\r':
|
||||
case '\f':
|
||||
if (period) {
|
||||
return s.substring(0, i);
|
||||
}
|
||||
break;
|
||||
case '<':
|
||||
if (i > 0) {
|
||||
if (htmlSentenceTerminatorFound(s, i)) {
|
||||
return s.substring(0, i);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
period = false;
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out if there is any HTML tag in the given string. If found
|
||||
* return true else return false.
|
||||
*/
|
||||
private boolean htmlSentenceTerminatorFound(String str, int index) {
|
||||
for (String terminator : sentenceTerminators) {
|
||||
if (str.regionMatches(true, index, terminator,
|
||||
0, terminator.length())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1,438 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.tools.DocumentationTool;
|
||||
import javax.tools.JavaFileManager;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.util.ClientCodeException;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
/**
|
||||
* Class creates, controls and invokes doclets.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class DocletInvoker {
|
||||
|
||||
private final Class<?> docletClass;
|
||||
|
||||
private final String docletClassName;
|
||||
|
||||
private final ClassLoader appClassLoader;
|
||||
|
||||
private final Messager messager;
|
||||
|
||||
/**
|
||||
* In API mode, exceptions thrown while calling the doclet are
|
||||
* propagated using ClientCodeException.
|
||||
*/
|
||||
private final boolean apiMode;
|
||||
|
||||
/**
|
||||
* Whether javadoc internal API should be exported to doclets
|
||||
* and (indirectly) to taglets
|
||||
*/
|
||||
private final boolean exportInternalAPI;
|
||||
|
||||
private static class DocletInvokeException extends Exception {
|
||||
private static final long serialVersionUID = 0;
|
||||
}
|
||||
|
||||
private String appendPath(String path1, String path2) {
|
||||
if (path1 == null || path1.length() == 0) {
|
||||
return path2 == null ? "." : path2;
|
||||
} else if (path2 == null || path2.length() == 0) {
|
||||
return path1;
|
||||
} else {
|
||||
return path1 + File.pathSeparator + path2;
|
||||
}
|
||||
}
|
||||
|
||||
public DocletInvoker(Messager messager, Class<?> docletClass, boolean apiMode, boolean exportInternalAPI) {
|
||||
this.messager = messager;
|
||||
this.docletClass = docletClass;
|
||||
docletClassName = docletClass.getName();
|
||||
appClassLoader = null;
|
||||
this.apiMode = apiMode;
|
||||
this.exportInternalAPI = exportInternalAPI; // for backdoor use by standard doclet for taglets
|
||||
|
||||
// this may not be soon enough if the class has already been loaded
|
||||
if (exportInternalAPI) {
|
||||
exportInternalAPI(docletClass.getClassLoader());
|
||||
}
|
||||
}
|
||||
|
||||
public DocletInvoker(Messager messager, JavaFileManager fileManager,
|
||||
String docletClassName, String docletPath,
|
||||
ClassLoader docletParentClassLoader,
|
||||
boolean apiMode,
|
||||
boolean exportInternalAPI) {
|
||||
this.messager = messager;
|
||||
this.docletClassName = docletClassName;
|
||||
this.apiMode = apiMode;
|
||||
this.exportInternalAPI = exportInternalAPI; // for backdoor use by standard doclet for taglets
|
||||
|
||||
if (fileManager != null && fileManager.hasLocation(DocumentationTool.Location.DOCLET_PATH)) {
|
||||
appClassLoader = fileManager.getClassLoader(DocumentationTool.Location.DOCLET_PATH);
|
||||
} else {
|
||||
// construct class loader
|
||||
String cpString = null; // make sure env.class.path defaults to dot
|
||||
|
||||
// do prepends to get correct ordering
|
||||
cpString = appendPath(System.getProperty("env.class.path"), cpString);
|
||||
cpString = appendPath(System.getProperty("java.class.path"), cpString);
|
||||
cpString = appendPath(docletPath, cpString);
|
||||
URL[] urls = pathToURLs(cpString);
|
||||
if (docletParentClassLoader == null)
|
||||
appClassLoader = new URLClassLoader(urls, getDelegationClassLoader(docletClassName));
|
||||
else
|
||||
appClassLoader = new URLClassLoader(urls, docletParentClassLoader);
|
||||
}
|
||||
|
||||
if (exportInternalAPI) {
|
||||
exportInternalAPI(appClassLoader);
|
||||
}
|
||||
|
||||
// attempt to find doclet
|
||||
Class<?> dc = null;
|
||||
try {
|
||||
dc = appClassLoader.loadClass(docletClassName);
|
||||
} catch (ClassNotFoundException exc) {
|
||||
messager.error(Messager.NOPOS, "main.doclet_class_not_found", docletClassName);
|
||||
messager.exit();
|
||||
}
|
||||
docletClass = dc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the delegation class loader to use when creating
|
||||
* appClassLoader (used to load the doclet). The context class
|
||||
* loader is the best choice, but legacy behavior was to use the
|
||||
* default delegation class loader (aka system class loader).
|
||||
*
|
||||
* Here we favor using the context class loader. To ensure
|
||||
* compatibility with existing apps, we revert to legacy
|
||||
* behavior if either or both of the following conditions hold:
|
||||
*
|
||||
* 1) the doclet is loadable from the system class loader but not
|
||||
* from the context class loader,
|
||||
*
|
||||
* 2) this.getClass() is loadable from the system class loader but not
|
||||
* from the context class loader.
|
||||
*/
|
||||
private ClassLoader getDelegationClassLoader(String docletClassName) {
|
||||
ClassLoader ctxCL = Thread.currentThread().getContextClassLoader();
|
||||
ClassLoader sysCL = ClassLoader.getSystemClassLoader();
|
||||
if (sysCL == null)
|
||||
return ctxCL;
|
||||
if (ctxCL == null)
|
||||
return sysCL;
|
||||
|
||||
// Condition 1.
|
||||
try {
|
||||
sysCL.loadClass(docletClassName);
|
||||
try {
|
||||
ctxCL.loadClass(docletClassName);
|
||||
} catch (ClassNotFoundException e) {
|
||||
return sysCL;
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
}
|
||||
|
||||
// Condition 2.
|
||||
try {
|
||||
if (getClass() == sysCL.loadClass(getClass().getName())) {
|
||||
try {
|
||||
if (getClass() != ctxCL.loadClass(getClass().getName()))
|
||||
return sysCL;
|
||||
} catch (ClassNotFoundException e) {
|
||||
return sysCL;
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
}
|
||||
|
||||
return ctxCL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate documentation here. Return true on success.
|
||||
*/
|
||||
public boolean start(RootDoc root) {
|
||||
Object retVal;
|
||||
String methodName = "start";
|
||||
Class<?>[] paramTypes = { RootDoc.class };
|
||||
Object[] params = { root };
|
||||
try {
|
||||
retVal = invoke(methodName, null, paramTypes, params);
|
||||
} catch (DocletInvokeException exc) {
|
||||
return false;
|
||||
}
|
||||
if (retVal instanceof Boolean) {
|
||||
return ((Boolean)retVal);
|
||||
} else {
|
||||
messager.error(Messager.NOPOS, "main.must_return_boolean",
|
||||
docletClassName, methodName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for doclet added options here. Zero return means
|
||||
* option not known. Positive value indicates number of
|
||||
* arguments to option. Negative value means error occurred.
|
||||
*/
|
||||
public int optionLength(String option) {
|
||||
Object retVal;
|
||||
String methodName = "optionLength";
|
||||
Class<?>[] paramTypes = { String.class };
|
||||
Object[] params = { option };
|
||||
try {
|
||||
retVal = invoke(methodName, 0, paramTypes, params);
|
||||
} catch (DocletInvokeException exc) {
|
||||
return -1;
|
||||
}
|
||||
if (retVal instanceof Integer) {
|
||||
return ((Integer)retVal);
|
||||
} else {
|
||||
messager.error(Messager.NOPOS, "main.must_return_int",
|
||||
docletClassName, methodName);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Let doclet check that all options are OK. Returning true means
|
||||
* options are OK. If method does not exist, assume true.
|
||||
*/
|
||||
public boolean validOptions(List<String[]> optlist) {
|
||||
Object retVal;
|
||||
String options[][] = optlist.toArray(new String[optlist.length()][]);
|
||||
String methodName = "validOptions";
|
||||
DocErrorReporter reporter = messager;
|
||||
Class<?>[] paramTypes = { String[][].class, DocErrorReporter.class };
|
||||
Object[] params = { options, reporter };
|
||||
try {
|
||||
retVal = invoke(methodName, Boolean.TRUE, paramTypes, params);
|
||||
} catch (DocletInvokeException exc) {
|
||||
return false;
|
||||
}
|
||||
if (retVal instanceof Boolean) {
|
||||
return ((Boolean)retVal);
|
||||
} else {
|
||||
messager.error(Messager.NOPOS, "main.must_return_boolean",
|
||||
docletClassName, methodName);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the language version supported by this doclet.
|
||||
* If the method does not exist in the doclet, assume version 1.1.
|
||||
*/
|
||||
public LanguageVersion languageVersion() {
|
||||
try {
|
||||
Object retVal;
|
||||
String methodName = "languageVersion";
|
||||
Class<?>[] paramTypes = new Class<?>[0];
|
||||
Object[] params = new Object[0];
|
||||
try {
|
||||
retVal = invoke(methodName, LanguageVersion.JAVA_1_1, paramTypes, params);
|
||||
} catch (DocletInvokeException exc) {
|
||||
return LanguageVersion.JAVA_1_1;
|
||||
}
|
||||
if (retVal instanceof LanguageVersion) {
|
||||
return (LanguageVersion)retVal;
|
||||
} else {
|
||||
messager.error(Messager.NOPOS, "main.must_return_languageversion",
|
||||
docletClassName, methodName);
|
||||
return LanguageVersion.JAVA_1_1;
|
||||
}
|
||||
} catch (NoClassDefFoundError ex) { // for boostrapping, no Enum class.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method for calling doclet functionality
|
||||
*/
|
||||
private Object invoke(String methodName, Object returnValueIfNonExistent,
|
||||
Class<?>[] paramTypes, Object[] params)
|
||||
throws DocletInvokeException {
|
||||
Method meth;
|
||||
try {
|
||||
meth = docletClass.getMethod(methodName, paramTypes);
|
||||
} catch (NoSuchMethodException exc) {
|
||||
if (returnValueIfNonExistent == null) {
|
||||
messager.error(Messager.NOPOS, "main.doclet_method_not_found",
|
||||
docletClassName, methodName);
|
||||
throw new DocletInvokeException();
|
||||
} else {
|
||||
return returnValueIfNonExistent;
|
||||
}
|
||||
} catch (SecurityException exc) {
|
||||
messager.error(Messager.NOPOS, "main.doclet_method_not_accessible",
|
||||
docletClassName, methodName);
|
||||
throw new DocletInvokeException();
|
||||
}
|
||||
if (!Modifier.isStatic(meth.getModifiers())) {
|
||||
messager.error(Messager.NOPOS, "main.doclet_method_must_be_static",
|
||||
docletClassName, methodName);
|
||||
throw new DocletInvokeException();
|
||||
}
|
||||
ClassLoader savedCCL =
|
||||
Thread.currentThread().getContextClassLoader();
|
||||
try {
|
||||
if (appClassLoader != null) // will be null if doclet class provided via API
|
||||
Thread.currentThread().setContextClassLoader(appClassLoader);
|
||||
return meth.invoke(null , params);
|
||||
} catch (IllegalArgumentException | NullPointerException exc) {
|
||||
messager.error(Messager.NOPOS, "main.internal_error_exception_thrown",
|
||||
docletClassName, methodName, exc.toString());
|
||||
throw new DocletInvokeException();
|
||||
} catch (IllegalAccessException exc) {
|
||||
messager.error(Messager.NOPOS, "main.doclet_method_not_accessible",
|
||||
docletClassName, methodName);
|
||||
throw new DocletInvokeException();
|
||||
}
|
||||
catch (InvocationTargetException exc) {
|
||||
Throwable err = exc.getTargetException();
|
||||
if (apiMode)
|
||||
throw new ClientCodeException(err);
|
||||
if (err instanceof java.lang.OutOfMemoryError) {
|
||||
messager.error(Messager.NOPOS, "main.out.of.memory");
|
||||
} else {
|
||||
messager.error(Messager.NOPOS, "main.exception_thrown",
|
||||
docletClassName, methodName, exc.toString());
|
||||
exc.getTargetException().printStackTrace(System.err);
|
||||
}
|
||||
throw new DocletInvokeException();
|
||||
} finally {
|
||||
Thread.currentThread().setContextClassLoader(savedCCL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Export javadoc internal API to the unnamed module for a classloader.
|
||||
* This is to support continued use of existing non-standard doclets that
|
||||
* use the internal toolkit API and related classes.
|
||||
* @param cl the classloader
|
||||
*/
|
||||
private void exportInternalAPI(ClassLoader cl) {
|
||||
String[] packages = {
|
||||
"com.sun.tools.doclets",
|
||||
"com.sun.tools.doclets.standard",
|
||||
"com.sun.tools.doclets.internal.toolkit",
|
||||
"com.sun.tools.doclets.internal.toolkit.taglets",
|
||||
"com.sun.tools.doclets.internal.toolkit.builders",
|
||||
"com.sun.tools.doclets.internal.toolkit.util",
|
||||
"com.sun.tools.doclets.internal.toolkit.util.links",
|
||||
"com.sun.tools.doclets.formats.html",
|
||||
"com.sun.tools.doclets.formats.html.markup"
|
||||
};
|
||||
|
||||
try {
|
||||
Method getModuleMethod = Class.class.getDeclaredMethod("getModule");
|
||||
Object thisModule = getModuleMethod.invoke(getClass());
|
||||
|
||||
Class<?> moduleClass = Class.forName("java.lang.Module");
|
||||
Method addExportsMethod = moduleClass.getDeclaredMethod("addExports", String.class, moduleClass);
|
||||
|
||||
Method getUnnamedModuleMethod = ClassLoader.class.getDeclaredMethod("getUnnamedModule");
|
||||
Object target = getUnnamedModuleMethod.invoke(cl);
|
||||
|
||||
for (String pack : packages) {
|
||||
addExportsMethod.invoke(thisModule, pack, target);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method for converting a search path string to an array of directory and JAR file
|
||||
* URLs.
|
||||
*
|
||||
* Note that this method is called by the DocletInvoker.
|
||||
*
|
||||
* @param path the search path string
|
||||
* @return the resulting array of directory and JAR file URLs
|
||||
*/
|
||||
private static URL[] pathToURLs(String path) {
|
||||
java.util.List<URL> urls = new ArrayList<>();
|
||||
for (String s: path.split(Pattern.quote(File.pathSeparator))) {
|
||||
if (!s.isEmpty()) {
|
||||
URL url = fileToURL(Paths.get(s));
|
||||
if (url != null) {
|
||||
urls.add(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
return urls.toArray(new URL[urls.size()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the directory or JAR file URL corresponding to the specified local file name.
|
||||
*
|
||||
* @param file the Path object
|
||||
* @return the resulting directory or JAR file URL, or null if unknown
|
||||
*/
|
||||
private static URL fileToURL(Path file) {
|
||||
Path p;
|
||||
try {
|
||||
p = file.toRealPath();
|
||||
} catch (IOException e) {
|
||||
p = file.toAbsolutePath();
|
||||
}
|
||||
try {
|
||||
return p.normalize().toUri().toURL();
|
||||
} catch (MalformedURLException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,290 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.text.CollationKey;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
|
||||
/**
|
||||
* Represents a method or constructor of a java class.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
* @author Scott Seligman (generics, annotations)
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public abstract class ExecutableMemberDocImpl
|
||||
extends MemberDocImpl implements ExecutableMemberDoc {
|
||||
|
||||
protected final MethodSymbol sym;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
this.sym = sym;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym) {
|
||||
this(env, sym, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the flags in terms of javac's flags
|
||||
*/
|
||||
protected long getFlags() {
|
||||
return sym.flags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Identify the containing class
|
||||
*/
|
||||
protected ClassSymbol getContainingClass() {
|
||||
return sym.enclClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this method is native
|
||||
*/
|
||||
public boolean isNative() {
|
||||
return Modifier.isNative(getModifiers());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this method is synchronized
|
||||
*/
|
||||
public boolean isSynchronized() {
|
||||
return Modifier.isSynchronized(getModifiers());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this method was declared to take a variable number
|
||||
* of arguments.
|
||||
*/
|
||||
public boolean isVarArgs() {
|
||||
return ((sym.flags() & Flags.VARARGS) != 0
|
||||
&& !env.legacyDoclet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this field was synthesized by the compiler.
|
||||
*/
|
||||
public boolean isSynthetic() {
|
||||
return ((sym.flags() & Flags.SYNTHETIC) != 0);
|
||||
}
|
||||
|
||||
public boolean isIncluded() {
|
||||
return containingClass().isIncluded() && env.shouldDocument(sym);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the throws tags in this method.
|
||||
*
|
||||
* @return an array of ThrowTagImpl containing all {@code @exception}
|
||||
* and {@code @throws} tags.
|
||||
*/
|
||||
public ThrowsTag[] throwsTags() {
|
||||
return comment().throwsTags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the param tags in this method, excluding the type
|
||||
* parameter tags.
|
||||
*
|
||||
* @return an array of ParamTagImpl containing all {@code @param} tags.
|
||||
*/
|
||||
public ParamTag[] paramTags() {
|
||||
return comment().paramTags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type parameter tags in this method.
|
||||
*/
|
||||
public ParamTag[] typeParamTags() {
|
||||
return env.legacyDoclet
|
||||
? new ParamTag[0]
|
||||
: comment().typeParamTags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return exceptions this method or constructor throws.
|
||||
*
|
||||
* @return an array of ClassDoc[] representing the exceptions
|
||||
* thrown by this method.
|
||||
*/
|
||||
public ClassDoc[] thrownExceptions() {
|
||||
ListBuffer<ClassDocImpl> l = new ListBuffer<>();
|
||||
for (Type ex : sym.type.getThrownTypes()) {
|
||||
ex = env.types.erasure(ex);
|
||||
//### Will these casts succeed in the face of static semantic
|
||||
//### errors in the documented code?
|
||||
ClassDocImpl cdi = env.getClassDoc((ClassSymbol)ex.tsym);
|
||||
if (cdi != null) l.append(cdi);
|
||||
}
|
||||
return l.toArray(new ClassDocImpl[l.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return exceptions this method or constructor throws.
|
||||
* Each array element is either a <code>ClassDoc</code> or a
|
||||
* <code>TypeVariable</code>.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] thrownExceptionTypes() {
|
||||
return TypeMaker.getTypes(env, sym.type.getThrownTypes());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get argument information.
|
||||
*
|
||||
* @see ParameterImpl
|
||||
*
|
||||
* @return an array of ParameterImpl, one element per argument
|
||||
* in the order the arguments are present.
|
||||
*/
|
||||
public Parameter[] parameters() {
|
||||
// generate the parameters on the fly: they're not cached
|
||||
List<VarSymbol> params = sym.params();
|
||||
Parameter result[] = new Parameter[params.length()];
|
||||
|
||||
int i = 0;
|
||||
for (VarSymbol param : params) {
|
||||
result[i++] = new ParameterImpl(env, param);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the receiver type of this executable element.
|
||||
*
|
||||
* @return the receiver type of this executable element.
|
||||
* @since 1.8
|
||||
*/
|
||||
public com.sun.javadoc.Type receiverType() {
|
||||
Type recvtype = sym.type.asMethodType().recvtype;
|
||||
return (recvtype != null) ? TypeMaker.getType(env, recvtype, false, true) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the formal type parameters of this method or constructor.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
public TypeVariable[] typeParameters() {
|
||||
if (env.legacyDoclet) {
|
||||
return new TypeVariable[0];
|
||||
}
|
||||
TypeVariable res[] = new TypeVariable[sym.type.getTypeArguments().length()];
|
||||
TypeMaker.getTypes(env, sym.type.getTypeArguments(), res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the signature. It is the parameter list, type is qualified.
|
||||
* For instance, for a method <code>mymethod(String x, int y)</code>,
|
||||
* it will return <code>(java.lang.String,int)</code>.
|
||||
*/
|
||||
public String signature() {
|
||||
return makeSignature(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get flat signature. All types are not qualified.
|
||||
* Return a String, which is the flat signiture of this member.
|
||||
* It is the parameter list, type is not qualified.
|
||||
* For instance, for a method <code>mymethod(String x, int y)</code>,
|
||||
* it will return <code>(String, int)</code>.
|
||||
*/
|
||||
public String flatSignature() {
|
||||
return makeSignature(false);
|
||||
}
|
||||
|
||||
private String makeSignature(boolean full) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
result.append("(");
|
||||
for (List<Type> types = sym.type.getParameterTypes(); types.nonEmpty(); ) {
|
||||
Type t = types.head;
|
||||
result.append(TypeMaker.getTypeString(env, t, full));
|
||||
types = types.tail;
|
||||
if (types.nonEmpty()) {
|
||||
result.append(", ");
|
||||
}
|
||||
}
|
||||
if (isVarArgs()) {
|
||||
int len = result.length();
|
||||
result.replace(len - 2, len, "...");
|
||||
}
|
||||
result.append(")");
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
protected String typeParametersString() {
|
||||
return TypeMaker.typeParametersString(env, sym, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a key for sorting.
|
||||
*/
|
||||
@Override
|
||||
CollationKey generateKey() {
|
||||
String k = name() + flatSignature() + typeParametersString();
|
||||
// ',' and '&' are between '$' and 'a': normalize to spaces.
|
||||
k = k.replace(',', ' ').replace('&', ' ');
|
||||
// System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
|
||||
return env.doclocale.collator.getCollationKey(k);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the source position of the entity, or null if
|
||||
* no position is available.
|
||||
*/
|
||||
@Override
|
||||
public SourcePosition position() {
|
||||
if (sym.enclClass().sourcefile == null) return null;
|
||||
return SourcePositionImpl.make(sym.enclClass().sourcefile,
|
||||
(tree==null) ? 0 : tree.pos,
|
||||
lineMap);
|
||||
}
|
||||
}
|
||||
@ -1,281 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
||||
|
||||
import static com.sun.tools.javac.code.TypeTag.BOOLEAN;
|
||||
|
||||
/**
|
||||
* Represents a field in a java class.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @see MemberDocImpl
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
* @author Scott Seligman (generics, enums, annotations)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class FieldDocImpl extends MemberDocImpl implements FieldDoc {
|
||||
|
||||
protected final VarSymbol sym;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public FieldDocImpl(DocEnv env, VarSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
this.sym = sym;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public FieldDocImpl(DocEnv env, VarSymbol sym) {
|
||||
this(env, sym, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the flags in terms of javac's flags
|
||||
*/
|
||||
protected long getFlags() {
|
||||
return sym.flags();
|
||||
}
|
||||
|
||||
/**
|
||||
* Identify the containing class
|
||||
*/
|
||||
protected ClassSymbol getContainingClass() {
|
||||
return sym.enclClass();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get type of this field.
|
||||
*/
|
||||
public com.sun.javadoc.Type type() {
|
||||
return TypeMaker.getType(env, sym.type, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of a constant field.
|
||||
*
|
||||
* @return the value of a constant field. The value is
|
||||
* automatically wrapped in an object if it has a primitive type.
|
||||
* If the field is not constant, returns null.
|
||||
*/
|
||||
public Object constantValue() {
|
||||
Object result = sym.getConstValue();
|
||||
if (result != null && sym.type.hasTag(BOOLEAN))
|
||||
// javac represents false and true as Integers 0 and 1
|
||||
result = Boolean.valueOf(((Integer)result).intValue() != 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of a constant field.
|
||||
*
|
||||
* @return the text of a Java language expression whose value
|
||||
* is the value of the constant. The expression uses no identifiers
|
||||
* other than primitive literals. If the field is
|
||||
* not constant, returns null.
|
||||
*/
|
||||
public String constantValueExpression() {
|
||||
return constantValueExpression(constantValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* A static version of the above.
|
||||
*/
|
||||
static String constantValueExpression(Object cb) {
|
||||
if (cb == null) return null;
|
||||
if (cb instanceof Character) return sourceForm(((Character)cb).charValue());
|
||||
if (cb instanceof Byte) return sourceForm(((Byte)cb).byteValue());
|
||||
if (cb instanceof String) return sourceForm((String)cb);
|
||||
if (cb instanceof Double) return sourceForm(((Double)cb).doubleValue(), 'd');
|
||||
if (cb instanceof Float) return sourceForm(((Float)cb).doubleValue(), 'f');
|
||||
if (cb instanceof Long) return cb + "L";
|
||||
return cb.toString(); // covers int, short
|
||||
}
|
||||
// where
|
||||
private static String sourceForm(double v, char suffix) {
|
||||
if (Double.isNaN(v))
|
||||
return "0" + suffix + "/0" + suffix;
|
||||
if (v == Double.POSITIVE_INFINITY)
|
||||
return "1" + suffix + "/0" + suffix;
|
||||
if (v == Double.NEGATIVE_INFINITY)
|
||||
return "-1" + suffix + "/0" + suffix;
|
||||
return v + (suffix == 'f' || suffix == 'F' ? "" + suffix : "");
|
||||
}
|
||||
private static String sourceForm(char c) {
|
||||
StringBuilder buf = new StringBuilder(8);
|
||||
buf.append('\'');
|
||||
sourceChar(c, buf);
|
||||
buf.append('\'');
|
||||
return buf.toString();
|
||||
}
|
||||
private static String sourceForm(byte c) {
|
||||
return "0x" + Integer.toString(c & 0xff, 16);
|
||||
}
|
||||
private static String sourceForm(String s) {
|
||||
StringBuilder buf = new StringBuilder(s.length() + 5);
|
||||
buf.append('\"');
|
||||
for (int i=0; i<s.length(); i++) {
|
||||
char c = s.charAt(i);
|
||||
sourceChar(c, buf);
|
||||
}
|
||||
buf.append('\"');
|
||||
return buf.toString();
|
||||
}
|
||||
private static void sourceChar(char c, StringBuilder buf) {
|
||||
switch (c) {
|
||||
case '\b': buf.append("\\b"); return;
|
||||
case '\t': buf.append("\\t"); return;
|
||||
case '\n': buf.append("\\n"); return;
|
||||
case '\f': buf.append("\\f"); return;
|
||||
case '\r': buf.append("\\r"); return;
|
||||
case '\"': buf.append("\\\""); return;
|
||||
case '\'': buf.append("\\\'"); return;
|
||||
case '\\': buf.append("\\\\"); return;
|
||||
default:
|
||||
if (isPrintableAscii(c)) {
|
||||
buf.append(c); return;
|
||||
}
|
||||
unicodeEscape(c, buf);
|
||||
return;
|
||||
}
|
||||
}
|
||||
private static void unicodeEscape(char c, StringBuilder buf) {
|
||||
final String chars = "0123456789abcdef";
|
||||
buf.append("\\u");
|
||||
buf.append(chars.charAt(15 & (c>>12)));
|
||||
buf.append(chars.charAt(15 & (c>>8)));
|
||||
buf.append(chars.charAt(15 & (c>>4)));
|
||||
buf.append(chars.charAt(15 & (c>>0)));
|
||||
}
|
||||
private static boolean isPrintableAscii(char c) {
|
||||
return c >= ' ' && c <= '~';
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this field is included in the active set.
|
||||
*/
|
||||
public boolean isIncluded() {
|
||||
return containingClass().isIncluded() && env.shouldDocument(sym);
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item a field (but not an enum constant?
|
||||
*/
|
||||
@Override
|
||||
public boolean isField() {
|
||||
return !isEnumConstant();
|
||||
}
|
||||
|
||||
/**
|
||||
* Is this Doc item an enum constant?
|
||||
* (For legacy doclets, return false.)
|
||||
*/
|
||||
@Override
|
||||
public boolean isEnumConstant() {
|
||||
return (getFlags() & Flags.ENUM) != 0 &&
|
||||
!env.legacyDoclet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this field is transient
|
||||
*/
|
||||
public boolean isTransient() {
|
||||
return Modifier.isTransient(getModifiers());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this field is volatile
|
||||
*/
|
||||
public boolean isVolatile() {
|
||||
return Modifier.isVolatile(getModifiers());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this field was synthesized by the compiler.
|
||||
*/
|
||||
public boolean isSynthetic() {
|
||||
return (getFlags() & Flags.SYNTHETIC) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the serialField tags in this FieldDocImpl item.
|
||||
*
|
||||
* @return an array of <tt>SerialFieldTagImpl</tt> containing all
|
||||
* <code>@serialField</code> tags.
|
||||
*/
|
||||
public SerialFieldTag[] serialFieldTags() {
|
||||
return comment().serialFieldTags();
|
||||
}
|
||||
|
||||
public String name() {
|
||||
if (name == null) {
|
||||
name = sym.name.toString();
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
private String name;
|
||||
|
||||
public String qualifiedName() {
|
||||
if (qualifiedName == null) {
|
||||
qualifiedName = sym.enclClass().getQualifiedName() + "." + name();
|
||||
}
|
||||
return qualifiedName;
|
||||
}
|
||||
|
||||
private String qualifiedName;
|
||||
|
||||
/**
|
||||
* Return the source position of the entity, or null if
|
||||
* no position is available.
|
||||
*/
|
||||
@Override
|
||||
public SourcePosition position() {
|
||||
if (sym.enclClass().sourcefile == null) return null;
|
||||
return SourcePositionImpl.make(sym.enclClass().sourcefile,
|
||||
(tree==null) ? 0 : tree.pos,
|
||||
lineMap);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,89 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.code.Symbol.PackageSymbol;
|
||||
import com.sun.tools.javac.code.ClassFinder;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.Context.Factory;
|
||||
|
||||
/** Javadoc uses an extended class finder that records package.html entries
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class JavadocClassFinder extends ClassFinder {
|
||||
|
||||
public static JavadocClassFinder instance(Context context) {
|
||||
ClassFinder instance = context.get(classFinderKey);
|
||||
if (instance == null)
|
||||
instance = new JavadocClassFinder(context);
|
||||
return (JavadocClassFinder)instance;
|
||||
}
|
||||
|
||||
public static void preRegister(Context context) {
|
||||
context.put(classFinderKey, (Factory<ClassFinder>)JavadocClassFinder::new);
|
||||
}
|
||||
|
||||
private DocEnv docenv;
|
||||
private EnumSet<JavaFileObject.Kind> all = EnumSet.of(JavaFileObject.Kind.CLASS,
|
||||
JavaFileObject.Kind.SOURCE,
|
||||
JavaFileObject.Kind.HTML);
|
||||
private EnumSet<JavaFileObject.Kind> noSource = EnumSet.of(JavaFileObject.Kind.CLASS,
|
||||
JavaFileObject.Kind.HTML);
|
||||
|
||||
public JavadocClassFinder(Context context) {
|
||||
super(context);
|
||||
docenv = DocEnv.instance(context);
|
||||
preferSource = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override getPackageFileKinds to include search for package.html
|
||||
*/
|
||||
@Override
|
||||
protected EnumSet<JavaFileObject.Kind> getPackageFileKinds() {
|
||||
return docenv.docClasses ? noSource : all;
|
||||
}
|
||||
|
||||
/**
|
||||
* Override extraFileActions to check for package documentation
|
||||
*/
|
||||
@Override
|
||||
protected void extraFileActions(PackageSymbol pack, JavaFileObject fo) {
|
||||
if (fo.isNameCompatible("package", JavaFileObject.Kind.HTML))
|
||||
docenv.getPackageDoc(pack).setDocPath(fo);
|
||||
}
|
||||
}
|
||||
@ -1,111 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.comp.Enter;
|
||||
import com.sun.tools.javac.tree.JCTree.*;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
import static com.sun.tools.javac.code.Kinds.Kind.*;
|
||||
import com.sun.tools.javac.main.JavaCompiler;
|
||||
|
||||
/**
|
||||
* Javadoc's own enter phase does a few things above and beyond that
|
||||
* done by javac.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class JavadocEnter extends Enter {
|
||||
public static JavadocEnter instance(Context context) {
|
||||
Enter instance = context.get(enterKey);
|
||||
if (instance == null)
|
||||
instance = new JavadocEnter(context);
|
||||
return (JavadocEnter)instance;
|
||||
}
|
||||
|
||||
public static void preRegister(Context context) {
|
||||
context.put(enterKey, (Context.Factory<Enter>)JavadocEnter::new);
|
||||
}
|
||||
|
||||
protected JavadocEnter(Context context) {
|
||||
super(context);
|
||||
messager = Messager.instance0(context);
|
||||
docenv = DocEnv.instance(context);
|
||||
compiler = JavaCompiler.instance(context);
|
||||
}
|
||||
|
||||
final Messager messager;
|
||||
final DocEnv docenv;
|
||||
final JavaCompiler compiler;
|
||||
|
||||
@Override
|
||||
public void main(List<JCCompilationUnit> trees) {
|
||||
// count all Enter errors as warnings.
|
||||
int nerrors = messager.nerrors;
|
||||
super.main(trees);
|
||||
compiler.enterDone();
|
||||
messager.nwarnings += (messager.nerrors - nerrors);
|
||||
messager.nerrors = nerrors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitTopLevel(JCCompilationUnit tree) {
|
||||
super.visitTopLevel(tree);
|
||||
if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) {
|
||||
JCPackageDecl pd = tree.getPackage();
|
||||
TreePath tp = pd == null ? docenv.getTreePath(tree) : docenv.getTreePath(tree, pd);
|
||||
docenv.makePackageDoc(tree.packge, tp);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitClassDef(JCClassDecl tree) {
|
||||
super.visitClassDef(tree);
|
||||
if (tree.sym == null) return;
|
||||
if (tree.sym.kind == TYP || tree.sym.kind == ERR) {
|
||||
ClassSymbol c = tree.sym;
|
||||
docenv.makeClassDoc(c, docenv.getTreePath(env.toplevel, tree));
|
||||
}
|
||||
}
|
||||
|
||||
/** Don't complain about a duplicate class. */
|
||||
@Override
|
||||
protected void duplicateClass(DiagnosticPosition pos, ClassSymbol c) {}
|
||||
|
||||
}
|
||||
@ -1,207 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.comp.MemberEnter;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.*;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
|
||||
import static com.sun.tools.javac.code.Flags.*;
|
||||
import static com.sun.tools.javac.code.Kinds.Kind.*;
|
||||
|
||||
/**
|
||||
* Javadoc's own memberEnter phase does a few things above and beyond that
|
||||
* done by javac.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class JavadocMemberEnter extends MemberEnter {
|
||||
public static JavadocMemberEnter instance0(Context context) {
|
||||
MemberEnter instance = context.get(memberEnterKey);
|
||||
if (instance == null)
|
||||
instance = new JavadocMemberEnter(context);
|
||||
return (JavadocMemberEnter)instance;
|
||||
}
|
||||
|
||||
public static void preRegister(Context context) {
|
||||
context.put(memberEnterKey, (Context.Factory<MemberEnter>)JavadocMemberEnter::new);
|
||||
}
|
||||
|
||||
final DocEnv docenv;
|
||||
|
||||
protected JavadocMemberEnter(Context context) {
|
||||
super(context);
|
||||
docenv = DocEnv.instance(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodDef(JCMethodDecl tree) {
|
||||
super.visitMethodDef(tree);
|
||||
MethodSymbol meth = tree.sym;
|
||||
if (meth == null || meth.kind != MTH) return;
|
||||
TreePath treePath = docenv.getTreePath(env.toplevel, env.enclClass, tree);
|
||||
if (meth.isConstructor())
|
||||
docenv.makeConstructorDoc(meth, treePath);
|
||||
else if (isAnnotationTypeElement(meth))
|
||||
docenv.makeAnnotationTypeElementDoc(meth, treePath);
|
||||
else
|
||||
docenv.makeMethodDoc(meth, treePath);
|
||||
|
||||
// release resources
|
||||
tree.body = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitVarDef(JCVariableDecl tree) {
|
||||
if (tree.init != null) {
|
||||
boolean isFinal = (tree.mods.flags & FINAL) != 0
|
||||
|| (env.enclClass.mods.flags & INTERFACE) != 0;
|
||||
if (!isFinal || containsNonConstantExpression(tree.init)) {
|
||||
// Avoid unnecessary analysis and release resources.
|
||||
// In particular, remove non-constant expressions
|
||||
// which may trigger Attr.attribClass, since
|
||||
// method bodies are also removed, in visitMethodDef.
|
||||
tree.init = null;
|
||||
}
|
||||
}
|
||||
super.visitVarDef(tree);
|
||||
if (tree.sym != null &&
|
||||
tree.sym.kind == VAR &&
|
||||
!isParameter(tree.sym)) {
|
||||
docenv.makeFieldDoc(tree.sym, docenv.getTreePath(env.toplevel, env.enclClass, tree));
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isAnnotationTypeElement(MethodSymbol meth) {
|
||||
return ClassDocImpl.isAnnotationType(meth.enclClass());
|
||||
}
|
||||
|
||||
private static boolean isParameter(VarSymbol var) {
|
||||
return (var.flags() & Flags.PARAMETER) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Simple analysis of an expression tree to see if it contains tree nodes
|
||||
* for any non-constant expression. This does not include checking references
|
||||
* to other fields which may or may not be constant.
|
||||
*/
|
||||
private static boolean containsNonConstantExpression(JCExpression tree) {
|
||||
return new MaybeConstantExpressionScanner().containsNonConstantExpression(tree);
|
||||
}
|
||||
|
||||
/**
|
||||
* See JLS 15.18, Constant Expression
|
||||
*/
|
||||
private static class MaybeConstantExpressionScanner extends JCTree.Visitor {
|
||||
boolean maybeConstantExpr = true;
|
||||
|
||||
public boolean containsNonConstantExpression(JCExpression tree) {
|
||||
scan(tree);
|
||||
return !maybeConstantExpr;
|
||||
}
|
||||
|
||||
public void scan(JCTree tree) {
|
||||
// short circuit scan when end result is definitely false
|
||||
if (maybeConstantExpr && tree != null)
|
||||
tree.accept(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
/** default for any non-overridden visit method. */
|
||||
public void visitTree(JCTree tree) {
|
||||
maybeConstantExpr = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitBinary(JCBinary tree) {
|
||||
switch (tree.getTag()) {
|
||||
case MUL: case DIV: case MOD:
|
||||
case PLUS: case MINUS:
|
||||
case SL: case SR: case USR:
|
||||
case LT: case LE: case GT: case GE:
|
||||
case EQ: case NE:
|
||||
case BITAND: case BITXOR: case BITOR:
|
||||
case AND: case OR:
|
||||
break;
|
||||
default:
|
||||
maybeConstantExpr = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitConditional(JCConditional tree) {
|
||||
scan(tree.cond);
|
||||
scan(tree.truepart);
|
||||
scan(tree.falsepart);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitIdent(JCIdent tree) { }
|
||||
|
||||
@Override
|
||||
public void visitLiteral(JCLiteral tree) { }
|
||||
|
||||
@Override
|
||||
public void visitParens(JCParens tree) {
|
||||
scan(tree.expr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitSelect(JCTree.JCFieldAccess tree) {
|
||||
scan(tree.selected);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitTypeCast(JCTypeCast tree) {
|
||||
scan(tree.clazz);
|
||||
scan(tree.expr);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitTypeIdent(JCPrimitiveTypeTree tree) { }
|
||||
|
||||
@Override
|
||||
public void visitUnary(JCUnary tree) {
|
||||
switch (tree.getTag()) {
|
||||
case POS: case NEG: case COMPL: case NOT:
|
||||
break;
|
||||
default:
|
||||
maybeConstantExpr = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,63 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.tools.javac.comp.*;
|
||||
import com.sun.tools.javac.util.*;
|
||||
import com.sun.tools.javac.util.Context.Factory;
|
||||
|
||||
/**
|
||||
* Javadoc's own todo queue doesn't queue its inputs, as javadoc
|
||||
* doesn't perform attribution of method bodies or semantic checking.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class JavadocTodo extends Todo {
|
||||
public static void preRegister(Context context) {
|
||||
context.put(todoKey, (Factory<Todo>)JavadocTodo::new);
|
||||
}
|
||||
|
||||
protected JavadocTodo(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void append(Env<AttrContext> e) {
|
||||
// do nothing; Javadoc doesn't perform attribution.
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean offer(Env<AttrContext> e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1,440 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.tools.JavaFileManager;
|
||||
import javax.tools.JavaFileManager.Location;
|
||||
import javax.tools.JavaFileObject;
|
||||
import javax.tools.StandardJavaFileManager;
|
||||
import javax.tools.StandardLocation;
|
||||
|
||||
import com.sun.tools.javac.code.ClassFinder;
|
||||
import com.sun.tools.javac.code.Symbol.Completer;
|
||||
import com.sun.tools.javac.code.Symbol.ModuleSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.PackageSymbol;
|
||||
import com.sun.tools.javac.comp.Enter;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.util.Abort;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
|
||||
|
||||
/**
|
||||
* This class could be the main entry point for Javadoc when Javadoc is used as a
|
||||
* component in a larger software system. It provides operations to
|
||||
* construct a new javadoc processor, and to run it on a set of source
|
||||
* files.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class JavadocTool extends com.sun.tools.javac.main.JavaCompiler {
|
||||
DocEnv docenv;
|
||||
|
||||
final Messager messager;
|
||||
final ClassFinder javadocFinder;
|
||||
final Enter javadocEnter;
|
||||
final Set<JavaFileObject> uniquefiles;
|
||||
|
||||
/**
|
||||
* Construct a new JavaCompiler processor, using appropriately
|
||||
* extended phases of the underlying compiler.
|
||||
*/
|
||||
protected JavadocTool(Context context) {
|
||||
super(context);
|
||||
messager = Messager.instance0(context);
|
||||
javadocFinder = JavadocClassFinder.instance(context);
|
||||
javadocEnter = JavadocEnter.instance(context);
|
||||
uniquefiles = new HashSet<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* For javadoc, the parser needs to keep comments. Overrides method from JavaCompiler.
|
||||
*/
|
||||
@Override
|
||||
protected boolean keepComments() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a new javadoc tool.
|
||||
*/
|
||||
public static JavadocTool make0(Context context) {
|
||||
// force the use of Javadoc's class finder
|
||||
JavadocClassFinder.preRegister(context);
|
||||
|
||||
// force the use of Javadoc's own enter phase
|
||||
JavadocEnter.preRegister(context);
|
||||
|
||||
// force the use of Javadoc's own member enter phase
|
||||
JavadocMemberEnter.preRegister(context);
|
||||
|
||||
// force the use of Javadoc's own todo phase
|
||||
JavadocTodo.preRegister(context);
|
||||
|
||||
// force the use of Messager as a Log
|
||||
Messager.instance0(context);
|
||||
|
||||
return new JavadocTool(context);
|
||||
}
|
||||
|
||||
public RootDocImpl getRootDocImpl(String doclocale,
|
||||
String encoding,
|
||||
ModifierFilter filter,
|
||||
List<String> args,
|
||||
List<String[]> options,
|
||||
Iterable<? extends JavaFileObject> fileObjects,
|
||||
boolean breakiterator,
|
||||
List<String> subPackages,
|
||||
List<String> excludedPackages,
|
||||
boolean docClasses,
|
||||
boolean legacyDoclet,
|
||||
boolean quiet) throws IOException {
|
||||
docenv = DocEnv.instance(context);
|
||||
docenv.showAccess = filter;
|
||||
docenv.quiet = quiet;
|
||||
docenv.breakiterator = breakiterator;
|
||||
docenv.setLocale(doclocale);
|
||||
docenv.setEncoding(encoding);
|
||||
docenv.docClasses = docClasses;
|
||||
docenv.legacyDoclet = legacyDoclet;
|
||||
|
||||
javadocFinder.sourceCompleter = docClasses ? Completer.NULL_COMPLETER : sourceCompleter;
|
||||
|
||||
if (docClasses) {
|
||||
// If -Xclasses is set, the args should be a series of class names
|
||||
for (String arg: args) {
|
||||
if (!isValidPackageName(arg)) // checks
|
||||
docenv.error(null, "main.illegal_class_name", arg);
|
||||
}
|
||||
if (messager.nerrors() != 0) {
|
||||
return null;
|
||||
}
|
||||
return new RootDocImpl(docenv, args, options);
|
||||
}
|
||||
|
||||
ListBuffer<JCCompilationUnit> classTrees = new ListBuffer<>();
|
||||
Set<String> includedPackages = new LinkedHashSet<>();
|
||||
|
||||
try {
|
||||
StandardJavaFileManager fm = docenv.fileManager instanceof StandardJavaFileManager
|
||||
? (StandardJavaFileManager) docenv.fileManager : null;
|
||||
Set<String> packageNames = new LinkedHashSet<>();
|
||||
// Normally, the args should be a series of package names or file names.
|
||||
// Parse the files and collect the package names.
|
||||
for (String arg: args) {
|
||||
if (fm != null && arg.endsWith(".java") && new File(arg).exists()) {
|
||||
if (new File(arg).getName().equals("module-info.java")) {
|
||||
docenv.warning(null, "main.file_ignored", arg);
|
||||
} else {
|
||||
parse(fm.getJavaFileObjects(arg), classTrees, true);
|
||||
}
|
||||
} else if (isValidPackageName(arg)) {
|
||||
packageNames.add(arg);
|
||||
} else if (arg.endsWith(".java")) {
|
||||
if (fm == null)
|
||||
throw new IllegalArgumentException();
|
||||
else
|
||||
docenv.error(null, "main.file_not_found", arg);
|
||||
} else {
|
||||
docenv.error(null, "main.illegal_package_name", arg);
|
||||
}
|
||||
}
|
||||
|
||||
// Parse file objects provide via the DocumentationTool API
|
||||
parse(fileObjects, classTrees, true);
|
||||
|
||||
modules.initModules(classTrees.toList());
|
||||
|
||||
// Build up the complete list of any packages to be documented
|
||||
Location location = modules.multiModuleMode ? StandardLocation.MODULE_SOURCE_PATH
|
||||
: docenv.fileManager.hasLocation(StandardLocation.SOURCE_PATH) ? StandardLocation.SOURCE_PATH
|
||||
: StandardLocation.CLASS_PATH;
|
||||
|
||||
PackageTable t = new PackageTable(docenv.fileManager, location)
|
||||
.packages(packageNames)
|
||||
.subpackages(subPackages, excludedPackages);
|
||||
|
||||
includedPackages = t.getIncludedPackages();
|
||||
|
||||
// Parse the files in the packages to be documented
|
||||
ListBuffer<JCCompilationUnit> packageTrees = new ListBuffer<>();
|
||||
for (String packageName: includedPackages) {
|
||||
List<JavaFileObject> files = t.getFiles(packageName);
|
||||
docenv.notice("main.Loading_source_files_for_package", packageName);
|
||||
|
||||
if (files.isEmpty())
|
||||
messager.warning(Messager.NOPOS, "main.no_source_files_for_package", packageName);
|
||||
parse(files, packageTrees, false);
|
||||
}
|
||||
modules.enter(packageTrees.toList(), null);
|
||||
|
||||
if (messager.nerrors() != 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Enter symbols for all files
|
||||
docenv.notice("main.Building_tree");
|
||||
javadocEnter.main(classTrees.toList().appendList(packageTrees.toList()));
|
||||
} catch (Abort ex) {}
|
||||
|
||||
if (messager.nerrors() != 0)
|
||||
return null;
|
||||
|
||||
return new RootDocImpl(docenv, listClasses(classTrees.toList()), List.from(includedPackages), options);
|
||||
}
|
||||
|
||||
/** Is the given string a valid package name? */
|
||||
boolean isValidPackageName(String s) {
|
||||
int index;
|
||||
while ((index = s.indexOf('.')) != -1) {
|
||||
if (!isValidClassName(s.substring(0, index))) return false;
|
||||
s = s.substring(index+1);
|
||||
}
|
||||
return isValidClassName(s);
|
||||
}
|
||||
|
||||
private void parse(Iterable<? extends JavaFileObject> files, ListBuffer<JCCompilationUnit> trees,
|
||||
boolean trace) {
|
||||
for (JavaFileObject fo: files) {
|
||||
if (uniquefiles.add(fo)) { // ignore duplicates
|
||||
if (trace)
|
||||
docenv.notice("main.Loading_source_file", fo.getName());
|
||||
trees.append(parse(fo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Are surrogates supported?
|
||||
*/
|
||||
final static boolean surrogatesSupported = surrogatesSupported();
|
||||
private static boolean surrogatesSupported() {
|
||||
try {
|
||||
boolean b = Character.isHighSurrogate('a');
|
||||
return true;
|
||||
} catch (NoSuchMethodError ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if given file name is a valid class name
|
||||
* (including "package-info").
|
||||
* @param s the name of the class to check.
|
||||
* @return true if given class name is a valid class name
|
||||
* and false otherwise.
|
||||
*/
|
||||
public static boolean isValidClassName(String s) {
|
||||
if (s.length() < 1) return false;
|
||||
if (s.equals("package-info")) return true;
|
||||
if (surrogatesSupported) {
|
||||
int cp = s.codePointAt(0);
|
||||
if (!Character.isJavaIdentifierStart(cp))
|
||||
return false;
|
||||
for (int j=Character.charCount(cp); j<s.length(); j+=Character.charCount(cp)) {
|
||||
cp = s.codePointAt(j);
|
||||
if (!Character.isJavaIdentifierPart(cp))
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!Character.isJavaIdentifierStart(s.charAt(0)))
|
||||
return false;
|
||||
for (int j=1; j<s.length(); j++)
|
||||
if (!Character.isJavaIdentifierPart(s.charAt(j)))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* From a list of top level trees, return the list of contained class definitions
|
||||
*/
|
||||
List<JCClassDecl> listClasses(List<JCCompilationUnit> trees) {
|
||||
ListBuffer<JCClassDecl> result = new ListBuffer<>();
|
||||
for (JCCompilationUnit t : trees) {
|
||||
for (JCTree def : t.defs) {
|
||||
if (def.hasTag(JCTree.Tag.CLASSDEF))
|
||||
result.append((JCClassDecl)def);
|
||||
}
|
||||
}
|
||||
return result.toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* A table to manage included and excluded packages.
|
||||
*/
|
||||
class PackageTable {
|
||||
private final Map<String, Entry> entries = new LinkedHashMap<>();
|
||||
private final Set<String> includedPackages = new LinkedHashSet<>();
|
||||
private final JavaFileManager fm;
|
||||
private final Location location;
|
||||
private final Set<JavaFileObject.Kind> sourceKinds = EnumSet.of(JavaFileObject.Kind.SOURCE);
|
||||
|
||||
/**
|
||||
* Creates a table to manage included and excluded packages.
|
||||
* @param fm The file manager used to locate source files
|
||||
* @param locn the location used to locate source files
|
||||
*/
|
||||
PackageTable(JavaFileManager fm, Location locn) {
|
||||
this.fm = fm;
|
||||
this.location = locn;
|
||||
getEntry("").excluded = false;
|
||||
}
|
||||
|
||||
PackageTable packages(Collection<String> packageNames) {
|
||||
includedPackages.addAll(packageNames);
|
||||
return this;
|
||||
}
|
||||
|
||||
PackageTable subpackages(Collection<String> packageNames, Collection<String> excludePackageNames)
|
||||
throws IOException {
|
||||
for (String p: excludePackageNames) {
|
||||
getEntry(p).excluded = true;
|
||||
}
|
||||
|
||||
for (String packageName: packageNames) {
|
||||
Location packageLocn = getLocation(packageName);
|
||||
for (JavaFileObject fo: fm.list(packageLocn, packageName, sourceKinds, true)) {
|
||||
String binaryName = fm.inferBinaryName(packageLocn, fo);
|
||||
String pn = getPackageName(binaryName);
|
||||
String simpleName = getSimpleName(binaryName);
|
||||
Entry e = getEntry(pn);
|
||||
if (!e.isExcluded() && isValidClassName(simpleName)) {
|
||||
includedPackages.add(pn);
|
||||
e.files = (e.files == null ? List.of(fo) : e.files.prepend(fo));
|
||||
}
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the aggregate set of included packages.
|
||||
* @return the aggregate set of included packages
|
||||
*/
|
||||
Set<String> getIncludedPackages() {
|
||||
return includedPackages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the set of source files for a package.
|
||||
* @param packageName the specified package
|
||||
* @return the set of file objects for the specified package
|
||||
* @throws IOException if an error occurs while accessing the files
|
||||
*/
|
||||
List<JavaFileObject> getFiles(String packageName) throws IOException {
|
||||
Entry e = getEntry(packageName);
|
||||
// The files may have been found as a side effect of searching for subpackages
|
||||
if (e.files != null)
|
||||
return e.files;
|
||||
|
||||
ListBuffer<JavaFileObject> lb = new ListBuffer<>();
|
||||
Location packageLocn = getLocation(packageName);
|
||||
for (JavaFileObject fo: fm.list(packageLocn, packageName, sourceKinds, false)) {
|
||||
String binaryName = fm.inferBinaryName(packageLocn, fo);
|
||||
String simpleName = getSimpleName(binaryName);
|
||||
if (isValidClassName(simpleName)) {
|
||||
lb.append(fo);
|
||||
}
|
||||
}
|
||||
|
||||
return lb.toList();
|
||||
}
|
||||
|
||||
private Location getLocation(String packageName) throws IOException {
|
||||
if (location == StandardLocation.MODULE_SOURCE_PATH) {
|
||||
// TODO: handle invalid results
|
||||
Name pack = names.fromString(packageName);
|
||||
|
||||
for (ModuleSymbol msym : modules.allModules()) {
|
||||
PackageSymbol p = syms.getPackage(msym, pack);
|
||||
if (p != null && !p.members().isEmpty()) {
|
||||
return fm.getLocationForModule(location, msym.name.toString());
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
} else {
|
||||
return location;
|
||||
}
|
||||
}
|
||||
|
||||
private Entry getEntry(String name) {
|
||||
Entry e = entries.get(name);
|
||||
if (e == null)
|
||||
entries.put(name, e = new Entry(name));
|
||||
return e;
|
||||
}
|
||||
|
||||
private String getPackageName(String name) {
|
||||
int lastDot = name.lastIndexOf(".");
|
||||
return (lastDot == -1 ? "" : name.substring(0, lastDot));
|
||||
}
|
||||
|
||||
private String getSimpleName(String name) {
|
||||
int lastDot = name.lastIndexOf(".");
|
||||
return (lastDot == -1 ? name : name.substring(lastDot + 1));
|
||||
}
|
||||
|
||||
class Entry {
|
||||
final String name;
|
||||
Boolean excluded;
|
||||
List<JavaFileObject> files;
|
||||
|
||||
Entry(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
boolean isExcluded() {
|
||||
if (excluded == null)
|
||||
excluded = getEntry(getPackageName(name)).isExcluded();
|
||||
return excluded;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
|
||||
/**
|
||||
* Represents a member of a java class: field, constructor, or method.
|
||||
* This is an abstract class dealing with information common to
|
||||
* method, constructor and field members. Class members of a class
|
||||
* (nested classes) are represented instead by ClassDocImpl.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @see MethodDocImpl
|
||||
* @see FieldDocImpl
|
||||
* @see ClassDocImpl
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public abstract class MemberDocImpl
|
||||
extends ProgramElementDocImpl
|
||||
implements MemberDoc {
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*/
|
||||
public MemberDocImpl(DocEnv env, Symbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this field was synthesized by the compiler.
|
||||
*/
|
||||
public abstract boolean isSynthetic();
|
||||
}
|
||||
@ -1,320 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Locale;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.Context.Factory;
|
||||
import com.sun.tools.javac.util.JCDiagnostic;
|
||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
|
||||
import com.sun.tools.javac.util.JavacMessages;
|
||||
import com.sun.tools.javac.util.Log;
|
||||
|
||||
/**
|
||||
* Utility for integrating with javadoc tools and for localization.
|
||||
* Handle Resources. Access to error and warning counts.
|
||||
* Message formatting.
|
||||
* <br>
|
||||
* Also provides implementation for DocErrorReporter.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @see java.util.ResourceBundle
|
||||
* @see java.text.MessageFormat
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class Messager extends Log implements DocErrorReporter {
|
||||
public static final SourcePosition NOPOS = null;
|
||||
|
||||
/** Get the current messager, which is also the compiler log. */
|
||||
public static Messager instance0(Context context) {
|
||||
Log instance = context.get(logKey);
|
||||
if (instance == null || !(instance instanceof Messager))
|
||||
throw new InternalError("no messager instance!");
|
||||
return (Messager)instance;
|
||||
}
|
||||
|
||||
public static void preRegister(Context context,
|
||||
final String programName) {
|
||||
context.put(logKey, (Factory<Log>)c -> new Messager(c, programName));
|
||||
}
|
||||
public static void preRegister(Context context,
|
||||
final String programName,
|
||||
final PrintWriter errWriter,
|
||||
final PrintWriter warnWriter,
|
||||
final PrintWriter noticeWriter) {
|
||||
context.put(logKey, (Factory<Log>)c -> new Messager(c,
|
||||
programName,
|
||||
errWriter,
|
||||
warnWriter,
|
||||
noticeWriter));
|
||||
}
|
||||
|
||||
public class ExitJavadoc extends Error {
|
||||
private static final long serialVersionUID = 0;
|
||||
}
|
||||
|
||||
final String programName;
|
||||
|
||||
private Locale locale;
|
||||
private final JavacMessages messages;
|
||||
private final JCDiagnostic.Factory javadocDiags;
|
||||
|
||||
/** The default writer for diagnostics
|
||||
*/
|
||||
static final PrintWriter defaultErrWriter = new PrintWriter(System.err);
|
||||
static final PrintWriter defaultWarnWriter = new PrintWriter(System.err);
|
||||
static final PrintWriter defaultNoticeWriter = new PrintWriter(System.out);
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param programName Name of the program (for error messages).
|
||||
*/
|
||||
protected Messager(Context context, String programName) {
|
||||
this(context, programName, defaultErrWriter, defaultWarnWriter, defaultNoticeWriter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* @param programName Name of the program (for error messages).
|
||||
* @param errWriter Stream for error messages
|
||||
* @param warnWriter Stream for warnings
|
||||
* @param noticeWriter Stream for other messages
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
protected Messager(Context context,
|
||||
String programName,
|
||||
PrintWriter errWriter,
|
||||
PrintWriter warnWriter,
|
||||
PrintWriter noticeWriter) {
|
||||
super(context, errWriter, warnWriter, noticeWriter);
|
||||
messages = JavacMessages.instance(context);
|
||||
messages.add(locale -> ResourceBundle.getBundle("com.sun.tools.javadoc.resources.javadoc",
|
||||
locale));
|
||||
javadocDiags = new JCDiagnostic.Factory(messages, "javadoc");
|
||||
this.programName = programName;
|
||||
|
||||
}
|
||||
|
||||
public void setLocale(Locale locale) {
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* get and format message string from resource
|
||||
*
|
||||
* @param key selects message from resource
|
||||
* @param args arguments for the message
|
||||
*/
|
||||
String getText(String key, Object... args) {
|
||||
return messages.getLocalizedString(locale, key, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printError(String msg) {
|
||||
printError(null, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param pos the position where the error occurs
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printError(SourcePosition pos, String msg) {
|
||||
if (diagListener != null) {
|
||||
report(DiagnosticType.ERROR, pos, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nerrors < MaxErrors) {
|
||||
String prefix = (pos == null) ? programName : pos.toString();
|
||||
PrintWriter errWriter = getWriter(WriterKind.ERROR);
|
||||
errWriter.println(prefix + ": " + getText("javadoc.error") + " - " + msg);
|
||||
errWriter.flush();
|
||||
prompt();
|
||||
nerrors++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printWarning(String msg) {
|
||||
printWarning(null, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param pos the position where the error occurs
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printWarning(SourcePosition pos, String msg) {
|
||||
if (diagListener != null) {
|
||||
report(DiagnosticType.WARNING, pos, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nwarnings < MaxWarnings) {
|
||||
String prefix = (pos == null) ? programName : pos.toString();
|
||||
PrintWriter warnWriter = getWriter(WriterKind.WARNING);
|
||||
warnWriter.println(prefix + ": " + getText("javadoc.warning") +" - " + msg);
|
||||
warnWriter.flush();
|
||||
nwarnings++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printNotice(String msg) {
|
||||
printNotice(null, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
* Part of DocErrorReporter.
|
||||
*
|
||||
* @param pos the position where the error occurs
|
||||
* @param msg message to print
|
||||
*/
|
||||
public void printNotice(SourcePosition pos, String msg) {
|
||||
if (diagListener != null) {
|
||||
report(DiagnosticType.NOTE, pos, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
PrintWriter noticeWriter = getWriter(WriterKind.NOTICE);
|
||||
if (pos == null)
|
||||
noticeWriter.println(msg);
|
||||
else
|
||||
noticeWriter.println(pos + ": " + msg);
|
||||
noticeWriter.flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Print error message, increment error count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void error(SourcePosition pos, String key, Object... args) {
|
||||
printError(pos, getText(key, args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Print warning message, increment warning count.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void warning(SourcePosition pos, String key, Object... args) {
|
||||
printWarning(pos, getText(key, args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a message.
|
||||
*
|
||||
* @param key selects message from resource
|
||||
*/
|
||||
public void notice(String key, Object... args) {
|
||||
printNotice(getText(key, args));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return total number of errors, including those recorded
|
||||
* in the compilation log.
|
||||
*/
|
||||
public int nerrors() { return nerrors; }
|
||||
|
||||
/**
|
||||
* Return total number of warnings, including those recorded
|
||||
* in the compilation log.
|
||||
*/
|
||||
public int nwarnings() { return nwarnings; }
|
||||
|
||||
/**
|
||||
* Print exit message.
|
||||
*/
|
||||
public void exitNotice() {
|
||||
if (nerrors > 0) {
|
||||
notice((nerrors > 1) ? "main.errors" : "main.error",
|
||||
"" + nerrors);
|
||||
}
|
||||
if (nwarnings > 0) {
|
||||
notice((nwarnings > 1) ? "main.warnings" : "main.warning",
|
||||
"" + nwarnings);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Force program exit, e.g., from a fatal error.
|
||||
* <p>
|
||||
* TODO: This method does not really belong here.
|
||||
*/
|
||||
public void exit() {
|
||||
throw new ExitJavadoc();
|
||||
}
|
||||
|
||||
private void report(DiagnosticType type, SourcePosition pos, String msg) {
|
||||
switch (type) {
|
||||
case ERROR:
|
||||
case WARNING:
|
||||
Object prefix = (pos == null) ? programName : pos;
|
||||
report(javadocDiags.create(type, null, null, "msg", prefix, msg));
|
||||
break;
|
||||
|
||||
case NOTE:
|
||||
String key = (pos == null) ? "msg" : "pos.msg";
|
||||
report(javadocDiags.create(type, null, null, key, pos, msg));
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new IllegalArgumentException(type.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,248 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.*;
|
||||
import com.sun.tools.javac.code.Symbol.*;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import static com.sun.tools.javac.code.TypeTag.CLASS;
|
||||
|
||||
/**
|
||||
* Represents a method of a java class.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class MethodDocImpl
|
||||
extends ExecutableMemberDocImpl implements MethodDoc {
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*/
|
||||
public MethodDocImpl(DocEnv env, MethodSymbol sym) {
|
||||
super(env, sym);
|
||||
}
|
||||
|
||||
/**
|
||||
* constructor.
|
||||
*/
|
||||
public MethodDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) {
|
||||
super(env, sym, treePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if it is a method, which it is.
|
||||
* Note: constructors are not methods.
|
||||
* This method is overridden by AnnotationTypeElementDocImpl.
|
||||
*
|
||||
* @return true
|
||||
*/
|
||||
public boolean isMethod() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this method is default
|
||||
*/
|
||||
public boolean isDefault() {
|
||||
return (sym.flags() & Flags.DEFAULT) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this method is abstract
|
||||
*/
|
||||
public boolean isAbstract() {
|
||||
return (Modifier.isAbstract(getModifiers()) && !isDefault());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get return type.
|
||||
*
|
||||
* @return the return type of this method, null if it
|
||||
* is a constructor.
|
||||
*/
|
||||
public com.sun.javadoc.Type returnType() {
|
||||
return TypeMaker.getType(env, sym.type.getReturnType(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the class that originally defined the method that
|
||||
* is overridden by the current definition, or null if no
|
||||
* such class exists.
|
||||
*
|
||||
* @return a ClassDocImpl representing the superclass that
|
||||
* originally defined this method, null if this method does
|
||||
* not override a definition in a superclass.
|
||||
*/
|
||||
public ClassDoc overriddenClass() {
|
||||
com.sun.javadoc.Type t = overriddenType();
|
||||
return (t != null) ? t.asClassDoc() : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type containing the method that this method overrides.
|
||||
* It may be a <code>ClassDoc</code> or a <code>ParameterizedType</code>.
|
||||
*/
|
||||
public com.sun.javadoc.Type overriddenType() {
|
||||
|
||||
if ((sym.flags() & Flags.STATIC) != 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ClassSymbol origin = (ClassSymbol)sym.owner;
|
||||
for (Type t = env.types.supertype(origin.type);
|
||||
t.hasTag(CLASS);
|
||||
t = env.types.supertype(t)) {
|
||||
ClassSymbol c = (ClassSymbol)t.tsym;
|
||||
for (Symbol sym2 : membersOf(c).getSymbolsByName(sym.name)) {
|
||||
if (sym.overrides(sym2, origin, env.types, true)) {
|
||||
return TypeMaker.getType(env, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the method that this method overrides.
|
||||
*
|
||||
* @return a MethodDoc representing a method definition
|
||||
* in a superclass this method overrides, null if
|
||||
* this method does not override.
|
||||
*/
|
||||
public MethodDoc overriddenMethod() {
|
||||
|
||||
// Real overriding only. Static members are simply hidden.
|
||||
// Likewise for constructors, but the MethodSymbol.overrides
|
||||
// method takes this into account.
|
||||
if ((sym.flags() & Flags.STATIC) != 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Derived from com.sun.tools.javac.comp.Check.checkOverride .
|
||||
|
||||
ClassSymbol origin = (ClassSymbol)sym.owner;
|
||||
for (Type t = env.types.supertype(origin.type);
|
||||
t.hasTag(CLASS);
|
||||
t = env.types.supertype(t)) {
|
||||
ClassSymbol c = (ClassSymbol)t.tsym;
|
||||
for (Symbol sym2 : membersOf(c).getSymbolsByName(sym.name)) {
|
||||
if (sym.overrides(sym2, origin, env.types, true)) {
|
||||
return env.getMethodDoc((MethodSymbol)sym2);
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**Retrieve members of c, ignoring any CompletionFailures that occur. */
|
||||
private Scope membersOf(ClassSymbol c) {
|
||||
try {
|
||||
return c.members();
|
||||
} catch (CompletionFailure cf) {
|
||||
/* Quietly ignore completion failures and try again - the type
|
||||
* for which the CompletionFailure was thrown shouldn't be completed
|
||||
* again by the completer that threw the CompletionFailure.
|
||||
*/
|
||||
return membersOf(c);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests whether this method overrides another.
|
||||
* The overridden method may be one declared in a superclass or
|
||||
* a superinterface (unlike {@link #overriddenMethod()}).
|
||||
*
|
||||
* <p> When a non-abstract method overrides an abstract one, it is
|
||||
* also said to <i>implement</i> the other.
|
||||
*
|
||||
* @param meth the other method to examine
|
||||
* @return <tt>true</tt> if this method overrides the other
|
||||
*/
|
||||
public boolean overrides(MethodDoc meth) {
|
||||
MethodSymbol overridee = ((MethodDocImpl) meth).sym;
|
||||
ClassSymbol origin = (ClassSymbol) sym.owner;
|
||||
|
||||
return sym.name == overridee.name &&
|
||||
|
||||
// not reflexive as per JLS
|
||||
sym != overridee &&
|
||||
|
||||
// we don't care if overridee is static, though that wouldn't
|
||||
// compile
|
||||
!sym.isStatic() &&
|
||||
|
||||
// sym, whose declaring type is the origin, must be
|
||||
// in a subtype of overridee's type
|
||||
env.types.asSuper(origin.type, overridee.owner) != null &&
|
||||
|
||||
// check access and signatures; don't check return types
|
||||
sym.overrides(overridee, origin, env.types, false);
|
||||
}
|
||||
|
||||
|
||||
public String name() {
|
||||
if (name == null) {
|
||||
name = sym.name.toString();
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
private String name;
|
||||
|
||||
public String qualifiedName() {
|
||||
if (qualifiedName == null) {
|
||||
qualifiedName = sym.enclClass().getQualifiedName() + "." + sym.name;
|
||||
}
|
||||
return qualifiedName;
|
||||
}
|
||||
|
||||
private String qualifiedName;
|
||||
|
||||
/**
|
||||
* Returns a string representation of this method. Includes the
|
||||
* qualified signature, the qualified method name, and any type
|
||||
* parameters. Type parameters follow the class name, as they do
|
||||
* in the syntax for invoking methods with explicit type parameters.
|
||||
*/
|
||||
public String toString() {
|
||||
return sym.enclClass().getQualifiedName() +
|
||||
"." + typeParametersString() + name() + signature();
|
||||
}
|
||||
}
|
||||
@ -1,127 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import static com.sun.tools.javac.code.Flags.*;
|
||||
|
||||
/**
|
||||
* A class whose instances are filters over Modifier bits.
|
||||
* Filtering is done by returning boolean values.
|
||||
* Classes, methods and fields can be filtered, or filtering
|
||||
* can be done directly on modifier bits.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @see com.sun.tools.javac.code.Flags
|
||||
* @author Robert Field
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class ModifierFilter {
|
||||
|
||||
/**
|
||||
* Package private access.
|
||||
* A "pseudo-" modifier bit that can be used in the
|
||||
* constructors of this class to specify package private
|
||||
* access. This is needed since there is no Modifier.PACKAGE.
|
||||
*/
|
||||
public static final long PACKAGE = 0x8000000000000000L;
|
||||
|
||||
/**
|
||||
* All access modifiers.
|
||||
* A short-hand set of modifier bits that can be used in the
|
||||
* constructors of this class to specify all access modifiers,
|
||||
* Same as PRIVATE | PROTECTED | PUBLIC | PACKAGE.
|
||||
*/
|
||||
public static final long ALL_ACCESS =
|
||||
PRIVATE | PROTECTED | PUBLIC | PACKAGE;
|
||||
|
||||
private long oneOf;
|
||||
private long must;
|
||||
private long cannot;
|
||||
|
||||
private static final int ACCESS_BITS = PRIVATE | PROTECTED | PUBLIC;
|
||||
|
||||
/**
|
||||
* Constructor - Specify a filter.
|
||||
*
|
||||
* @param oneOf If zero, everything passes the filter.
|
||||
* If non-zero, at least one of the specified
|
||||
* bits must be on in the modifier bits to
|
||||
* pass the filter.
|
||||
*/
|
||||
public ModifierFilter(long oneOf) {
|
||||
this(oneOf, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor - Specify a filter.
|
||||
* For example, the filter below will only pass synchronized
|
||||
* methods that are private or package private access and are
|
||||
* not native or static.
|
||||
* <pre>
|
||||
* ModifierFilter( Modifier.PRIVATE | ModifierFilter.PACKAGE,
|
||||
* Modifier.SYNCHRONIZED,
|
||||
* Modifier.NATIVE | Modifier.STATIC)
|
||||
* </pre><p>
|
||||
* Each of the three arguments must either be
|
||||
* zero or the or'ed combination of the bits specified in the
|
||||
* class Modifier or this class. During filtering, these values
|
||||
* are compared against the modifier bits as follows:
|
||||
*
|
||||
* @param oneOf If zero, ignore this argument.
|
||||
* If non-zero, at least one of the bits must be on.
|
||||
* @param must All bits specified must be on.
|
||||
* @param cannot None of the bits specified can be on.
|
||||
*/
|
||||
public ModifierFilter(long oneOf, long must, long cannot) {
|
||||
this.oneOf = oneOf;
|
||||
this.must = must;
|
||||
this.cannot = cannot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter on modifier bits.
|
||||
*
|
||||
* @param modifierBits Bits as specified in the Modifier class
|
||||
*
|
||||
* @return Whether the modifierBits pass this filter.
|
||||
*/
|
||||
public boolean checkModifier(int modifierBits) {
|
||||
// Add in the "pseudo-" modifier bit PACKAGE, if needed
|
||||
long fmod = ((modifierBits & ACCESS_BITS) == 0) ?
|
||||
modifierBits | PACKAGE :
|
||||
modifierBits;
|
||||
return ((oneOf == 0) || ((oneOf & fmod) != 0)) &&
|
||||
((must & fmod) == must) &&
|
||||
((cannot & fmod) == 0);
|
||||
}
|
||||
|
||||
} // end ModifierFilter
|
||||
@ -1,391 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import javax.tools.FileObject;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.PackageSymbol;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
|
||||
|
||||
/**
|
||||
* Represents a java package. Provides access to information
|
||||
* about the package, the package's comment and tags, and the
|
||||
* classes in the package.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Neal Gafter (rewrite)
|
||||
* @author Scott Seligman (package-info.java)
|
||||
*/
|
||||
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class PackageDocImpl extends DocImpl implements PackageDoc {
|
||||
|
||||
public final PackageSymbol sym;
|
||||
private JCCompilationUnit tree = null; // for source position
|
||||
|
||||
public FileObject docPath = null;
|
||||
private boolean foundDoc; // found a doc comment in either
|
||||
// package.html or package-info.java
|
||||
|
||||
boolean isIncluded = false; // Set in RootDocImpl.
|
||||
public boolean setDocPath = false; //Flag to avoid setting doc path multiple times.
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public PackageDocImpl(DocEnv env, PackageSymbol sym) {
|
||||
this(env, sym, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public PackageDocImpl(DocEnv env, PackageSymbol sym, TreePath treePath) {
|
||||
super(env, treePath);
|
||||
this.sym = sym;
|
||||
this.tree = (treePath == null) ? null : (JCCompilationUnit) treePath.getCompilationUnit();
|
||||
foundDoc = (documentation != null);
|
||||
}
|
||||
|
||||
void setTree(JCTree tree) {
|
||||
this.tree = (JCCompilationUnit) tree;
|
||||
}
|
||||
|
||||
public void setTreePath(TreePath treePath) {
|
||||
super.setTreePath(treePath);
|
||||
checkDoc();
|
||||
}
|
||||
|
||||
/**
|
||||
* Do lazy initialization of "documentation" string.
|
||||
*/
|
||||
protected String documentation() {
|
||||
if (documentation != null)
|
||||
return documentation;
|
||||
if (docPath != null) {
|
||||
// read from file
|
||||
try {
|
||||
InputStream s = docPath.openInputStream();
|
||||
documentation = readHTMLDocumentation(s, docPath);
|
||||
} catch (IOException exc) {
|
||||
documentation = "";
|
||||
env.error(null, "javadoc.File_Read_Error", docPath.getName());
|
||||
}
|
||||
} else {
|
||||
// no doc file to be had
|
||||
documentation = "";
|
||||
}
|
||||
return documentation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cache of all classes contained in this package, including
|
||||
* member classes of those classes, and their member classes, etc.
|
||||
* Includes only those classes at the specified protection level
|
||||
* and weaker.
|
||||
*/
|
||||
private List<ClassDocImpl> allClassesFiltered = null;
|
||||
|
||||
/**
|
||||
* Cache of all classes contained in this package, including
|
||||
* member classes of those classes, and their member classes, etc.
|
||||
*/
|
||||
private List<ClassDocImpl> allClasses = null;
|
||||
|
||||
/**
|
||||
* Return a list of all classes contained in this package, including
|
||||
* member classes of those classes, and their member classes, etc.
|
||||
*/
|
||||
private List<ClassDocImpl> getClasses(boolean filtered) {
|
||||
if (allClasses != null && !filtered) {
|
||||
return allClasses;
|
||||
}
|
||||
if (allClassesFiltered != null && filtered) {
|
||||
return allClassesFiltered;
|
||||
}
|
||||
ListBuffer<ClassDocImpl> classes = new ListBuffer<>();
|
||||
for (Symbol enumerated : sym.members().getSymbols(NON_RECURSIVE)) {
|
||||
if (enumerated != null) {
|
||||
ClassSymbol s = (ClassSymbol)enumerated;
|
||||
ClassDocImpl c = env.getClassDoc(s);
|
||||
if (c != null && !c.isSynthetic())
|
||||
c.addAllClasses(classes, filtered);
|
||||
}
|
||||
}
|
||||
if (filtered)
|
||||
return allClassesFiltered = classes.toList();
|
||||
else
|
||||
return allClasses = classes.toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Add all included classes (including Exceptions and Errors)
|
||||
* and interfaces.
|
||||
*/
|
||||
public void addAllClassesTo(ListBuffer<ClassDocImpl> list) {
|
||||
list.appendList(getClasses(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all classes (including Exceptions and Errors)
|
||||
* and interfaces.
|
||||
* @since J2SE1.4.
|
||||
*
|
||||
* @return all classes and interfaces in this package, filtered to include
|
||||
* only the included classes if filter==true.
|
||||
*/
|
||||
public ClassDoc[] allClasses(boolean filter) {
|
||||
List<ClassDocImpl> classes = getClasses(filter);
|
||||
return classes.toArray(new ClassDocImpl[classes.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all included classes (including Exceptions and Errors)
|
||||
* and interfaces. Same as allClasses(true).
|
||||
*
|
||||
* @return all included classes and interfaces in this package.
|
||||
*/
|
||||
public ClassDoc[] allClasses() {
|
||||
return allClasses(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ordinary classes (that is, exclude exceptions, errors,
|
||||
* enums, interfaces, and annotation types) in this package.
|
||||
*
|
||||
* @return included ordinary classes in this package.
|
||||
*/
|
||||
public ClassDoc[] ordinaryClasses() {
|
||||
ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isOrdinaryClass()) {
|
||||
ret.append(c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new ClassDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Exception classes in this package.
|
||||
*
|
||||
* @return included Exceptions in this package.
|
||||
*/
|
||||
public ClassDoc[] exceptions() {
|
||||
ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isException()) {
|
||||
ret.append(c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new ClassDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Error classes in this package.
|
||||
*
|
||||
* @return included Errors in this package.
|
||||
*/
|
||||
public ClassDoc[] errors() {
|
||||
ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isError()) {
|
||||
ret.append(c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new ClassDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get included enum types in this package.
|
||||
*
|
||||
* @return included enum types in this package.
|
||||
*/
|
||||
public ClassDoc[] enums() {
|
||||
ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isEnum()) {
|
||||
ret.append(c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new ClassDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get included interfaces in this package, omitting annotation types.
|
||||
*
|
||||
* @return included interfaces in this package.
|
||||
*/
|
||||
public ClassDoc[] interfaces() {
|
||||
ListBuffer<ClassDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isInterface()) {
|
||||
ret.append(c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new ClassDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get included annotation types in this package.
|
||||
*
|
||||
* @return included annotation types in this package.
|
||||
*/
|
||||
public AnnotationTypeDoc[] annotationTypes() {
|
||||
ListBuffer<AnnotationTypeDocImpl> ret = new ListBuffer<>();
|
||||
for (ClassDocImpl c : getClasses(true)) {
|
||||
if (c.isAnnotationType()) {
|
||||
ret.append((AnnotationTypeDocImpl)c);
|
||||
}
|
||||
}
|
||||
return ret.toArray(new AnnotationTypeDocImpl[ret.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the annotations of this package.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
public AnnotationDesc[] annotations() {
|
||||
AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
|
||||
int i = 0;
|
||||
for (Attribute.Compound a : sym.getRawAttributes()) {
|
||||
res[i++] = new AnnotationDescImpl(env, a);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Lookup for a class within this package.
|
||||
*
|
||||
* @return ClassDocImpl of found class, or null if not found.
|
||||
*/
|
||||
public ClassDoc findClass(String className) {
|
||||
final boolean filtered = true;
|
||||
for (ClassDocImpl c : getClasses(filtered)) {
|
||||
if (c.name().equals(className)) {
|
||||
return c;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this package is included in the active set.
|
||||
*/
|
||||
public boolean isIncluded() {
|
||||
return isIncluded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get package name.
|
||||
*
|
||||
* Note that we do not provide a means of obtaining the simple
|
||||
* name of a package -- package names are always returned in their
|
||||
* uniquely qualified form.
|
||||
*/
|
||||
public String name() {
|
||||
return qualifiedName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get package name.
|
||||
*/
|
||||
public String qualifiedName() {
|
||||
if (qualifiedName == null) {
|
||||
Name fullname = sym.getQualifiedName();
|
||||
// Some bogus tests depend on the interned "" being returned.
|
||||
// See 6457276.
|
||||
qualifiedName = fullname.isEmpty() ? "" : fullname.toString();
|
||||
}
|
||||
return qualifiedName;
|
||||
}
|
||||
|
||||
private String qualifiedName;
|
||||
|
||||
/**
|
||||
* set doc path for an unzipped directory
|
||||
*/
|
||||
public void setDocPath(FileObject path) {
|
||||
setDocPath = true;
|
||||
if (path == null)
|
||||
return;
|
||||
if (!path.equals(docPath)) {
|
||||
docPath = path;
|
||||
checkDoc();
|
||||
}
|
||||
}
|
||||
|
||||
// Has checkDoc() sounded off yet?
|
||||
private boolean checkDocWarningEmitted = false;
|
||||
|
||||
/**
|
||||
* Invoked when a source of package doc comments is located.
|
||||
* Emits a diagnostic if this is the second one.
|
||||
*/
|
||||
private void checkDoc() {
|
||||
if (foundDoc) {
|
||||
if (!checkDocWarningEmitted) {
|
||||
env.warning(null, "javadoc.Multiple_package_comments", name());
|
||||
checkDocWarningEmitted = true;
|
||||
}
|
||||
} else {
|
||||
foundDoc = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the source position of the entity, or null if
|
||||
* no position is available.
|
||||
*/
|
||||
public SourcePosition position() {
|
||||
return (tree != null)
|
||||
? SourcePositionImpl.make(tree.sourcefile, tree.pos, tree.lineMap)
|
||||
: SourcePositionImpl.make(docPath, Position.NOPOS, null);
|
||||
}
|
||||
}
|
||||
@ -1,121 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.util.regex.*;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
/**
|
||||
* Represents an @param documentation tag.
|
||||
* Parses and stores the name and comment parts of the parameter tag.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Robert Field
|
||||
*
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class ParamTagImpl extends TagImpl implements ParamTag {
|
||||
|
||||
private static final Pattern typeParamRE = Pattern.compile("<([^<>]+)>");
|
||||
|
||||
private final String parameterName;
|
||||
private final String parameterComment;
|
||||
private final boolean isTypeParameter;
|
||||
|
||||
/**
|
||||
* Cached inline tags.
|
||||
*/
|
||||
private Tag[] inlineTags;
|
||||
|
||||
ParamTagImpl(DocImpl holder, String name, String text) {
|
||||
super(holder, name, text);
|
||||
String[] sa = divideAtWhite();
|
||||
|
||||
Matcher m = typeParamRE.matcher(sa[0]);
|
||||
isTypeParameter = m.matches();
|
||||
parameterName = isTypeParameter ? m.group(1) : sa[0];
|
||||
parameterComment = sa[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the parameter name.
|
||||
*/
|
||||
public String parameterName() {
|
||||
return parameterName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the parameter comment.
|
||||
*/
|
||||
public String parameterComment() {
|
||||
return parameterComment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the kind of this tag.
|
||||
*/
|
||||
@Override
|
||||
public String kind() {
|
||||
return "@param";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this ParamTag corresponds to a type parameter.
|
||||
*/
|
||||
public boolean isTypeParameter() {
|
||||
return isTypeParameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert this object to a string.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return name + ":" + text;
|
||||
}
|
||||
|
||||
/**
|
||||
* For the parameter comment with embedded @link tags return the array of
|
||||
* TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
|
||||
*
|
||||
* @return TagImpl[] Array of tags with inline SeeTagImpls.
|
||||
* @see TagImpl#inlineTags()
|
||||
* @see ThrowsTagImpl#inlineTags()
|
||||
*/
|
||||
@Override
|
||||
public Tag[] inlineTags() {
|
||||
if (inlineTags == null) {
|
||||
inlineTags = Comment.getInlineTags(holder, parameterComment);
|
||||
}
|
||||
return inlineTags;
|
||||
}
|
||||
}
|
||||
@ -1,111 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
||||
|
||||
/**
|
||||
* ParameterImpl information.
|
||||
* This includes a parameter type and parameter name.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Scott Seligman (generics, annotations)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class ParameterImpl implements Parameter {
|
||||
|
||||
private final DocEnv env;
|
||||
private final VarSymbol sym;
|
||||
private final com.sun.javadoc.Type type;
|
||||
|
||||
/**
|
||||
* Constructor of parameter info class.
|
||||
*/
|
||||
ParameterImpl(DocEnv env, VarSymbol sym) {
|
||||
this.env = env;
|
||||
this.sym = sym;
|
||||
this.type = TypeMaker.getType(env, sym.type, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the type of this parameter.
|
||||
*/
|
||||
public com.sun.javadoc.Type type() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get local name of this parameter.
|
||||
* For example if parameter is the short 'index', returns "index".
|
||||
*/
|
||||
public String name() {
|
||||
return sym.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get type name of this parameter.
|
||||
* For example if parameter is the short 'index', returns "short".
|
||||
*/
|
||||
public String typeName() {
|
||||
return (type instanceof ClassDoc || type instanceof TypeVariable)
|
||||
? type.typeName() // omit formal type params or bounds
|
||||
: type.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the parameter.
|
||||
* <p>
|
||||
* For example if parameter is the short 'index', returns "short index".
|
||||
*
|
||||
* @return type name and parameter name of this parameter.
|
||||
*/
|
||||
public String toString() {
|
||||
return typeName() + " " + sym;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the annotations of this parameter.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
public AnnotationDesc[] annotations() {
|
||||
AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
|
||||
int i = 0;
|
||||
for (Attribute.Compound a : sym.getRawAttributes()) {
|
||||
res[i++] = new AnnotationDescImpl(env, a);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@ -1,150 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
|
||||
import static com.sun.tools.javac.code.TypeTag.CLASS;
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of <code>ParameterizedType</code>, which
|
||||
* represents an invocation of a generic class or interface.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class ParameterizedTypeImpl
|
||||
extends AbstractTypeImpl implements ParameterizedType {
|
||||
|
||||
ParameterizedTypeImpl(DocEnv env, Type type) {
|
||||
super(env, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the generic class or interface that declared this type.
|
||||
*/
|
||||
@Override
|
||||
public ClassDoc asClassDoc() {
|
||||
return env.getClassDoc((ClassSymbol)type.tsym);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the actual type arguments of this type.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] typeArguments() {
|
||||
return TypeMaker.getTypes(env, type.getTypeArguments());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the class type that is a direct supertype of this one.
|
||||
* Return null if this is an interface type.
|
||||
*/
|
||||
public com.sun.javadoc.Type superclassType() {
|
||||
if (asClassDoc().isInterface()) {
|
||||
return null;
|
||||
}
|
||||
Type sup = env.types.supertype(type);
|
||||
return TypeMaker.getType(env,
|
||||
(sup != type) ? sup : env.syms.objectType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the interface types directly implemented by or extended by this
|
||||
* parameterized type.
|
||||
* Return an empty array if there are no interfaces.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] interfaceTypes() {
|
||||
return TypeMaker.getTypes(env, env.types.interfaces(type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type that contains this type as a member.
|
||||
* Return null is this is a top-level type.
|
||||
*/
|
||||
public com.sun.javadoc.Type containingType() {
|
||||
if (type.getEnclosingType().hasTag(CLASS)) {
|
||||
// This is the type of an inner class.
|
||||
return TypeMaker.getType(env, type.getEnclosingType());
|
||||
}
|
||||
ClassSymbol enclosing = type.tsym.owner.enclClass();
|
||||
if (enclosing != null) {
|
||||
// Nested but not inner. Return the ClassDoc of the enclosing
|
||||
// class or interface.
|
||||
// See java.lang.reflect.ParameterizedType.getOwnerType().
|
||||
return env.getClassDoc(enclosing);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
// Asking for the "name" of a parameterized type doesn't exactly make
|
||||
// sense. It's a type expression. Return the name of its generic
|
||||
// type.
|
||||
@Override
|
||||
public String typeName() {
|
||||
return TypeMaker.getTypeName(type, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return parameterizedTypeToString(env, (ClassType)type, true);
|
||||
}
|
||||
|
||||
static String parameterizedTypeToString(DocEnv env, ClassType cl,
|
||||
boolean full) {
|
||||
if (env.legacyDoclet) {
|
||||
return TypeMaker.getTypeName(cl, full);
|
||||
}
|
||||
StringBuilder s = new StringBuilder();
|
||||
if (!(cl.getEnclosingType().hasTag(CLASS))) { // if not an inner class...
|
||||
s.append(TypeMaker.getTypeName(cl, full));
|
||||
} else {
|
||||
ClassType encl = (ClassType)cl.getEnclosingType();
|
||||
s.append(parameterizedTypeToString(env, encl, full))
|
||||
.append('.')
|
||||
.append(cl.tsym.name.toString());
|
||||
}
|
||||
s.append(TypeMaker.typeArgumentsString(env, cl, full));
|
||||
return s.toString();
|
||||
}
|
||||
}
|
||||
@ -1,163 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
/**
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class PrimitiveType implements com.sun.javadoc.Type {
|
||||
|
||||
private final String name;
|
||||
|
||||
static final PrimitiveType voidType = new PrimitiveType("void");
|
||||
static final PrimitiveType booleanType = new PrimitiveType("boolean");
|
||||
static final PrimitiveType byteType = new PrimitiveType("byte");
|
||||
static final PrimitiveType charType = new PrimitiveType("char");
|
||||
static final PrimitiveType shortType = new PrimitiveType("short");
|
||||
static final PrimitiveType intType = new PrimitiveType("int");
|
||||
static final PrimitiveType longType = new PrimitiveType("long");
|
||||
static final PrimitiveType floatType = new PrimitiveType("float");
|
||||
static final PrimitiveType doubleType = new PrimitiveType("double");
|
||||
|
||||
// error type, should never actually be used
|
||||
static final PrimitiveType errorType = new PrimitiveType("");
|
||||
|
||||
PrimitiveType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return unqualified name of type excluding any dimension information.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns 'String'.
|
||||
*/
|
||||
public String typeName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public com.sun.javadoc.Type getElementType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return qualified name of type excluding any dimension information.
|
||||
*<p>
|
||||
* For example, a two dimensional array of String
|
||||
* returns 'java.lang.String'.
|
||||
*/
|
||||
public String qualifiedTypeName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the simple name of this type.
|
||||
*/
|
||||
public String simpleTypeName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type's dimension information, as a string.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns '[][]'.
|
||||
*/
|
||||
public String dimension() {
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as a class. Array dimensions are ignored.
|
||||
*
|
||||
* @return a ClassDocImpl if the type is a Class.
|
||||
* Return null if it is a primitive type..
|
||||
*/
|
||||
public ClassDoc asClassDoc() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as this is not an annotation type.
|
||||
*/
|
||||
public AnnotationTypeDoc asAnnotationTypeDoc() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as this is not an instantiation.
|
||||
*/
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as this is not a type variable.
|
||||
*/
|
||||
public TypeVariable asTypeVariable() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as this is not a wildcard type.
|
||||
*/
|
||||
public WildcardType asWildcardType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as this is not an annotated type.
|
||||
*/
|
||||
public AnnotatedType asAnnotatedType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the type.
|
||||
*
|
||||
* Return name of type including any dimension information.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns
|
||||
* <code>String[][]</code>.
|
||||
*
|
||||
* @return name of type including any dimension information.
|
||||
*/
|
||||
public String toString() {
|
||||
return qualifiedTypeName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this is a primitive type.
|
||||
*/
|
||||
public boolean isPrimitive() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,233 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.text.CollationKey;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
/**
|
||||
* Represents a java program element: class, interface, field,
|
||||
* constructor, or method.
|
||||
* This is an abstract class dealing with information common to
|
||||
* these elements.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @see MemberDocImpl
|
||||
* @see ClassDocImpl
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
* @author Scott Seligman (generics, enums, annotations)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public abstract class ProgramElementDocImpl
|
||||
extends DocImpl implements ProgramElementDoc {
|
||||
|
||||
private final Symbol sym;
|
||||
|
||||
// For source position information.
|
||||
JCTree tree = null;
|
||||
Position.LineMap lineMap = null;
|
||||
|
||||
|
||||
// Cache for getModifiers().
|
||||
private int modifiers = -1;
|
||||
|
||||
protected ProgramElementDocImpl(DocEnv env, Symbol sym, TreePath treePath) {
|
||||
super(env, treePath);
|
||||
this.sym = sym;
|
||||
if (treePath != null) {
|
||||
tree = (JCTree) treePath.getLeaf();
|
||||
lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void setTreePath(TreePath treePath) {
|
||||
super.setTreePath(treePath);
|
||||
this.tree = (JCTree) treePath.getLeaf();
|
||||
this.lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Subclasses override to identify the containing class
|
||||
*/
|
||||
protected abstract ClassSymbol getContainingClass();
|
||||
|
||||
/**
|
||||
* Returns the flags in terms of javac's flags
|
||||
*/
|
||||
abstract protected long getFlags();
|
||||
|
||||
/**
|
||||
* Returns the modifier flags in terms of java.lang.reflect.Modifier.
|
||||
*/
|
||||
protected int getModifiers() {
|
||||
if (modifiers == -1) {
|
||||
modifiers = DocEnv.translateModifiers(getFlags());
|
||||
}
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the containing class of this program element.
|
||||
*
|
||||
* @return a ClassDocImpl for this element's containing class.
|
||||
* If this is a class with no outer class, return null.
|
||||
*/
|
||||
public ClassDoc containingClass() {
|
||||
if (getContainingClass() == null) {
|
||||
return null;
|
||||
}
|
||||
return env.getClassDoc(getContainingClass());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the package that this member is contained in.
|
||||
* Return "" if in unnamed package.
|
||||
*/
|
||||
public PackageDoc containingPackage() {
|
||||
return env.getPackageDoc(getContainingClass().packge());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the modifier specifier integer.
|
||||
*
|
||||
* @see java.lang.reflect.Modifier
|
||||
*/
|
||||
public int modifierSpecifier() {
|
||||
int modifiers = getModifiers();
|
||||
if (isMethod() && containingClass().isInterface())
|
||||
// Remove the implicit abstract modifier.
|
||||
return modifiers & ~Modifier.ABSTRACT;
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get modifiers string.
|
||||
* <pre>
|
||||
* Example, for:
|
||||
* public abstract int foo() { ... }
|
||||
* modifiers() would return:
|
||||
* 'public abstract'
|
||||
* </pre>
|
||||
* Annotations are not included.
|
||||
*/
|
||||
public String modifiers() {
|
||||
int modifiers = getModifiers();
|
||||
if (isAnnotationTypeElement() ||
|
||||
(isMethod() && containingClass().isInterface())) {
|
||||
// Remove the implicit abstract modifier.
|
||||
return Modifier.toString(modifiers & ~Modifier.ABSTRACT);
|
||||
} else {
|
||||
return Modifier.toString(modifiers);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the annotations of this program element.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
public AnnotationDesc[] annotations() {
|
||||
AnnotationDesc res[] = new AnnotationDesc[sym.getRawAttributes().length()];
|
||||
int i = 0;
|
||||
for (Attribute.Compound a : sym.getRawAttributes()) {
|
||||
res[i++] = new AnnotationDescImpl(env, a);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is public
|
||||
*/
|
||||
public boolean isPublic() {
|
||||
int modifiers = getModifiers();
|
||||
return Modifier.isPublic(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is protected
|
||||
*/
|
||||
public boolean isProtected() {
|
||||
int modifiers = getModifiers();
|
||||
return Modifier.isProtected(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is private
|
||||
*/
|
||||
public boolean isPrivate() {
|
||||
int modifiers = getModifiers();
|
||||
return Modifier.isPrivate(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is package private
|
||||
*/
|
||||
public boolean isPackagePrivate() {
|
||||
return !(isPublic() || isPrivate() || isProtected());
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is static
|
||||
*/
|
||||
public boolean isStatic() {
|
||||
int modifiers = getModifiers();
|
||||
return Modifier.isStatic(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this program element is final
|
||||
*/
|
||||
public boolean isFinal() {
|
||||
int modifiers = getModifiers();
|
||||
return Modifier.isFinal(modifiers);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a key for sorting.
|
||||
*/
|
||||
CollationKey generateKey() {
|
||||
String k = name();
|
||||
// System.out.println("COLLATION KEY FOR " + this + " is \"" + k + "\"");
|
||||
return env.doclocale.collator.getCollationKey(k);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,401 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
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.code.Source.Feature;
|
||||
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.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
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.
|
||||
*
|
||||
* @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*";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the name of this Doc item.
|
||||
*
|
||||
* @return the string <code>"*RootDocImpl*"</code>.
|
||||
*/
|
||||
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 JavaScriptScanner initJavaScriptScanner(boolean allowScriptInComments) {
|
||||
return env.initJavaScriptScanner(allowScriptInComments);
|
||||
}
|
||||
|
||||
public boolean isFunctionalInterface(AnnotationDesc annotationDesc) {
|
||||
return Feature.LAMBDA.allowedInSource(env.source)
|
||||
&& annotationDesc.annotationType().qualifiedName().equals(
|
||||
env.syms.functionalInterfaceType.toString());
|
||||
}
|
||||
|
||||
public boolean showTagMessages() {
|
||||
return env.showTagMessages();
|
||||
}
|
||||
}
|
||||
@ -1,544 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.code.Printer;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Type.CapturedType;
|
||||
import com.sun.tools.javac.util.*;
|
||||
|
||||
import static com.sun.tools.javac.code.Kinds.Kind.*;
|
||||
|
||||
/**
|
||||
* Represents a see also documentation tag.
|
||||
* The @see tag can be plain text, or reference a class or member.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Kaiyang Liu (original)
|
||||
* @author Robert Field (rewrite)
|
||||
* @author Atul M Dambalkar
|
||||
*
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class SeeTagImpl extends TagImpl implements SeeTag, LayoutCharacters {
|
||||
|
||||
//### TODO: Searching for classes, fields, and methods
|
||||
//### should follow the normal rules applied by the compiler.
|
||||
|
||||
/**
|
||||
* where of where#what - i.e. the class name (may be empty)
|
||||
*/
|
||||
private String where;
|
||||
|
||||
/**
|
||||
* what of where#what - i.e. the member (may be null)
|
||||
*/
|
||||
private String what;
|
||||
|
||||
private PackageDoc referencedPackage;
|
||||
private ClassDoc referencedClass;
|
||||
private MemberDoc referencedMember;
|
||||
|
||||
String label = "";
|
||||
|
||||
SeeTagImpl(DocImpl holder, String name, String text) {
|
||||
super(holder, name, text);
|
||||
parseSeeString();
|
||||
if (where != null) {
|
||||
ClassDocImpl container = null;
|
||||
if (holder instanceof MemberDoc) {
|
||||
container =
|
||||
(ClassDocImpl)((ProgramElementDoc)holder).containingClass();
|
||||
} else if (holder instanceof ClassDoc) {
|
||||
container = (ClassDocImpl)holder;
|
||||
}
|
||||
findReferenced(container);
|
||||
if (showRef) showRef();
|
||||
}
|
||||
}
|
||||
|
||||
private static final boolean showRef = false;
|
||||
|
||||
private void showRef() {
|
||||
Symbol sym;
|
||||
if (referencedMember != null) {
|
||||
if (referencedMember instanceof MethodDocImpl)
|
||||
sym = ((MethodDocImpl) referencedMember).sym;
|
||||
else if (referencedMember instanceof FieldDocImpl)
|
||||
sym = ((FieldDocImpl) referencedMember).sym;
|
||||
else
|
||||
sym = ((ConstructorDocImpl) referencedMember).sym;
|
||||
} else if (referencedClass != null) {
|
||||
sym = ((ClassDocImpl) referencedClass).tsym;
|
||||
} else if (referencedPackage != null) {
|
||||
sym = ((PackageDocImpl) referencedPackage).sym;
|
||||
} else
|
||||
return;
|
||||
|
||||
final JavacMessages messages = JavacMessages.instance(docenv().context);
|
||||
Locale locale = Locale.getDefault();
|
||||
Printer printer = new Printer() {
|
||||
int count;
|
||||
@Override
|
||||
protected String localize(Locale locale, String key, Object... args) {
|
||||
return messages.getLocalizedString(locale, key, args);
|
||||
}
|
||||
@Override
|
||||
protected String capturedVarId(CapturedType t, Locale locale) {
|
||||
return "CAP#" + (++count);
|
||||
}
|
||||
};
|
||||
|
||||
String s = text.replaceAll("\\s+", " "); // normalize white space
|
||||
int sp = s.indexOf(" ");
|
||||
int lparen = s.indexOf("(");
|
||||
int rparen = s.indexOf(")");
|
||||
String seetext = (sp == -1) ? s
|
||||
: (lparen == -1 || sp < lparen) ? s.substring(0, sp)
|
||||
: s.substring(0, rparen + 1);
|
||||
|
||||
File file = new File(holder.position().file().getAbsoluteFile().toURI().normalize());
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("+++ ").append(file).append(": ")
|
||||
.append(name()).append(" ").append(seetext).append(": ");
|
||||
sb.append(sym.getKind()).append(" ");
|
||||
if (sym.kind == MTH || sym.kind == VAR)
|
||||
sb.append(printer.visit(sym.owner, locale)).append(".");
|
||||
sb.append(printer.visit(sym, locale));
|
||||
|
||||
System.err.println(sb);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the class name part of @see, For instance,
|
||||
* if the comment is @see String#startsWith(java.lang.String) .
|
||||
* This function returns String.
|
||||
* Returns null if format was not that of java reference.
|
||||
* Return empty string if class name was not specified..
|
||||
*/
|
||||
public String referencedClassName() {
|
||||
return where;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the package referenced by @see. For instance,
|
||||
* if the comment is @see java.lang
|
||||
* This function returns a PackageDocImpl for java.lang
|
||||
* Returns null if no known package found.
|
||||
*/
|
||||
public PackageDoc referencedPackage() {
|
||||
return referencedPackage;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the class referenced by the class name part of @see, For instance,
|
||||
* if the comment is @see String#startsWith(java.lang.String) .
|
||||
* This function returns a ClassDocImpl for java.lang.String.
|
||||
* Returns null if class is not a class specified on the javadoc command line..
|
||||
*/
|
||||
public ClassDoc referencedClass() {
|
||||
return referencedClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the name of the member referenced by the prototype part of @see,
|
||||
* For instance,
|
||||
* if the comment is @see String#startsWith(java.lang.String) .
|
||||
* This function returns "startsWith(java.lang.String)"
|
||||
* Returns null if format was not that of java reference.
|
||||
* Return empty string if member name was not specified..
|
||||
*/
|
||||
public String referencedMemberName() {
|
||||
return what;
|
||||
}
|
||||
|
||||
/**
|
||||
* get the member referenced by the prototype part of @see,
|
||||
* For instance,
|
||||
* if the comment is @see String#startsWith(java.lang.String) .
|
||||
* This function returns a MethodDocImpl for startsWith.
|
||||
* Returns null if member could not be determined.
|
||||
*/
|
||||
public MemberDoc referencedMember() {
|
||||
return referencedMember;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* parse @see part of comment. Determine 'where' and 'what'
|
||||
*/
|
||||
private void parseSeeString() {
|
||||
int len = text.length();
|
||||
if (len == 0) {
|
||||
return;
|
||||
}
|
||||
switch (text.charAt(0)) {
|
||||
case '<':
|
||||
if (text.charAt(len-1) != '>') {
|
||||
docenv().warning(holder,
|
||||
"tag.see.no_close_bracket_on_url",
|
||||
name, text);
|
||||
}
|
||||
return;
|
||||
case '"':
|
||||
if (len == 1 || text.charAt(len-1) != '"') {
|
||||
docenv().warning(holder,
|
||||
"tag.see.no_close_quote",
|
||||
name, text);
|
||||
} else {
|
||||
// text = text.substring(1,len-1); // strip quotes
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// check that the text is one word, with possible parentheses
|
||||
// this part of code doesn't allow
|
||||
// @see <a href=.....>asfd</a>
|
||||
// comment it.
|
||||
|
||||
// the code assumes that there is no initial white space.
|
||||
int parens = 0;
|
||||
int commentstart = 0;
|
||||
int start = 0;
|
||||
int cp;
|
||||
for (int i = start; i < len ; i += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(i);
|
||||
switch (cp) {
|
||||
case '(': parens++; break;
|
||||
case ')': parens--; break;
|
||||
case '[': case ']': case '.': case '#': break;
|
||||
case ',':
|
||||
if (parens <= 0) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.malformed_see_tag",
|
||||
name, text);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case ' ': case '\t': case '\n': case CR:
|
||||
if (parens == 0) { //here onwards the comment starts.
|
||||
commentstart = i;
|
||||
i = len;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (!Character.isJavaIdentifierPart(cp)) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.illegal_character",
|
||||
name, ""+cp, text);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (parens != 0) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.malformed_see_tag",
|
||||
name, text);
|
||||
return;
|
||||
}
|
||||
|
||||
String seetext = "";
|
||||
String labeltext = "";
|
||||
|
||||
if (commentstart > 0) {
|
||||
seetext = text.substring(start, commentstart);
|
||||
labeltext = text.substring(commentstart + 1);
|
||||
// strip off the white space which can be between seetext and the
|
||||
// actual label.
|
||||
for (int i = 0; i < labeltext.length(); i++) {
|
||||
char ch2 = labeltext.charAt(i);
|
||||
if (!(ch2 == ' ' || ch2 == '\t' || ch2 == '\n')) {
|
||||
label = labeltext.substring(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
seetext = text;
|
||||
label = "";
|
||||
}
|
||||
|
||||
int sharp = seetext.indexOf('#');
|
||||
if (sharp >= 0) {
|
||||
// class#member
|
||||
where = seetext.substring(0, sharp);
|
||||
what = seetext.substring(sharp + 1);
|
||||
} else {
|
||||
if (seetext.indexOf('(') >= 0) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.missing_sharp",
|
||||
name, text);
|
||||
where = "";
|
||||
what = seetext;
|
||||
}
|
||||
else {
|
||||
// no member specified, text names class
|
||||
where = seetext;
|
||||
what = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find what is referenced by the see also. If possible, sets
|
||||
* referencedClass and referencedMember.
|
||||
*
|
||||
* @param containingClass the class containing the comment containing
|
||||
* the tag. May be null, if, for example, it is a package comment.
|
||||
*/
|
||||
private void findReferenced(ClassDocImpl containingClass) {
|
||||
if (where.length() > 0) {
|
||||
if (containingClass != null) {
|
||||
referencedClass = containingClass.findClass(where);
|
||||
} else {
|
||||
referencedClass = docenv().lookupClass(where);
|
||||
}
|
||||
if (referencedClass == null && holder() instanceof ProgramElementDoc) {
|
||||
referencedClass = docenv().lookupClass(
|
||||
((ProgramElementDoc) holder()).containingPackage().name() + "." + where);
|
||||
}
|
||||
|
||||
if (referencedClass == null) { /* may just not be in this run */
|
||||
// check if it's a package name
|
||||
referencedPackage = docenv().lookupPackage(where);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (containingClass == null) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.class_not_specified",
|
||||
name, text);
|
||||
return;
|
||||
} else {
|
||||
referencedClass = containingClass;
|
||||
}
|
||||
}
|
||||
where = referencedClass.qualifiedName();
|
||||
|
||||
if (what == null) {
|
||||
return;
|
||||
} else {
|
||||
int paren = what.indexOf('(');
|
||||
String memName = (paren >= 0 ? what.substring(0, paren) : what);
|
||||
String[] paramarr;
|
||||
if (paren > 0) {
|
||||
// has parameter list -- should be method or constructor
|
||||
paramarr = new ParameterParseMachine(what.
|
||||
substring(paren, what.length())).parseParameters();
|
||||
if (paramarr != null) {
|
||||
referencedMember = findExecutableMember(memName, paramarr,
|
||||
referencedClass);
|
||||
} else {
|
||||
referencedMember = null;
|
||||
}
|
||||
} else {
|
||||
// no parameter list -- should be field
|
||||
referencedMember = findExecutableMember(memName, null,
|
||||
referencedClass);
|
||||
FieldDoc fd = ((ClassDocImpl)referencedClass).
|
||||
findField(memName);
|
||||
// when no args given, prefer fields over methods
|
||||
if (referencedMember == null ||
|
||||
(fd != null &&
|
||||
fd.containingClass()
|
||||
.subclassOf(referencedMember.containingClass()))) {
|
||||
referencedMember = fd;
|
||||
}
|
||||
}
|
||||
if (referencedMember == null) {
|
||||
docenv().warning(holder,
|
||||
"tag.see.can_not_find_member",
|
||||
name, what, where);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private MemberDoc findReferencedMethod(String memName, String[] paramarr,
|
||||
ClassDoc referencedClass) {
|
||||
MemberDoc meth = findExecutableMember(memName, paramarr, referencedClass);
|
||||
if (meth == null) {
|
||||
for (ClassDoc nestedClass : referencedClass.innerClasses()) {
|
||||
meth = findReferencedMethod(memName, paramarr, nestedClass);
|
||||
if (meth != null) {
|
||||
return meth;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private MemberDoc findExecutableMember(String memName, String[] paramarr,
|
||||
ClassDoc referencedClass) {
|
||||
String className = referencedClass.name();
|
||||
if (memName.equals(className.substring(className.lastIndexOf(".") + 1))) {
|
||||
return ((ClassDocImpl)referencedClass).findConstructor(memName,
|
||||
paramarr);
|
||||
} else { // it's a method.
|
||||
return ((ClassDocImpl)referencedClass).findMethod(memName,
|
||||
paramarr);
|
||||
}
|
||||
}
|
||||
|
||||
// separate "int, String" from "(int, String)"
|
||||
// (int i, String s) ==> [0] = "int", [1] = String
|
||||
// (int[][], String[]) ==> [0] = "int[][]" // [1] = "String[]"
|
||||
class ParameterParseMachine {
|
||||
static final int START = 0;
|
||||
static final int TYPE = 1;
|
||||
static final int NAME = 2;
|
||||
static final int TNSPACE = 3; // space between type and name
|
||||
static final int ARRAYDECORATION = 4;
|
||||
static final int ARRAYSPACE = 5;
|
||||
|
||||
String parameters;
|
||||
|
||||
StringBuilder typeId;
|
||||
|
||||
ListBuffer<String> paramList;
|
||||
|
||||
ParameterParseMachine(String parameters) {
|
||||
this.parameters = parameters;
|
||||
this.paramList = new ListBuffer<>();
|
||||
typeId = new StringBuilder();
|
||||
}
|
||||
|
||||
public String[] parseParameters() {
|
||||
if (parameters.equals("()")) {
|
||||
return new String[0];
|
||||
} // now strip off '(' and ')'
|
||||
int state = START;
|
||||
int prevstate = START;
|
||||
parameters = parameters.substring(1, parameters.length() - 1);
|
||||
int cp;
|
||||
for (int index = 0; index < parameters.length(); index += Character.charCount(cp)) {
|
||||
cp = parameters.codePointAt(index);
|
||||
switch (state) {
|
||||
case START:
|
||||
if (Character.isJavaIdentifierStart(cp)) {
|
||||
typeId.append(Character.toChars(cp));
|
||||
state = TYPE;
|
||||
}
|
||||
prevstate = START;
|
||||
break;
|
||||
case TYPE:
|
||||
if (Character.isJavaIdentifierPart(cp) || cp == '.') {
|
||||
typeId.append(Character.toChars(cp));
|
||||
} else if (cp == '[') {
|
||||
typeId.append('[');
|
||||
state = ARRAYDECORATION;
|
||||
} else if (Character.isWhitespace(cp)) {
|
||||
state = TNSPACE;
|
||||
} else if (cp == ',') { // no name, just type
|
||||
addTypeToParamList();
|
||||
state = START;
|
||||
}
|
||||
prevstate = TYPE;
|
||||
break;
|
||||
case TNSPACE:
|
||||
if (Character.isJavaIdentifierStart(cp)) { // name
|
||||
if (prevstate == ARRAYDECORATION) {
|
||||
docenv().warning(holder,
|
||||
"tag.missing_comma_space",
|
||||
name,
|
||||
"(" + parameters + ")");
|
||||
return (String[])null;
|
||||
}
|
||||
addTypeToParamList();
|
||||
state = NAME;
|
||||
} else if (cp == '[') {
|
||||
typeId.append('[');
|
||||
state = ARRAYDECORATION;
|
||||
} else if (cp == ',') { // just the type
|
||||
addTypeToParamList();
|
||||
state = START;
|
||||
} // consume rest all
|
||||
prevstate = TNSPACE;
|
||||
break;
|
||||
case ARRAYDECORATION:
|
||||
if (cp == ']') {
|
||||
typeId.append(']');
|
||||
state = TNSPACE;
|
||||
} else if (!Character.isWhitespace(cp)) {
|
||||
docenv().warning(holder,
|
||||
"tag.illegal_char_in_arr_dim",
|
||||
name,
|
||||
"(" + parameters + ")");
|
||||
return (String[])null;
|
||||
}
|
||||
prevstate = ARRAYDECORATION;
|
||||
break;
|
||||
case NAME:
|
||||
if (cp == ',') { // just consume everything till ','
|
||||
state = START;
|
||||
}
|
||||
prevstate = NAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (state == ARRAYDECORATION ||
|
||||
(state == START && prevstate == TNSPACE)) {
|
||||
docenv().warning(holder,
|
||||
"tag.illegal_see_tag",
|
||||
"(" + parameters + ")");
|
||||
}
|
||||
if (typeId.length() > 0) {
|
||||
paramList.append(typeId.toString());
|
||||
}
|
||||
return paramList.toArray(new String[paramList.length()]);
|
||||
}
|
||||
|
||||
void addTypeToParamList() {
|
||||
if (typeId.length() > 0) {
|
||||
paramList.append(typeId.toString());
|
||||
typeId.setLength(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the kind of this tag.
|
||||
*/
|
||||
@Override
|
||||
public String kind() {
|
||||
return "@see";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the label of the see tag.
|
||||
*/
|
||||
public String label() {
|
||||
return label;
|
||||
}
|
||||
}
|
||||
@ -1,269 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
/**
|
||||
* Documents a Serializable field defined by an ObjectStreamField.
|
||||
* <pre>
|
||||
* The class parses and stores the three serialField tag parameters:
|
||||
*
|
||||
* - field name
|
||||
* - field type name
|
||||
* (fully-qualified or visible from the current import context)
|
||||
* - description of the valid values for the field
|
||||
|
||||
* </pre>
|
||||
* This tag is only allowed in the javadoc for the special member
|
||||
* serialPersistentFields.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Joe Fialli
|
||||
* @author Neal Gafter
|
||||
*
|
||||
* @see java.io.ObjectStreamField
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class SerialFieldTagImpl
|
||||
extends TagImpl
|
||||
implements SerialFieldTag, Comparable<Object>
|
||||
{
|
||||
//### These could be final, except that the constructor
|
||||
//### does not set them directly.
|
||||
|
||||
private String fieldName; // Required Argument 1 of serialField
|
||||
private String fieldType; // Required Argument 2 of serialField
|
||||
private String description; // Optional Remaining Arguments of serialField
|
||||
|
||||
private ClassDoc containingClass; // Class containing serialPersistentField member
|
||||
private ClassDoc fieldTypeDoc; // ClassDocImpl of fieldType
|
||||
private FieldDocImpl matchingField; // FieldDocImpl with same name as fieldName
|
||||
|
||||
/* Constructor. */
|
||||
SerialFieldTagImpl(DocImpl holder, String name, String text) {
|
||||
super(holder, name, text);
|
||||
parseSerialFieldString();
|
||||
if (holder instanceof MemberDoc) {
|
||||
containingClass = ((MemberDocImpl)holder).containingClass();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The serialField tag is composed of three entities.
|
||||
*
|
||||
* serialField serializableFieldName serisliableFieldType
|
||||
* description of field.
|
||||
*
|
||||
* The fieldName and fieldType must be legal Java Identifiers.
|
||||
*/
|
||||
private void parseSerialFieldString() {
|
||||
int len = text.length();
|
||||
if (len == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if no white space found
|
||||
/* Skip white space. */
|
||||
int inx = 0;
|
||||
int cp;
|
||||
for (; inx < len; inx += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(inx);
|
||||
if (!Character.isWhitespace(cp)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* find first word. */
|
||||
int first = inx;
|
||||
int last = inx;
|
||||
cp = text.codePointAt(inx);
|
||||
if (! Character.isJavaIdentifierStart(cp)) {
|
||||
docenv().warning(holder,
|
||||
"tag.serialField.illegal_character",
|
||||
new String(Character.toChars(cp)), text);
|
||||
return;
|
||||
}
|
||||
|
||||
for (inx += Character.charCount(cp); inx < len; inx += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(inx);
|
||||
if (!Character.isJavaIdentifierPart(cp)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (inx < len && ! Character.isWhitespace(cp = text.codePointAt(inx))) {
|
||||
docenv().warning(holder,
|
||||
"tag.serialField.illegal_character",
|
||||
new String(Character.toChars(cp)), text);
|
||||
return;
|
||||
}
|
||||
|
||||
last = inx;
|
||||
fieldName = text.substring(first, last);
|
||||
|
||||
/* Skip white space. */
|
||||
for (; inx < len; inx += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(inx);
|
||||
if (!Character.isWhitespace(cp)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* find second word. */
|
||||
first = inx;
|
||||
last = inx;
|
||||
|
||||
for (; inx < len; inx += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(inx);
|
||||
if (Character.isWhitespace(cp)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (inx < len && ! Character.isWhitespace(cp = text.codePointAt(inx))) {
|
||||
docenv().warning(holder,
|
||||
"tag.serialField.illegal_character",
|
||||
new String(Character.toChars(cp)), text);
|
||||
return;
|
||||
}
|
||||
last = inx;
|
||||
fieldType = text.substring(first, last);
|
||||
|
||||
/* Skip leading white space. Rest of string is description for serialField.*/
|
||||
for (; inx < len; inx += Character.charCount(cp)) {
|
||||
cp = text.codePointAt(inx);
|
||||
if (!Character.isWhitespace(cp)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
description = text.substring(inx);
|
||||
}
|
||||
|
||||
/**
|
||||
* return a key for sorting.
|
||||
*/
|
||||
String key() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
/*
|
||||
* Optional. Link this serialField tag to its corrsponding
|
||||
* field in the class. Note: there is no requirement that
|
||||
* there be a field in the class that matches serialField tag.
|
||||
*/
|
||||
void mapToFieldDocImpl(FieldDocImpl fd) {
|
||||
matchingField = fd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the serialziable field name.
|
||||
*/
|
||||
public String fieldName() {
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the field type string.
|
||||
*/
|
||||
public String fieldType() {
|
||||
return fieldType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ClassDocImpl for field type.
|
||||
*
|
||||
* @returns null if no ClassDocImpl for field type is visible from
|
||||
* containingClass context.
|
||||
*/
|
||||
public ClassDoc fieldTypeDoc() {
|
||||
if (fieldTypeDoc == null && containingClass != null) {
|
||||
fieldTypeDoc = containingClass.findClass(fieldType);
|
||||
}
|
||||
return fieldTypeDoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the corresponding FieldDocImpl for this SerialFieldTagImpl.
|
||||
*
|
||||
* @returns null if no matching FieldDocImpl.
|
||||
*/
|
||||
FieldDocImpl getMatchingField() {
|
||||
return matchingField;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the field comment. If there is no serialField comment, return
|
||||
* javadoc comment of corresponding FieldDocImpl.
|
||||
*/
|
||||
public String description() {
|
||||
if (description.length() == 0 && matchingField != null) {
|
||||
|
||||
//check for javadoc comment of corresponding field.
|
||||
Comment comment = matchingField.comment();
|
||||
if (comment != null) {
|
||||
return comment.commentText();
|
||||
}
|
||||
}
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the kind of this tag.
|
||||
*/
|
||||
public String kind() {
|
||||
return "@serialField";
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert this object to a string.
|
||||
*/
|
||||
public String toString() {
|
||||
return name + ":" + text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this Object with the specified Object for order. Returns a
|
||||
* negative integer, zero, or a positive integer as this Object is less
|
||||
* than, equal to, or greater than the given Object.
|
||||
* <p>
|
||||
* Included to make SerialFieldTagImpl items java.lang.Comparable.
|
||||
*
|
||||
* @param obj the <code>Object</code> to be compared.
|
||||
* @return a negative integer, zero, or a positive integer as this Object
|
||||
* is less than, equal to, or greater than the given Object.
|
||||
* @exception ClassCastException the specified Object's type prevents it
|
||||
* from being compared to this Object.
|
||||
* @since 1.2
|
||||
*/
|
||||
public int compareTo(Object obj) {
|
||||
return key().compareTo(((SerialFieldTagImpl)obj).key());
|
||||
}
|
||||
}
|
||||
@ -1,289 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.code.*;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.VarSymbol;
|
||||
import com.sun.tools.javac.util.*;
|
||||
|
||||
import static com.sun.tools.javac.code.Kinds.Kind.*;
|
||||
import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
|
||||
|
||||
/**
|
||||
* The serialized form is the specification of a class' serialization
|
||||
* state. <p>
|
||||
*
|
||||
* It consists of the following information:<p>
|
||||
*
|
||||
* <pre>
|
||||
* 1. Whether class is Serializable or Externalizable.
|
||||
* 2. Javadoc for serialization methods.
|
||||
* a. For Serializable, the optional readObject, writeObject,
|
||||
* readResolve and writeReplace.
|
||||
* serialData tag describes, in prose, the sequence and type
|
||||
* of optional data written by writeObject.
|
||||
* b. For Externalizable, writeExternal and readExternal.
|
||||
* serialData tag describes, in prose, the sequence and type
|
||||
* of optional data written by writeExternal.
|
||||
* 3. Javadoc for serialization data layout.
|
||||
* a. For Serializable, the name,type and description
|
||||
* of each Serializable fields.
|
||||
* b. For Externalizable, data layout is described by 2(b).
|
||||
* </pre>
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Joe Fialli
|
||||
* @author Neal Gafter (rewrite but not too proud)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class SerializedForm {
|
||||
ListBuffer<MethodDoc> methods = new ListBuffer<>();
|
||||
|
||||
/* List of FieldDocImpl - Serializable fields.
|
||||
* Singleton list if class defines Serializable fields explicitly.
|
||||
* Otherwise, list of default serializable fields.
|
||||
* 0 length list for Externalizable.
|
||||
*/
|
||||
private final ListBuffer<FieldDocImpl> fields = new ListBuffer<>();
|
||||
|
||||
/* True if class specifies serializable fields explicitly.
|
||||
* using special static member, serialPersistentFields.
|
||||
*/
|
||||
private boolean definesSerializableFields = false;
|
||||
|
||||
// Specially treated field/method names defined by Serialization.
|
||||
private static final String SERIALIZABLE_FIELDS = "serialPersistentFields";
|
||||
private static final String READOBJECT = "readObject";
|
||||
private static final String WRITEOBJECT = "writeObject";
|
||||
private static final String READRESOLVE = "readResolve";
|
||||
private static final String WRITEREPLACE = "writeReplace";
|
||||
private static final String READOBJECTNODATA = "readObjectNoData";
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* Catalog Serializable fields for Serializable class.
|
||||
* Catalog serialization methods for Serializable and
|
||||
* Externalizable classes.
|
||||
*/
|
||||
SerializedForm(DocEnv env, ClassSymbol def, ClassDocImpl cd) {
|
||||
if (cd.isExternalizable()) {
|
||||
/* look up required public accessible methods,
|
||||
* writeExternal and readExternal.
|
||||
*/
|
||||
String[] readExternalParamArr = { "java.io.ObjectInput" };
|
||||
String[] writeExternalParamArr = { "java.io.ObjectOutput" };
|
||||
MethodDoc md = cd.findMethod("readExternal", readExternalParamArr);
|
||||
if (md != null) {
|
||||
methods.append(md);
|
||||
}
|
||||
md = cd.findMethod("writeExternal", writeExternalParamArr);
|
||||
if (md != null) {
|
||||
methods.append(md);
|
||||
Tag tag[] = md.tags("serialData");
|
||||
}
|
||||
// } else { // isSerializable() //### ???
|
||||
} else if (cd.isSerializable()) {
|
||||
|
||||
VarSymbol dsf = getDefinedSerializableFields(def);
|
||||
if (dsf != null) {
|
||||
|
||||
/* Define serializable fields with array of ObjectStreamField.
|
||||
* Each ObjectStreamField should be documented by a
|
||||
* serialField tag.
|
||||
*/
|
||||
definesSerializableFields = true;
|
||||
//### No modifier filtering applied here.
|
||||
FieldDocImpl dsfDoc = env.getFieldDoc(dsf);
|
||||
fields.append(dsfDoc);
|
||||
mapSerialFieldTagImplsToFieldDocImpls(dsfDoc, env, def);
|
||||
} else {
|
||||
|
||||
/* Calculate default Serializable fields as all
|
||||
* non-transient, non-static fields.
|
||||
* Fields should be documented by serial tag.
|
||||
*/
|
||||
computeDefaultSerializableFields(env, def, cd);
|
||||
}
|
||||
|
||||
/* Check for optional customized readObject, writeObject,
|
||||
* readResolve and writeReplace, which can all contain
|
||||
* the serialData tag. */
|
||||
addMethodIfExist(env, def, READOBJECT);
|
||||
addMethodIfExist(env, def, WRITEOBJECT);
|
||||
addMethodIfExist(env, def, READRESOLVE);
|
||||
addMethodIfExist(env, def, WRITEREPLACE);
|
||||
addMethodIfExist(env, def, READOBJECTNODATA);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for explicit Serializable fields.
|
||||
* Check for a private static array of ObjectStreamField with
|
||||
* name SERIALIZABLE_FIELDS.
|
||||
*/
|
||||
private VarSymbol getDefinedSerializableFields(ClassSymbol def) {
|
||||
Names names = def.name.table.names;
|
||||
|
||||
/* SERIALIZABLE_FIELDS can be private,
|
||||
* so must lookup by ClassSymbol, not by ClassDocImpl.
|
||||
*/
|
||||
for (Symbol sym : def.members().getSymbolsByName(names.fromString(SERIALIZABLE_FIELDS))) {
|
||||
if (sym.kind == VAR) {
|
||||
VarSymbol f = (VarSymbol)sym;
|
||||
if ((f.flags() & Flags.STATIC) != 0 &&
|
||||
(f.flags() & Flags.PRIVATE) != 0) {
|
||||
return f;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* Compute default Serializable fields from all members of ClassSymbol.
|
||||
*
|
||||
* Since the fields of ClassDocImpl might not contain private or
|
||||
* package accessible fields, must walk over all members of ClassSymbol.
|
||||
*/
|
||||
private void computeDefaultSerializableFields(DocEnv env,
|
||||
ClassSymbol def,
|
||||
ClassDocImpl cd) {
|
||||
for (Symbol sym : def.members().getSymbols(NON_RECURSIVE)) {
|
||||
if (sym != null && sym.kind == VAR) {
|
||||
VarSymbol f = (VarSymbol)sym;
|
||||
if ((f.flags() & Flags.STATIC) == 0 &&
|
||||
(f.flags() & Flags.TRANSIENT) == 0) {
|
||||
//### No modifier filtering applied here.
|
||||
FieldDocImpl fd = env.getFieldDoc(f);
|
||||
//### Add to beginning.
|
||||
//### Preserve order used by old 'javadoc'.
|
||||
fields.prepend(fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Catalog Serializable method if it exists in current ClassSymbol.
|
||||
* Do not look for method in superclasses.
|
||||
*
|
||||
* Serialization requires these methods to be non-static.
|
||||
*
|
||||
* @param method should be an unqualified Serializable method
|
||||
* name either READOBJECT, WRITEOBJECT, READRESOLVE
|
||||
* or WRITEREPLACE.
|
||||
* @param visibility the visibility flag for the given method.
|
||||
*/
|
||||
private void addMethodIfExist(DocEnv env, ClassSymbol def, String methodName) {
|
||||
Names names = def.name.table.names;
|
||||
|
||||
for (Symbol sym : def.members().getSymbolsByName(names.fromString(methodName))) {
|
||||
if (sym.kind == MTH) {
|
||||
MethodSymbol md = (MethodSymbol)sym;
|
||||
if ((md.flags() & Flags.STATIC) == 0) {
|
||||
/*
|
||||
* WARNING: not robust if unqualifiedMethodName is overloaded
|
||||
* method. Signature checking could make more robust.
|
||||
* READOBJECT takes a single parameter, java.io.ObjectInputStream.
|
||||
* WRITEOBJECT takes a single parameter, java.io.ObjectOutputStream.
|
||||
*/
|
||||
methods.append(env.getMethodDoc(md));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Associate serialField tag fieldName with FieldDocImpl member.
|
||||
* Note: A serialField tag does not have to map an existing field
|
||||
* of a class.
|
||||
*/
|
||||
private void mapSerialFieldTagImplsToFieldDocImpls(FieldDocImpl spfDoc,
|
||||
DocEnv env,
|
||||
ClassSymbol def) {
|
||||
Names names = def.name.table.names;
|
||||
for (SerialFieldTag tag : spfDoc.serialFieldTags()) {
|
||||
if (tag.fieldName() == null || tag.fieldType() == null) // ignore malformed @serialField tags
|
||||
continue;
|
||||
|
||||
Name fieldName = names.fromString(tag.fieldName());
|
||||
|
||||
// Look for a FieldDocImpl that is documented by serialFieldTagImpl.
|
||||
for (Symbol sym : def.members().getSymbolsByName(fieldName)) {
|
||||
if (sym.kind == VAR) {
|
||||
VarSymbol f = (VarSymbol) sym;
|
||||
FieldDocImpl fdi = env.getFieldDoc(f);
|
||||
((SerialFieldTagImpl) (tag)).mapToFieldDocImpl(fdi);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return serializable fields in class. <p>
|
||||
*
|
||||
* Returns either a list of default fields documented by serial tag comment or
|
||||
* javadoc comment<p>
|
||||
* Or Returns a single FieldDocImpl for serialPersistentField. There is a
|
||||
* serialField tag for each serializable field.<p>
|
||||
*
|
||||
* @return an array of FieldDocImpl for representing the visible
|
||||
* fields in this class.
|
||||
*/
|
||||
FieldDoc[] fields() {
|
||||
return (FieldDoc[])fields.toArray(new FieldDocImpl[fields.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return serialization methods in class.
|
||||
*
|
||||
* @return an array of MethodDocImpl for serialization methods in this class.
|
||||
*/
|
||||
MethodDoc[] methods() {
|
||||
return methods.toArray(new MethodDoc[methods.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if Serializable fields are defined explicitly using
|
||||
* member, serialPersistentFields.
|
||||
*
|
||||
* @see #fields()
|
||||
*/
|
||||
boolean definesSerializableFields() {
|
||||
return definesSerializableFields;
|
||||
}
|
||||
}
|
||||
@ -1,124 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.File;
|
||||
import javax.tools.FileObject;
|
||||
|
||||
import com.sun.javadoc.SourcePosition;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
|
||||
/**
|
||||
* A source position: filename, line number, and column number.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since J2SE1.4
|
||||
* @author Neal M Gafter
|
||||
* @author Michael Van De Vanter (position representation changed to char offsets)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class SourcePositionImpl implements SourcePosition {
|
||||
FileObject filename;
|
||||
int position;
|
||||
Position.LineMap lineMap;
|
||||
|
||||
/** The source file. Returns null if no file information is
|
||||
* available. */
|
||||
public File file() {
|
||||
return (filename == null) ? null : new File(filename.getName());
|
||||
}
|
||||
|
||||
/** The source file. Returns null if no file information is
|
||||
* available. */
|
||||
public FileObject fileObject() {
|
||||
return filename;
|
||||
}
|
||||
|
||||
/** The line in the source file. The first line is numbered 1;
|
||||
* 0 means no line number information is available. */
|
||||
public int line() {
|
||||
if (lineMap == null) {
|
||||
return 0;
|
||||
} else {
|
||||
return lineMap.getLineNumber(position);
|
||||
}
|
||||
}
|
||||
|
||||
/** The column in the source file. The first column is
|
||||
* numbered 1; 0 means no column information is available.
|
||||
* Columns count characters in the input stream; a tab
|
||||
* advances the column number to the next 8-column tab stop.
|
||||
*/
|
||||
public int column() {
|
||||
if (lineMap == null) {
|
||||
return 0;
|
||||
}else {
|
||||
return lineMap.getColumnNumber(position);
|
||||
}
|
||||
}
|
||||
|
||||
private SourcePositionImpl(FileObject file, int position,
|
||||
Position.LineMap lineMap) {
|
||||
super();
|
||||
this.filename = file;
|
||||
this.position = position;
|
||||
this.lineMap = lineMap;
|
||||
}
|
||||
|
||||
public static SourcePosition make(FileObject file, int pos,
|
||||
Position.LineMap lineMap) {
|
||||
if (file == null) return null;
|
||||
return new SourcePositionImpl(file, pos, lineMap);
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
// Backwards compatibility hack. ZipFileObjects use the format
|
||||
// zipfile(zipentry) but javadoc has been using zipfile/zipentry
|
||||
String fn = filename.getName();
|
||||
if (fn.endsWith(")")) {
|
||||
int paren = fn.lastIndexOf("(");
|
||||
if (paren != -1) {
|
||||
int i = paren+1;
|
||||
if (fn.charAt(i) == '/')
|
||||
i++;
|
||||
fn = fn.substring(0, paren)
|
||||
+ File.separatorChar
|
||||
+ fn.substring(i, fn.length() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (position == Position.NOPOS)
|
||||
return fn;
|
||||
else
|
||||
return fn + ":" + line();
|
||||
}
|
||||
}
|
||||
@ -1,578 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
|
||||
import javax.tools.JavaFileManager;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.file.BaseFileManager;
|
||||
import com.sun.tools.javac.main.Arguments;
|
||||
import com.sun.tools.javac.main.CommandLine;
|
||||
import com.sun.tools.javac.main.DelegatingJavaFileManager;
|
||||
import com.sun.tools.javac.main.Option;
|
||||
import com.sun.tools.javac.main.OptionHelper;
|
||||
import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
|
||||
import com.sun.tools.javac.platform.PlatformDescription;
|
||||
import com.sun.tools.javac.platform.PlatformUtils;
|
||||
import com.sun.tools.javac.util.ClientCodeException;
|
||||
import com.sun.tools.javac.util.Context;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Log;
|
||||
import com.sun.tools.javac.util.Options;
|
||||
|
||||
import static com.sun.tools.javac.code.Flags.*;
|
||||
|
||||
/**
|
||||
* Main program of Javadoc.
|
||||
* Previously named "Main".
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @since 1.2
|
||||
* @author Robert Field
|
||||
* @author Neal Gafter (rewrite)
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class Start extends ToolOption.Helper {
|
||||
/** Context for this invocation. */
|
||||
private final Context context;
|
||||
|
||||
private final String defaultDocletClassName;
|
||||
private final ClassLoader docletParentClassLoader;
|
||||
|
||||
private static final String javadocName = "javadoc";
|
||||
|
||||
private static final String standardDocletClassName =
|
||||
"com.sun.tools.doclets.standard.Standard";
|
||||
|
||||
private final long defaultFilter = PUBLIC | PROTECTED;
|
||||
|
||||
private final Messager messager;
|
||||
|
||||
private DocletInvoker docletInvoker;
|
||||
|
||||
/**
|
||||
* In API mode, exceptions thrown while calling the doclet are
|
||||
* propagated using ClientCodeException.
|
||||
*/
|
||||
private boolean apiMode;
|
||||
|
||||
private JavaFileManager fileManager;
|
||||
|
||||
public Start(String programName,
|
||||
PrintWriter errWriter,
|
||||
PrintWriter warnWriter,
|
||||
PrintWriter noticeWriter,
|
||||
String defaultDocletClassName) {
|
||||
this(programName, errWriter, warnWriter, noticeWriter, defaultDocletClassName, null);
|
||||
}
|
||||
|
||||
public Start(PrintWriter pw) {
|
||||
this(javadocName, pw, pw, pw, standardDocletClassName);
|
||||
}
|
||||
|
||||
public Start(String programName,
|
||||
PrintWriter errWriter,
|
||||
PrintWriter warnWriter,
|
||||
PrintWriter noticeWriter,
|
||||
String defaultDocletClassName,
|
||||
ClassLoader docletParentClassLoader) {
|
||||
context = new Context();
|
||||
messager = new Messager(context, programName, errWriter, warnWriter, noticeWriter);
|
||||
this.defaultDocletClassName = defaultDocletClassName;
|
||||
this.docletParentClassLoader = docletParentClassLoader;
|
||||
}
|
||||
|
||||
public Start(String programName, String defaultDocletClassName) {
|
||||
this(programName, defaultDocletClassName, null);
|
||||
}
|
||||
|
||||
public Start(String programName, String defaultDocletClassName,
|
||||
ClassLoader docletParentClassLoader) {
|
||||
context = new Context();
|
||||
messager = new Messager(context, programName);
|
||||
this.defaultDocletClassName = defaultDocletClassName;
|
||||
this.docletParentClassLoader = docletParentClassLoader;
|
||||
}
|
||||
|
||||
public Start(String programName, ClassLoader docletParentClassLoader) {
|
||||
this(programName, standardDocletClassName, docletParentClassLoader);
|
||||
}
|
||||
|
||||
public Start(String programName) {
|
||||
this(programName, standardDocletClassName);
|
||||
}
|
||||
|
||||
public Start(ClassLoader docletParentClassLoader) {
|
||||
this(javadocName, docletParentClassLoader);
|
||||
}
|
||||
|
||||
public Start() {
|
||||
this(javadocName);
|
||||
}
|
||||
|
||||
public Start(Context context) {
|
||||
this.context = Objects.requireNonNull(context);
|
||||
apiMode = true;
|
||||
defaultDocletClassName = standardDocletClassName;
|
||||
docletParentClassLoader = null;
|
||||
|
||||
Log log = context.get(Log.logKey);
|
||||
if (log instanceof Messager)
|
||||
messager = (Messager) log;
|
||||
else {
|
||||
PrintWriter out = context.get(Log.errKey);
|
||||
messager = (out == null) ? new Messager(context, javadocName)
|
||||
: new Messager(context, javadocName, out, out, out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Usage
|
||||
*/
|
||||
@Override
|
||||
void usage() {
|
||||
usage(true);
|
||||
}
|
||||
|
||||
void usage(boolean exit) {
|
||||
usage("main.usage", "-help", "main.usage.foot", exit);
|
||||
}
|
||||
|
||||
@Override
|
||||
void Xusage() {
|
||||
Xusage(true);
|
||||
}
|
||||
|
||||
void Xusage(boolean exit) {
|
||||
usage("main.Xusage", "-X", "main.Xusage.foot", exit);
|
||||
}
|
||||
|
||||
private void usage(String main, String doclet, String foot, boolean exit) {
|
||||
// RFE: it would be better to replace the following with code to
|
||||
// write a header, then help for each option, then a footer.
|
||||
messager.notice(main);
|
||||
|
||||
// let doclet print usage information (does nothing on error)
|
||||
if (docletInvoker != null) {
|
||||
// RFE: this is a pretty bad way to get the doclet to show
|
||||
// help info. Moreover, the output appears on stdout,
|
||||
// and <i>not</i> on any of the standard streams passed
|
||||
// to javadoc, and in particular, not to the noticeWriter
|
||||
// But, to fix this, we need to fix the Doclet API.
|
||||
docletInvoker.optionLength(doclet);
|
||||
}
|
||||
|
||||
if (foot != null)
|
||||
messager.notice(foot);
|
||||
|
||||
if (exit) exit();
|
||||
}
|
||||
|
||||
/**
|
||||
* Exit
|
||||
*/
|
||||
private void exit() {
|
||||
messager.exit();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Main program - external wrapper
|
||||
*/
|
||||
public int begin(String... argv) {
|
||||
boolean ok = begin(null, argv, Collections.emptySet());
|
||||
return ok ? 0 : 1;
|
||||
}
|
||||
|
||||
public boolean begin(Class<?> docletClass, Iterable<String> options, Iterable<? extends JavaFileObject> fileObjects) {
|
||||
Collection<String> opts = new ArrayList<>();
|
||||
for (String opt: options) opts.add(opt);
|
||||
return begin(docletClass, opts.toArray(new String[opts.size()]), fileObjects);
|
||||
}
|
||||
|
||||
private boolean begin(Class<?> docletClass, String[] options, Iterable<? extends JavaFileObject> fileObjects) {
|
||||
boolean failed = false;
|
||||
|
||||
try {
|
||||
failed = !parseAndExecute(docletClass, options, fileObjects);
|
||||
} catch (Messager.ExitJavadoc exc) {
|
||||
// ignore, we just exit this way
|
||||
} catch (OutOfMemoryError ee) {
|
||||
messager.error(Messager.NOPOS, "main.out.of.memory");
|
||||
failed = true;
|
||||
} catch (ClientCodeException e) {
|
||||
// simply rethrow these exceptions, to be caught and handled by JavadocTaskImpl
|
||||
throw e;
|
||||
} catch (Error ee) {
|
||||
ee.printStackTrace(System.err);
|
||||
messager.error(Messager.NOPOS, "main.fatal.error");
|
||||
failed = true;
|
||||
} catch (Exception ee) {
|
||||
ee.printStackTrace(System.err);
|
||||
messager.error(Messager.NOPOS, "main.fatal.exception");
|
||||
failed = true;
|
||||
} finally {
|
||||
if (fileManager != null
|
||||
&& fileManager instanceof BaseFileManager
|
||||
&& ((BaseFileManager) fileManager).autoClose) {
|
||||
try {
|
||||
fileManager.close();
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
}
|
||||
messager.exitNotice();
|
||||
messager.flush();
|
||||
}
|
||||
failed |= messager.nerrors() > 0;
|
||||
failed |= rejectWarnings && messager.nwarnings() > 0;
|
||||
return !failed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main program - internal
|
||||
*/
|
||||
private boolean parseAndExecute(
|
||||
Class<?> docletClass,
|
||||
String[] argv,
|
||||
Iterable<? extends JavaFileObject> fileObjects) throws IOException {
|
||||
long tm = System.currentTimeMillis();
|
||||
|
||||
ListBuffer<String> javaNames = new ListBuffer<>();
|
||||
|
||||
// Preprocess @file arguments
|
||||
try {
|
||||
argv = CommandLine.parse(argv);
|
||||
} catch (FileNotFoundException e) {
|
||||
messager.error(Messager.NOPOS, "main.cant.read", e.getMessage());
|
||||
exit();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace(System.err);
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
fileManager = context.get(JavaFileManager.class);
|
||||
|
||||
setDocletInvoker(docletClass, fileManager, argv);
|
||||
|
||||
compOpts = Options.instance(context);
|
||||
// Make sure no obsolete source/target messages are reported
|
||||
compOpts.put("-Xlint:-options", "-Xlint:-options");
|
||||
|
||||
// Parse arguments
|
||||
for (int i = 0 ; i < argv.length ; i++) {
|
||||
String arg = argv[i];
|
||||
|
||||
ToolOption o = ToolOption.get(arg);
|
||||
if (o != null) {
|
||||
// hack: this restriction should be removed
|
||||
if (o == ToolOption.LOCALE && i > 0)
|
||||
usageError("main.locale_first");
|
||||
|
||||
try {
|
||||
if (o.hasArg) {
|
||||
oneArg(argv, i++);
|
||||
o.process(this, argv[i]);
|
||||
} else {
|
||||
setOption(arg);
|
||||
o.process(this);
|
||||
}
|
||||
} catch (Option.InvalidValueException e) {
|
||||
usageError("main.option.invalid.value", e.getMessage());
|
||||
}
|
||||
} else if (arg.equals("-XDaccessInternalAPI")) {
|
||||
// pass this hidden option down to the doclet, if it wants it
|
||||
if (docletInvoker.optionLength("-XDaccessInternalAPI") == 1) {
|
||||
setOption(arg);
|
||||
}
|
||||
} else if (arg.startsWith("-XD")) {
|
||||
// hidden javac options
|
||||
String s = arg.substring("-XD".length());
|
||||
int eq = s.indexOf('=');
|
||||
String key = (eq < 0) ? s : s.substring(0, eq);
|
||||
String value = (eq < 0) ? s : s.substring(eq+1);
|
||||
compOpts.put(key, value);
|
||||
}
|
||||
// call doclet for its options
|
||||
// other arg starts with - is invalid
|
||||
else if (arg.startsWith("-")) {
|
||||
int optionLength;
|
||||
optionLength = docletInvoker.optionLength(arg);
|
||||
if (optionLength < 0) {
|
||||
// error already displayed
|
||||
exit();
|
||||
} else if (optionLength == 0) {
|
||||
// option not found
|
||||
usageError("main.invalid_flag", arg);
|
||||
} else {
|
||||
// doclet added option
|
||||
if ((i + optionLength) > argv.length) {
|
||||
usageError("main.requires_argument", arg);
|
||||
}
|
||||
ListBuffer<String> args = new ListBuffer<>();
|
||||
for (int j = 0; j < optionLength-1; ++j) {
|
||||
args.append(argv[++i]);
|
||||
}
|
||||
setOption(arg, args.toList());
|
||||
}
|
||||
} else {
|
||||
javaNames.append(arg);
|
||||
}
|
||||
}
|
||||
|
||||
if (fileManager == null) {
|
||||
JavacFileManager.preRegister(context);
|
||||
fileManager = context.get(JavaFileManager.class);
|
||||
if (fileManager instanceof BaseFileManager) {
|
||||
((BaseFileManager) fileManager).autoClose = true;
|
||||
}
|
||||
}
|
||||
if (fileManager instanceof BaseFileManager) {
|
||||
((BaseFileManager) fileManager).handleOptions(fileManagerOpts);
|
||||
}
|
||||
|
||||
Arguments arguments = Arguments.instance(context);
|
||||
arguments.init(messager.programName);
|
||||
arguments.allowEmpty();
|
||||
arguments.validate();
|
||||
|
||||
String platformString = compOpts.get("--release");
|
||||
|
||||
if (platformString != null) {
|
||||
if (compOpts.isSet(Option.SOURCE.primaryName)) {
|
||||
usageError("main.release.bootclasspath.conflict", Option.SOURCE.primaryName);
|
||||
}
|
||||
if (fileManagerOpts.containsKey(Option.BOOT_CLASS_PATH)) {
|
||||
usageError("main.release.bootclasspath.conflict", Option.BOOT_CLASS_PATH.getPrimaryName());
|
||||
}
|
||||
|
||||
PlatformDescription platformDescription =
|
||||
PlatformUtils.lookupPlatformDescription(platformString);
|
||||
|
||||
if (platformDescription == null) {
|
||||
usageError("main.unsupported.release.version", platformString);
|
||||
}
|
||||
|
||||
compOpts.put(Option.SOURCE, platformDescription.getSourceVersion());
|
||||
|
||||
context.put(PlatformDescription.class, platformDescription);
|
||||
|
||||
JavaFileManager platformFM = platformDescription.getFileManager();
|
||||
DelegatingJavaFileManager.installReleaseFileManager(context,
|
||||
platformFM,
|
||||
fileManager);
|
||||
}
|
||||
|
||||
compOpts.notifyListeners();
|
||||
|
||||
if (javaNames.isEmpty() && subPackages.isEmpty() && isEmpty(fileObjects)) {
|
||||
usageError("main.No_packages_or_classes_specified");
|
||||
}
|
||||
|
||||
if (!docletInvoker.validOptions(options.toList())) {
|
||||
// error message already displayed
|
||||
exit();
|
||||
}
|
||||
|
||||
JavadocTool comp = JavadocTool.make0(context);
|
||||
if (comp == null) return false;
|
||||
|
||||
if (showAccess == null) {
|
||||
setFilter(defaultFilter);
|
||||
}
|
||||
|
||||
LanguageVersion languageVersion = docletInvoker.languageVersion();
|
||||
RootDocImpl root = comp.getRootDocImpl(
|
||||
docLocale,
|
||||
encoding,
|
||||
showAccess,
|
||||
javaNames.toList(),
|
||||
options.toList(),
|
||||
fileObjects,
|
||||
breakiterator,
|
||||
subPackages.toList(),
|
||||
excludedPackages.toList(),
|
||||
docClasses,
|
||||
// legacy?
|
||||
languageVersion == null || languageVersion == LanguageVersion.JAVA_1_1,
|
||||
quiet);
|
||||
|
||||
// release resources
|
||||
comp = null;
|
||||
|
||||
// pass off control to the doclet
|
||||
boolean ok = root != null;
|
||||
if (ok) ok = docletInvoker.start(root);
|
||||
|
||||
// We're done.
|
||||
if (compOpts.get("-verbose") != null) {
|
||||
tm = System.currentTimeMillis() - tm;
|
||||
messager.notice("main.done_in", Long.toString(tm));
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
private <T> boolean isEmpty(Iterable<T> iter) {
|
||||
return !iter.iterator().hasNext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Init the doclet invoker.
|
||||
* The doclet class may be given explicitly, or via the -doclet option in
|
||||
* argv.
|
||||
* If the doclet class is not given explicitly, it will be loaded from
|
||||
* the file manager's DOCLET_PATH location, if available, or via the
|
||||
* -doclet path option in argv.
|
||||
* @param docletClass The doclet class. May be null.
|
||||
* @param fileManager The file manager used to get the class loader to load
|
||||
* the doclet class if required. May be null.
|
||||
* @param argv Args containing -doclet and -docletpath, in case they are required.
|
||||
*/
|
||||
private void setDocletInvoker(Class<?> docletClass, JavaFileManager fileManager, String[] argv) {
|
||||
boolean exportInternalAPI = false;
|
||||
String docletClassName = null;
|
||||
String docletPath = null;
|
||||
|
||||
// Parse doclet specifying arguments
|
||||
for (int i = 0 ; i < argv.length ; i++) {
|
||||
String arg = argv[i];
|
||||
if (arg.equals(ToolOption.DOCLET.opt)) {
|
||||
oneArg(argv, i++);
|
||||
if (docletClassName != null) {
|
||||
usageError("main.more_than_one_doclet_specified_0_and_1",
|
||||
docletClassName, argv[i]);
|
||||
}
|
||||
docletClassName = argv[i];
|
||||
} else if (arg.equals(ToolOption.DOCLETPATH.opt)) {
|
||||
oneArg(argv, i++);
|
||||
if (docletPath == null) {
|
||||
docletPath = argv[i];
|
||||
} else {
|
||||
docletPath += File.pathSeparator + argv[i];
|
||||
}
|
||||
} else if (arg.equals("-XDaccessInternalAPI")) {
|
||||
exportInternalAPI = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (docletClass != null) {
|
||||
// TODO, check no -doclet, -docletpath
|
||||
docletInvoker = new DocletInvoker(messager, docletClass, apiMode, exportInternalAPI);
|
||||
} else {
|
||||
if (docletClassName == null) {
|
||||
docletClassName = defaultDocletClassName;
|
||||
}
|
||||
|
||||
// attempt to find doclet
|
||||
docletInvoker = new DocletInvoker(messager, fileManager,
|
||||
docletClassName, docletPath,
|
||||
docletParentClassLoader,
|
||||
apiMode,
|
||||
exportInternalAPI);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set one arg option.
|
||||
* Error and exit if one argument is not provided.
|
||||
*/
|
||||
private void oneArg(String[] args, int index) {
|
||||
if ((index + 1) < args.length) {
|
||||
setOption(args[index], args[index+1]);
|
||||
} else {
|
||||
usageError("main.requires_argument", args[index]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void usageError(String key, Object... args) {
|
||||
messager.error(Messager.NOPOS, key, args);
|
||||
usage(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* indicate an option with no arguments was given.
|
||||
*/
|
||||
private void setOption(String opt) {
|
||||
String[] option = { opt };
|
||||
options.append(option);
|
||||
}
|
||||
|
||||
/**
|
||||
* indicate an option with one argument was given.
|
||||
*/
|
||||
private void setOption(String opt, String argument) {
|
||||
String[] option = { opt, argument };
|
||||
options.append(option);
|
||||
}
|
||||
|
||||
/**
|
||||
* indicate an option with the specified list of arguments was given.
|
||||
*/
|
||||
private void setOption(String opt, List<String> arguments) {
|
||||
String[] args = new String[arguments.length() + 1];
|
||||
int k = 0;
|
||||
args[k++] = opt;
|
||||
for (List<String> i = arguments; i.nonEmpty(); i=i.tail) {
|
||||
args[k++] = i.head;
|
||||
}
|
||||
options.append(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
OptionHelper getOptionHelper() {
|
||||
return new GrumpyHelper(messager) {
|
||||
@Override
|
||||
public String get(com.sun.tools.javac.main.Option option) {
|
||||
return compOpts.get(option);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(String name, String value) {
|
||||
compOpts.put(name, value);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -1,190 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
/**
|
||||
* Represents a documentation tag, e.g. @since, @author, @version.
|
||||
* Given a tag (e.g. "@since 1.2"), holds tag name (e.g. "@since")
|
||||
* and tag text (e.g. "1.2"). TagImpls with structure or which require
|
||||
* special processing are handled by subclasses (ParamTagImpl, SeeTagImpl,
|
||||
* and ThrowsTagImpl
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @author Neal M Gafter
|
||||
* @see SeeTagImpl
|
||||
* @see ParamTagImpl
|
||||
* @see ThrowsTagImpl
|
||||
* @see Doc#tags()
|
||||
*
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class TagImpl implements Tag {
|
||||
|
||||
protected final String text;
|
||||
protected final String name;
|
||||
protected final DocImpl holder;
|
||||
|
||||
/**
|
||||
* Cached first sentence.
|
||||
*/
|
||||
private Tag[] firstSentence;
|
||||
|
||||
/**
|
||||
* Cached inline tags.
|
||||
*/
|
||||
private Tag[] inlineTags;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
TagImpl(DocImpl holder, String name, String text) {
|
||||
this.holder = holder;
|
||||
this.name = name;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the name of this tag.
|
||||
*/
|
||||
public String name() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the containing {@link Doc} of this Tag element.
|
||||
*/
|
||||
public Doc holder() {
|
||||
return holder;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the kind of this tag.
|
||||
*/
|
||||
public String kind() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the text of this tag, that is, portion beyond tag name.
|
||||
*/
|
||||
public String text() {
|
||||
return text;
|
||||
}
|
||||
|
||||
DocEnv docenv() {
|
||||
return holder.env;
|
||||
}
|
||||
|
||||
/**
|
||||
* for use by subclasses which have two part tag text.
|
||||
*/
|
||||
String[] divideAtWhite() {
|
||||
String[] sa = new String[2];
|
||||
int len = text.length();
|
||||
// if no white space found
|
||||
sa[0] = text;
|
||||
sa[1] = "";
|
||||
for (int inx = 0; inx < len; ++inx) {
|
||||
char ch = text.charAt(inx);
|
||||
if (Character.isWhitespace(ch)) {
|
||||
sa[0] = text.substring(0, inx);
|
||||
for (; inx < len; ++inx) {
|
||||
ch = text.charAt(inx);
|
||||
if (!Character.isWhitespace(ch)) {
|
||||
sa[1] = text.substring(inx, len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return sa;
|
||||
}
|
||||
|
||||
/**
|
||||
* convert this object to a string.
|
||||
*/
|
||||
public String toString() {
|
||||
return name + ":" + text;
|
||||
}
|
||||
|
||||
/**
|
||||
* For documentation comment with embedded @link tags, return the array of
|
||||
* TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
|
||||
* Within a comment string "This is an example of inline tags for a
|
||||
* documentation comment {@link Doc {@link Doc commentlabel}}",
|
||||
* where inside the inner braces, the first "Doc" carries exctly the same
|
||||
* syntax as a SeeTagImpl and the second "commentlabel" is label for the Html
|
||||
* Link, will return an array of TagImpl(s) with first element as TagImpl with
|
||||
* comment text "This is an example of inline tags for a documentation
|
||||
* comment" and second element as SeeTagImpl with referenced class as "Doc"
|
||||
* and the label for the Html Link as "commentlabel".
|
||||
*
|
||||
* @return TagImpl[] Array of tags with inline SeeTagImpls.
|
||||
* @see ParamTagImpl
|
||||
* @see ThrowsTagImpl
|
||||
*/
|
||||
public Tag[] inlineTags() {
|
||||
if (inlineTags == null) {
|
||||
inlineTags = Comment.getInlineTags(holder, text);
|
||||
}
|
||||
return inlineTags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return array of tags for the first sentence in the doc comment text.
|
||||
*/
|
||||
public Tag[] firstSentenceTags() {
|
||||
if (firstSentence == null) {
|
||||
//Parse all sentences first to avoid duplicate warnings.
|
||||
inlineTags();
|
||||
try {
|
||||
docenv().setSilent(true);
|
||||
firstSentence = Comment.firstSentenceTags(holder, text);
|
||||
} finally {
|
||||
docenv().setSilent(false);
|
||||
}
|
||||
}
|
||||
return firstSentence;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the doc item to which this tag is attached.
|
||||
* @return the doc item to which this tag is attached.
|
||||
*/
|
||||
public SourcePosition position() {
|
||||
return holder.position();
|
||||
}
|
||||
}
|
||||
@ -1,128 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
/**
|
||||
* Represents a @throws or @exception documentation tag.
|
||||
* Parses and holds the exception name and exception comment.
|
||||
* The exception name my be the name of a type variable.
|
||||
* Note: @exception is a backwards compatible synonymy for @throws.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Robert Field
|
||||
* @author Atul M Dambalkar
|
||||
* @see ExecutableMemberDocImpl#throwsTags()
|
||||
*
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
class ThrowsTagImpl extends TagImpl implements ThrowsTag {
|
||||
|
||||
private final String exceptionName;
|
||||
private final String exceptionComment;
|
||||
|
||||
/**
|
||||
* Cached inline tags.
|
||||
*/
|
||||
private Tag[] inlineTags;
|
||||
|
||||
ThrowsTagImpl(DocImpl holder, String name, String text) {
|
||||
super(holder, name, text);
|
||||
String[] sa = divideAtWhite();
|
||||
exceptionName = sa[0];
|
||||
exceptionComment = sa[1];
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the exception name.
|
||||
*/
|
||||
public String exceptionName() {
|
||||
return exceptionName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the exception comment.
|
||||
*/
|
||||
public String exceptionComment() {
|
||||
return exceptionComment;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the exception as a ClassDocImpl.
|
||||
*/
|
||||
public ClassDoc exception() {
|
||||
ClassDocImpl exceptionClass;
|
||||
if (!(holder instanceof ExecutableMemberDoc)) {
|
||||
exceptionClass = null;
|
||||
} else {
|
||||
ExecutableMemberDocImpl emd = (ExecutableMemberDocImpl)holder;
|
||||
ClassDocImpl con = (ClassDocImpl)emd.containingClass();
|
||||
exceptionClass = (ClassDocImpl)con.findClass(exceptionName);
|
||||
}
|
||||
return exceptionClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type that represents the exception.
|
||||
* This may be a <code>ClassDoc</code> or a <code>TypeVariable</code>.
|
||||
*/
|
||||
public Type exceptionType() {
|
||||
//###(gj) TypeVariable not yet supported.
|
||||
return exception();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the kind of this tag. Always "@throws" for instances
|
||||
* of ThrowsTagImpl.
|
||||
*/
|
||||
@Override
|
||||
public String kind() {
|
||||
return "@throws";
|
||||
}
|
||||
|
||||
/**
|
||||
* For the exception comment with embedded @link tags return the array of
|
||||
* TagImpls consisting of SeeTagImpl(s) and text containing TagImpl(s).
|
||||
*
|
||||
* @return TagImpl[] Array of tags with inline SeeTagImpls.
|
||||
* @see TagImpl#inlineTags()
|
||||
* @see ParamTagImpl#inlineTags()
|
||||
*/
|
||||
@Override
|
||||
public Tag[] inlineTags() {
|
||||
if (inlineTags == null) {
|
||||
inlineTags = Comment.getInlineTags(holder, exceptionComment());
|
||||
}
|
||||
return inlineTags;
|
||||
}
|
||||
}
|
||||
@ -1,454 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import com.sun.tools.javac.code.Flags;
|
||||
import com.sun.tools.javac.main.Option;
|
||||
import com.sun.tools.javac.main.Option.InvalidValueException;
|
||||
import com.sun.tools.javac.main.OptionHelper;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Options;
|
||||
|
||||
|
||||
/**
|
||||
* javadoc tool options.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public enum ToolOption {
|
||||
// ----- options for underlying compiler -----
|
||||
|
||||
BOOTCLASSPATH("-bootclasspath", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
CLASSPATH("-classpath", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.CLASS_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
CP("-cp", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.CLASS_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
CLASS_PATH("--class-path", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.CLASS_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
EXTDIRS("-extdirs", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.EXTDIRS, arg);
|
||||
}
|
||||
},
|
||||
|
||||
SOURCEPATH("-sourcepath", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
SOURCE_PATH("--source-path", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.SOURCE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
SYSCLASSPATH("-sysclasspath", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.BOOT_CLASS_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
MODULE_SOURCE_PATH("--module-source-path", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.MODULE_SOURCE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
UPGRADE_MODULE_PATH("--upgrade-module-path", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.UPGRADE_MODULE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
SYSTEM_("--system", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.SYSTEM, arg);
|
||||
}
|
||||
},
|
||||
|
||||
MODULE_PATH("--module-path", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.MODULE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
P("-p", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setFileManagerOpt(Option.MODULE_PATH, arg);
|
||||
}
|
||||
},
|
||||
|
||||
ADD_MODULES("--add-modules", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.ADD_MODULES.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
LIMIT_MODULES("--limit-modules", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.LIMIT_MODULES.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
ENCODING("-encoding", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.encoding = arg;
|
||||
helper.setCompilerOpt(opt, arg);
|
||||
helper.setFileManagerOpt(Option.ENCODING, arg);
|
||||
}
|
||||
},
|
||||
|
||||
RELEASE("--release", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setCompilerOpt(opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
SOURCE("-source", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setCompilerOpt("--source", arg);
|
||||
}
|
||||
},
|
||||
|
||||
SOURCE2("--source", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setCompilerOpt(opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
XMAXERRS("-Xmaxerrs", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setCompilerOpt(opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
XMAXWARNS("-Xmaxwarns", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.setCompilerOpt(opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
ADD_READS("--add-reads", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.ADD_READS.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
ADD_EXPORTS("--add-exports", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.ADD_EXPORTS.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
PATCH_MODULE("--patch-module", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.PATCH_MODULE.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
ADD_OPENS("--add-opens", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) throws InvalidValueException {
|
||||
Option.ADD_OPENS.process(helper.getOptionHelper(), opt, arg);
|
||||
}
|
||||
},
|
||||
|
||||
// ----- doclet options -----
|
||||
|
||||
DOCLET("-doclet", true), // handled in setDocletInvoker
|
||||
|
||||
DOCLETPATH("-docletpath", true), // handled in setDocletInvoker
|
||||
|
||||
// ----- selection options -----
|
||||
|
||||
SUBPACKAGES("-subpackages", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.addToList(helper.subPackages, arg);
|
||||
}
|
||||
},
|
||||
|
||||
EXCLUDE("-exclude", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.addToList(helper.excludedPackages, arg);
|
||||
}
|
||||
},
|
||||
|
||||
// ----- filtering options -----
|
||||
|
||||
PACKAGE("-package") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.setFilter(
|
||||
Flags.PUBLIC | Flags.PROTECTED | ModifierFilter.PACKAGE);
|
||||
}
|
||||
},
|
||||
|
||||
PRIVATE("-private") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.setFilter(ModifierFilter.ALL_ACCESS);
|
||||
}
|
||||
},
|
||||
|
||||
PROTECTED("-protected") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.setFilter(Flags.PUBLIC | Flags.PROTECTED);
|
||||
}
|
||||
},
|
||||
|
||||
PUBLIC("-public") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.setFilter(Flags.PUBLIC);
|
||||
}
|
||||
},
|
||||
|
||||
// ----- output control options -----
|
||||
|
||||
PROMPT("-prompt") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.compOpts.put("-prompt", "-prompt");
|
||||
helper.promptOnError = true;
|
||||
}
|
||||
},
|
||||
|
||||
QUIET("-quiet") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.quiet = true;
|
||||
}
|
||||
},
|
||||
|
||||
VERBOSE("-verbose") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.compOpts.put("-verbose", "");
|
||||
}
|
||||
},
|
||||
|
||||
XWERROR("-Xwerror") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.rejectWarnings = true;
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
// ----- other options -----
|
||||
|
||||
BREAKITERATOR("-breakiterator") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.breakiterator = true;
|
||||
}
|
||||
},
|
||||
|
||||
LOCALE("-locale", true) {
|
||||
@Override
|
||||
public void process(Helper helper, String arg) {
|
||||
helper.docLocale = arg;
|
||||
}
|
||||
},
|
||||
|
||||
OVERVIEW("-overview", true),
|
||||
|
||||
XCLASSES("-Xclasses") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.docClasses = true;
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
// ----- help options -----
|
||||
|
||||
HELP("-help") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.usage();
|
||||
}
|
||||
},
|
||||
|
||||
X("-X") {
|
||||
@Override
|
||||
public void process(Helper helper) {
|
||||
helper.Xusage();
|
||||
}
|
||||
};
|
||||
|
||||
public final String opt;
|
||||
public final boolean hasArg;
|
||||
|
||||
ToolOption(String opt) {
|
||||
this(opt, false);
|
||||
}
|
||||
|
||||
ToolOption(String opt, boolean hasArg) {
|
||||
this.opt = opt;
|
||||
this.hasArg = hasArg;
|
||||
}
|
||||
|
||||
void process(Helper helper, String arg) throws Option.InvalidValueException { }
|
||||
|
||||
void process(Helper helper) { }
|
||||
|
||||
static ToolOption get(String name) {
|
||||
for (ToolOption o: values()) {
|
||||
if (name.equals(o.opt))
|
||||
return o;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static abstract class Helper {
|
||||
/** List of decoded options. */
|
||||
final ListBuffer<String[]> options = new ListBuffer<>();
|
||||
|
||||
/** Selected packages, from -subpackages. */
|
||||
final ListBuffer<String> subPackages = new ListBuffer<>();
|
||||
|
||||
/** Excluded packages, from -exclude. */
|
||||
final ListBuffer<String> excludedPackages = new ListBuffer<>();
|
||||
|
||||
// File manager options
|
||||
final Map<Option, String> fileManagerOpts = new LinkedHashMap<>();
|
||||
|
||||
/** javac options, set by various options. */
|
||||
Options compOpts; // = Options.instance(context)
|
||||
|
||||
/* Encoding for javac, and files written? set by -encoding. */
|
||||
String encoding = null;
|
||||
|
||||
/** Set by -breakiterator. */
|
||||
boolean breakiterator = false;
|
||||
|
||||
/** Set by -quiet. */
|
||||
boolean quiet = false;
|
||||
|
||||
/** Set by -Xclasses. */
|
||||
boolean docClasses = false;
|
||||
|
||||
/** Set by -Xwerror. */
|
||||
boolean rejectWarnings = false;
|
||||
|
||||
/** Set by -prompt. */
|
||||
boolean promptOnError;
|
||||
|
||||
/** Set by -locale. */
|
||||
String docLocale = "";
|
||||
|
||||
/** Set by -public, private, -protected, -package. */
|
||||
ModifierFilter showAccess = null;
|
||||
|
||||
abstract void usage();
|
||||
abstract void Xusage();
|
||||
|
||||
abstract void usageError(String msg, Object... args);
|
||||
abstract OptionHelper getOptionHelper();
|
||||
|
||||
void addToList(ListBuffer<String> list, String str){
|
||||
StringTokenizer st = new StringTokenizer(str, ":");
|
||||
String current;
|
||||
while(st.hasMoreTokens()){
|
||||
current = st.nextToken();
|
||||
list.append(current);
|
||||
}
|
||||
}
|
||||
|
||||
void setFilter(long filterBits) {
|
||||
if (showAccess != null) {
|
||||
usageError("main.incompatible.access.flags");
|
||||
}
|
||||
showAccess = new ModifierFilter(filterBits);
|
||||
}
|
||||
|
||||
void setCompilerOpt(String opt, String arg) {
|
||||
if (compOpts.get(opt) != null) {
|
||||
usageError("main.option.already.seen", opt);
|
||||
}
|
||||
compOpts.put(opt, arg);
|
||||
}
|
||||
|
||||
void setFileManagerOpt(Option opt, String arg) {
|
||||
fileManagerOpts.put(opt, arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,352 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.CompletionFailure;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.code.Type.ArrayType;
|
||||
import com.sun.tools.javac.code.Type.ClassType;
|
||||
import com.sun.tools.javac.code.Type.TypeVar;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import static com.sun.tools.javac.code.TypeTag.ARRAY;
|
||||
|
||||
/**
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class TypeMaker {
|
||||
|
||||
public static com.sun.javadoc.Type getType(DocEnv env, Type t) {
|
||||
return getType(env, t, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param errToClassDoc if true, ERROR type results in a ClassDoc;
|
||||
* false preserves legacy behavior
|
||||
*/
|
||||
public static com.sun.javadoc.Type getType(DocEnv env, Type t,
|
||||
boolean errorToClassDoc) {
|
||||
return getType(env, t, errorToClassDoc, true);
|
||||
}
|
||||
|
||||
public static com.sun.javadoc.Type getType(DocEnv env, Type t,
|
||||
boolean errToClassDoc, boolean considerAnnotations) {
|
||||
try {
|
||||
return getTypeImpl(env, t, errToClassDoc, considerAnnotations);
|
||||
} catch (CompletionFailure cf) {
|
||||
/* Quietly ignore completion failures and try again - the type
|
||||
* for which the CompletionFailure was thrown shouldn't be completed
|
||||
* again by the completer that threw the CompletionFailure.
|
||||
*/
|
||||
return getType(env, t, errToClassDoc, considerAnnotations);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("fallthrough")
|
||||
private static com.sun.javadoc.Type getTypeImpl(DocEnv env, Type t,
|
||||
boolean errToClassDoc, boolean considerAnnotations) {
|
||||
if (env.legacyDoclet) {
|
||||
t = env.types.erasure(t);
|
||||
}
|
||||
|
||||
if (considerAnnotations && t.isAnnotated()) {
|
||||
return new AnnotatedTypeImpl(env, t);
|
||||
}
|
||||
|
||||
switch (t.getTag()) {
|
||||
case CLASS:
|
||||
if (ClassDocImpl.isGeneric((ClassSymbol)t.tsym)) {
|
||||
return env.getParameterizedType((ClassType)t);
|
||||
} else {
|
||||
return env.getClassDoc((ClassSymbol)t.tsym);
|
||||
}
|
||||
case WILDCARD:
|
||||
Type.WildcardType a = (Type.WildcardType)t;
|
||||
return new WildcardTypeImpl(env, a);
|
||||
case TYPEVAR: return new TypeVariableImpl(env, (TypeVar)t);
|
||||
case ARRAY: return new ArrayTypeImpl(env, t);
|
||||
case BYTE: return PrimitiveType.byteType;
|
||||
case CHAR: return PrimitiveType.charType;
|
||||
case SHORT: return PrimitiveType.shortType;
|
||||
case INT: return PrimitiveType.intType;
|
||||
case LONG: return PrimitiveType.longType;
|
||||
case FLOAT: return PrimitiveType.floatType;
|
||||
case DOUBLE: return PrimitiveType.doubleType;
|
||||
case BOOLEAN: return PrimitiveType.booleanType;
|
||||
case VOID: return PrimitiveType.voidType;
|
||||
case ERROR:
|
||||
if (errToClassDoc)
|
||||
return env.getClassDoc((ClassSymbol)t.tsym);
|
||||
// FALLTHRU
|
||||
default:
|
||||
return new PrimitiveType(t.tsym.getQualifiedName().toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a list of javac types into an array of javadoc types.
|
||||
*/
|
||||
public static com.sun.javadoc.Type[] getTypes(DocEnv env, List<Type> ts) {
|
||||
return getTypes(env, ts, new com.sun.javadoc.Type[ts.length()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Like the above version, but use and return the array given.
|
||||
*/
|
||||
public static com.sun.javadoc.Type[] getTypes(DocEnv env, List<Type> ts,
|
||||
com.sun.javadoc.Type res[]) {
|
||||
int i = 0;
|
||||
for (Type t : ts) {
|
||||
res[i++] = getType(env, t);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static String getTypeName(Type t, boolean full) {
|
||||
switch (t.getTag()) {
|
||||
case ARRAY:
|
||||
StringBuilder s = new StringBuilder();
|
||||
while (t.hasTag(ARRAY)) {
|
||||
s.append("[]");
|
||||
t = ((ArrayType)t).elemtype;
|
||||
}
|
||||
s.insert(0, getTypeName(t, full));
|
||||
return s.toString();
|
||||
case CLASS:
|
||||
return ClassDocImpl.getClassName((ClassSymbol)t.tsym, full);
|
||||
default:
|
||||
return t.tsym.getQualifiedName().toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the string representation of a type use. Bounds of type
|
||||
* variables are not included; bounds of wildcard types are.
|
||||
* Class names are qualified if "full" is true.
|
||||
*/
|
||||
static String getTypeString(DocEnv env, Type t, boolean full) {
|
||||
// TODO: should annotations be included here?
|
||||
switch (t.getTag()) {
|
||||
case ARRAY:
|
||||
StringBuilder s = new StringBuilder();
|
||||
while (t.hasTag(ARRAY)) {
|
||||
s.append("[]");
|
||||
t = env.types.elemtype(t);
|
||||
}
|
||||
s.insert(0, getTypeString(env, t, full));
|
||||
return s.toString();
|
||||
case CLASS:
|
||||
return ParameterizedTypeImpl.
|
||||
parameterizedTypeToString(env, (ClassType)t, full);
|
||||
case WILDCARD:
|
||||
Type.WildcardType a = (Type.WildcardType)t;
|
||||
return WildcardTypeImpl.wildcardTypeToString(env, a, full);
|
||||
default:
|
||||
return t.tsym.getQualifiedName().toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the formal type parameters of a class or method as an
|
||||
* angle-bracketed string. Each parameter is a type variable with
|
||||
* optional bounds. Class names are qualified if "full" is true.
|
||||
* Return "" if there are no type parameters or we're hiding generics.
|
||||
*/
|
||||
static String typeParametersString(DocEnv env, Symbol sym, boolean full) {
|
||||
if (env.legacyDoclet || sym.type.getTypeArguments().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder s = new StringBuilder();
|
||||
for (Type t : sym.type.getTypeArguments()) {
|
||||
s.append(s.length() == 0 ? "<" : ", ");
|
||||
s.append(TypeVariableImpl.typeVarToString(env, (TypeVar)t, full));
|
||||
}
|
||||
s.append(">");
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the actual type arguments of a parameterized type as an
|
||||
* angle-bracketed string. Class name are qualified if "full" is true.
|
||||
* Return "" if there are no type arguments or we're hiding generics.
|
||||
*/
|
||||
static String typeArgumentsString(DocEnv env, ClassType cl, boolean full) {
|
||||
if (env.legacyDoclet || cl.getTypeArguments().isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder s = new StringBuilder();
|
||||
for (Type t : cl.getTypeArguments()) {
|
||||
s.append(s.length() == 0 ? "<" : ", ");
|
||||
s.append(getTypeString(env, t, full));
|
||||
}
|
||||
s.append(">");
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
|
||||
private static class ArrayTypeImpl implements com.sun.javadoc.Type {
|
||||
|
||||
Type arrayType;
|
||||
|
||||
DocEnv env;
|
||||
|
||||
ArrayTypeImpl(DocEnv env, Type arrayType) {
|
||||
this.env = env;
|
||||
this.arrayType = arrayType;
|
||||
}
|
||||
|
||||
private com.sun.javadoc.Type skipArraysCache = null;
|
||||
|
||||
public com.sun.javadoc.Type getElementType() {
|
||||
return TypeMaker.getType(env, env.types.elemtype(arrayType));
|
||||
}
|
||||
|
||||
private com.sun.javadoc.Type skipArrays() {
|
||||
if (skipArraysCache == null) {
|
||||
Type t;
|
||||
for (t = arrayType; t.hasTag(ARRAY); t = env.types.elemtype(t)) { }
|
||||
skipArraysCache = TypeMaker.getType(env, t);
|
||||
}
|
||||
return skipArraysCache;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type's dimension information, as a string.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns '[][]'.
|
||||
*/
|
||||
public String dimension() {
|
||||
StringBuilder dimension = new StringBuilder();
|
||||
for (Type t = arrayType; t.hasTag(ARRAY); t = env.types.elemtype(t)) {
|
||||
dimension.append("[]");
|
||||
}
|
||||
return dimension.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return unqualified name of type excluding any dimension information.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns 'String'.
|
||||
*/
|
||||
public String typeName() {
|
||||
return skipArrays().typeName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return qualified name of type excluding any dimension information.
|
||||
*<p>
|
||||
* For example, a two dimensional array of String
|
||||
* returns 'java.lang.String'.
|
||||
*/
|
||||
public String qualifiedTypeName() {
|
||||
return skipArrays().qualifiedTypeName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the simple name of this type excluding any dimension information.
|
||||
*/
|
||||
public String simpleTypeName() {
|
||||
return skipArrays().simpleTypeName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as a class. Array dimensions are ignored.
|
||||
*
|
||||
* @return a ClassDocImpl if the type is a Class.
|
||||
* Return null if it is a primitive type..
|
||||
*/
|
||||
public ClassDoc asClassDoc() {
|
||||
return skipArrays().asClassDoc();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as a <code>ParameterizedType</code> if it
|
||||
* represents a parameterized type. Array dimensions are ignored.
|
||||
*/
|
||||
public ParameterizedType asParameterizedType() {
|
||||
return skipArrays().asParameterizedType();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as a <code>TypeVariable</code> if it represents
|
||||
* a type variable. Array dimensions are ignored.
|
||||
*/
|
||||
public TypeVariable asTypeVariable() {
|
||||
return skipArrays().asTypeVariable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as there are no arrays of wildcard types.
|
||||
*/
|
||||
public WildcardType asWildcardType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return null, as there are no annotations of the type
|
||||
*/
|
||||
public AnnotatedType asAnnotatedType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return this type as an <code>AnnotationTypeDoc</code> if it
|
||||
* represents an annotation type. Array dimensions are ignored.
|
||||
*/
|
||||
public AnnotationTypeDoc asAnnotationTypeDoc() {
|
||||
return skipArrays().asAnnotationTypeDoc();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if this is an array of a primitive type.
|
||||
*/
|
||||
public boolean isPrimitive() {
|
||||
return skipArrays().isPrimitive();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a string representation of the type.
|
||||
*
|
||||
* Return name of type including any dimension information.
|
||||
* <p>
|
||||
* For example, a two dimensional array of String returns
|
||||
* <code>String[][]</code>.
|
||||
*
|
||||
* @return name of type including any dimension information.
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return qualifiedTypeName() + dimension();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,154 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Attribute;
|
||||
import com.sun.tools.javac.code.Attribute.TypeCompound;
|
||||
import com.sun.tools.javac.code.Kinds;
|
||||
import com.sun.tools.javac.code.Kinds.KindSelector;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Symbol.MethodSymbol;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.code.Type.TypeVar;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
import com.sun.tools.javac.util.Names;
|
||||
|
||||
/**
|
||||
* Implementation of <code>TypeVariable</code>, which
|
||||
* represents a type variable.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class TypeVariableImpl extends AbstractTypeImpl implements TypeVariable {
|
||||
|
||||
TypeVariableImpl(DocEnv env, TypeVar type) {
|
||||
super(env, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the bounds of this type variable.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] bounds() {
|
||||
return TypeMaker.getTypes(env, getBounds((TypeVar)type, env));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the class, interface, method, or constructor within
|
||||
* which this type variable is declared.
|
||||
*/
|
||||
public ProgramElementDoc owner() {
|
||||
Symbol osym = type.tsym.owner;
|
||||
if (osym.kind.matches(KindSelector.TYP)) {
|
||||
return env.getClassDoc((ClassSymbol)osym);
|
||||
}
|
||||
Names names = osym.name.table.names;
|
||||
if (osym.name == names.init) {
|
||||
return env.getConstructorDoc((MethodSymbol)osym);
|
||||
} else {
|
||||
return env.getMethodDoc((MethodSymbol)osym);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ClassDoc of the erasure of this type variable.
|
||||
*/
|
||||
@Override
|
||||
public ClassDoc asClassDoc() {
|
||||
return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeVariable asTypeVariable() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return typeVarToString(env, (TypeVar)type, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the string form of a type variable along with any
|
||||
* "extends" clause. Class names are qualified if "full" is true.
|
||||
*/
|
||||
static String typeVarToString(DocEnv env, TypeVar v, boolean full) {
|
||||
StringBuilder s = new StringBuilder(v.toString());
|
||||
List<Type> bounds = getBounds(v, env);
|
||||
if (bounds.nonEmpty()) {
|
||||
boolean first = true;
|
||||
for (Type b : bounds) {
|
||||
s.append(first ? " extends " : " & ");
|
||||
s.append(TypeMaker.getTypeString(env, b, full));
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the bounds of a type variable as listed in the "extends" clause.
|
||||
*/
|
||||
private static List<Type> getBounds(TypeVar v, DocEnv env) {
|
||||
final Type upperBound = v.getUpperBound();
|
||||
Name boundname = upperBound.tsym.getQualifiedName();
|
||||
if (boundname == boundname.table.names.java_lang_Object
|
||||
&& !upperBound.isAnnotated()) {
|
||||
return List.nil();
|
||||
} else {
|
||||
return env.types.getBounds(v);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the annotations of this program element.
|
||||
* Return an empty array if there are none.
|
||||
*/
|
||||
public AnnotationDesc[] annotations() {
|
||||
if (!type.isAnnotated()) {
|
||||
return new AnnotationDesc[0];
|
||||
}
|
||||
List<? extends TypeCompound> tas = type.getAnnotationMirrors();
|
||||
AnnotationDesc res[] = new AnnotationDesc[tas.length()];
|
||||
int i = 0;
|
||||
for (Attribute.Compound a : tas) {
|
||||
res[i++] = new AnnotationDescImpl(env, a);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@ -1,141 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2018, 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 com.sun.tools.javadoc.main;
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
import com.sun.tools.javac.code.Symbol.ClassSymbol;
|
||||
import com.sun.tools.javac.code.Type;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* Implementation of <code>WildcardType</code>, which
|
||||
* represents a wildcard type.
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*
|
||||
* @author Scott Seligman
|
||||
* @since 1.5
|
||||
*/
|
||||
@Deprecated(since="9", forRemoval=true)
|
||||
@SuppressWarnings("removal")
|
||||
public class WildcardTypeImpl extends AbstractTypeImpl implements WildcardType {
|
||||
|
||||
WildcardTypeImpl(DocEnv env, Type.WildcardType type) {
|
||||
super(env, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the upper bounds of this wildcard type argument
|
||||
* as given by the <i>extends</i> clause.
|
||||
* Return an empty array if no such bounds are explicitly given.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] extendsBounds() {
|
||||
return TypeMaker.getTypes(env, getExtendsBounds((Type.WildcardType)type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the lower bounds of this wildcard type argument
|
||||
* as given by the <i>super</i> clause.
|
||||
* Return an empty array if no such bounds are explicitly given.
|
||||
*/
|
||||
public com.sun.javadoc.Type[] superBounds() {
|
||||
return TypeMaker.getTypes(env, getSuperBounds((Type.WildcardType)type));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the ClassDoc of the erasure of this wildcard type.
|
||||
*/
|
||||
@Override
|
||||
public ClassDoc asClassDoc() {
|
||||
return env.getClassDoc((ClassSymbol)env.types.erasure(type).tsym);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WildcardType asWildcardType() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String typeName() { return "?"; }
|
||||
@Override
|
||||
public String qualifiedTypeName() { return "?"; }
|
||||
@Override
|
||||
public String simpleTypeName() { return "?"; }
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return wildcardTypeToString(env, (Type.WildcardType)type, true);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the string form of a wildcard type ("?") along with any
|
||||
* "extends" or "super" clause. Delimiting brackets are not
|
||||
* included. Class names are qualified if "full" is true.
|
||||
*/
|
||||
static String wildcardTypeToString(DocEnv env,
|
||||
Type.WildcardType wildThing, boolean full) {
|
||||
if (env.legacyDoclet) {
|
||||
return TypeMaker.getTypeName(env.types.erasure(wildThing), full);
|
||||
}
|
||||
StringBuilder s = new StringBuilder("?");
|
||||
List<Type> bounds = getExtendsBounds(wildThing);
|
||||
if (bounds.nonEmpty()) {
|
||||
s.append(" extends ");
|
||||
} else {
|
||||
bounds = getSuperBounds(wildThing);
|
||||
if (bounds.nonEmpty()) {
|
||||
s.append(" super ");
|
||||
}
|
||||
}
|
||||
boolean first = true; // currently only one bound is allowed
|
||||
for (Type b : bounds) {
|
||||
if (!first) {
|
||||
s.append(" & ");
|
||||
}
|
||||
s.append(TypeMaker.getTypeString(env, b, full));
|
||||
first = false;
|
||||
}
|
||||
return s.toString();
|
||||
}
|
||||
|
||||
private static List<Type> getExtendsBounds(Type.WildcardType wild) {
|
||||
return wild.isSuperBound()
|
||||
? List.nil()
|
||||
: List.of(wild.type);
|
||||
}
|
||||
|
||||
private static List<Type> getSuperBounds(Type.WildcardType wild) {
|
||||
return wild.isExtendsBound()
|
||||
? List.nil()
|
||||
: List.of(wild.type);
|
||||
}
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This package and its contents are deprecated and
|
||||
* may be removed in a future release.
|
||||
* See
|
||||
* {@code javax.tools.ToolProvider.getSystemDocumentationTool}
|
||||
* and
|
||||
* {@code javax.tools.DocumentationTool}
|
||||
* for replacement functionality.
|
||||
*/
|
||||
package com.sun.tools.javadoc;
|
||||
@ -1,155 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2018, 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.
|
||||
#
|
||||
|
||||
main.errors={0} errors
|
||||
main.error={0} error
|
||||
main.warnings={0} warnings
|
||||
main.warning={0} warning
|
||||
|
||||
main.usage=Usage: javadoc [options] [packagenames] [sourcefiles] [@files]\n\
|
||||
\ -overview <file> Read overview documentation from HTML file\n\
|
||||
\ -public Show only public classes and members\n\
|
||||
\ -protected Show protected/public classes and members (default)\n\
|
||||
\ -package Show package/protected/public classes and members\n\
|
||||
\ -private Show all classes and members\n\
|
||||
\ --help Display command line options and exit\n\
|
||||
\ -doclet <class> Generate output via alternate doclet\n\
|
||||
\ -docletpath <path> Specify where to find doclet class files\n\
|
||||
\ --module-source-path <path> Specify where to find input source files for multiple modules\n\
|
||||
\ --upgrade-module-path <path> Override location of upgradeable modules\n\
|
||||
\ --module-path <path>, -p <path> Specify where to find application modules\n\
|
||||
\ --add-modules <module>(,<module>)*\n\
|
||||
\ Root modules to resolve in addition to the initial modules,\n\
|
||||
\ or all modules on the module path if <module> is ALL-MODULE-PATH.\n\
|
||||
\ --limit-modules <module>(,<module>)*\n\
|
||||
\ Limit the universe of observable modules\n\
|
||||
\ --source-path <path> Specify where to find source files\n\
|
||||
\ -sourcepath <path> Specify where to find source files\n\
|
||||
\ --class-path <path> Specify where to find user class files\n\
|
||||
\ -classpath <path> Specify where to find user class files\n\
|
||||
\ -cp <path> Specify where to find user class files\n\
|
||||
\ -exclude <pkglist> Specify a list of packages to exclude\n\
|
||||
\ -subpackages <subpkglist> Specify subpackages to recursively load\n\
|
||||
\ -breakiterator Compute first sentence with BreakIterator\n\
|
||||
\ -bootclasspath <path> Override location of platform class files\n\
|
||||
\ used for non-modular releases\n\
|
||||
\ --system <jdk> Override location of system modules used\n\
|
||||
\ for modular releases.\n\
|
||||
\ -source <release> Provide source compatibility with specified release\n\
|
||||
\ --release <release> Provide source compatibility with specified release\n\
|
||||
\ -extdirs <dirlist> Override location of installed extensions\n\
|
||||
\ -verbose Output messages about what Javadoc is doing\n\
|
||||
\ -locale <name> Locale to be used, e.g. en_US or en_US_WIN\n\
|
||||
\ -encoding <name> Source file encoding name\n\
|
||||
\ -quiet Do not display status messages\n\
|
||||
\ -J<flag> Pass <flag> directly to the runtime system\n\
|
||||
\ -X Print a synopsis of nonstandard options and exit\n
|
||||
|
||||
main.usage.foot=\n\
|
||||
GNU-style options may use '=' instead whitespace to separate the name of an option\n\
|
||||
from its value.\n
|
||||
|
||||
main.Xusage=\
|
||||
\ -Xmaxerrs <number> Set the maximum number of errors to print\n\
|
||||
\ -Xmaxwarns <number> Set the maximum number of warnings to print\n\
|
||||
\ --add-exports <module>/<package>=<other-module>(,<other-module>)*\n\
|
||||
\ Specify a package to be considered as exported from its \n\
|
||||
\ defining module to additional modules, or to all unnamed \n\
|
||||
\ modules if <other-module> is ALL-UNNAMED.\n\
|
||||
\ --add-reads <module>=<other-module>(,<other-module>)*\n\
|
||||
\ Specify additional modules to be considered as required by a\n\
|
||||
\ given module. <other-module> may be ALL-UNNAMED to require\n\
|
||||
\ the unnamed module.\n\
|
||||
\ --patch-module <module>=<file>(:<file>)*\n\
|
||||
\ Override or augment a module with classes and resources\n\
|
||||
\ in JAR files or directories\n
|
||||
|
||||
main.Xusage.foot=\
|
||||
These options are non-standard and subject to change without notice.
|
||||
|
||||
main.option.already.seen=The {0} option may be specified no more than once.
|
||||
main.requires_argument=option {0} requires an argument.
|
||||
main.locale_first=option -locale must be first on the command line.
|
||||
main.invalid_flag=invalid flag: {0}
|
||||
main.No_packages_or_classes_specified=No packages or classes specified.
|
||||
main.incompatible.access.flags=More than one of -public, -private, -package, or -protected specified.
|
||||
main.cant.read=cannot read {0}
|
||||
main.Loading_source_files_for_package=Loading source files for package {0}...
|
||||
main.Loading_source_file=Loading source file {0}...
|
||||
main.Building_tree=Constructing Javadoc information...
|
||||
main.no_source_files_for_package=No source files for package {0}
|
||||
main.fatal.error=fatal error
|
||||
main.fatal.exception=fatal exception
|
||||
main.out.of.memory=java.lang.OutOfMemoryError: Please increase memory.\n\
|
||||
For example, on the JDK Classic or HotSpot VMs, add the option -J-Xmx\n\
|
||||
such as -J-Xmx32m.
|
||||
main.done_in=[done in {0} ms]
|
||||
main.doclet_method_must_be_static=In doclet class {0}, method {1} must be static.
|
||||
main.must_return_int=In doclet class {0}, method {1} must return int.
|
||||
main.must_return_boolean=In doclet class {0}, method {1} must return boolean.
|
||||
main.must_return_languageversion=In doclet class {0}, method {1} must return LanguageVersion.
|
||||
main.more_than_one_doclet_specified_0_and_1=More than one doclet specified ({0} and {1}).
|
||||
main.doclet_class_not_found=Cannot find doclet class {0}
|
||||
main.doclet_method_not_found=Doclet class {0} does not contain a {1} method
|
||||
main.doclet_method_not_accessible=In doclet class {0}, method {1} not accessible
|
||||
main.internal_error_exception_thrown=Internal error: In doclet class {0}, method {1} has thrown an exception {2}
|
||||
main.exception_thrown=In doclet class {0}, method {1} has thrown an exception {2}
|
||||
main.illegal_locale_name=Locale not available: {0}
|
||||
main.malformed_locale_name=Malformed locale name: {0}
|
||||
main.file_not_found=File not found: "{0}"
|
||||
main.file_ignored=File ignored: "{0}" (not yet supported)
|
||||
main.illegal_class_name=Illegal class name: "{0}"
|
||||
main.illegal_package_name=Illegal package name: "{0}"
|
||||
main.release.bootclasspath.conflict=option {0} cannot be used together with -release
|
||||
main.unsupported.release.version=release version {0} not supported
|
||||
main.option.invalid.value={0}
|
||||
tag.illegal_char_in_arr_dim=Tag {0}: Syntax Error in array dimension, method parameters: {1}
|
||||
tag.illegal_see_tag=Tag {0}: Syntax Error in method parameters: {1}
|
||||
tag.missing_comma_space=Tag {0}: Missing comma or space in method parameters: {1}
|
||||
tag.tag_has_no_arguments={0} tag has no arguments.
|
||||
tag.see.missing_sharp=Tag {0}: missing ''#'': "{1}"
|
||||
tag.see.can_not_find_member=Tag {0}: can''t find {1} in {2}
|
||||
tag.see.no_close_bracket_on_url=Tag {0}: missing final ''>'': "{1}"
|
||||
tag.see.no_close_quote=Tag {0}: no final close quote: "{1}"
|
||||
tag.see.class_not_specified=Tag {0}: class not specified: "{1}"
|
||||
tag.see.illegal_character=Tag {0}:illegal character: "{1}" in "{2}"
|
||||
tag.see.malformed_see_tag=Tag {0}: malformed: "{1}"
|
||||
tag.End_delimiter_missing_for_possible_SeeTag=End Delimiter } missing for possible See Tag in comment string: "{0}"
|
||||
tag.Improper_Use_Of_Link_Tag=Missing closing ''}'' character for inline tag: "{0}"
|
||||
tag.serialField.illegal_character=illegal character {0} in @serialField tag: {1}.
|
||||
javadoc.File_Read_Error=Error while reading file {0}
|
||||
javadoc.Body_missing_from_html_file=Body tag missing from HTML file
|
||||
javadoc.End_body_missing_from_html_file=Close body tag missing from HTML file
|
||||
javadoc.Multiple_package_comments=Multiple sources of package comments found for package "{0}"
|
||||
javadoc.JavaScript_in_comment=JavaScript found in documentation comment.\n\
|
||||
Use --allow-script-in-comments to allow use of JavaScript.
|
||||
javadoc.class_not_found=Class {0} not found.
|
||||
javadoc.error=error
|
||||
javadoc.warning=warning
|
||||
|
||||
javadoc.error.msg={0}: error - {1}
|
||||
javadoc.warning.msg={0}: warning - {1}
|
||||
javadoc.note.msg = {1}
|
||||
javadoc.note.pos.msg= {0}: {1}
|
||||
@ -1,100 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2018, 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.
|
||||
#
|
||||
|
||||
main.errors=\u30A8\u30E9\u30FC{0}\u500B
|
||||
main.error=\u30A8\u30E9\u30FC{0}\u500B
|
||||
main.warnings=\u8B66\u544A{0}\u500B
|
||||
main.warning=\u8B66\u544A{0}\u500B
|
||||
|
||||
main.usage=\u4F7F\u7528\u65B9\u6CD5: javadoc [options] [packagenames] [sourcefiles] [@files]\n -overview <file> HTML\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u6982\u8981\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u8AAD\u307F\u8FBC\u3080\n -public public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u306E\u307F\u3092\u793A\u3059\n -protected protected/public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059(\u30C7\u30D5\u30A9\u30EB\u30C8)\n -package package/protected/public\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059\n -private \u3059\u3079\u3066\u306E\u30AF\u30E9\u30B9\u3068\u30E1\u30F3\u30D0\u30FC\u3092\u793A\u3059\n --help \u30B3\u30DE\u30F3\u30C9\u884C\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u8868\u793A\u3057\u3066\u7D42\u4E86\u3059\u308B\n -doclet <class> \u4EE3\u66FFdoclet\u3092\u4ECB\u3057\u3066\u51FA\u529B\u3092\u751F\u6210\u3059\u308B\n -docletpath <path> doclet\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n --module-source-path <path> \u8907\u6570\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u5165\u529B\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n --upgrade-module-path <path> \u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n --module-path <path>\u3001-p <path> \u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n --add-modules <module>(,<module>)*\n \u521D\u671F\u30E2\u30B8\u30E5\u30FC\u30EB\u306B\u52A0\u3048\u3066\u89E3\u6C7A\u3059\u308B\u30EB\u30FC\u30C8\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u307E\u305F\u306F\n <module>\u304CALL-MODULE-PATH\u3067\u3042\u308B\u5834\u5408\u306F\u30E2\u30B8\u30E5\u30FC\u30EB\u30FB\u30D1\u30B9\u306E\u3059\u3079\u3066\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3002\n --limit-modules <module>(,<module>)*\n \u53C2\u7167\u53EF\u80FD\u306A\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u9818\u57DF\u3092\u5236\u9650\u3059\u308B\n --source-path <path> \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -sourcepath <path> \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n --class-path <path> \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -classpath <path> \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -cp <path> \u30E6\u30FC\u30B6\u30FC\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u3042\u308B\u5834\u6240\u3092\u6307\u5B9A\u3059\u308B\n -exclude <pkglist> \u9664\u5916\u3059\u308B\u30D1\u30C3\u30B1\u30FC\u30B8\u30FB\u30EA\u30B9\u30C8\u3092\u6307\u5B9A\u3059\u308B\n -subpackages <subpkglist> \u518D\u5E30\u7684\u306B\u30ED\u30FC\u30C9\u3059\u308B\u30B5\u30D6\u30D1\u30C3\u30B1\u30FC\u30B8\u3092\u6307\u5B9A\u3059\u308B\n -breakiterator BreakIterator\u3067\u6700\u521D\u306E\u6587\u3092\u8A08\u7B97\u3059\u308B\n -bootclasspath <path> \u975E\u30E2\u30B8\u30E5\u30E9\u30FB\u30EA\u30EA\u30FC\u30B9\u3067\u4F7F\u7528\u3055\u308C\u308B\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u30FB\u30AF\u30E9\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\n \
|
||||
\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n --system <jdk> \u30E2\u30B8\u30E5\u30E9\u30FB\u30EA\u30EA\u30FC\u30B9\u3067\u4F7F\u7528\u3055\u308C\u308B\u30B7\u30B9\u30C6\u30E0\u30FB\u30E2\u30B8\u30E5\u30FC\u30EB\n \u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\u3002\n -source <release> \u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u63D0\u4F9B\u3059\u308B\n --release <release> \u6307\u5B9A\u3055\u308C\u305F\u30EA\u30EA\u30FC\u30B9\u3068\u30BD\u30FC\u30B9\u306E\u4E92\u63DB\u6027\u3092\u63D0\u4F9B\u3059\u308B\n -extdirs <dirlist> \u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3055\u308C\u305F\u62E1\u5F35\u6A5F\u80FD\u306E\u5834\u6240\u3092\u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u3059\u308B\n -verbose Javadoc\u306E\u52D5\u4F5C\u306B\u3064\u3044\u3066\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u51FA\u529B\u3059\u308B\n -locale <name> en_US\u3084en_US_WIN\u306A\u3069\u306E\u4F7F\u7528\u3059\u308B\u30ED\u30B1\u30FC\u30EB\n -encoding <name> \u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306E\u30A8\u30F3\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u540D\n -quiet \u72B6\u614B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8868\u793A\u3057\u306A\u3044\n -J<flag> <flag>\u3092\u5B9F\u884C\u6642\u30B7\u30B9\u30C6\u30E0\u306B\u76F4\u63A5\u6E21\u3059\n -X \u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u6982\u8981\u3092\u51FA\u529B\u3057\u7D42\u4E86\u3059\u308B\n
|
||||
|
||||
main.usage.foot=\nGNU\u30B9\u30BF\u30A4\u30EB\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u306F\u3001\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u540D\u524D\u3068\u305D\u306E\u5024\u3092\u533A\u5207\u308B\u305F\u3081\u306B\u7A7A\u767D\u3067\u306F\u306A\u304F'='\u3092\n\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002\n
|
||||
|
||||
main.Xusage=\ -Xmaxerrs <number> \u51FA\u529B\u3059\u308B\u6700\u5927\u30A8\u30E9\u30FC\u6570\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n -Xmaxwarns <number> \u51FA\u529B\u3059\u308B\u6700\u5927\u8B66\u544A\u6570\u3092\u8A2D\u5B9A\u3057\u307E\u3059\n --add-exports <module>/<package>=<other-module>(,<other-module>)*\n \u305D\u306E\u5B9A\u7FA9\u30E2\u30B8\u30E5\u30FC\u30EB\u304B\u3089\u3001\u8FFD\u52A0\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u307E\u305F\u306F<other-module>\u304C \n ALL-UNNAMED\u3067\u3042\u308B\u5834\u5408\u306F\u3059\u3079\u3066\u306E\u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u306B \n \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u6E08\u3068\u307F\u306A\u3055\u308C\u308B\u3088\u3046\u306B\u30D1\u30C3\u30B1\u30FC\u30B8\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002\n --add-reads <module>=<other-module>(,<other-module>)*\n \u6307\u5B9A\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u3067\u5FC5\u9808\u3068\u307F\u306A\u3055\u308C\u308B\u3088\u3046\u306B\u8FFD\u52A0\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002\n \u540D\u524D\u306E\u306A\u3044\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u5FC5\u8981\u3068\u3059\u308B\u5834\u5408\u3001<other-module>\u306FALL-UNNAMED\n \u306B\u3057\u307E\u3059\u3002\n --patch-module <module>=<file>(:<file>)*\n JAR\u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30AF\u30E9\u30B9\u304A\u3088\u3073\u30EA\u30BD\u30FC\u30B9\u3067\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\n \u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u307E\u305F\u306F\u62E1\u5F35\u3057\u307E\u3059\n
|
||||
|
||||
main.Xusage.foot=\u3053\u308C\u3089\u306F\u975E\u6A19\u6E96\u30AA\u30D7\u30B7\u30E7\u30F3\u3067\u3042\u308A\u4E88\u544A\u306A\u3057\u306B\u5909\u66F4\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
|
||||
main.option.already.seen={0}\u30AA\u30D7\u30B7\u30E7\u30F3\u304C\u8907\u6570\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
|
||||
main.requires_argument=\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306B\u306F\u5F15\u6570\u304C\u5FC5\u8981\u3067\u3059\u3002
|
||||
main.locale_first=\u30AA\u30D7\u30B7\u30E7\u30F3-locale\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u306E\u6700\u521D\u306B\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
main.invalid_flag={0}\u306F\u7121\u52B9\u306A\u30D5\u30E9\u30B0\u3067\u3059
|
||||
main.No_packages_or_classes_specified=\u30D1\u30C3\u30B1\u30FC\u30B8\u307E\u305F\u306F\u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002
|
||||
main.incompatible.access.flags=-public\u3001-private\u3001-package\u307E\u305F\u306F-protected\u306E\u3046\u3061\u306E2\u3064\u4EE5\u4E0A\u3092\u6307\u5B9A\u3057\u307E\u3057\u305F\u3002
|
||||
main.cant.read={0}\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093
|
||||
main.Loading_source_files_for_package=\u30D1\u30C3\u30B1\u30FC\u30B8{0}\u306E\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...
|
||||
main.Loading_source_file=\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB{0}\u3092\u8AAD\u307F\u8FBC\u3093\u3067\u3044\u307E\u3059...
|
||||
main.Building_tree=Javadoc\u60C5\u5831\u3092\u69CB\u7BC9\u3057\u3066\u3044\u307E\u3059...
|
||||
main.no_source_files_for_package=\u30D1\u30C3\u30B1\u30FC\u30B8{0}\u306E\u30BD\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
main.fatal.error=\u81F4\u547D\u7684\u30A8\u30E9\u30FC
|
||||
main.fatal.exception=\u81F4\u547D\u7684\u4F8B\u5916
|
||||
main.out.of.memory=java.lang.OutOfMemoryError: \u30E1\u30E2\u30EA\u30FC\u3092\u5897\u3084\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u305F\u3068\u3048\u3070\u3001JDK\u306Eclassic\u3082\u3057\u304F\u306Fhotspot VM\u3067\u306F\u3001-J-Xmx32m\u306E\u3088\u3046\u306B\n-J-Xmx\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
||||
main.done_in=[{0}\u30DF\u30EA\u79D2\u3067\u5B8C\u4E86]
|
||||
main.doclet_method_must_be_static=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fstatic\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
main.must_return_int=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fint\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
main.must_return_boolean=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306Fboolean\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
main.must_return_languageversion=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306FLanguageVersion\u3092\u8FD4\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002
|
||||
main.more_than_one_doclet_specified_0_and_1=\u8907\u6570\u306Edoclet({0}\u3068{1})\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002
|
||||
main.doclet_class_not_found=doclet\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
|
||||
main.doclet_method_not_found=doclet\u30AF\u30E9\u30B9{0}\u306B\u306F\u30E1\u30BD\u30C3\u30C9{1}\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
main.doclet_method_not_accessible=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093
|
||||
main.internal_error_exception_thrown=doclet\u30AF\u30E9\u30B9{0}\u306E\u5185\u90E8\u30A8\u30E9\u30FC\u3067\u3059\u3002\u30E1\u30BD\u30C3\u30C9{1}\u306F\u4F8B\u5916{2}\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F
|
||||
main.exception_thrown=doclet\u30AF\u30E9\u30B9{0}\u3067\u306F\u3001\u30E1\u30BD\u30C3\u30C9{1}\u306F\u4F8B\u5916{2}\u3092\u30B9\u30ED\u30FC\u3057\u307E\u3057\u305F
|
||||
main.illegal_locale_name=\u30ED\u30B1\u30FC\u30EB{0}\u304C\u7121\u52B9\u3067\u3059
|
||||
main.malformed_locale_name=\u30ED\u30B1\u30FC\u30EB\u540D{0}\u306E\u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093
|
||||
main.file_not_found=\u30D5\u30A1\u30A4\u30EB"{0}"\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
|
||||
main.file_ignored=\u30D5\u30A1\u30A4\u30EB\u306F\u7121\u8996\u3055\u308C\u307E\u3057\u305F: "{0}" (\u307E\u3060\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093)
|
||||
main.illegal_class_name=\u30AF\u30E9\u30B9\u540D\u304C\u4E0D\u6B63\u3067\u3059: "{0}"
|
||||
main.illegal_package_name=\u30D1\u30C3\u30B1\u30FC\u30B8\u540D"{0}"\u306F\u4E0D\u6B63\u3067\u3059
|
||||
main.release.bootclasspath.conflict=\u30AA\u30D7\u30B7\u30E7\u30F3{0}\u306F-release\u3068\u4E00\u7DD2\u306B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093
|
||||
main.unsupported.release.version=\u30EA\u30EA\u30FC\u30B9\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3{0}\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093
|
||||
main.option.invalid.value={0}
|
||||
tag.illegal_char_in_arr_dim=\u30BF\u30B0{0}: \u914D\u5217\u306E\u5927\u304D\u3055\u3001\u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u69CB\u6587\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059
|
||||
tag.illegal_see_tag=\u30BF\u30B0{0}: \u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u69CB\u6587\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059
|
||||
tag.missing_comma_space=\u30BF\u30B0{0}: \u30E1\u30BD\u30C3\u30C9\u30FB\u30D1\u30E9\u30E1\u30FC\u30BF{1}\u306B\u30AB\u30F3\u30DE\u307E\u305F\u306F\u7A7A\u767D\u6587\u5B57\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
tag.tag_has_no_arguments={0}\u30BF\u30B0\u306B\u5F15\u6570\u304C\u3042\u308A\u307E\u305B\u3093\u3002
|
||||
tag.see.missing_sharp=\u30BF\u30B0{0}: ''#''\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
|
||||
tag.see.can_not_find_member=\u30BF\u30B0{0}: {2}\u3067{1}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093
|
||||
tag.see.no_close_bracket_on_url=\u30BF\u30B0{0}: \u9589\u3058\u30BF\u30B0''>''\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
|
||||
tag.see.no_close_quote=\u30BF\u30B0{0}: \u9589\u3058\u5F15\u7528\u7B26\u304C\u3042\u308A\u307E\u305B\u3093: "{1}"
|
||||
tag.see.class_not_specified=\u30BF\u30B0{0}: \u30AF\u30E9\u30B9\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093: "{1}"
|
||||
tag.see.illegal_character=\u30BF\u30B0{0}: "{2}"\u306B\u4E0D\u6B63\u306A\u6587\u5B57"{1}"\u304C\u3042\u308A\u307E\u3059
|
||||
tag.see.malformed_see_tag=\u30BF\u30B0{0}: \u66F8\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093: "{1}"
|
||||
tag.End_delimiter_missing_for_possible_SeeTag=\u30B3\u30E1\u30F3\u30C8\u6587\u5B57\u5217"{0}"\u3067\u3001\u6709\u52B9\u306Asee\u30BF\u30B0\u306B\u7D42\u7AEF\u30C7\u30EA\u30DF\u30BF}\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
tag.Improper_Use_Of_Link_Tag=\u30A4\u30F3\u30E9\u30A4\u30F3\u30FB\u30BF\u30B0"{0}"\u306B\u7D42\u4E86\u6587\u5B57''}''\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
tag.serialField.illegal_character=@serialField\u30BF\u30B0\u306B\u4E0D\u6B63\u306A\u6587\u5B57{0}\u304C\u3042\u308A\u307E\u3059: {1}\u3002
|
||||
javadoc.File_Read_Error=\u30D5\u30A1\u30A4\u30EB{0}\u306E\u8AAD\u8FBC\u307F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F
|
||||
javadoc.Body_missing_from_html_file=HTML\u306Bbody\u30BF\u30B0\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
javadoc.End_body_missing_from_html_file=HTML\u30D5\u30A1\u30A4\u30EB\u306Bbody\u306E\u9589\u3058\u30BF\u30B0\u304C\u3042\u308A\u307E\u305B\u3093
|
||||
javadoc.Multiple_package_comments=\u30D1\u30C3\u30B1\u30FC\u30B8"{0}"\u306B\u8907\u6570\u306E\u30D1\u30C3\u30B1\u30FC\u30B8\u30FB\u30B3\u30E1\u30F3\u30C8\u306E\u30BD\u30FC\u30B9\u304C\u691C\u51FA\u3055\u308C\u307E\u3057\u305F
|
||||
javadoc.JavaScript_in_comment=\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u306BJavaScript\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002\n--allow-script-in-comments\u3092\u4F7F\u7528\u3057\u3066\u3001JavaScript\u306E\u4F7F\u7528\u3092\u8A31\u53EF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
||||
javadoc.class_not_found=\u30AF\u30E9\u30B9{0}\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002
|
||||
javadoc.error=\u30A8\u30E9\u30FC
|
||||
javadoc.warning=\u8B66\u544A
|
||||
|
||||
javadoc.error.msg={0}: \u30A8\u30E9\u30FC - {1}
|
||||
javadoc.warning.msg={0}: \u8B66\u544A - {1}
|
||||
javadoc.note.msg = {1}
|
||||
javadoc.note.pos.msg= {0}: {1}
|
||||
@ -1,100 +0,0 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2018, 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.
|
||||
#
|
||||
|
||||
main.errors={0} \u4E2A\u9519\u8BEF
|
||||
main.error={0} \u4E2A\u9519\u8BEF
|
||||
main.warnings={0} \u4E2A\u8B66\u544A
|
||||
main.warning={0} \u4E2A\u8B66\u544A
|
||||
|
||||
main.usage=\u7528\u6CD5\uFF1Ajavadoc [\u9009\u9879] [\u7A0B\u5E8F\u5305\u540D\u79F0] [\u6E90\u6587\u4EF6] [@files]\n -overview <\u6587\u4EF6> \u4ECE HTML \u6587\u4EF6\u8BFB\u53D6\u6982\u89C8\u6587\u6863\n -public \u4EC5\u663E\u793A\u516C\u5171\u7C7B\u548C\u6210\u5458\n -protected \u663E\u793A\u53D7\u4FDD\u62A4/\u516C\u5171\u7C7B\u548C\u6210\u5458\uFF08\u9ED8\u8BA4\u503C\uFF09\n -package \u663E\u793A\u7A0B\u5E8F\u5305/\u53D7\u4FDD\u62A4/\u516C\u5171\u7C7B\u548C\u6210\u5458\n -private \u663E\u793A\u6240\u6709\u7C7B\u548C\u6210\u5458\n --help \u663E\u793A\u547D\u4EE4\u884C\u9009\u9879\u5E76\u9000\u51FA\n -doclet <\u7C7B> \u901A\u8FC7\u66FF\u4EE3 doclet \u751F\u6210\u8F93\u51FA\n -docletpath <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E doclet \u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n --module-source-path <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u591A\u4E2A\u6A21\u5757\u7684\u8F93\u5165\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n --upgrade-module-path <\u8DEF\u5F84> \u8986\u76D6\u53EF\u5347\u7EA7\u6A21\u5757\u4F4D\u7F6E\n --module-path <\u8DEF\u5F84>, -p <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u5E94\u7528\u7A0B\u5E8F\u6A21\u5757\u7684\u4F4D\u7F6E\n --add-modules <\u6A21\u5757>(,<\u6A21\u5757>)*\n \u9664\u4E86\u521D\u59CB\u6A21\u5757\u4E4B\u5916\u8981\u89E3\u6790\u7684\u6839\u6A21\u5757\uFF0C\n \u5982\u679C <\u6A21\u5757>\u4E3A ALL-MODULE-PATH\uFF0C\u5219\u4E3A\u6A21\u5757\u8DEF\u5F84\u4E2D\u7684\u6240\u6709\u6A21\u5757\u3002\n --limit-modules <\u6A21\u5757>(,<\u6A21\u5757>)*\n \u9650\u5236\u53EF\u89C2\u5BDF\u6A21\u5757\u7684\u9886\u57DF\n --source-path <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n -sourcepath <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u6E90\u6587\u4EF6\u7684\u4F4D\u7F6E\n --class-path <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -classpath <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -cp <\u8DEF\u5F84> \u6307\u5B9A\u67E5\u627E\u7528\u6237\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n -exclude <\u7A0B\u5E8F\u5305\u5217\u8868> \u6307\u5B9A\u8981\u6392\u9664\u7684\u7A0B\u5E8F\u5305\u5217\u8868\n -subpackages <\u7A0B\u5E8F\u5305\u5217\u8868> \u6307\u5B9A\u8981\u9012\u5F52\u52A0\u8F7D\u7684\u5B50\u7A0B\u5E8F\u5305\n -breakiterator \u8BA1\u7B97\u5E26\u6709 BreakIterator \u7684\u7B2C\u4E00\u4E2A\u8BED\u53E5\n -bootclasspath <\u8DEF\u5F84> \u8986\u76D6\u7528\u4E8E\u975E\u6A21\u5757\u5316\u53D1\u884C\u7248\u7684\n \u5E73\u53F0\u7C7B\u6587\u4EF6\u7684\u4F4D\u7F6E\n --system <jdk> \u8986\u76D6\u7528\u4E8E\u6A21\u5757\u5316\u53D1\u884C\u7248\u7684\n \u7CFB\u7EDF\u6A21\u5757\u7684\u4F4D\u7F6E\u3002\n -source <\u53D1\u884C\u7248> \u63D0\u4F9B\u4E0E\u6307\u5B9A\u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\n --release <\u53D1\u884C\u7248> \u63D0\u4F9B\u4E0E\u6307\u5B9A\u53D1\u884C\u7248\u7684\u6E90\u517C\u5BB9\u6027\n -extdirs <\u76EE\u5F55\u5217\u8868> \u8986\u76D6\u6240\u5B89\u88C5\u6269\u5C55\u7684\u4F4D\u7F6E\n -verbose \u8F93\u51FA\u6709\u5173 Javadoc \u6B63\u5728\u6267\u884C\u7684\u64CD\u4F5C\u7684\u6D88\u606F\n -locale <\u540D\u79F0> \u8981\u4F7F\u7528\u7684\u533A\u57DF\u8BBE\u7F6E\uFF0C\u4F8B\u5982 en_US \u6216 en_US_WIN\n -encoding <\u540D\u79F0> \u6E90\u6587\u4EF6\u7F16\u7801\u540D\u79F0\n -quiet \u4E0D\u663E\u793A\u72B6\u6001\u6D88\u606F\n -J<\u6807\u8BB0> \
|
||||
\u76F4\u63A5\u5C06 <\u6807\u8BB0> \u4F20\u9012\u5230\u8FD0\u884C\u65F6\u7CFB\u7EDF\n -X \u8F93\u51FA\u975E\u6807\u51C6\u9009\u9879\u7684\u63D0\u8981\u5E76\u9000\u51FA\n
|
||||
|
||||
main.usage.foot=\nGNU \u6837\u5F0F\u7684\u9009\u9879\u53EF\u4F7F\u7528 '=' (\u800C\u975E\u7A7A\u767D) \u6765\u5206\u9694\u9009\u9879\u540D\u79F0\n\u53CA\u5176\u503C\u3002\n
|
||||
|
||||
main.Xusage=\ -Xmaxerrs <\u6570\u5B57> \u8BBE\u7F6E\u8981\u8F93\u51FA\u7684\u9519\u8BEF\u7684\u6700\u5927\u6570\u76EE\n -Xmaxwarns <\u6570\u5B57> \u8BBE\u7F6E\u8981\u8F93\u51FA\u7684\u8B66\u544A\u7684\u6700\u5927\u6570\u76EE\n --add-exports <\u6A21\u5757>/<\u7A0B\u5E8F\u5305>=<\u5176\u4ED6\u6A21\u5757>(,<\u5176\u4ED6\u6A21\u5757>)*\n \u6307\u5B9A\u5C06\u7A0B\u5E8F\u5305\u89C6\u4E3A\u4ECE\u5176\u5B9A\u4E49\u6A21\u5757\u5BFC\u51FA\u5230\u5176\u4ED6\u6A21\u5757, \n \u5982\u679C <\u5176\u4ED6\u6A21\u5757> \u4E3A ALL-UNNAMED, \u5219\u89C6\u4E3A \n \u5BFC\u51FA\u5230\u6240\u6709\u672A\u547D\u540D\u6A21\u5757\u3002\n --add-reads <\u6A21\u5757>=<\u5176\u4ED6\u6A21\u5757>(,<\u5176\u4ED6\u6A21\u5757>)*\n \u6307\u5B9A\u88AB\u89C6\u4E3A\u7ED9\u5B9A\u6A21\u5757\u9700\u8981\u7684\u5176\u4ED6\u6A21\u5757\u3002\n <\u5176\u4ED6\u6A21\u5757> \u53EF\u4EE5\u4E3A ALL-UNNAMED \u4EE5\u4FBF\u8981\u6C42\n \u672A\u547D\u540D\u6A21\u5757\u3002\n --patch-module <\u6A21\u5757>=<\u6587\u4EF6>(:<\u6587\u4EF6>)*\n \u4F7F\u7528 JAR \u6587\u4EF6\u6216\u76EE\u5F55\u4E2D\u7684\u7C7B\u548C\u8D44\u6E90\n \u8986\u76D6\u6216\u589E\u5F3A\u6A21\u5757\n
|
||||
|
||||
main.Xusage.foot=\u8FD9\u4E9B\u9009\u9879\u90FD\u662F\u975E\u6807\u51C6\u9009\u9879, \u5982\u6709\u66F4\u6539, \u6055\u4E0D\u53E6\u884C\u901A\u77E5\u3002
|
||||
|
||||
main.option.already.seen={0}\u9009\u9879\u53EA\u80FD\u6307\u5B9A\u4E00\u6B21\u3002
|
||||
main.requires_argument=\u9009\u9879{0}\u9700\u8981\u53C2\u6570\u3002
|
||||
main.locale_first=\u5728\u547D\u4EE4\u884C\u4E2D, \u9009\u9879 -locale \u5FC5\u987B\u4E3A\u7B2C\u4E00\u4E2A\u9009\u9879\u3002
|
||||
main.invalid_flag=\u65E0\u6548\u7684\u6807\u8BB0: {0}
|
||||
main.No_packages_or_classes_specified=\u672A\u6307\u5B9A\u7A0B\u5E8F\u5305\u6216\u7C7B\u3002
|
||||
main.incompatible.access.flags=\u6307\u5B9A\u4E86\u591A\u4E2A -public, -private, -package \u6216 -protected\u3002
|
||||
main.cant.read=\u65E0\u6CD5\u8BFB\u53D6{0}
|
||||
main.Loading_source_files_for_package=\u6B63\u5728\u52A0\u8F7D\u7A0B\u5E8F\u5305{0}\u7684\u6E90\u6587\u4EF6...
|
||||
main.Loading_source_file=\u6B63\u5728\u52A0\u8F7D\u6E90\u6587\u4EF6{0}...
|
||||
main.Building_tree=\u6B63\u5728\u6784\u9020 Javadoc \u4FE1\u606F...
|
||||
main.no_source_files_for_package=\u6CA1\u6709\u7A0B\u5E8F\u5305{0}\u7684\u6E90\u6587\u4EF6
|
||||
main.fatal.error=\u81F4\u547D\u9519\u8BEF
|
||||
main.fatal.exception=\u81F4\u547D\u5F02\u5E38\u9519\u8BEF
|
||||
main.out.of.memory=java.lang.OutOfMemoryError: \u8BF7\u589E\u5927\u5185\u5B58\u3002\n\u4F8B\u5982, \u5BF9\u4E8E JDK \u7ECF\u5178\u6216 HotSpot VM, \u8BF7\u589E\u5927\u9009\u9879 -J-Xmx,\n\u4F8B\u5982 -J-Xmx32m\u3002
|
||||
main.done_in=[\u5728 {0} \u6BEB\u79D2\u5185\u5B8C\u6210]
|
||||
main.doclet_method_must_be_static=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u4E3A\u9759\u6001\u3002
|
||||
main.must_return_int=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u6574\u578B\u503C\u3002
|
||||
main.must_return_boolean=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u5E03\u5C14\u503C\u3002
|
||||
main.must_return_languageversion=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5FC5\u987B\u8FD4\u56DE\u8BED\u8A00\u7248\u672C\u3002
|
||||
main.more_than_one_doclet_specified_0_and_1=\u6307\u5B9A\u4E86\u591A\u4E2A doclet ({0}\u548C{1})\u3002
|
||||
main.doclet_class_not_found=\u627E\u4E0D\u5230 doclet \u7C7B{0}
|
||||
main.doclet_method_not_found=doclet \u7C7B{0}\u4E0D\u5305\u542B{1}\u65B9\u6CD5
|
||||
main.doclet_method_not_accessible=\u5728 doclet \u7C7B{0}\u4E2D, \u65E0\u6CD5\u8BBF\u95EE\u65B9\u6CD5{1}
|
||||
main.internal_error_exception_thrown=\u5185\u90E8\u9519\u8BEF: \u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5DF2\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{2}
|
||||
main.exception_thrown=\u5728 doclet \u7C7B{0}\u4E2D, \u65B9\u6CD5{1}\u5DF2\u629B\u51FA\u5F02\u5E38\u9519\u8BEF{2}
|
||||
main.illegal_locale_name=\u8BED\u8A00\u73AF\u5883\u4E0D\u53EF\u7528: {0}
|
||||
main.malformed_locale_name=\u683C\u5F0F\u9519\u8BEF\u7684\u8BED\u8A00\u73AF\u5883\u540D\u79F0: {0}
|
||||
main.file_not_found=\u627E\u4E0D\u5230\u6587\u4EF6: "{0}"
|
||||
main.file_ignored=\u5DF2\u5FFD\u7565\u6587\u4EF6: "{0}" (\u5C1A\u4E0D\u652F\u6301)
|
||||
main.illegal_class_name=\u975E\u6CD5\u7C7B\u540D: "{0}"
|
||||
main.illegal_package_name=\u975E\u6CD5\u7684\u7A0B\u5E8F\u5305\u540D\u79F0: "{0}"
|
||||
main.release.bootclasspath.conflict=\u9009\u9879{0}\u65E0\u6CD5\u4E0E -release \u4E00\u8D77\u4F7F\u7528
|
||||
main.unsupported.release.version=\u4E0D\u652F\u6301\u53D1\u884C\u7248\u672C {0}
|
||||
main.option.invalid.value={0}
|
||||
tag.illegal_char_in_arr_dim=\u6807\u8BB0{0}: \u6570\u7EC4\u7EF4\u4E2D\u6709\u8BED\u6CD5\u9519\u8BEF, \u65B9\u6CD5\u53C2\u6570: {1}
|
||||
tag.illegal_see_tag=\u6807\u8BB0{0}: \u65B9\u6CD5\u53C2\u6570\u4E2D\u6709\u8BED\u6CD5\u9519\u8BEF: {1}
|
||||
tag.missing_comma_space=\u6807\u8BB0{0}: \u65B9\u6CD5\u53C2\u6570\u4E2D\u7F3A\u5C11\u9017\u53F7\u6216\u7A7A\u683C: {1}
|
||||
tag.tag_has_no_arguments={0} \u6807\u8BB0\u6CA1\u6709\u53C2\u6570\u3002
|
||||
tag.see.missing_sharp=\u6807\u8BB0{0}: \u7F3A\u5C11 ''#'': "{1}"
|
||||
tag.see.can_not_find_member=\u6807\u8BB0{0}: \u5728{2}\u4E2D\u627E\u4E0D\u5230{1}
|
||||
tag.see.no_close_bracket_on_url=\u6807\u8BB0{0}: \u7F3A\u5C11\u6700\u540E\u7684 ''>'': "{1}"
|
||||
tag.see.no_close_quote=\u6807\u8BB0{0}: \u65E0\u53F3\u5F15\u53F7: "{1}"
|
||||
tag.see.class_not_specified=\u6807\u8BB0{0}: \u672A\u6307\u5B9A\u7C7B: "{1}"
|
||||
tag.see.illegal_character=\u6807\u8BB0{0}: "{2}" \u4E2D\u7684 "{1}" \u4E3A\u975E\u6CD5\u5B57\u7B26
|
||||
tag.see.malformed_see_tag=\u6807\u8BB0{0}: \u683C\u5F0F\u9519\u8BEF: "{1}"
|
||||
tag.End_delimiter_missing_for_possible_SeeTag=\u6CE8\u91CA\u5B57\u7B26\u4E32\u4E2D\u53EF\u80FD\u51FA\u73B0\u7684 See \u6807\u8BB0\u7F3A\u5C11\u7ED3\u675F\u5206\u9694\u7B26 }: "{0}"
|
||||
tag.Improper_Use_Of_Link_Tag=\u5185\u5D4C\u6807\u8BB0\u7F3A\u5C11\u7ED3\u675F ''}'' \u5B57\u7B26: "{0}"
|
||||
tag.serialField.illegal_character=@serialField \u6807\u8BB0\u4E2D\u7684\u975E\u6CD5\u5B57\u7B26 {0}: {1}\u3002
|
||||
javadoc.File_Read_Error=\u8BFB\u53D6\u6587\u4EF6{0}\u65F6\u51FA\u9519
|
||||
javadoc.Body_missing_from_html_file=HTML \u6587\u4EF6\u4E2D\u7F3A\u5C11\u4E3B\u4F53\u6807\u8BB0
|
||||
javadoc.End_body_missing_from_html_file=HTML \u6587\u4EF6\u4E2D\u7F3A\u5C11\u4E3B\u4F53\u7ED3\u675F\u6807\u8BB0
|
||||
javadoc.Multiple_package_comments=\u627E\u5230\u7A0B\u5E8F\u5305 "{0}" \u7684\u591A\u4E2A\u7A0B\u5E8F\u5305\u6CE8\u91CA\u6E90
|
||||
javadoc.JavaScript_in_comment=\u6587\u6863\u6CE8\u91CA\u4E2D\u53D1\u73B0 JavaScript\u3002\n\u4F7F\u7528 --allow-script-in-comments \u53EF\u5141\u8BB8\u4F7F\u7528 JavaScript\u3002
|
||||
javadoc.class_not_found=\u627E\u4E0D\u5230\u7C7B{0}\u3002
|
||||
javadoc.error=\u9519\u8BEF
|
||||
javadoc.warning=\u8B66\u544A
|
||||
|
||||
javadoc.error.msg={0}: \u9519\u8BEF - {1}
|
||||
javadoc.warning.msg={0}: \u8B66\u544A - {1}
|
||||
javadoc.note.msg = {1}
|
||||
javadoc.note.pos.msg= {0}: {1}
|
||||
@ -1652,7 +1652,7 @@ public class HtmlDocletWriter {
|
||||
* If this link appeared in the index, we would redirect
|
||||
* the link like this:
|
||||
*
|
||||
* {@literal <a href="./com/sun/javadoc/package-summary.html">The package Page</a>}
|
||||
* {@literal <a href="./jdk/javadoc/doclet/package-summary.html">The package Page</a>}
|
||||
*
|
||||
* @param element the Element object whose documentation is being written.
|
||||
* @param tt the text being written.
|
||||
|
||||
@ -35,16 +35,6 @@
|
||||
* while doclets provide a user-selectable backend for determining
|
||||
* how to process the documentation comments.
|
||||
*
|
||||
* <p><em>Historical Note:</em> Prior to the introduction of the
|
||||
* {@link javax.lang.model Language Model API} in JDK 6, it was
|
||||
* not unusual to use the {@link com.sun.javadoc} API as a
|
||||
* modeling API. But the Language Model API, and associated
|
||||
* {@link javax.annotation.processing Annotation Processing API}
|
||||
* provided a better way to model programs, and in JDK 9,
|
||||
* javadoc itself was converted to using the Language Model API,
|
||||
* with the {@code com.sun.javadoc API} being deprecated for
|
||||
* eventual removal.
|
||||
* </p>
|
||||
*
|
||||
* <p><b>This is NOT part of any supported API.
|
||||
* If you write code that depends on this, you do so at your own risk.
|
||||
|
||||
@ -408,23 +408,8 @@ public class Start extends ToolOption.Helper {
|
||||
return ERROR;
|
||||
}
|
||||
} else {
|
||||
if (apiMode) {
|
||||
com.sun.tools.javadoc.main.Start ostart
|
||||
= new com.sun.tools.javadoc.main.Start(context);
|
||||
return ostart.begin(docletClass, options, fileObjects)
|
||||
? OK
|
||||
: ERROR;
|
||||
}
|
||||
warn("main.legacy_api");
|
||||
String[] array = options.toArray(new String[options.size()]);
|
||||
int rc = com.sun.tools.javadoc.Main.execute(
|
||||
messager.programName,
|
||||
messager.getWriter(WriterKind.ERROR),
|
||||
messager.getWriter(WriterKind.WARNING),
|
||||
messager.getWriter(WriterKind.NOTICE),
|
||||
docletClass.getName(),
|
||||
array);
|
||||
return (rc == 0) ? OK : ERROR;
|
||||
error("main.not_a_doclet", docletClass.getName());
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
Result result = OK;
|
||||
|
||||
@ -299,12 +299,9 @@ doclet.internal.report.bug=\
|
||||
Please file a bug against the javadoc tool via the Java bug reporting page\n\
|
||||
(http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com)\n\
|
||||
for duplicates. Include error messages and the following diagnostic in your report. Thank you.
|
||||
main.legacy_api=The old Doclet and Taglet APIs in the packages\n\
|
||||
com.sun.javadoc, com.sun.tools.doclets and their implementations\n\
|
||||
are planned to be removed in a future JDK release. These\n\
|
||||
components have been superseded by the new APIs in jdk.javadoc.doclet.\n\
|
||||
Users are strongly recommended to migrate to the new APIs.\n
|
||||
|
||||
main.not_a_doclet=\
|
||||
Class {0} is not a valid doclet.\n\
|
||||
Note: As of JDK 13, the com.sun.javadoc API is no longer supported.
|
||||
javadoc.class_not_found=Class {0} not found.
|
||||
javadoc.error=error
|
||||
javadoc.warning=warning
|
||||
|
||||
@ -63,9 +63,6 @@ module jdk.javadoc {
|
||||
requires transitive java.compiler;
|
||||
requires transitive jdk.compiler;
|
||||
|
||||
exports com.sun.javadoc;
|
||||
exports com.sun.tools.javadoc;
|
||||
|
||||
exports jdk.javadoc.doclet;
|
||||
|
||||
provides java.util.spi.ToolProvider with
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2019, 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
|
||||
@ -29,7 +29,7 @@
|
||||
* @modules jdk.compiler/com.sun.tools.javac.main
|
||||
* @modules jdk.javadoc/jdk.javadoc.internal.api
|
||||
* @modules jdk.javadoc/jdk.javadoc.internal.tool
|
||||
* @library /tools/lib /tools/javadoc/lib
|
||||
* @library /tools/lib
|
||||
* @build toolbox.JavacTask toolbox.JavadocTask toolbox.TestRunner toolbox.ToolBox
|
||||
* @run main EncodingTest
|
||||
*/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2019, 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
|
||||
@ -36,13 +36,11 @@ import java.nio.file.Path;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.lang.model.element.Element;
|
||||
|
||||
import com.sun.javadoc.Tag;
|
||||
import com.sun.source.doctree.DocTree;
|
||||
|
||||
import toolbox.*;
|
||||
@ -76,9 +74,6 @@ public class EnsureNewOldDoclet extends TestRunner {
|
||||
final static String NEW_DOCLET_MARKER = "NEW_DOCLET_MARKER";
|
||||
final static String NEW_TAGLET_MARKER = "Registered Taglet " + CLASS_NAME + "\\$NewTaglet";
|
||||
|
||||
final static Pattern WARN_TEXT = Pattern.compile("Users are strongly recommended to migrate" +
|
||||
" to the new APIs.");
|
||||
|
||||
final static String NEW_STDDOCLET = "jdk.javadoc.doclet.StandardDoclet";
|
||||
|
||||
|
||||
@ -118,23 +113,6 @@ public class EnsureNewOldDoclet extends TestRunner {
|
||||
checkOutput(testName, out, NEW_HEADER);
|
||||
}
|
||||
|
||||
// input: old doclet
|
||||
// outcome: old tool
|
||||
@Test
|
||||
public void testOldDoclet() throws Exception {
|
||||
setArgs("-classpath", ".", // ambient classpath insulation
|
||||
"-doclet",
|
||||
OLD_DOCLET_CLASS_NAME,
|
||||
"-docletpath",
|
||||
testClasses,
|
||||
testSrc.toString());
|
||||
Task.Result tr = task.run(Task.Expect.SUCCESS);
|
||||
List<String> out = tr.getOutputLines(Task.OutputKind.STDOUT);
|
||||
List<String> err = tr.getOutputLines(Task.OutputKind.STDERR);
|
||||
checkOutput(testName, out, OLD_DOCLET_MARKER);
|
||||
checkOutput(testName, err, WARN_TEXT);
|
||||
}
|
||||
|
||||
// input: new doclet and new taglet
|
||||
// outcome: new doclet and new taglet should register
|
||||
@Test
|
||||
@ -175,13 +153,6 @@ public class EnsureNewOldDoclet extends TestRunner {
|
||||
throw new Exception(testCase + ": Expected string not found: " + toFind);
|
||||
}
|
||||
|
||||
public static class OldDoclet extends com.sun.javadoc.Doclet {
|
||||
public static boolean start(com.sun.javadoc.RootDoc root) {
|
||||
System.out.println(OLD_DOCLET_MARKER);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public static class NewTaglet implements jdk.javadoc.doclet.Taglet {
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,163 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6493690
|
||||
* @summary javadoc should have a javax.tools.Tool service provider
|
||||
* @modules jdk.javadoc
|
||||
* @build APITest
|
||||
* @run main GetTask_DocletClassTest
|
||||
* @key randomness
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Random;
|
||||
import javax.tools.DocumentationTool;
|
||||
import javax.tools.DocumentationTool.DocumentationTask;
|
||||
import javax.tools.JavaFileObject;
|
||||
import javax.tools.StandardJavaFileManager;
|
||||
import javax.tools.ToolProvider;
|
||||
|
||||
import com.sun.javadoc.DocErrorReporter;
|
||||
import com.sun.javadoc.LanguageVersion;
|
||||
import com.sun.javadoc.RootDoc;
|
||||
|
||||
/**
|
||||
* Tests for DocumentationTool.getTask docletClass parameter.
|
||||
*/
|
||||
public class GetTask_DocletClassTest extends APITest {
|
||||
public static void main(String... args) throws Exception {
|
||||
new GetTask_DocletClassTest().run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that an alternate doclet can be specified.
|
||||
*
|
||||
* There is no standard interface or superclass for a doclet;
|
||||
* the only requirement is that it provides static methods that
|
||||
* can be invoked via reflection. So, for now, the doclet is
|
||||
* specified as a class.
|
||||
* Because we cannot create and use a unique instance of the class,
|
||||
* we verify that the doclet has been called by having it record
|
||||
* (in a static field!) the comment from the last time it was invoked,
|
||||
* which is randomly generated each time the test is run.
|
||||
*/
|
||||
@Test
|
||||
public void testDoclet() throws Exception {
|
||||
Random r = new Random();
|
||||
int key = r.nextInt();
|
||||
JavaFileObject srcFile = createSimpleJavaFileObject(
|
||||
"pkg/C",
|
||||
"package pkg; /** " + key + "*/ public class C { }");
|
||||
DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
|
||||
try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
|
||||
File outDir = getOutDir();
|
||||
fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
|
||||
Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
|
||||
DocumentationTask t = tool.getTask(null, fm, null, TestDoclet.class, null, files);
|
||||
if (t.call()) {
|
||||
System.err.println("task succeeded");
|
||||
if (TestDoclet.lastCaller.equals(String.valueOf(key)))
|
||||
System.err.println("found expected key: " + key);
|
||||
else
|
||||
error("Expected key not found");
|
||||
checkFiles(outDir, Collections.<String>emptySet());
|
||||
} else {
|
||||
throw new Exception("task failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class TestDoclet {
|
||||
static String lastCaller;
|
||||
public static boolean start(RootDoc root) {
|
||||
lastCaller = root.classNamed("pkg.C").commentText().trim();
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int optionLength(String option) {
|
||||
return 0; // default is option unknown
|
||||
}
|
||||
|
||||
public static boolean validOptions(String options[][],
|
||||
DocErrorReporter reporter) {
|
||||
return true; // default is options are valid
|
||||
}
|
||||
|
||||
public static LanguageVersion languageVersion() {
|
||||
return LanguageVersion.JAVA_1_1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that exceptions from a doclet are thrown as expected.
|
||||
*/
|
||||
@Test
|
||||
public void testBadDoclet() throws Exception {
|
||||
JavaFileObject srcFile = createSimpleJavaFileObject();
|
||||
DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
|
||||
try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) {
|
||||
File outDir = getOutDir();
|
||||
fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir));
|
||||
Iterable<? extends JavaFileObject> files = Arrays.asList(srcFile);
|
||||
DocumentationTask t = tool.getTask(null, fm, null, BadDoclet.class, null, files);
|
||||
try {
|
||||
t.call();
|
||||
error("call completed without exception");
|
||||
} catch (RuntimeException e) {
|
||||
e.printStackTrace();
|
||||
Throwable c = e.getCause();
|
||||
if (c.getClass() == UnexpectedError.class)
|
||||
System.err.println("exception caught as expected: " + c);
|
||||
else
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class UnexpectedError extends Error { }
|
||||
|
||||
public static class BadDoclet {
|
||||
public static boolean start(RootDoc root) {
|
||||
throw new UnexpectedError();
|
||||
}
|
||||
|
||||
public static int optionLength(String option) {
|
||||
return 0; // default is option unknown
|
||||
}
|
||||
|
||||
public static boolean validOptions(String options[][],
|
||||
DocErrorReporter reporter) {
|
||||
return true; // default is options are valid
|
||||
}
|
||||
|
||||
public static LanguageVersion languageVersion() {
|
||||
return LanguageVersion.JAVA_1_1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
|
||||
super public class OldDoclet
|
||||
extends com/sun/javadoc/Doclet
|
||||
version 55:0
|
||||
{
|
||||
|
||||
|
||||
public Method "<init>":"()V"
|
||||
stack 1 locals 1
|
||||
{
|
||||
aload_0;
|
||||
invokespecial Method com/sun/javadoc/Doclet."<init>":"()V";
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
public static Method start:"(Lcom/sun/javadoc/RootDoc;)Z"
|
||||
stack 2 locals 1
|
||||
{
|
||||
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
|
||||
ldc String "OLD_DOCLET_MARKER";
|
||||
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
|
||||
iconst_1;
|
||||
ireturn;
|
||||
|
||||
}
|
||||
|
||||
} // end Class OldDoclet
|
||||
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (c) 2019, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8215584
|
||||
* @summary Remove support for the "old" doclet API in com/sun/javadoc
|
||||
* @library /tools/lib ../../lib
|
||||
* @modules jdk.javadoc/jdk.javadoc.internal.tool
|
||||
* @build javadoc.tester.* toolbox.ToolBox builder.ClassBuilder
|
||||
* @compile OldDoclet.jasm
|
||||
* @run main RemoveOldDoclet
|
||||
*/
|
||||
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import builder.ClassBuilder;
|
||||
import toolbox.ToolBox;
|
||||
|
||||
import javadoc.tester.JavadocTester;
|
||||
|
||||
public class RemoveOldDoclet extends JavadocTester {
|
||||
|
||||
final ToolBox tb;
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
RemoveOldDoclet tester = new RemoveOldDoclet();
|
||||
tester.runTests(m -> new Object[]{Paths.get(m.getName())});
|
||||
}
|
||||
|
||||
RemoveOldDoclet() {
|
||||
tb = new ToolBox();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInvokeOldDoclet(Path base) throws Exception {
|
||||
Path srcDir = base.resolve("src");
|
||||
Path outDir = base.resolve("out");
|
||||
|
||||
new ClassBuilder(tb, "pkg.A")
|
||||
.setModifiers("public", "class")
|
||||
.write(srcDir);
|
||||
|
||||
javadoc("-d", outDir.toString(),
|
||||
"-doclet", "OldDoclet",
|
||||
"-docletpath", System.getProperty("test.classes", "."),
|
||||
"-sourcepath", srcDir.toString(),
|
||||
"pkg");
|
||||
|
||||
checkExit(Exit.ERROR);
|
||||
checkOutput(Output.OUT, true,
|
||||
"javadoc: error - Class OldDoclet is not a valid doclet.\n"
|
||||
+ "Note: As of JDK 13, the com.sun.javadoc API is no longer supported.");
|
||||
}
|
||||
}
|
||||
@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6176978
|
||||
* @summary current Javadoc's invocation and extension (Doclet) mechanisms are problematic
|
||||
* @modules jdk.javadoc
|
||||
* @build T6176978
|
||||
* @run main T6176978
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
|
||||
public class T6176978
|
||||
{
|
||||
public static void main(String[] args) throws Exception {
|
||||
// create and use a temp dir that will not be on jtreg's
|
||||
// default class path
|
||||
File tmpDir = new File("tmp");
|
||||
tmpDir.mkdirs();
|
||||
|
||||
File testSrc = new File(System.getProperty("test.src", "."));
|
||||
String[] javac_args = {
|
||||
"-d",
|
||||
"tmp",
|
||||
new File(testSrc, "X.java").getPath()
|
||||
};
|
||||
|
||||
int rc = com.sun.tools.javac.Main.compile(javac_args);
|
||||
if (rc != 0)
|
||||
throw new Error("javac exit code: " + rc);
|
||||
|
||||
String[] jdoc_args = {
|
||||
"-doclet",
|
||||
"X",
|
||||
new File(testSrc, "T6176978.java").getPath()
|
||||
};
|
||||
|
||||
rc = com.sun.tools.javadoc.Main.execute(jdoc_args);
|
||||
if (rc == 0)
|
||||
throw new Error("javadoc unexpectedly succeeded");
|
||||
|
||||
|
||||
|
||||
Thread currThread = Thread.currentThread();
|
||||
ClassLoader saveClassLoader = currThread.getContextClassLoader();
|
||||
URLClassLoader urlCL = new URLClassLoader(new URL[] { tmpDir.toURL() });
|
||||
currThread.setContextClassLoader(urlCL);
|
||||
|
||||
try {
|
||||
rc = com.sun.tools.javadoc.Main.execute(jdoc_args);
|
||||
if (rc != 0)
|
||||
throw new Error("javadoc exit: " + rc);
|
||||
}
|
||||
finally {
|
||||
currThread.setContextClassLoader(saveClassLoader);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2009, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import com.sun.javadoc.*;
|
||||
|
||||
public class X {
|
||||
public static boolean start(RootDoc root) {
|
||||
System.out.println("X.start");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -1,142 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6227454
|
||||
* @summary package.html and overview.html may not be read fully
|
||||
* @modules jdk.javadoc
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
|
||||
import com.sun.javadoc.Doclet;
|
||||
import com.sun.javadoc.RootDoc;
|
||||
|
||||
public class Test extends Doclet {
|
||||
public static void main(String... args) throws Exception {
|
||||
new Test().run();
|
||||
}
|
||||
|
||||
void run() throws Exception {
|
||||
test("<body>ABC XYZ</body>");
|
||||
test("<body>ABC XYZ</BODY>");
|
||||
test("<BODY>ABC XYZ</body>");
|
||||
test("<BODY>ABC XYZ</BODY>");
|
||||
test("<BoDy>ABC XYZ</bOdY>");
|
||||
test(" ABC XYZ</bOdY>", "Body tag missing from HTML");
|
||||
test("<body>ABC XYZ ", "Close body tag missing from HTML");
|
||||
test(" ABC XYZ ", "Body tag missing from HTML");
|
||||
test("<body>ABC" + bigText(8192, 40) + "XYZ</body>");
|
||||
|
||||
if (errors > 0)
|
||||
throw new Exception(errors + " errors occurred");
|
||||
}
|
||||
|
||||
void test(String body) throws IOException {
|
||||
test(body, null);
|
||||
}
|
||||
|
||||
void test(String body, String expectError) throws IOException {
|
||||
String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "
|
||||
+ "\"http://www.w3.org/TR/html4/loose.dtd\">";
|
||||
String headTag = "<head><title>Title </title></head>";
|
||||
String text = docType + "<html>" + headTag + body + "</html>";
|
||||
testNum++;
|
||||
System.err.println("test " + testNum);
|
||||
File file = writeFile("overview" + testNum + ".html", text);
|
||||
String thisClassName = Test.class.getName();
|
||||
File testSrc = new File(System.getProperty("test.src"));
|
||||
String[] args = {
|
||||
"-classpath", ".",
|
||||
"-package",
|
||||
"-overview", file.getPath(),
|
||||
new File(testSrc, thisClassName + ".java").getPath()
|
||||
};
|
||||
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
int rc = com.sun.tools.javadoc.Main.execute(
|
||||
"javadoc",
|
||||
pw, pw, pw,
|
||||
thisClassName,
|
||||
args);
|
||||
pw.close();
|
||||
String out = sw.toString();
|
||||
if (!out.isEmpty())
|
||||
System.err.println(out);
|
||||
System.err.println("javadoc exit: rc=" + rc);
|
||||
|
||||
if (expectError == null) {
|
||||
if (rc != 0)
|
||||
error("unexpected exit from javadoc; rc:" + rc);
|
||||
} else {
|
||||
if (!out.contains(expectError))
|
||||
error("expected error text not found: " + expectError);
|
||||
}
|
||||
}
|
||||
|
||||
String bigText(int lines, int lineLength) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < lineLength; i++)
|
||||
sb.append(String.valueOf(i % 10));
|
||||
sb.append("\n");
|
||||
String line = sb.toString();
|
||||
sb.setLength(0);
|
||||
for (int i = 0; i < lines; i++)
|
||||
sb.append(line);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
File writeFile(String path, String body) throws IOException {
|
||||
File f = new File(path);
|
||||
FileWriter out = new FileWriter(f);
|
||||
try {
|
||||
out.write(body);
|
||||
} finally {
|
||||
out.close();
|
||||
}
|
||||
return f;
|
||||
}
|
||||
|
||||
void error(String msg) {
|
||||
System.err.println("Error: " + msg);
|
||||
errors++;
|
||||
}
|
||||
|
||||
int testNum;
|
||||
int errors;
|
||||
|
||||
public static boolean start(RootDoc root) {
|
||||
String text = root.commentText();
|
||||
if (text.length() < 64)
|
||||
System.err.println("text: '" + text + "'");
|
||||
else
|
||||
System.err.println("text: '"
|
||||
+ text.substring(0, 20)
|
||||
+ "..."
|
||||
+ text.substring(text.length() - 20)
|
||||
+ "'");
|
||||
return text.startsWith("ABC") && text.endsWith("XYZ");
|
||||
}
|
||||
}
|
||||
@ -1,133 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2017, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6942366
|
||||
* @summary javadoc no longer inherits doc from sourcepath
|
||||
* @modules jdk.javadoc
|
||||
* @library /tools/javadoc/lib
|
||||
* @build p.Base Test ToyDoclet
|
||||
* @run main T6942366
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
public class T6942366 {
|
||||
public static void main(String... args) throws Exception {
|
||||
new T6942366().run();
|
||||
}
|
||||
|
||||
File testSrc;
|
||||
File testClasses;
|
||||
int count;
|
||||
int errors;
|
||||
|
||||
void run() throws Exception {
|
||||
testSrc = new File(System.getProperty("test.src"));
|
||||
testClasses = new File(System.getProperty("test.classes"));
|
||||
|
||||
test(true, false);
|
||||
test(false, true);
|
||||
test(true, true);
|
||||
|
||||
if (errors > 0)
|
||||
throw new Exception(errors + " errors found");
|
||||
}
|
||||
|
||||
void test(boolean useSourcePath, boolean useClassPath) throws Exception {
|
||||
System.out.println("test " + (++count) + " sp:" + useSourcePath + " cp:" + useClassPath);
|
||||
File testDir = new File("test" + count);
|
||||
testDir.mkdirs();
|
||||
|
||||
List<String> args = new ArrayList<String>();
|
||||
args.add("-doclet");
|
||||
args.add("ToyDoclet");
|
||||
if (useSourcePath) {
|
||||
args.add("-sourcepath");
|
||||
args.add(testSrc.getPath());
|
||||
}
|
||||
if (useClassPath) {
|
||||
args.add("-classpath");
|
||||
args.add(testClasses.getPath());
|
||||
} else {
|
||||
// override classpath to avoid stuff jtreg might have put on papth
|
||||
args.add("-classpath");
|
||||
args.add(".");
|
||||
}
|
||||
|
||||
args.add(new File(testSrc, "Test.java").getPath());
|
||||
System.out.println("ToyDoclet: " + args);
|
||||
|
||||
StringWriter sw = new StringWriter();
|
||||
PrintWriter pw = new PrintWriter(sw);
|
||||
|
||||
int rc = com.sun.tools.javadoc.Main.execute("ToyDoclet", pw, pw, pw,
|
||||
"ToyDoclet", getClass().getClassLoader(),
|
||||
args.toArray(new String[args.size()]));
|
||||
|
||||
if (rc != 0)
|
||||
throw new Exception("unexpected exit from javadoc, rc=" + rc);
|
||||
|
||||
if (useSourcePath && useClassPath) {
|
||||
long srcLastMod = new File(testSrc, "Test.java").lastModified();
|
||||
long classLastMod = new File(testClasses, "Test.class").lastModified();
|
||||
System.out.println("Test.java last modified: " + new Date(srcLastMod));
|
||||
System.out.println("Test.class last modified: " + new Date(classLastMod));
|
||||
System.out.println((srcLastMod > classLastMod ? "source" : "class") + " is newer");
|
||||
}
|
||||
|
||||
String s = "javadoc-for-Base.m";
|
||||
boolean expect = useSourcePath;
|
||||
boolean found = sw.toString().contains(s);
|
||||
if (found) {
|
||||
if (expect)
|
||||
System.out.println("javadoc content \"" + s + "\" found, as expected");
|
||||
else
|
||||
error("javadoc content \"" + s + "\" found unexpectedly");
|
||||
} else {
|
||||
if (expect)
|
||||
error("javadoc content \"" + s + "\" not found");
|
||||
else
|
||||
System.out.println("javadoc content \"" + s + "\" not found, as expected");
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
boolean contains(File f, String s) throws Exception {
|
||||
byte[] buf = new byte[(int) f.length()];
|
||||
try (DataInputStream in = new DataInputStream(new FileInputStream(f))) {
|
||||
in.readFully(buf);
|
||||
}
|
||||
return new String(buf).contains(s);
|
||||
}
|
||||
|
||||
void error(String msg) {
|
||||
System.out.println("Error: " + msg);
|
||||
errors++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
public class Test extends p.Base {
|
||||
// overrides Base.m
|
||||
public void m() { }
|
||||
}
|
||||
|
||||
@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 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.
|
||||
*
|
||||
* 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 p;
|
||||
|
||||
public class Base {
|
||||
/** javadoc-for-Base.m. */
|
||||
public void m() { }
|
||||
}
|
||||
|
||||
@ -1,177 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2017, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6958836 8002168
|
||||
* @summary javadoc should support -Xmaxerrs and -Xmaxwarns
|
||||
* @modules jdk.javadoc
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.javadoc.DocErrorReporter;
|
||||
import com.sun.javadoc.RootDoc;
|
||||
|
||||
|
||||
|
||||
public class Test {
|
||||
private static final String ERROR_MARKER = "Error-count";
|
||||
private static final String WARNING_MARKER = "Warning-count";
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
new Test().run();
|
||||
}
|
||||
|
||||
void run() throws Exception {
|
||||
javadoc("Errors", list(), 10, 0);
|
||||
javadoc("Errors", list("-Xmaxerrs", "0"), 10, 0);
|
||||
javadoc("Errors", list("-Xmaxerrs", "2"), 2, 0);
|
||||
javadoc("Errors", list("-Xmaxerrs", "4"), 4, 0);
|
||||
javadoc("Errors", list("-Xmaxerrs", "20"), 10, 0);
|
||||
|
||||
javadoc("Warnings", list(), 0, 10);
|
||||
javadoc("Warnings", list("-Xmaxwarns", "0"), 0, 10);
|
||||
javadoc("Warnings", list("-Xmaxwarns", "2"), 0, 2);
|
||||
javadoc("Warnings", list("-Xmaxwarns", "4"), 0, 4);
|
||||
javadoc("Warnings", list("-Xmaxwarns", "20"), 0, 10);
|
||||
|
||||
if (errors > 0)
|
||||
throw new Exception(errors + " errors occurred.");
|
||||
}
|
||||
|
||||
void javadoc(String selector, List<String> testOpts,
|
||||
int expectErrs, int expectWarns) {
|
||||
System.err.println("Test " + (++count) + ": " + selector + " " + testOpts);
|
||||
File testOutDir = new File("test" + count);
|
||||
|
||||
List<String> opts = new ArrayList<String>();
|
||||
// Force en_US locale in lieu of something like -XDrawDiagnostics.
|
||||
// For some reason, this must be the first option when used.
|
||||
opts.addAll(list("-locale", "en_US"));
|
||||
opts.add(new File(System.getProperty("test.src"),
|
||||
Test.class.getSimpleName() + ".java").getPath());
|
||||
opts.addAll(testOpts);
|
||||
opts.add("-gen" + selector);
|
||||
|
||||
StringWriter errSW = new StringWriter();
|
||||
PrintWriter errPW = new PrintWriter(errSW);
|
||||
StringWriter warnSW = new StringWriter();
|
||||
PrintWriter warnPW = new PrintWriter(warnSW);
|
||||
StringWriter noteSW = new StringWriter();
|
||||
PrintWriter notePW = new PrintWriter(noteSW);
|
||||
|
||||
int rc = com.sun.tools.javadoc.Main.execute("javadoc",
|
||||
errPW, warnPW, notePW,
|
||||
"Test$TestDoclet",
|
||||
getClass().getClassLoader(),
|
||||
opts.toArray(new String[opts.size()]));
|
||||
System.err.println("rc: " + rc);
|
||||
|
||||
errPW.close();
|
||||
String errOut = errSW.toString();
|
||||
System.err.println("Errors:\n" + errOut);
|
||||
warnPW.close();
|
||||
String warnOut = warnSW.toString();
|
||||
System.err.println("Warnings:\n" + warnOut);
|
||||
notePW.close();
|
||||
String noteOut = noteSW.toString();
|
||||
System.err.println("Notes:\n" + noteOut);
|
||||
|
||||
check(errOut, ERROR_MARKER, expectErrs);
|
||||
check(warnOut, WARNING_MARKER, expectWarns); // requires -locale en_US
|
||||
}
|
||||
|
||||
void check(String text, String expectText, int expectCount) {
|
||||
int foundCount = 0;
|
||||
for (String line: text.split("[\r\n]+")) {
|
||||
if (line.contains(expectText))
|
||||
foundCount++;
|
||||
}
|
||||
if (foundCount != expectCount) {
|
||||
error("incorrect number of matches found: " + foundCount
|
||||
+ ", expected: " + expectCount);
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> list(String... args) {
|
||||
return Arrays.asList(args);
|
||||
}
|
||||
|
||||
void error(String msg) {
|
||||
System.err.println(msg);
|
||||
errors++;
|
||||
}
|
||||
|
||||
int count;
|
||||
int errors;
|
||||
|
||||
public static class TestDoclet {
|
||||
static boolean genErrors = false;
|
||||
static boolean genWarnings = false;
|
||||
|
||||
public static boolean start(RootDoc root) {
|
||||
// generate 10 errors or warnings
|
||||
for (int i = 1 ; i <= 10 ; i++) {
|
||||
if (genErrors)
|
||||
root.printError(ERROR_MARKER + " " + i);
|
||||
if (genWarnings)
|
||||
root.printWarning(WARNING_MARKER + " " + i);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static int optionLength(String option) {
|
||||
if (option == null) {
|
||||
throw new Error("invalid usage: ");
|
||||
}
|
||||
System.out.println("option: " + option);
|
||||
switch (option.trim()) {
|
||||
case "-genErrors":
|
||||
return 1;
|
||||
case "-genWarnings":
|
||||
return 1;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean validOptions(String[][] options, DocErrorReporter reporter) {
|
||||
for (int i = 0 ; i < options.length; i++) {
|
||||
String opt = options[i][0].trim();
|
||||
switch (opt) {
|
||||
case "-genErrors":
|
||||
genErrors = true;
|
||||
genWarnings = false;
|
||||
break;
|
||||
case "-genWarnings":
|
||||
genErrors = false;
|
||||
genWarnings = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2011, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
public class Error {
|
||||
Object x // no semicolon
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2014, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
public class JavacWarning {
|
||||
String _ = null; // this will cause a warning with -source 8 (this is an error as of -source 9)
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2011, 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
public class JavadocWarning {
|
||||
/** @see DoesNotExist */
|
||||
int x;
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user