--- old/src/jdk.javadoc/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/ReturnTaglet.java Fri Jan 22 12:20:10 2016 +++ /dev/null Fri Jan 22 12:20:10 2016 @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2001, 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. 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.internal.toolkit.taglets; - -import com.sun.javadoc.*; -import com.sun.tools.doclets.internal.toolkit.Content; -import com.sun.tools.doclets.internal.toolkit.util.*; - -/** - * A taglet that represents the @return tag. - * - *

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. - * - * @author Jamie Ho - * @since 1.4 - */ -public class ReturnTaglet extends BaseExecutableMemberTaglet - implements InheritableTaglet { - - public ReturnTaglet() { - name = "return"; - } - - /** - * {@inheritDoc} - */ - public void inherit(DocFinder.Input input, DocFinder.Output output) { - Tag[] tags = input.element.tags("return"); - if (tags.length > 0) { - output.holder = input.element; - output.holderTag = tags[0]; - output.inlineTags = input.isFirstSentence ? - tags[0].firstSentenceTags() : tags[0].inlineTags(); - } - } - - /** - * Return true if this Taglet - * is used in constructor documentation. - * @return true if this Taglet - * is used in constructor documentation and false - * otherwise. - */ - public boolean inConstructor() { - return false; - } - - /** - * {@inheritDoc} - */ - public Content getTagletOutput(Doc holder, TagletWriter writer) { - Type returnType = ((MethodDoc) holder).returnType(); - Tag[] tags = holder.tags(name); - - //Make sure we are not using @return tag on method with void return type. - if (returnType.isPrimitive() && returnType.typeName().equals("void")) { - if (tags.length > 0) { - writer.getMsgRetriever().warning(holder.position(), - "doclet.Return_tag_on_void_method"); - } - return null; - } - //Inherit @return tag if necessary. - if (tags.length == 0) { - DocFinder.Output inheritedDoc = - DocFinder.search(writer.configuration(), new DocFinder.Input((MethodDoc) holder, this)); - tags = inheritedDoc.holderTag == null ? tags : new Tag[] {inheritedDoc.holderTag}; - } - return tags.length > 0 ? writer.returnTagOutput(tags[0]) : null; - } -} --- /dev/null Fri Jan 22 12:20:10 2016 +++ new/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/ReturnTaglet.java Fri Jan 22 12:20:10 2016 @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.javadoc.internal.doclets.toolkit.taglets; + +import java.util.ArrayList; +import java.util.List; + +import javax.lang.model.element.Element; +import javax.lang.model.element.ExecutableElement; +import javax.lang.model.type.TypeMirror; + +import com.sun.source.doctree.DocTree; +import jdk.javadoc.internal.doclets.toolkit.Content; +import jdk.javadoc.internal.doclets.toolkit.util.CommentHelper; +import jdk.javadoc.internal.doclets.toolkit.util.DocFinder; +import jdk.javadoc.internal.doclets.toolkit.util.DocFinder.Input; +import jdk.javadoc.internal.doclets.toolkit.util.Utils; + +import static com.sun.source.doctree.DocTree.Kind.*; + +/** + * A taglet that represents the @return tag. + * + *

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. + * + * @author Jamie Ho + * @since 1.4 + */ +public class ReturnTaglet extends BaseExecutableMemberTaglet implements InheritableTaglet { + + public ReturnTaglet() { + name = RETURN.tagName; + } + + /** + * {@inheritDoc} + */ + public void inherit(DocFinder.Input input, DocFinder.Output output) { + List tags = input.utils.getBlockTags(input.element, DocTree.Kind.RETURN); + CommentHelper ch = input.utils.getCommentHelper(input.element); + if (!tags.isEmpty()) { + output.holder = input.element; + output.holderTag = tags.get(0); + output.inlineTags = input.isFirstSentence + ? ch.getFirstSentenceTrees(input.utils.configuration, output.holderTag) + : ch.getDescription(input.utils.configuration, output.holderTag); + } + } + + /** + * Return true if this Taglet + * is used in constructor documentation. + * @return true if this Taglet + * is used in constructor documentation and false + * otherwise. + */ + public boolean inConstructor() { + return false; + } + + /** + * {@inheritDoc} + */ + public Content getTagletOutput(Element holder, TagletWriter writer) { + Utils utils = writer.configuration().utils; + TypeMirror returnType = utils.getReturnType((ExecutableElement)holder); + List tags = utils.getBlockTags(holder, name); + + //Make sure we are not using @return tag on method with void return type. + if (returnType != null && utils.isVoid(returnType)) { + if (!tags.isEmpty()) { + writer.getMsgRetriever().warning(holder, "doclet.Return_tag_on_void_method"); + } + return null; + } + if (!tags.isEmpty()) + return writer.returnTagOutput(holder, tags.get(0)); + //Inherit @return tag if necessary. + List ntags = new ArrayList<>(); + Input input = new DocFinder.Input(utils, holder, this); + DocFinder.Output inheritedDoc = DocFinder.search(writer.configuration(), input); + if (inheritedDoc.holderTag != null) { + CommentHelper ch = utils.getCommentHelper(input.element); + ch.setOverrideElement(inheritedDoc.holder); + ntags.add(inheritedDoc.holderTag); + } + return !ntags.isEmpty() ? writer.returnTagOutput(holder, ntags.get(0)) : null; + } +}