| /* |
| * Copyright (c) 2003, 2013, 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.formats.html; |
| |
| import com.sun.javadoc.*; |
| import com.sun.tools.doclets.formats.html.markup.ContentBuilder; |
| import com.sun.tools.doclets.formats.html.markup.StringContent; |
| import com.sun.tools.doclets.internal.toolkit.Content; |
| import com.sun.tools.doclets.internal.toolkit.util.*; |
| import com.sun.tools.doclets.internal.toolkit.util.links.*; |
| |
| /** |
| * <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> |
| */ |
| public class LinkInfoImpl extends LinkInfo { |
| |
| public enum Kind { |
| DEFAULT, |
| |
| /** |
| * Indicate that the link appears in a class list. |
| */ |
| ALL_CLASSES_FRAME, |
| |
| /** |
| * Indicate that the link appears in a class documentation. |
| */ |
| CLASS, |
| |
| /** |
| * Indicate that the link appears in member documentation. |
| */ |
| MEMBER, |
| |
| /** |
| * Indicate that the link appears in class use documentation. |
| */ |
| CLASS_USE, |
| |
| /** |
| * Indicate that the link appears in index documentation. |
| */ |
| INDEX, |
| |
| /** |
| * Indicate that the link appears in constant value summary. |
| */ |
| CONSTANT_SUMMARY, |
| |
| /** |
| * Indicate that the link appears in serialized form documentation. |
| */ |
| SERIALIZED_FORM, |
| |
| /** |
| * Indicate that the link appears in serial member documentation. |
| */ |
| SERIAL_MEMBER, |
| |
| /** |
| * Indicate that the link appears in package documentation. |
| */ |
| PACKAGE, |
| |
| /** |
| * Indicate that the link appears in see tag documentation. |
| */ |
| SEE_TAG, |
| |
| /** |
| * Indicate that the link appears in value tag documentation. |
| */ |
| VALUE_TAG, |
| |
| /** |
| * Indicate that the link appears in tree documentation. |
| */ |
| TREE, |
| |
| /** |
| * Indicate that the link appears in a class list. |
| */ |
| PACKAGE_FRAME, |
| |
| /** |
| * The header in the class documentation. |
| */ |
| CLASS_HEADER, |
| |
| /** |
| * The signature in the class documentation. |
| */ |
| CLASS_SIGNATURE, |
| |
| /** |
| * The return type of a method. |
| */ |
| RETURN_TYPE, |
| |
| /** |
| * The return type of a method in a member summary. |
| */ |
| SUMMARY_RETURN_TYPE, |
| |
| /** |
| * The type of a method/constructor parameter. |
| */ |
| EXECUTABLE_MEMBER_PARAM, |
| |
| /** |
| * Super interface links. |
| */ |
| SUPER_INTERFACES, |
| |
| /** |
| * Implemented interface links. |
| */ |
| IMPLEMENTED_INTERFACES, |
| |
| /** |
| * Implemented class links. |
| */ |
| IMPLEMENTED_CLASSES, |
| |
| /** |
| * Subinterface links. |
| */ |
| SUBINTERFACES, |
| |
| /** |
| * Subclasses links. |
| */ |
| SUBCLASSES, |
| |
| /** |
| * The signature in the class documentation (implements/extends portion). |
| */ |
| CLASS_SIGNATURE_PARENT_NAME, |
| |
| /** |
| * The header for method documentation copied from parent. |
| */ |
| METHOD_DOC_COPY, |
| |
| /** |
| * Method "specified by" link. |
| */ |
| METHOD_SPECIFIED_BY, |
| |
| /** |
| * Method "overrides" link. |
| */ |
| METHOD_OVERRIDES, |
| |
| /** |
| * Annotation link. |
| */ |
| ANNOTATION, |
| |
| /** |
| * The header for field documentation copied from parent. |
| */ |
| FIELD_DOC_COPY, |
| |
| /** |
| * The parent nodes in the class tree. |
| */ |
| CLASS_TREE_PARENT, |
| |
| /** |
| * The type parameters of a method or constructor. |
| */ |
| MEMBER_TYPE_PARAMS, |
| |
| /** |
| * Indicate that the link appears in class use documentation. |
| */ |
| CLASS_USE_HEADER, |
| |
| /** |
| * The header for property documentation copied from parent. |
| */ |
| PROPERTY_DOC_COPY |
| } |
| |
| public final ConfigurationImpl configuration; |
| |
| /** |
| * The location of the link. |
| */ |
| public Kind context = Kind.DEFAULT; |
| |
| /** |
| * The value of the marker #. |
| */ |
| public String where = ""; |
| |
| /** |
| * String style of text defined in style sheet. |
| */ |
| public String styleName = ""; |
| |
| /** |
| * The value of the target. |
| */ |
| public String target = ""; |
| |
| /** |
| * Construct a LinkInfo object. |
| * |
| * @param configuration the configuration data for the doclet |
| * @param context the context of the link. |
| * @param context the context of the link. |
| * @param executableMemberDoc the member to link to. |
| */ |
| public LinkInfoImpl(ConfigurationImpl configuration, |
| Kind context, ExecutableMemberDoc executableMemberDoc) { |
| this.configuration = configuration; |
| this.executableMemberDoc = executableMemberDoc; |
| setContext(context); |
| } |
| |
| /** |
| * {@inherotDoc} |
| */ |
| protected Content newContent() { |
| return new ContentBuilder(); |
| } |
| |
| /** |
| * Construct a LinkInfo object. |
| * |
| * @param configuration the configuration data for the doclet |
| * @param context the context of the link. |
| * @param classDoc the class to link to. |
| */ |
| public LinkInfoImpl(ConfigurationImpl configuration, |
| Kind context, ClassDoc classDoc) { |
| this.configuration = configuration; |
| this.classDoc = classDoc; |
| setContext(context); |
| } |
| |
| /** |
| * Construct a LinkInfo object. |
| * |
| * @param configuration the configuration data for the doclet |
| * @param context the context of the link. |
| * @param type the class to link to. |
| */ |
| public LinkInfoImpl(ConfigurationImpl configuration, |
| Kind context, Type type) { |
| this.configuration = configuration; |
| this.type = type; |
| setContext(context); |
| } |
| |
| |
| /** |
| * Set the label for the link. |
| * @param label plain-text label for the link |
| */ |
| public LinkInfoImpl label(String label) { |
| this.label = new StringContent(label); |
| return this; |
| } |
| |
| /** |
| * Set the label for the link. |
| */ |
| public LinkInfoImpl label(Content label) { |
| this.label = label; |
| return this; |
| } |
| |
| /** |
| * Set whether or not the link should be strong. |
| */ |
| public LinkInfoImpl strong(boolean strong) { |
| this.isStrong = strong; |
| return this; |
| } |
| |
| /** |
| * Set the style to be used for the link. |
| * @param styleName String style of text defined in style sheet. |
| */ |
| public LinkInfoImpl styleName(String styleName) { |
| this.styleName = styleName; |
| return this; |
| } |
| |
| /** |
| * Set the target to be used for the link. |
| * @param styleName String style of text defined in style sheet. |
| */ |
| public LinkInfoImpl target(String target) { |
| this.target = target; |
| return this; |
| } |
| |
| /** |
| * Set whether or not this is a link to a varargs parameter. |
| */ |
| public LinkInfoImpl varargs(boolean varargs) { |
| this.isVarArg = varargs; |
| return this; |
| } |
| |
| /** |
| * Set the fragment specifier for the link. |
| */ |
| public LinkInfoImpl where(String where) { |
| this.where = where; |
| return this; |
| } |
| |
| /** |
| * {@inheritDoc} |
| */ |
| public Kind getContext() { |
| return context; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * This method sets the link attributes to the appropriate values |
| * based on the context. |
| * |
| * @param c the context id to set. |
| */ |
| public final void setContext(Kind c) { |
| //NOTE: Put context specific link code here. |
| switch (c) { |
| case ALL_CLASSES_FRAME: |
| case PACKAGE_FRAME: |
| case IMPLEMENTED_CLASSES: |
| case SUBCLASSES: |
| case METHOD_DOC_COPY: |
| case FIELD_DOC_COPY: |
| case PROPERTY_DOC_COPY: |
| case CLASS_USE_HEADER: |
| includeTypeInClassLinkLabel = false; |
| break; |
| |
| case ANNOTATION: |
| excludeTypeParameterLinks = true; |
| excludeTypeBounds = true; |
| break; |
| |
| case IMPLEMENTED_INTERFACES: |
| case SUPER_INTERFACES: |
| case SUBINTERFACES: |
| case CLASS_TREE_PARENT: |
| case TREE: |
| case CLASS_SIGNATURE_PARENT_NAME: |
| excludeTypeParameterLinks = true; |
| excludeTypeBounds = true; |
| includeTypeInClassLinkLabel = false; |
| includeTypeAsSepLink = true; |
| break; |
| |
| case PACKAGE: |
| case CLASS_USE: |
| case CLASS_HEADER: |
| case CLASS_SIGNATURE: |
| excludeTypeParameterLinks = true; |
| includeTypeAsSepLink = true; |
| includeTypeInClassLinkLabel = false; |
| break; |
| |
| case MEMBER_TYPE_PARAMS: |
| includeTypeAsSepLink = true; |
| includeTypeInClassLinkLabel = false; |
| break; |
| |
| case RETURN_TYPE: |
| case SUMMARY_RETURN_TYPE: |
| excludeTypeBounds = true; |
| break; |
| case EXECUTABLE_MEMBER_PARAM: |
| excludeTypeBounds = true; |
| break; |
| } |
| context = c; |
| if (type != null && |
| type.asTypeVariable()!= null && |
| type.asTypeVariable().owner() instanceof ExecutableMemberDoc) { |
| excludeTypeParameterLinks = true; |
| } |
| } |
| |
| /** |
| * Return true if this link is linkable and false if we can't link to the |
| * desired place. |
| * |
| * @return true if this link is linkable and false if we can't link to the |
| * desired place. |
| */ |
| public boolean isLinkable() { |
| return Util.isLinkable(classDoc, configuration); |
| } |
| } |