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