NestedClassWriterImpl.java revision 3658:7f3b6ce62ea7
1/*
2 * Copyright (c) 1997, 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.formats.html;
27
28import java.util.Arrays;
29import java.util.List;
30
31import javax.lang.model.element.Element;
32import javax.lang.model.element.TypeElement;
33
34import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
35import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
36import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
37import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
38import jdk.javadoc.internal.doclets.toolkit.Content;
39import jdk.javadoc.internal.doclets.toolkit.MemberSummaryWriter;
40
41/**
42 * Writes nested class documentation in HTML format.
43 *
44 *  <p><b>This is NOT part of any supported API.
45 *  If you write code that depends on this, you do so at your own risk.
46 *  This code and its internal interfaces are subject to change or
47 *  deletion without notice.</b>
48 *
49 * @author Robert Field
50 * @author Atul M Dambalkar
51 * @author Jamie Ho (rewrite)
52 * @author Bhavesh Patel (Modified)
53 */
54public class NestedClassWriterImpl extends AbstractMemberWriter
55    implements MemberSummaryWriter {
56
57    public NestedClassWriterImpl(SubWriterHolderWriter writer, TypeElement typeElement) {
58        super(writer, typeElement);
59    }
60
61    public NestedClassWriterImpl(SubWriterHolderWriter writer) {
62        super(writer);
63    }
64
65    /**
66     * {@inheritDoc}
67     */
68    @Override
69    public Content getMemberSummaryHeader(TypeElement typeElement,
70            Content memberSummaryTree) {
71        memberSummaryTree.addContent(HtmlConstants.START_OF_NESTED_CLASS_SUMMARY);
72        Content memberTree = writer.getMemberTreeHeader();
73        writer.addSummaryHeader(this, typeElement, memberTree);
74        return memberTree;
75    }
76
77    /**
78     * {@inheritDoc}
79     */
80    public void addMemberTree(Content memberSummaryTree, Content memberTree) {
81        writer.addMemberTree(memberSummaryTree, memberTree);
82    }
83
84    /**
85     * {@inheritDoc}
86     */
87    @Override
88    public void addSummaryLabel(Content memberTree) {
89        Content label = HtmlTree.HEADING(HtmlConstants.SUMMARY_HEADING,
90                contents.nestedClassSummary);
91        memberTree.addContent(label);
92    }
93
94    /**
95     * {@inheritDoc}
96     */
97    @Override
98    public String getTableSummary() {
99        return resources.getText("doclet.Member_Table_Summary",
100                resources.getText("doclet.Nested_Class_Summary"),
101                resources.getText("doclet.nested_classes"));
102    }
103
104    /**
105     * {@inheritDoc}
106     */
107    @Override
108    public Content getCaption() {
109        return configuration.getContent("doclet.Nested_Classes");
110    }
111
112    /**
113     * {@inheritDoc}
114     */
115    @Override
116    public List<String> getSummaryTableHeader(Element member) {
117        if (utils.isInterface(member)) {
118            return Arrays.asList(writer.getModifierTypeHeader(),
119                    resources.getText("doclet.Interface"), resources.getText("doclet.Description"));
120
121        } else {
122            return Arrays.asList(writer.getModifierTypeHeader(),
123                    resources.getText("doclet.Class"), resources.getText("doclet.Description"));
124        }
125    }
126
127    /**
128     * {@inheritDoc}
129     */
130    @Override
131    public void addSummaryAnchor(TypeElement typeElement, Content memberTree) {
132        memberTree.addContent(writer.getMarkerAnchor(
133                SectionName.NESTED_CLASS_SUMMARY));
134    }
135
136    /**
137     * {@inheritDoc}
138     */
139    @Override
140    public void addInheritedSummaryAnchor(TypeElement typeElement, Content inheritedTree) {
141        inheritedTree.addContent(writer.getMarkerAnchor(
142                SectionName.NESTED_CLASSES_INHERITANCE,
143                utils.getFullyQualifiedName(typeElement)));
144    }
145
146    /**
147     * {@inheritDoc}
148     */
149    @Override
150    public void addInheritedSummaryLabel(TypeElement typeElement, Content inheritedTree) {
151        Content classLink = writer.getPreQualifiedClassLink(
152                LinkInfoImpl.Kind.MEMBER, typeElement, false);
153        Content label = new StringContent(utils.isInterface(typeElement)
154                ? configuration.getText("doclet.Nested_Classes_Interface_Inherited_From_Interface")
155                : configuration.getText("doclet.Nested_Classes_Interfaces_Inherited_From_Class"));
156        Content labelHeading = HtmlTree.HEADING(HtmlConstants.INHERITED_SUMMARY_HEADING,
157                label);
158        labelHeading.addContent(Contents.SPACE);
159        labelHeading.addContent(classLink);
160        inheritedTree.addContent(labelHeading);
161    }
162
163    /**
164     * {@inheritDoc}
165     */
166    @Override
167    protected void addSummaryLink(LinkInfoImpl.Kind context, TypeElement typeElement, Element member,
168            Content tdSummary) {
169        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
170                writer.getLink(new LinkInfoImpl(configuration, context, (TypeElement)member)));
171        Content code = HtmlTree.CODE(memberLink);
172        tdSummary.addContent(code);
173    }
174
175    /**
176     * {@inheritDoc}
177     */
178    @Override
179    protected void addInheritedSummaryLink(TypeElement typeElement, Element member, Content linksTree) {
180        linksTree.addContent(
181                writer.getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.MEMBER,
182                        (TypeElement)member)));
183    }
184
185    /**
186     * {@inheritDoc}
187     */
188    @Override
189    protected void addSummaryType(Element member, Content tdSummaryType) {
190        addModifierAndType(member, null, tdSummaryType);
191    }
192
193    /**
194     * {@inheritDoc}
195     */
196    @Override
197    protected Content getDeprecatedLink(Element member) {
198        return writer.getQualifiedClassLink(LinkInfoImpl.Kind.MEMBER, member);
199    }
200
201    /**
202     * {@inheritDoc}
203     */
204    @Override
205    protected Content getNavSummaryLink(TypeElement typeElement, boolean link) {
206        if (link) {
207            if (typeElement == null) {
208                return writer.getHyperLink(
209                        SectionName.NESTED_CLASS_SUMMARY,
210                        contents.navNested);
211            } else {
212                return writer.getHyperLink(
213                        SectionName.NESTED_CLASSES_INHERITANCE,
214                        utils.getFullyQualifiedName(typeElement), contents.navNested);
215            }
216        } else {
217            return contents.navNested;
218        }
219    }
220
221    /**
222     * {@inheritDoc}
223     */
224    @Override
225    protected void addNavDetailLink(boolean link, Content liNav) {
226    }
227}
228