LinkInfo.java revision 3233:b5d08bc0d224
1/* 2 * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package jdk.javadoc.internal.doclets.toolkit.util.links; 27 28import javax.lang.model.element.ExecutableElement; 29import javax.lang.model.element.TypeElement; 30import javax.lang.model.type.TypeMirror; 31 32import jdk.javadoc.internal.doclets.toolkit.Configuration; 33import jdk.javadoc.internal.doclets.toolkit.Content; 34 35/** 36 * Encapsulates information about a link. 37 * 38 * <p><b>This is NOT part of any supported API. 39 * If you write code that depends on this, you do so at your own risk. 40 * This code and its internal interfaces are subject to change or 41 * deletion without notice.</b> 42 * 43 * @author Jamie Ho 44 */ 45public abstract class LinkInfo { 46 47 /** 48 * The class we want to link to. Null if we are not linking 49 * to a class. 50 */ 51 public TypeElement typeElement; 52 53 /** 54 * The executable element we want to link to. Null if we are not linking 55 * to an executable element. 56 */ 57 public ExecutableElement executableElement; 58 59 /** 60 * The Type we want to link to. Null if we are not linking to a type. 61 */ 62 public TypeMirror type; 63 64 /** 65 * True if this is a link to a VarArg. 66 */ 67 public boolean isVarArg = false; 68 69 /** 70 * Set this to true to indicate that you are linking to a type parameter. 71 */ 72 public boolean isTypeBound = false; 73 74 /** 75 * Whether the document element is in a Java 5 declaration 76 * location or not. 77 */ 78 public boolean isJava5DeclarationLocation = true; 79 80 /** 81 * The label for the link. 82 */ 83 public Content label; 84 85 /** 86 * True if the link should be strong. 87 */ 88 public boolean isStrong = false; 89 90 /** 91 * True if we should include the type in the link label. False otherwise. 92 */ 93 public boolean includeTypeInClassLinkLabel = true; 94 95 /** 96 * True if we should include the type as separate link. False otherwise. 97 */ 98 public boolean includeTypeAsSepLink = false; 99 100 /** 101 * True if we should exclude the type bounds for the type parameter. 102 */ 103 public boolean excludeTypeBounds = false; 104 105 /** 106 * True if we should print the type parameters, but not link them. 107 */ 108 public boolean excludeTypeParameterLinks = false; 109 110 /** 111 * True if we should print the type bounds, but not link them. 112 */ 113 public boolean excludeTypeBoundsLinks = false; 114 115 /** 116 * By default, the link can be to the page it's already on. However, 117 * there are cases where we don't want this (e.g. heading of class page). 118 */ 119 public boolean linkToSelf = true; 120 121 /** 122 * Return an empty instance of a content object. 123 * 124 * @return an empty instance of a content object. 125 */ 126 protected abstract Content newContent(); 127 128 /** 129 * Return true if this link is linkable and false if we can't link to the 130 * desired place. 131 * 132 * @return true if this link is linkable and false if we can't link to the 133 * desired place. 134 */ 135 public abstract boolean isLinkable(); 136 137 /** 138 * Return the label for this class link. 139 * 140 * @param configuration the current configuration of the doclet. 141 * @return the label for this class link. 142 */ 143 public Content getClassLinkLabel(Configuration configuration) { 144 if (label != null && !label.isEmpty()) { 145 return label; 146 } else if (isLinkable()) { 147 Content tlabel = newContent(); 148 tlabel.addContent(configuration.utils.getSimpleName(typeElement)); 149 return tlabel; 150 } else { 151 Content tlabel = newContent(); 152 tlabel.addContent(configuration.getClassName(typeElement)); 153 return tlabel; 154 } 155 } 156 157 @Override 158 public String toString() { 159 return "LinkInfo{" + "typeElement=" + typeElement + 160 ", executableElement=" + executableElement + 161 ", type=" + type + 162 ", isVarArg=" + isVarArg + 163 ", isTypeBound=" + isTypeBound + 164 ", isJava5DeclarationLocation=" + isJava5DeclarationLocation + 165 ", label=" + label + 166 ", isStrong=" + isStrong + 167 ", includeTypeInClassLinkLabel=" + includeTypeInClassLinkLabel + 168 ", includeTypeAsSepLink=" + includeTypeAsSepLink + 169 ", excludeTypeBounds=" + excludeTypeBounds + 170 ", excludeTypeParameterLinks=" + excludeTypeParameterLinks + 171 ", excludeTypeBoundsLinks=" + excludeTypeBoundsLinks + 172 ", linkToSelf=" + linkToSelf + '}'; 173 } 174} 175