BaseClass.java revision 3233:b5d08bc0d224
1/*
2 * Copyright (c) 1999, 2015, 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.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/**
25 * Regression test for:
26 * Javadoc does not process base class. If user specifies few classes on the
27 * command line and few packages, with a situation where one of the specified
28 * classes(on the command line) extends a class from one of the packages, then
29 * due to some anomaly in ordering in which all the class and package objects
30 * get constructed, few classes were getting marked as "not included", even
31 * thought they were included in this run and hence documentation for those
32 * packages was wrong. The test case for which javadoc was failing is given
33 * in bug# 4197513.
34 *
35 * @bug 4197513
36 * @summary Javadoc does not process base class.
37 * @build BaseClass.java
38 * @author Atul M Dambalkar
39 */
40
41import java.util.Collections;
42import java.util.List;
43import java.util.Locale;
44import java.util.Set;
45import javax.lang.model.SourceVersion;
46
47import javax.lang.model.element.Element;
48import javax.lang.model.element.ElementKind;
49import javax.lang.model.element.TypeElement;
50import javax.lang.model.util.Elements;
51
52import jdk.javadoc.doclet.*;
53
54public class BaseClass implements Doclet {
55
56    public boolean run(DocletEnvironment root) {
57        Elements elementUtils = root.getElementUtils();
58        TypeElement klass = elementUtils.getTypeElement("baz.Foo");
59        if (!root.isIncluded(klass)) {
60            throw new AssertionError("Base class is not included: baz.Foo");
61        }
62
63        for (Element e : root.getSpecifiedElements()) {
64            if (e.getKind() == ElementKind.CLASS &&
65                    e.getSimpleName().contentEquals("Bar")) {
66                klass = (TypeElement)e;
67            }
68        }
69        if (klass == null) {
70            throw new AssertionError("class Bar not found");
71        }
72        List<? extends Element> members = klass.getEnclosedElements();
73        List<Element> selected = root.getSelectedElements(members);
74
75        boolean foundPublic = false;
76        boolean foundProtected = false;
77
78        boolean foundPackagePrivate = false;
79        boolean foundPrivate = false;
80
81
82        for (Element e :selected) {
83            System.out.println("element: " + e);
84            if (e.getSimpleName().toString().equals("aPublicMethod")) {
85                foundPublic = true;
86            }
87            if (e.getSimpleName().toString().equals("aProtectedMethod")) {
88                foundProtected = true;
89            }
90            if (e.getSimpleName().toString().equals("aPackagePrivateMethod")) {
91                foundPackagePrivate = true;
92            }
93            if (e.getSimpleName().toString().equals("aPackagePrivateMethod")) {
94                foundPrivate = true;
95            }
96        }
97        if (!foundPublic || !foundProtected) {
98            throw new AssertionError("selected methods not found");
99        }
100
101        if (foundPrivate || foundPackagePrivate) {
102             throw new AssertionError("unselected methods found");
103        }
104
105        return true;
106    }
107
108    public Set<Doclet.Option> getSupportedOptions() {
109        return Collections.emptySet();
110    }
111
112    public void init(Locale locale, Reporter reporter) {
113        return;
114    }
115
116    @Override
117    public String getName() {
118        return "BaseClass";
119    }
120
121    @Override
122    public SourceVersion getSupportedSourceVersion() {
123        return SourceVersion.latest();
124    }
125}
126