# HG changeset patch # User jgodinez # Date 1304486278 25200 # Node ID 14ff19ca715fe4f3b46c5e40ef5ebc72218f2777 # Parent 90adb5d6adc7d99d27c8b142a31ac8921070274f# Parent dbc4ced9d1715783bae1aa3d9a4e032bf28a70c6 Merge diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/source/util/Trees.java --- a/src/share/classes/com/sun/source/util/Trees.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/source/util/Trees.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, 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 @@ -38,6 +38,7 @@ import javax.tools.Diagnostic; import javax.tools.JavaCompiler.CompilationTask; +import com.sun.source.tree.CatchTree; import com.sun.source.tree.ClassTree; import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.MethodTree; @@ -207,4 +208,11 @@ public abstract void printMessage(Diagnostic.Kind kind, CharSequence msg, com.sun.source.tree.Tree t, com.sun.source.tree.CompilationUnitTree root); + + /** + * Gets the lub of an exception parameter declared in a catch clause. + * @param tree the tree for the catch clause + * @return The lub of the exception parameter + */ + public abstract TypeMirror getLub(CatchTree tree); } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java Tue May 03 22:17:58 2011 -0700 @@ -149,11 +149,20 @@ ClassUseMapper mapper = new ClassUseMapper(configuration.root, classtree); ClassDoc[] classes = configuration.root.classes(); for (int i = 0; i < classes.length; i++) { - ClassUseWriter.generate(configuration, mapper, classes[i]); + // If -nodeprecated option is set and the containing package is marked + // as deprecated, do not generate the class-use page. We will still generate + // the class-use page if the class is marked as deprecated but the containing + // package is not since it could still be linked from that package-use page. + if (!(configuration.nodeprecated && + Util.isDeprecated(classes[i].containingPackage()))) + ClassUseWriter.generate(configuration, mapper, classes[i]); } PackageDoc[] pkgs = configuration.packages; for (int i = 0; i < pkgs.length; i++) { - PackageUseWriter.generate(configuration, mapper, pkgs[i]); + // If -nodeprecated option is set and the package is marked + // as deprecated, do not generate the package-use page. + if (!(configuration.nodeprecated && Util.isDeprecated(pkgs[i]))) + PackageUseWriter.generate(configuration, mapper, pkgs[i]); } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -31,6 +31,7 @@ import com.sun.javadoc.*; import java.util.*; import java.io.*; +import java.net.*; /** * Configure the output based on the command line options. @@ -48,6 +49,7 @@ * @author Robert Field. * @author Atul Dambalkar. * @author Jamie Ho + * @author Bhavesh Patel (Modified) */ public class ConfigurationImpl extends Configuration { @@ -110,6 +112,11 @@ public String stylesheetfile = ""; /** + * Argument for command line option "-Xdocrootparent". + */ + public String docrootparent = ""; + + /** * True if command line option "-nohelp" is used. Default value is false. */ public boolean nohelp = false; @@ -239,6 +246,8 @@ stylesheetfile = os[1]; } else if (opt.equals("-charset")) { charset = os[1]; + } else if (opt.equals("-xdocrootparent")) { + docrootparent = os[1]; } else if (opt.equals("-nohelp")) { nohelp = true; } else if (opt.equals("-splitindex")) { @@ -322,7 +331,8 @@ option.equals("-helpfile") || option.equals("-stylesheetfile") || option.equals("-charset") || - option.equals("-overview")) { + option.equals("-overview") || + option.equals("-xdocrootparent")) { return 2; } else { return 0; @@ -372,6 +382,13 @@ return false; } nohelp = true; + } else if (opt.equals("-xdocrootparent")) { + try { + new URL(os[1]); + } catch (MalformedURLException e) { + reporter.printError(getText("doclet.MalformedURL", os[1])); + return false; + } } else if (opt.equals("-overview")) { if (nooverview == true) { reporter.printError(getText("doclet.Option_conflict", diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2011, 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 @@ -42,15 +42,15 @@ public class DeprecatedListWriter extends SubWriterHolderWriter { private static final String[] ANCHORS = new String[] { - "interface", "class", "enum", "exception", "error", "annotation_type", - "field", "method", "constructor", "enum_constant", + "package", "interface", "class", "enum", "exception", "error", + "annotation_type", "field", "method", "constructor", "enum_constant", "annotation_type_member" }; private static final String[] HEADING_KEYS = new String[] { - "doclet.Deprecated_Interfaces", "doclet.Deprecated_Classes", - "doclet.Deprecated_Enums", "doclet.Deprecated_Exceptions", - "doclet.Deprecated_Errors", + "doclet.Deprecated_Packages", "doclet.Deprecated_Interfaces", + "doclet.Deprecated_Classes", "doclet.Deprecated_Enums", + "doclet.Deprecated_Exceptions", "doclet.Deprecated_Errors", "doclet.Deprecated_Annotation_Types", "doclet.Deprecated_Fields", "doclet.Deprecated_Methods", "doclet.Deprecated_Constructors", @@ -59,9 +59,9 @@ }; private static final String[] SUMMARY_KEYS = new String[] { - "doclet.deprecated_interfaces", "doclet.deprecated_classes", - "doclet.deprecated_enums", "doclet.deprecated_exceptions", - "doclet.deprecated_errors", + "doclet.deprecated_packages", "doclet.deprecated_interfaces", + "doclet.deprecated_classes", "doclet.deprecated_enums", + "doclet.deprecated_exceptions", "doclet.deprecated_errors", "doclet.deprecated_annotation_types", "doclet.deprecated_fields", "doclet.deprecated_methods", "doclet.deprecated_constructors", @@ -70,7 +70,7 @@ }; private static final String[] HEADER_KEYS = new String[] { - "doclet.Interface", "doclet.Class", + "doclet.Package", "doclet.Interface", "doclet.Class", "doclet.Enum", "doclet.Exceptions", "doclet.Errors", "doclet.AnnotationType", @@ -116,7 +116,7 @@ DeprecatedListWriter depr = new DeprecatedListWriter(configuration, filename); depr.generateDeprecatedListFile( - new DeprecatedAPIListBuilder(configuration.root)); + new DeprecatedAPIListBuilder(configuration)); depr.close(); } catch (IOException exc) { configuration.standardmessage.error( @@ -149,8 +149,14 @@ memberTableHeader[0] = configuration.getText("doclet.0_and_1", configuration.getText(HEADER_KEYS[i]), configuration.getText("doclet.Description")); - writers[i].addDeprecatedAPI(deprapi.getList(i), - HEADING_KEYS[i], memberTableSummary, memberTableHeader, div); + // DeprecatedAPIListBuilder.PACKAGE == 0, so if i == 0, it is + // a PackageDoc. + if (i == DeprecatedAPIListBuilder.PACKAGE) + addPackageDeprecatedAPI(deprapi.getList(i), + HEADING_KEYS[i], memberTableSummary, memberTableHeader, div); + else + writers[i - 1].addDeprecatedAPI(deprapi.getList(i), + HEADING_KEYS[i], memberTableSummary, memberTableHeader, div); } } body.addContent(div); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2011, 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 @@ -198,23 +198,27 @@ PackageIndexFrameWriter.generate(configuration); } PackageDoc prev = null, next; - for(int i = 0; i < packages.length; i++) { - PackageFrameWriter.generate(configuration, packages[i]); - next = (i + 1 < packages.length && packages[i+1].name().length() > 0) ? - packages[i+1] : null; - //If the next package is unnamed package, skip 2 ahead if possible - next = (i + 2 < packages.length && next == null) ? - packages[i+2]: next; - AbstractBuilder packageSummaryBuilder = configuration. - getBuilderFactory().getPackageSummaryBuilder( - packages[i], prev, next); - packageSummaryBuilder.build(); - if (configuration.createtree) { - PackageTreeWriter.generate(configuration, - packages[i], prev, next, - configuration.nodeprecated); + for (int i = 0; i < packages.length; i++) { + // if -nodeprecated option is set and the package is marked as + // deprecated, do not generate the package-summary.html, package-frame.html + // and package-tree.html pages for that package. + if (!(configuration.nodeprecated && Util.isDeprecated(packages[i]))) { + PackageFrameWriter.generate(configuration, packages[i]); + next = (i + 1 < packages.length && + packages[i + 1].name().length() > 0) ? packages[i + 1] : null; + //If the next package is unnamed package, skip 2 ahead if possible + next = (i + 2 < packages.length && next == null) ? packages[i + 2] : next; + AbstractBuilder packageSummaryBuilder = + configuration.getBuilderFactory().getPackageSummaryBuilder( + packages[i], prev, next); + packageSummaryBuilder.build(); + if (configuration.createtree) { + PackageTreeWriter.generate(configuration, + packages[i], prev, next, + configuration.nodeprecated); + } + prev = packages[i]; } - prev = packages[i]; } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Tue May 03 22:17:58 2011 -0700 @@ -159,22 +159,42 @@ StringBuilder buf = new StringBuilder(); int previndex = 0; while (true) { - // Search for lowercase version of {@docRoot} - index = lowerHtml.indexOf("{@docroot}", previndex); - // If next {@docRoot} tag not found, append rest of htmlstr and exit loop - if (index < 0) { - buf.append(htmlstr.substring(previndex)); - break; - } - // If next {@docroot} tag found, append htmlstr up to start of tag - buf.append(htmlstr.substring(previndex, index)); - previndex = index + 10; // length for {@docroot} string - // Insert relative path where {@docRoot} was located - buf.append(relativepathNoSlash); - // Append slash if next character is not a slash - if (relativepathNoSlash.length() > 0 && previndex < htmlstr.length() - && htmlstr.charAt(previndex) != '/') { - buf.append(DirectoryManager.URL_FILE_SEPARATOR); + if (configuration.docrootparent.length() > 0) { + // Search for lowercase version of {@docRoot}/.. + index = lowerHtml.indexOf("{@docroot}/..", previndex); + // If next {@docRoot}/.. pattern not found, append rest of htmlstr and exit loop + if (index < 0) { + buf.append(htmlstr.substring(previndex)); + break; + } + // If next {@docroot}/.. pattern found, append htmlstr up to start of tag + buf.append(htmlstr.substring(previndex, index)); + previndex = index + 13; // length for {@docroot}/.. string + // Insert docrootparent absolute path where {@docRoot}/.. was located + + buf.append(configuration.docrootparent); + // Append slash if next character is not a slash + if (previndex < htmlstr.length() && htmlstr.charAt(previndex) != '/') { + buf.append(DirectoryManager.URL_FILE_SEPARATOR); + } + } else { + // Search for lowercase version of {@docRoot} + index = lowerHtml.indexOf("{@docroot}", previndex); + // If next {@docRoot} tag not found, append rest of htmlstr and exit loop + if (index < 0) { + buf.append(htmlstr.substring(previndex)); + break; + } + // If next {@docroot} tag found, append htmlstr up to start of tag + buf.append(htmlstr.substring(previndex, index)); + previndex = index + 10; // length for {@docroot} string + // Insert relative path where {@docRoot} was located + buf.append(relativepathNoSlash); + // Append slash if next character is not a slash + if (relativepathNoSlash.length() > 0 && previndex < htmlstr.length() && + htmlstr.charAt(previndex) != '/') { + buf.append(DirectoryManager.URL_FILE_SEPARATOR); + } } } return buf.toString(); @@ -1395,6 +1415,44 @@ } /** + * Add package deprecation information to the documentation tree + * + * @param deprPkgs list of deprecated packages + * @param headingKey the caption for the deprecated package table + * @param tableSummary the summary for the deprecated package table + * @param tableHeader table headers for the deprecated package table + * @param contentTree the content tree to which the deprecated package table will be added + */ + protected void addPackageDeprecatedAPI(List deprPkgs, String headingKey, + String tableSummary, String[] tableHeader, Content contentTree) { + if (deprPkgs.size() > 0) { + Content table = HtmlTree.TABLE(0, 3, 0, tableSummary, + getTableCaption(configuration().getText(headingKey))); + table.addContent(getSummaryTableHeader(tableHeader, "col")); + Content tbody = new HtmlTree(HtmlTag.TBODY); + for (int i = 0; i < deprPkgs.size(); i++) { + PackageDoc pkg = (PackageDoc) deprPkgs.get(i); + HtmlTree td = HtmlTree.TD(HtmlStyle.colOne, + getPackageLink(pkg, getPackageName(pkg))); + if (pkg.tags("deprecated").length > 0) { + addInlineDeprecatedComment(pkg, pkg.tags("deprecated")[0], td); + } + HtmlTree tr = HtmlTree.TR(td); + if (i % 2 == 0) { + tr.addStyle(HtmlStyle.altColor); + } else { + tr.addStyle(HtmlStyle.rowColor); + } + tbody.addContent(tr); + } + table.addContent(tbody); + Content li = HtmlTree.LI(HtmlStyle.blockList, table); + Content ul = HtmlTree.UL(HtmlStyle.blockList, li); + contentTree.addContent(ul); + } + } + + /** * Prine table header information about color, column span and the font. * * @param color Background color. @@ -2120,7 +2178,7 @@ } } text = (isplaintext) ? - refMemName : getCode() + refMemName + getCodeEnd(); + refMemName : getCode() + Util.escapeHtmlChars(refMemName) + getCodeEnd(); result.append(getDocLink(LinkInfoImpl.CONTEXT_SEE_TAG, containing, refMem, (label.length() == 0)? text: label, false)); @@ -2280,6 +2338,7 @@ public String commentTagsToString(Tag holderTag, Doc doc, Tag[] tags, boolean isFirstSentence) { StringBuilder result = new StringBuilder(); + boolean textTagChange = false; // Array of all possible inline tags for this javadoc run configuration.tagletManager.checkTags(doc, tags, true); for (int i = 0; i < tags.length; i++) { @@ -2295,13 +2354,26 @@ result.append(output == null ? "" : output.toString()); if (originalLength == 0 && isFirstSentence && tagelem.name().equals("@inheritDoc") && result.length() > 0) { break; + } else if (configuration.docrootparent.length() > 0 && + tagelem.name().equals("@docRoot") && + ((tags[i + 1]).text()).startsWith("/..")) { + //If Xdocrootparent switch ON, set the flag to remove the /.. occurance after + //{@docRoot} tag in the very next Text tag. + textTagChange = true; + continue; } else { - continue; + continue; } } else { + String text = tagelem.text(); + //If Xdocrootparent switch ON, remove the /.. occurance after {@docRoot} tag. + if (textTagChange) { + text = text.replaceFirst("/..", ""); + textTagChange = false; + } //This is just a regular text tag. The text may contain html links () //or inline tag {@docRoot}, which will be handled as special cases. - String text = redirectRelativeLinks(tagelem.holder(), tagelem.text()); + text = redirectRelativeLinks(tagelem.holder(), text); // Replace @docRoot only if not represented by an instance of DocRootTaglet, // that is, only if it was not present in a source file doc comment. diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -93,7 +93,7 @@ packgen = new PackageFrameWriter(configuration, packageDoc); String pkgName = Util.getPackageName(packageDoc); Content body = packgen.getBody(false, packgen.getWindowTitle(pkgName)); - Content pkgNameContent = new StringContent(pkgName); + Content pkgNameContent = new RawHtml(pkgName); Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar, packgen.getTargetPackageLink(packageDoc, "classFrame", pkgNameContent)); body.addContent(heading); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexFrameWriter.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -80,7 +80,10 @@ HtmlTree ul = new HtmlTree(HtmlTag.UL); ul.addAttr(HtmlAttr.TITLE, packagesLabel.toString()); for(int i = 0; i < packages.length; i++) { - if (packages[i] != null) { + // Do not list the package if -nodeprecated option is set and the + // package is marked as deprecated. + if (packages[i] != null && + (!(configuration.nodeprecated && Util.isDeprecated(packages[i])))) { ul.addContent(getPackage(packages[i])); } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java Tue May 03 22:17:58 2011 -0700 @@ -137,6 +137,8 @@ protected void addPackagesList(PackageDoc[] packages, Content tbody) { for (int i = 0; i < packages.length; i++) { if (packages[i] != null && packages[i].name().length() > 0) { + if (configuration.nodeprecated && Util.isDeprecated(packages[i])) + continue; Content packageLinkContent = getPackageLink(packages[i], getPackageName(packages[i])); Content tdPackage = HtmlTree.TD(HtmlStyle.colFirst, packageLinkContent); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java Tue May 03 22:17:58 2011 -0700 @@ -242,11 +242,16 @@ */ protected void addPackageUse(PackageDoc pkg, Content contentTree) throws IOException { Content tdFirst = HtmlTree.TD(HtmlStyle.colFirst, - getHyperLink("", pkg.name(), new StringContent(Util.getPackageName(pkg)))); + getHyperLink("", Util.getPackageName(pkg), + new RawHtml(Util.getPackageName(pkg)))); contentTree.addContent(tdFirst); HtmlTree tdLast = new HtmlTree(HtmlTag.TD); tdLast.addStyle(HtmlStyle.colLast); - addSummaryComment(pkg, tdLast); + if (pkg != null && pkg.name().length() != 0) { + addSummaryComment(pkg, tdLast); + } else { + tdLast.addContent(getSpace()); + } contentTree.addContent(tdLast); } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java Tue May 03 22:17:58 2011 -0700 @@ -114,11 +114,12 @@ Content packageHead = new RawHtml(heading); tHeading.addContent(packageHead); div.addContent(tHeading); + addDeprecationInfo(div); if (packageDoc.inlineTags().length > 0 && ! configuration.nocomment) { - HtmlTree subTitleDiv = new HtmlTree(HtmlTag.DIV); - subTitleDiv.addStyle(HtmlStyle.subTitle); - addSummaryComment(packageDoc, subTitleDiv); - div.addContent(subTitleDiv); + HtmlTree docSummaryDiv = new HtmlTree(HtmlTag.DIV); + docSummaryDiv.addStyle(HtmlStyle.docSummary); + addSummaryComment(packageDoc, docSummaryDiv); + div.addContent(docSummaryDiv); Content space = getSpace(); Content descLink = getHyperLink("", "package_description", descriptionLabel, "", ""); @@ -139,6 +140,28 @@ } /** + * Add the package deprecation information to the documentation tree. + * + * @param div the content tree to which the deprecation information will be added + */ + public void addDeprecationInfo(Content div) { + Tag[] deprs = packageDoc.tags("deprecated"); + if (Util.isDeprecated(packageDoc)) { + HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV); + deprDiv.addStyle(HtmlStyle.deprecatedContent); + Content deprPhrase = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase); + deprDiv.addContent(deprPhrase); + if (deprs.length > 0) { + Tag[] commentTags = deprs[0].inlineTags(); + if (commentTags.length > 0) { + addInlineDeprecatedComment(packageDoc, deprs[0], deprDiv); + } + } + div.addContent(deprDiv); + } + } + + /** * {@inheritDoc} */ public Content getSummaryHeader() { diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/SourceToHTMLConverter.java Tue May 03 22:17:58 2011 -0700 @@ -82,12 +82,20 @@ } PackageDoc[] pds = rd.specifiedPackages(); for (int i = 0; i < pds.length; i++) { - convertPackage(configuration, pds[i], outputdir); + // If -nodeprecated option is set and the package is marked as deprecated, + // do not convert the package files to HTML. + if (!(configuration.nodeprecated && Util.isDeprecated(pds[i]))) + convertPackage(configuration, pds[i], outputdir); } ClassDoc[] cds = rd.specifiedClasses(); for (int i = 0; i < cds.length; i++) { - convertClass(configuration, cds[i], - getPackageOutputDir(outputdir, cds[i].containingPackage())); + // If -nodeprecated option is set and the class is marked as deprecated + // or the containing package is deprecated, do not convert the + // package files to HTML. + if (!(configuration.nodeprecated && + (Util.isDeprecated(cds[i]) || Util.isDeprecated(cds[i].containingPackage())))) + convertClass(configuration, cds[i], + getPackageOutputDir(outputdir, cds[i].containingPackage())); } } @@ -106,7 +114,12 @@ String classOutputdir = getPackageOutputDir(outputdir, pd); ClassDoc[] cds = pd.allClasses(); for (int i = 0; i < cds.length; i++) { - convertClass(configuration, cds[i], classOutputdir); + // If -nodeprecated option is set and the class is marked as deprecated, + // do not convert the package files to HTML. We do not check for + // containing package deprecation since it is already check in + // the calling method above. + if (!(configuration.nodeprecated && Util.isDeprecated(cds[i]))) + convertClass(configuration, cds[i], classOutputdir); } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, 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 @@ -59,7 +59,10 @@ * {@inheritDoc} */ public TagletOutput getDocRootOutput() { - return new TagletOutputImpl(htmlWriter.relativepathNoSlash); + if (htmlWriter.configuration.docrootparent.length() > 0) + return new TagletOutputImpl(htmlWriter.configuration.docrootparent); + else + return new TagletOutputImpl(htmlWriter.relativepathNoSlash); } /** diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2011, 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 @@ -132,7 +132,11 @@ HtmlTree ul = new HtmlTree(HtmlTag.UL); ul.addStyle(HtmlStyle.horizontal); for (int i = 0; i < packages.length; i++) { - if (packages[i].name().length() == 0) { + // If the package name length is 0 or if -nodeprecated option + // is set and the package is marked as deprecated, do not include + // the page in the list of package hierarchies. + if (packages[i].name().length() == 0 || + (configuration.nodeprecated && Util.isDeprecated(packages[i]))) { continue; } String link = pathString(packages[i], "package-tree.html"); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java --- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2011, 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 @@ -46,6 +46,7 @@ contentContainer, description, details, + docSummary, header, horizontal, footer, @@ -67,6 +68,7 @@ subNavList, subTitle, summary, + deprecatedContent, tabEnd, title, topNav; diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties --- a/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/formats/html/resources/standard.properties Tue May 03 22:17:58 2011 -0700 @@ -68,6 +68,7 @@ doclet.see.malformed_tag=Tag {0}: Malformed: {1} doclet.Inherited_API_Summary=Inherited API Summary doclet.Deprecated_API=Deprecated API +doclet.Deprecated_Packages=Deprecated Packages doclet.Deprecated_Classes=Deprecated Classes doclet.Deprecated_Enums=Deprecated Enums doclet.Deprecated_Interfaces=Deprecated Interfaces @@ -79,6 +80,7 @@ doclet.Deprecated_Methods=Deprecated Methods doclet.Deprecated_Enum_Constants=Deprecated Enum Constants doclet.Deprecated_Annotation_Type_Members=Deprecated Annotation Type Elements +doclet.deprecated_packages=deprecated packages doclet.deprecated_classes=deprecated classes doclet.deprecated_enums=deprecated enums doclet.deprecated_interfaces=deprecated interfaces @@ -245,6 +247,7 @@ -tag ::
Specify single argument custom tags\n\ -taglet The fully qualified name of Taglet to register\n\ -tagletpath The path to Taglets\n\ + -Xdocrootparent Replaces all appearances of @docRoot followed by /.. in doc comments with \n\ -charset Charset for cross-platform viewing of generated documentation.\n\ -helpfile Include file that help link links to\n\ -linksource Generate source in HTML\n\ diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/Configuration.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2011, 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 @@ -419,7 +419,7 @@ docencoding = encoding; } - classDocCatalog = new ClassDocCatalog(root.specifiedClasses()); + classDocCatalog = new ClassDocCatalog(root.specifiedClasses(), this); initTagletManager(customTagStrs); } @@ -677,15 +677,18 @@ } /** - * Return true if the doc element is getting documented, depending upon - * -nodeprecated option and @deprecated tag used. Return true if - * -nodeprecated is not used or @deprecated tag is not used. + * Return true if the ClassDoc element is getting documented, depending upon + * -nodeprecated option and the deprecation information. Return true if + * -nodeprecated is not used. Return false if -nodeprecated is used and if + * either ClassDoc element is deprecated or the containing package is deprecated. + * + * @param cd the ClassDoc for which the page generation is checked */ - public boolean isGeneratedDoc(Doc doc) { + public boolean isGeneratedDoc(ClassDoc cd) { if (!nodeprecated) { return true; } - return (doc.tags("deprecated")).length == 0; + return !(Util.isDeprecated(cd) || Util.isDeprecated(cd.containingPackage())); } /** diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css Tue May 03 22:17:58 2011 -0700 @@ -2,17 +2,10 @@ /* Overall document style */ -* { - margin:0; - padding:0; -} body { font-family:Helvetica, Arial, sans-serif; color:#000000; } -p { - margin:20px 0; -} pre { font-size:1.0em; } @@ -30,35 +23,18 @@ } ul { margin:10px 0 10px 20px; -} -li { - list-style:disc; -} -dl dt { - font-size:0.95em; - font-weight:bold; - margin:10px 0 0 0; -} -dl dd { - margin:10px 0 10px 20px; -} -dl dd ul { - margin-left:0; -} -dl dd ul li { - list-style:none; - margin:10px 0 10px 0; + list-style-type:disc; } caption { background: #CCCCFF; color:#000000; - text-align: left; - font-size: 150%; - font-weight: bold; - border-left: 2px ridge; - border-right: 2px ridge; - border-top: 2px ridge; - padding-left: 5px; + text-align:left; + font-size:150%; + font-weight:bold; + border-left:2px ridge; + border-right:2px ridge; + border-top:2px ridge; + padding-left:5px; width:auto; } /* @@ -70,11 +46,11 @@ color:#000000; } .legalCopy { - margin:7px; + margin:7px 0; } .bar { font-size:1em; - margin:10px 0 0 10px; + margin:10px 0 0 2px; } .bar a { font-weight:normal; @@ -84,24 +60,21 @@ */ .topNav { border-top:2px solid #C0C0C0; - margin:7px; padding:7px 0; height:2.8em; - width:99%; + width:100%; min-width:600px; } .bottomNav { border-top:2px solid #C0C0C0; - margin:7px; padding:7px 0; height:2.8em; - width:99%; + width:100%; } .subNav { border-bottom:2px solid #C0C0C0; float:left; - width:99%; - margin:7px; + width:100%; min-width:600px; } .subNav div { @@ -120,7 +93,7 @@ /* Navigation bar list styles */ .topNav ul.navList, .bottomNav ul.navList { background-color:#EEEEFF; - padding:7px 5px; + padding:4px 4px; margin:0; float:left; width:80%; @@ -128,7 +101,7 @@ ul.navList li{ list-style:none; float:left; - padding:3px 4px; + padding:0 4px; color:#000000; font-size:0.98em; } @@ -142,14 +115,16 @@ .subNav ul.navList { float:left; margin:0; + padding:0; font-size:0.8em; width:350px; } ul.subNavList { float:left; - margin:0; font-size:0.8em; width:350px; + margin:0; + padding:0; } ul.subNavList li{ list-style:none; @@ -161,16 +136,16 @@ */ .header, .footer { clear:both; - margin:0 7px; + padding:10px 0; } .indexHeader { font-size:0.9em; - margin:10px 0 7px 10px; + margin:10px 0 0 2px; } .header ul { padding-left:20px; } -/* Header and footer title styles */ +/* Header and footer title styles */ .header h1.title { font-size:1.4em; text-align:center; @@ -181,7 +156,16 @@ margin:0; } .subTitle { + padding-top:10px; +} +/* +Content styles +*/ +.deprecatedContent { margin:0; + padding:10px 0; +} +.docSummary { padding-top:10px; } /* @@ -190,11 +174,11 @@ .contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { clear:both; - padding:10px 10px; position:relative; + padding-bottom:20px; } .indexContainer { - padding:0 0 10px 10px; + padding:0 0 0 2px; font-size:0.9em; } /* @@ -221,7 +205,8 @@ .indexContainer h2 { font-weight:normal; font-size:1.0em; - padding:10px 0 0 0; + padding:5px 0 0 0; + margin:10px 0 0 0; } .contentContainer h2 { margin:10px 0; @@ -263,7 +248,7 @@ background:#CCCCFF; border:0; border:2px ridge; - padding-left:5px; + margin:0; } div.summary ul.blockList ul.blockList ul.blockList li.blockList h3 { background:#EEEEFF; @@ -274,23 +259,22 @@ div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { font-size:1.15em; font-weight:bold; - padding:0 0 10px 0; + padding:0 0 5px 0; + margin:0; } /* Table styles */ .contentContainer table { - border-collapse: collapse ; + border-collapse:collapse ; width:100%; } .contentContainer table td, .contentContainer table th { border:2px ridge; - padding:3px; } /* Constant values page table styles */ .constantValuesContainer table { - border-collapse: collapse ; - margin:0 0 10px 0; + border-collapse:collapse; } .constantValuesContainer table caption{ font-size:0.95em; @@ -303,12 +287,9 @@ } /* Class-use/Package-use page table styles */ .classUseContainer table { - border-collapse: collapse ; + border-collapse:collapse ; width:100%; - margin:0 0 15px 0; -} -.classUseContainer ul li ul li table { - margin-bottom:30px; + margin:0 0 10px 0; } .classUseContainer ul li ul li table caption{ font-size:0.95em; @@ -365,6 +346,7 @@ /* Container specific list styles */ .indexContainer ul { margin:0; + padding:0; } .indexContainer ul li { list-style:none; @@ -376,6 +358,7 @@ list-style:none; border:0; border-bottom:2px ridge; + height:1%; } .serializedFormContainer ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockListLast { list-style:none; @@ -395,6 +378,7 @@ div.details ul.blockList ul.blockList ul.blockList li.blockList { border:0; border-bottom:2px ridge; + height:1%; } /* Definition list styles */ ul.blockList li.blockList dl{ @@ -413,9 +397,17 @@ ul.blockList li.blockList pre{ margin:0 0 15px 0; } +.description dl dt { + font-size:0.95em; + font-weight:bold; + margin:5px 0 0 0; +} +.description dl dd { + margin:10px 0 10px 20px; +} /* List content styles */ ul.blockList li.blockList ul.blockList li.blockList pre{ - margin:10px 0 15px 0; + margin:10px 0 10px 0; } ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList pre, ul.blockList li.blockList ul.blockList li.blockList ul.blockListLast li.blockList pre{ diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/DeprecatedTaglet.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/DeprecatedTaglet.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/DeprecatedTaglet.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, 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 @@ -47,13 +47,6 @@ /** * {@inheritDoc} */ - public boolean inPackage() { - return false; - } - - /** - * {@inheritDoc} - */ public TagletOutput getTagletOutput(Doc holder, TagletWriter writer) { return writer.deprecatedTagOutput(holder); } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassDocCatalog.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2011, 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 @@ -25,8 +25,9 @@ package com.sun.tools.doclets.internal.toolkit.util; +import java.util.*; import com.sun.javadoc.*; -import java.util.*; +import com.sun.tools.doclets.internal.toolkit.Configuration; /** * This class acts as an artificial PackageDoc for classes specified @@ -88,13 +89,16 @@ */ private Map> interfaces; + private Configuration configuration; + /** * Construct a new ClassDocCatalog. * * @param classdocs the array of ClassDocs to catalog */ - public ClassDocCatalog (ClassDoc[] classdocs) { + public ClassDocCatalog (ClassDoc[] classdocs, Configuration config) { init(); + this.configuration = config; for (int i = 0; i < classdocs.length; i++) { addClassDoc(classdocs[i]); } @@ -151,9 +155,10 @@ private void addClass(ClassDoc classdoc, Map> map) { PackageDoc pkg = classdoc.containingPackage(); - if (pkg.isIncluded()) { - //No need to catalog this class since it's package is - //included on the command line + if (pkg.isIncluded() || (configuration.nodeprecated && Util.isDeprecated(pkg))) { + //No need to catalog this class if it's package is + //included on the command line or if -nodeprecated option is set + // and the containing package is marked as deprecated. return; } String key = Util.getPackageName(pkg); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/ClassTree.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -122,8 +122,12 @@ */ private void buildTree(ClassDoc[] classes, Configuration configuration) { for (int i = 0; i < classes.length; i++) { + // In the tree page (e.g overview-tree.html) do not include + // information of classes which are deprecated or are a part of a + // deprecated package. if (configuration.nodeprecated && - classes[i].tags("deprecated").length > 0) { + (Util.isDeprecated(classes[i]) || + Util.isDeprecated(classes[i].containingPackage()))) { continue; } if (classes[i].isEnum()) { diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DeprecatedAPIListBuilder.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -27,27 +27,29 @@ import com.sun.javadoc.*; import java.util.*; +import com.sun.tools.doclets.internal.toolkit.Configuration; /** - * Build list of all the deprecated classes, constructors, fields and methods. + * Build list of all the deprecated packages, classes, constructors, fields and methods. * * @author Atul M Dambalkar */ public class DeprecatedAPIListBuilder { - public static final int NUM_TYPES = 11; + public static final int NUM_TYPES = 12; - public static final int INTERFACE = 0; - public static final int CLASS = 1; - public static final int ENUM = 2; - public static final int EXCEPTION = 3; - public static final int ERROR = 4; - public static final int ANNOTATION_TYPE = 5; - public static final int FIELD = 6; - public static final int METHOD = 7; - public static final int CONSTRUCTOR = 8; - public static final int ENUM_CONSTANT = 9; - public static final int ANNOTATION_TYPE_MEMBER = 10; + public static final int PACKAGE = 0; + public static final int INTERFACE = 1; + public static final int CLASS = 2; + public static final int ENUM = 3; + public static final int EXCEPTION = 4; + public static final int ERROR = 5; + public static final int ANNOTATION_TYPE = 6; + public static final int FIELD = 7; + public static final int METHOD = 8; + public static final int CONSTRUCTOR = 9; + public static final int ENUM_CONSTANT = 10; + public static final int ANNOTATION_TYPE_MEMBER = 11; /** * List of deprecated type Lists. @@ -58,25 +60,33 @@ /** * Constructor. * - * @param root Root of the tree. + * @param configuration the current configuration of the doclet */ - public DeprecatedAPIListBuilder(RootDoc root) { + public DeprecatedAPIListBuilder(Configuration configuration) { deprecatedLists = new ArrayList>(); for (int i = 0; i < NUM_TYPES; i++) { deprecatedLists.add(i, new ArrayList()); } - buildDeprecatedAPIInfo(root); + buildDeprecatedAPIInfo(configuration); } /** * Build the sorted list of all the deprecated APIs in this run. - * Build separate lists for deprecated classes, constructors, methods and - * fields. + * Build separate lists for deprecated packages, classes, constructors, + * methods and fields. * - * @param root Root of the tree. + * @param configuration the current configuration of the doclet. */ - private void buildDeprecatedAPIInfo(RootDoc root) { - ClassDoc[] classes = root.classes(); + private void buildDeprecatedAPIInfo(Configuration configuration) { + PackageDoc[] packages = configuration.packages; + PackageDoc pkg; + for (int c = 0; c < packages.length; c++) { + pkg = packages[c]; + if (Util.isDeprecated(pkg)) { + getList(PACKAGE).add(pkg); + } + } + ClassDoc[] classes = configuration.root.classes(); for (int i = 0; i < classes.length; i++) { ClassDoc cd = classes[i]; if (Util.isDeprecated(cd)) { @@ -90,7 +100,7 @@ getList(ENUM).add(cd); } else if (cd.isError()) { getList(ERROR).add(cd); - }else if (cd.isAnnotationType()) { + } else if (cd.isAnnotationType()) { getList(ANNOTATION_TYPE).add(cd); } } @@ -102,7 +112,7 @@ } if (cd.isAnnotationType()) { composeDeprecatedList(getList(ANNOTATION_TYPE_MEMBER), - ((AnnotationTypeDoc) cd).elements()); + ((AnnotationTypeDoc) cd).elements()); } } sortDeprecatedLists(); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/IndexBuilder.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -207,7 +207,17 @@ * Should this doc element be added to the index map? */ protected boolean shouldAddToIndexMap(Doc element) { - return !(noDeprecated && element.tags("deprecated").length > 0); + if (element instanceof PackageDoc) + // Do not add to index map if -nodeprecated option is set and the + // package is marked as deprecated. + return !(noDeprecated && Util.isDeprecated(element)); + else + // Do not add to index map if -nodeprecated option is set and if the + // Doc is marked as deprecated or the containing package is marked as + // deprecated. + return !(noDeprecated && + (Util.isDeprecated(element) || + Util.isDeprecated(((ProgramElementDoc)element).containingPackage()))); } /** diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/PackageListWriter.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/PackageListWriter.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/PackageListWriter.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2011, 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 @@ -76,13 +76,16 @@ protected void generatePackageListFile(RootDoc root) { PackageDoc[] packages = configuration.packages; - String[] names = new String[packages.length]; + ArrayList names = new ArrayList(); for (int i = 0; i < packages.length; i++) { - names[i] = packages[i].name(); + // if the -nodeprecated option is set and the package is marked as + // deprecated, do not include it in the packages list. + if (!(configuration.nodeprecated && Util.isDeprecated(packages[i]))) + names.add(packages[i].name()); } - Arrays.sort(names); - for (int i = 0; i < packages.length; i++) { - println(names[i]); + Collections.sort(names); + for (int i = 0; i < names.size(); i++) { + println(names.get(i)); } } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java --- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/Util.java Tue May 03 22:17:58 2011 -0700 @@ -861,11 +861,15 @@ * @param doc the Doc to check. * @return true if the given Doc is deprecated. */ - public static boolean isDeprecated(ProgramElementDoc doc) { + public static boolean isDeprecated(Doc doc) { if (doc.tags("deprecated").length > 0) { return true; } - AnnotationDesc[] annotationDescList = doc.annotations(); + AnnotationDesc[] annotationDescList; + if (doc instanceof PackageDoc) + annotationDescList = ((PackageDoc)doc).annotations(); + else + annotationDescList = ((ProgramElementDoc)doc).annotations(); for (int i = 0; i < annotationDescList.length; i++) { if (annotationDescList[i].annotationType().qualifiedName().equals( java.lang.Deprecated.class.getName())){ diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/api/JavacTrees.java --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, 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 @@ -34,11 +34,13 @@ import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.TypeElement; import javax.lang.model.type.DeclaredType; +import javax.lang.model.type.TypeKind; import javax.lang.model.type.TypeMirror; import javax.tools.Diagnostic; import javax.tools.JavaCompiler; import javax.tools.JavaFileObject; +import com.sun.source.tree.CatchTree; import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.Scope; import com.sun.source.tree.Tree; @@ -49,7 +51,7 @@ import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symbol.TypeSymbol; import com.sun.tools.javac.code.Symbol; -import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.code.Type.UnionClassType; import com.sun.tools.javac.comp.Attr; import com.sun.tools.javac.comp.AttrContext; import com.sun.tools.javac.comp.Enter; @@ -430,4 +432,16 @@ log.useSource(oldSource); } } + + @Override + public TypeMirror getLub(CatchTree tree) { + JCCatch ct = (JCCatch) tree; + JCVariableDecl v = ct.param; + if (v.type != null && v.type.getKind() == TypeKind.UNION) { + UnionClassType ut = (UnionClassType) v.type; + return ut.getLub(); + } else { + return v.type; + } + } } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/code/Scope.java --- a/src/share/classes/com/sun/tools/javac/code/Scope.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Scope.java Tue May 03 22:17:58 2011 -0700 @@ -649,7 +649,7 @@ public Iterator iterator() { return new CompoundScopeIterator(subScopes) { Iterator nextIterator(Scope s) { - return s.getElements().iterator(); + return s.getElements(sf).iterator(); } }; } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/code/Source.java --- a/src/share/classes/com/sun/tools/javac/code/Source.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Source.java Tue May 03 22:17:58 2011 -0700 @@ -186,6 +186,9 @@ public boolean allowSimplifiedVarargs() { return compareTo(JDK1_7) >= 0; } + public boolean allowObjectToPrimitiveCast() { + return compareTo(JDK1_7) >= 0; + } public static SourceVersion toSourceVersion(Source source) { switch(source) { case JDK1_2: diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/code/Type.java --- a/src/share/classes/com/sun/tools/javac/code/Type.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Type.java Tue May 03 22:17:58 2011 -0700 @@ -25,6 +25,8 @@ package com.sun.tools.javac.code; +import java.util.Collections; + import com.sun.tools.javac.util.*; import com.sun.tools.javac.code.Symbol.*; @@ -741,6 +743,38 @@ } } + // a clone of a ClassType that knows about the alternatives of a union type. + public static class UnionClassType extends ClassType implements UnionType { + final List alternatives_field; + + public UnionClassType(ClassType ct, List alternatives) { + super(ct.outer_field, ct.typarams_field, ct.tsym); + allparams_field = ct.allparams_field; + supertype_field = ct.supertype_field; + interfaces_field = ct.interfaces_field; + all_interfaces_field = ct.interfaces_field; + alternatives_field = alternatives; + } + + public Type getLub() { + return tsym.type; + } + + public java.util.List getAlternatives() { + return Collections.unmodifiableList(alternatives_field); + } + + @Override + public TypeKind getKind() { + return TypeKind.UNION; + } + + @Override + public R accept(TypeVisitor v, P p) { + return v.visitUnion(this, p); + } + } + public static class ArrayType extends Type implements javax.lang.model.type.ArrayType { diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Tue May 03 22:17:58 2011 -0700 @@ -74,8 +74,9 @@ final JavacMessages messages; final Names names; final boolean allowBoxing; + final boolean allowCovariantReturns; + final boolean allowObjectToPrimitiveCast; final ClassReader reader; - final Source source; final Check chk; List warnStack = List.nil(); final Name capturedName; @@ -92,9 +93,11 @@ context.put(typesKey, this); syms = Symtab.instance(context); names = Names.instance(context); - allowBoxing = Source.instance(context).allowBoxing(); + Source source = Source.instance(context); + allowBoxing = source.allowBoxing(); + allowCovariantReturns = source.allowCovariantReturns(); + allowObjectToPrimitiveCast = source.allowObjectToPrimitiveCast(); reader = ClassReader.instance(context); - source = Source.instance(context); chk = Check.instance(context); capturedName = names.fromString(""); messages = JavacMessages.instance(context); @@ -409,6 +412,7 @@ return s.tag == BOT || s.tag == CLASS || s.tag == ARRAY || s.tag == TYPEVAR; + case WILDCARD: //we shouldn't be here - avoids crash (see 7034495) case NONE: return false; default: @@ -949,8 +953,9 @@ return true; if (t.isPrimitive() != s.isPrimitive()) - return allowBoxing && (isConvertible(t, s, warn) || isConvertible(s, t, warn)); - + return allowBoxing && ( + isConvertible(t, s, warn) + || (allowObjectToPrimitiveCast && isConvertible(s, t, warn))); if (warn != warnStack.head) { try { warnStack = warnStack.prepend(warn); @@ -2309,7 +2314,7 @@ if (elemtype == t.elemtype) return t; else - return new ArrayType(elemtype, t.tsym); + return new ArrayType(upperBound(elemtype), t.tsym); } @Override @@ -3070,7 +3075,7 @@ if (hasSameArgs(r1, r2)) return covariantReturnType(r1.getReturnType(), r2res, warner); - if (!source.allowCovariantReturns()) + if (!allowCovariantReturns) return false; if (isSubtypeUnchecked(r1.getReturnType(), r2res, warner)) return true; @@ -3087,7 +3092,7 @@ public boolean covariantReturnType(Type t, Type s, Warner warner) { return isSameType(t, s) || - source.allowCovariantReturns() && + allowCovariantReturns && !t.isPrimitive() && !s.isPrimitive() && isAssignable(t, s, warner); @@ -3293,7 +3298,7 @@ } if (giveWarning && !isReifiable(reverse ? from : to)) warn.warn(LintCategory.UNCHECKED); - if (!source.allowCovariantReturns()) + if (!allowCovariantReturns) // reject if there is a common method signature with // incompatible return types. chk.checkCompatibleAbstracts(warn.pos(), from, to); @@ -3320,7 +3325,7 @@ Type t2 = to; if (disjointTypes(t1.getTypeArguments(), t2.getTypeArguments())) return false; - if (!source.allowCovariantReturns()) + if (!allowCovariantReturns) // reject if there is a common method signature with // incompatible return types. chk.checkCompatibleAbstracts(warn.pos(), from, to); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/comp/Annotate.java --- a/src/share/classes/com/sun/tools/javac/comp/Annotate.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Annotate.java Tue May 03 22:17:58 2011 -0700 @@ -168,11 +168,11 @@ } JCIdent left = (JCIdent)assign.lhs; Symbol method = rs.resolveQualifiedMethod(left.pos(), - env, - a.type, - left.name, - List.nil(), - null); + env, + a.type, + left.name, + List.nil(), + null); left.sym = method; left.type = method.type; if (method.owner != a.type.tsym) @@ -190,6 +190,15 @@ Attribute enterAttributeValue(Type expected, JCExpression tree, Env env) { + //first, try completing the attribution value sym - if a completion + //error is thrown, we should recover gracefully, and display an + //ordinary resolution diagnostic. + try { + expected.tsym.complete(); + } catch(CompletionFailure e) { + log.error(tree.pos(), "cant.resolve", Kinds.kindName(e.sym), e.sym); + return new Attribute.Error(expected); + } if (expected.isPrimitive() || types.isSameType(expected, syms.stringType)) { Type result = attr.attribExpr(tree, env, expected); if (result.isErroneous()) diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/comp/Attr.java --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Tue May 03 22:17:58 2011 -0700 @@ -2910,6 +2910,7 @@ public void visitTypeUnion(JCTypeUnion tree) { ListBuffer multicatchTypes = ListBuffer.lb(); + ListBuffer all_multicatchTypes = null; // lazy, only if needed for (JCExpression typeTree : tree.alternatives) { Type ctype = attribType(typeTree, env); ctype = chk.checkType(typeTree.pos(), @@ -2931,9 +2932,23 @@ } } multicatchTypes.append(ctype); + if (all_multicatchTypes != null) + all_multicatchTypes.append(ctype); + } else { + if (all_multicatchTypes == null) { + all_multicatchTypes = ListBuffer.lb(); + all_multicatchTypes.appendList(multicatchTypes); + } + all_multicatchTypes.append(ctype); } } - tree.type = result = check(tree, types.lub(multicatchTypes.toList()), TYP, pkind, pt); + Type t = check(tree, types.lub(multicatchTypes.toList()), TYP, pkind, pt); + if (t.tag == CLASS) { + List alternatives = + ((all_multicatchTypes == null) ? multicatchTypes : all_multicatchTypes).toList(); + t = new UnionClassType((ClassType) t, alternatives); + } + tree.type = result = t; } public void visitTypeParameter(JCTypeParameter tree) { diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/comp/Check.java --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Tue May 03 22:17:58 2011 -0700 @@ -681,6 +681,12 @@ "cant.apply.diamond.1", t, diags.fragment("diamond.non.generic", t)); return types.createErrorType(t); + } else if (tree.typeargs != null && + tree.typeargs.nonEmpty()) { + log.error(tree.clazz.pos(), + "cant.apply.diamond.1", + t, diags.fragment("diamond.and.explicit.params", t)); + return types.createErrorType(t); } else { return t; } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/comp/Flow.java --- a/src/share/classes/com/sun/tools/javac/comp/Flow.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Flow.java Tue May 03 22:17:58 2011 -0700 @@ -1153,8 +1153,7 @@ if (chk.subset(exc, caughtInTry)) { log.error(pos, "except.already.caught", exc); } else if (!chk.isUnchecked(pos, exc) && - exc.tsym != syms.throwableType.tsym && - exc.tsym != syms.exceptionType.tsym && + !isExceptionOrThrowable(exc) && !chk.intersects(exc, thrownInTry)) { log.error(pos, "except.never.thrown.in.try", exc); } else if (allowImprovedCatchAnalysis) { @@ -1163,7 +1162,8 @@ // unchecked exception, the result list would not be empty, as the augmented // thrown set includes { RuntimeException, Error }; if 'exc' was a checked // exception, that would have been covered in the branch above - if (chk.diff(catchableThrownTypes, caughtInTry).isEmpty()) { + if (chk.diff(catchableThrownTypes, caughtInTry).isEmpty() && + !isExceptionOrThrowable(exc)) { String key = catchableThrownTypes.length() == 1 ? "unreachable.catch" : "unreachable.catch.1"; @@ -1171,6 +1171,12 @@ } } } + //where + private boolean isExceptionOrThrowable(Type exc) { + return exc.tsym == syms.throwableType.tsym || + exc.tsym == syms.exceptionType.tsym; + } + public void visitConditional(JCConditional tree) { scanCond(tree.cond); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Tue May 03 22:17:58 2011 -0700 @@ -1609,18 +1609,31 @@ // type.tsym.flatName() should == proxy.enumFlatName TypeSymbol enumTypeSym = proxy.enumType.tsym; VarSymbol enumerator = null; - for (Scope.Entry e = enumTypeSym.members().lookup(proxy.enumerator); - e.scope != null; - e = e.next()) { - if (e.sym.kind == VAR) { - enumerator = (VarSymbol)e.sym; - break; + CompletionFailure failure = null; + try { + for (Scope.Entry e = enumTypeSym.members().lookup(proxy.enumerator); + e.scope != null; + e = e.next()) { + if (e.sym.kind == VAR) { + enumerator = (VarSymbol)e.sym; + break; + } } } + catch (CompletionFailure ex) { + failure = ex; + } if (enumerator == null) { - log.error("unknown.enum.constant", - currentClassFile, enumTypeSym, proxy.enumerator); - result = new Attribute.Error(enumTypeSym.type); + if (failure != null) { + log.warning("unknown.enum.constant.reason", + currentClassFile, enumTypeSym, proxy.enumerator, + failure.getDiagnostic()); + } else { + log.warning("unknown.enum.constant", + currentClassFile, enumTypeSym, proxy.enumerator); + } + result = new Attribute.Enum(enumTypeSym.type, + new VarSymbol(0, proxy.enumerator, syms.botType, enumTypeSym)); } else { result = new Attribute.Enum(enumTypeSym.type, enumerator); } diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/jvm/Code.java --- a/src/share/classes/com/sun/tools/javac/jvm/Code.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/jvm/Code.java Tue May 03 22:17:58 2011 -0700 @@ -479,7 +479,12 @@ state.pop(1);// index Type a = state.stack[state.stacksize-1]; state.pop(1); - state.push(types.erasure(types.elemtype(a))); } + //sometimes 'null type' is treated as a one-dimensional array type + //see Gen.visitLiteral - we should handle this case accordingly + Type stackType = a.tag == BOT ? + syms.objectType : + types.erasure(types.elemtype(a)); + state.push(stackType); } break; case goto_: markDead(); diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/model/JavacTypes.java --- a/src/share/classes/com/sun/tools/javac/model/JavacTypes.java Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/model/JavacTypes.java Tue May 03 22:17:58 2011 -0700 @@ -72,11 +72,11 @@ } public Element asElement(TypeMirror t) { - Type type = cast(Type.class, t); - switch (type.tag) { - case TypeTags.CLASS: - case TypeTags.ERROR: - case TypeTags.TYPEVAR: + switch (t.getKind()) { + case DECLARED: + case ERROR: + case TYPEVAR: + Type type = cast(Type.class, t); return type.asElement(); default: return null; diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/resources/compiler.properties --- a/src/share/classes/com/sun/tools/javac/resources/compiler.properties Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/resources/compiler.properties Tue May 03 22:17:58 2011 -0700 @@ -762,9 +762,6 @@ compiler.err.unclosed.str.lit=\ unclosed string literal -compiler.err.unknown.enum.constant=\ - in class file {0}: unknown enum constant {1}.{2} - # 0: name compiler.err.unsupported.encoding=\ unsupported encoding: {0} @@ -1307,6 +1304,15 @@ compiler.warn.annotation.method.not.found.reason=\ Cannot find annotation method ''{1}()'' in type ''{0}'': {2} +# 0: symbol, 1: name +compiler.warn.unknown.enum.constant=\ + unknown enum constant {1}.{2} + +# 0: symbol, 1: name, 2: message segment +compiler.warn.unknown.enum.constant.reason=\ + unknown enum constant {1}.{2}\n\ + reason: {3} + # 0: type, 1: type compiler.warn.raw.class.use=\ found raw type: {0}\n\ @@ -1618,6 +1624,9 @@ compiler.misc.diamond.non.generic=\ cannot use ''<>'' with non-generic class {0} +compiler.misc.diamond.and.explicit.params=\ + cannot use ''<>'' with explicit type parameters for constructor + # 0: type, 1: list of type compiler.misc.explicit.param.do.not.conform.to.bounds=\ explicit type argument {0} does not conform to declared bound(s) {1} diff -r 90adb5d6adc7 -r 14ff19ca715f src/share/classes/com/sun/tools/javac/resources/legacy.properties --- a/src/share/classes/com/sun/tools/javac/resources/legacy.properties Mon May 02 09:38:22 2011 -0700 +++ b/src/share/classes/com/sun/tools/javac/resources/legacy.properties Tue May 03 22:17:58 2011 -0700 @@ -266,6 +266,8 @@ com.sun.swing.internal.plaf.basic.resources = tiger legacy com.sun.swing.internal.plaf.metal.resources = tiger legacy com.sun.swing.internal.plaf.synth.resources = tiger legacy +com.sun.tracing = tiger legacy +com.sun.tracing.dtrace = tiger legacy java.applet = tiger legacy java.awt = tiger legacy java.awt.color = tiger legacy diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 6553182 + * @summary This test verifies the -Xdocrootparent option. + * @author Bhavesh Patel + * @library ../lib/ + * @build JavadocTester TestDocRootLink + * @run main TestDocRootLink + */ +public class TestDocRootLink extends JavadocTester { + + private static final String BUG_ID = "6553182"; + private static final String[][] TEST1 = { + {BUG_ID + FS + "pkg1" + FS + "C1.html", + "" + }, + {BUG_ID + FS + "pkg1" + FS + "package-summary.html", + "" + } + }; + private static final String[][] NEGATED_TEST1 = { + {BUG_ID + FS + "pkg1" + FS + "C1.html", + "" + }, + {BUG_ID + FS + "pkg1" + FS + "package-summary.html", + "" + } + }; + private static final String[][] TEST2 = { + {BUG_ID + FS + "pkg2" + FS + "C2.html", + "" + }, + {BUG_ID + FS + "pkg2" + FS + "package-summary.html", + "" + } + }; + private static final String[][] NEGATED_TEST2 = { + {BUG_ID + FS + "pkg2" + FS + "C2.html", + "" + }, + {BUG_ID + FS + "pkg2" + FS + "package-summary.html", + "" + } + }; + private static final String[] ARGS1 = + new String[]{ + "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1" + }; + private static final String[] ARGS2 = + new String[]{ + "-d", BUG_ID, "-Xdocrootparent", "http://download.oracle.com/javase/7/docs", "-sourcepath", SRC_DIR, "pkg2" + }; + + /** + * The entry point of the test. + * @param args the array of command line arguments. + */ + public static void main(String[] args) { + TestDocRootLink tester = new TestDocRootLink(); + run(tester, ARGS1, TEST1, NEGATED_TEST1); + run(tester, ARGS2, TEST2, NEGATED_TEST2); + tester.printSummary(); + } + + /** + * {@inheritDoc} + */ + public String getBugId() { + return BUG_ID; + } + + /** + * {@inheritDoc} + */ + public String getBugName() { + return getClass().getName(); + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testDocRootLink/pkg1/C1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocRootLink/pkg1/C1.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg1; + +/** + * Class 1. This is a test. + * Refer Here. Lets see if this works + * or not. + */ +public class C1 {} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testDocRootLink/pkg1/package.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocRootLink/pkg1/package.html Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,18 @@ + + +javax.management package + + +This is a test. +

+ @see + Test document 1 + in particular the + + + Test document 2. + + @since 1.5 + + + diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testDocRootLink/pkg2/C2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocRootLink/pkg2/C2.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg2; + +/** + * Class 1. This is a test. + * Refer Here. Lets see if this works + * or not. + */ +public class C2 {} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testDocRootLink/pkg2/package.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testDocRootLink/pkg2/package.html Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,18 @@ + + +javax.management package + + +This is a test. +

+ @see + Test document 1 + in particular the + + + Test document 2. + + @since 1.5 + + + diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testHelpOption/TestHelpOption.java --- a/test/com/sun/javadoc/testHelpOption/TestHelpOption.java Mon May 02 09:38:22 2011 -0700 +++ b/test/com/sun/javadoc/testHelpOption/TestHelpOption.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, 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 @@ -23,20 +23,19 @@ /* * @test - * @bug 4934778 4777599 + * @bug 4934778 4777599 6553182 * @summary Make sure that the -help option works properly. Make sure * the help link appears in the documentation. * @author jamieh * @library ../lib/ - * @build JavadocTester - * @build TestHelpOption + * @build JavadocTester TestHelpOption * @run main TestHelpOption */ public class TestHelpOption extends JavadocTester { //Test information. - private static final String BUG_ID = "4934778-4777599"; + private static final String BUG_ID = "4934778-4777599-6553182"; //Javadoc arguments. private static final String[] ARGS = new String[] { @@ -79,6 +78,7 @@ {STANDARD_OUTPUT, "-tag "}, {STANDARD_OUTPUT, "-taglet "}, {STANDARD_OUTPUT, "-tagletpath "}, + {STANDARD_OUTPUT, "-Xdocrootparent "}, {STANDARD_OUTPUT, "-charset "}, {STANDARD_OUTPUT, "-helpfile "}, {STANDARD_OUTPUT, "-linksource "}, diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 6758050 + * @summary Test HTML output for nested generic types. + * @author bpatel + * @library ../lib/ + * @build JavadocTester TestNestedGenerics + * @run main TestNestedGenerics + */ + +public class TestNestedGenerics extends JavadocTester { + + //Test information. + private static final String BUG_ID = "6758050"; + + //Javadoc arguments. + private static final String[] ARGS = new String[]{ + "-d", BUG_ID, "-source", "1.5", "-sourcepath", SRC_DIR, + "pkg" + }; + + //Input for string search tests. + private static final String[][] TEST = { + {BUG_ID + FS + "pkg" + FS + "NestedGenerics.html", + "

" + } + }; + private static final String[][] NEGATED_TEST = NO_TEST; + + /** + * The entry point of the test. + * @param args the array of command line arguments. + */ + public static void main(String[] args) { + TestNestedGenerics tester = new TestNestedGenerics(); + run(tester, ARGS, TEST, NEGATED_TEST); + tester.printSummary(); + } + + /** + * {@inheritDoc} + */ + public String getBugId() { + return BUG_ID; + } + + /** + * {@inheritDoc} + */ + public String getBugName() { + return getClass().getName(); + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testNestedGenerics/pkg/NestedGenerics.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testNestedGenerics/pkg/NestedGenerics.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg; + +import java.util.Map; + +/** Contains {@link #foo} */ +public class NestedGenerics { + public static void foo(Map> map) {} +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/C2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/C2.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/** + * Another test class. + * + * @author Bhavesh Patel + */ +public class C2 { + + public static enum ModalExclusionType { + /** + * Test comment. + */ + NO_EXCLUDE, + /** + * Another comment. + */ + APPLICATION_EXCLUDE + }; + + /** + * A string constant. + */ + public static final String CONSTANT1 = "C2"; + + /** + * A sample method. + * + * @param param some parameter. + */ + public void method(String param) { + + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/FooDepr.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/FooDepr.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +import java.util.*; + +/** +* Test Deprecated class +* @deprecated This class is Deprecated. +*/ +public class FooDepr { + + public void method(Vector o){} + +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 6492694 + * @summary Test package deprecation. + * @author bpatel + * @library ../lib/ + * @build JavadocTester TestPackageDeprecation + * @run main TestPackageDeprecation + */ + +public class TestPackageDeprecation extends JavadocTester { + + //Test information. + private static final String BUG_ID = "6492694"; + + //Javadoc arguments. + private static final String[] ARGS1 = new String[]{ + "-d", BUG_ID + "-1", "-source", "1.5", "-sourcepath", SRC_DIR, "-use", "pkg", "pkg1", + SRC_DIR + FS + "C2.java", SRC_DIR + FS + "FooDepr.java" + }; + private static final String[] ARGS2 = new String[]{ + "-d", BUG_ID + "-2", "-source", "1.5", "-sourcepath", SRC_DIR, "-use", "-nodeprecated", + "pkg", "pkg1", SRC_DIR + FS + "C2.java", SRC_DIR + FS + "FooDepr.java" + }; + + //Input for string search tests. + private static final String[][] TEST1 = { + {BUG_ID + "-1" + FS + "pkg1" + FS + "package-summary.html", + "
Deprecated." + NL + + "
This package is Deprecated.
" + }, + {BUG_ID + "-1" + FS + "deprecated-list.html", + "
  • Deprecated Packages
  • " + } + }; + private static final String[][] TEST2 = NO_TEST; + private static final String[][] NEGATED_TEST1 = NO_TEST; + private static final String[][] NEGATED_TEST2 = { + {BUG_ID + "-2" + FS + "overview-summary.html", "pkg1"}, + {BUG_ID + "-2" + FS + "allclasses-frame.html", "FooDepr"} + }; + + /** + * The entry point of the test. + * @param args the array of command line arguments. + */ + public static void main(String[] args) { + TestPackageDeprecation tester = new TestPackageDeprecation(); + run(tester, ARGS1, TEST1, NEGATED_TEST1); + run(tester, ARGS2, TEST2, NEGATED_TEST2); + if ((new java.io.File(BUG_ID + "-2" + FS + "pkg1" + FS + + "package-summary.html")).exists()) { + throw new Error("Test Fails: packages summary should not be" + + "generated for deprecated package."); + } else { + System.out.println("Test passes: package-summary.html not found."); + } + if ((new java.io.File(BUG_ID + "-2" + FS + "FooDepr.html")).exists()) { + throw new Error("Test Fails: FooDepr should not be" + + "generated as it is deprecated."); + } else { + System.out.println("Test passes: FooDepr.html not found."); + } + tester.printSummary(); + } + + /** + * {@inheritDoc} + */ + public String getBugId() { + return BUG_ID; + } + + /** + * {@inheritDoc} + */ + public String getBugName() { + return getClass().getName(); + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/pkg/A.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/pkg/A.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg; + +public class A { + /** Test constant. */ + public static final String DEMO= "y"; + public static final String THIS_IS_OK= "(x)"; + + public String DEMO_STRING = ""; + + public A() { + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/pkg1/ClassUseTest1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/pkg1/ClassUseTest1.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg1; + +public class ClassUseTest1 { + + public T method(T t) { + return null; + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/pkg1/Foo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/pkg1/Foo.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg1; + +import java.util.*; + +/** +* Test Deprecated class +* @deprecated This class is Deprecated. +*/ +public class Foo { + + public void method(Vector o){} + +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/pkg1/Foo2.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/pkg1/Foo2.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2011, 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. + * + * 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 pkg1; + +public interface Foo2 {} diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testPackageDeprecation/pkg1/package-info.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/com/sun/javadoc/testPackageDeprecation/pkg1/package-info.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/** + * Test pkg1 used. + * @deprecated This package is Deprecated. + */ +package pkg1; diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testStylesheet/TestStylesheet.java --- a/test/com/sun/javadoc/testStylesheet/TestStylesheet.java Mon May 02 09:38:22 2011 -0700 +++ b/test/com/sun/javadoc/testStylesheet/TestStylesheet.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2011, 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 @@ -23,19 +23,18 @@ /* * @test - * @bug 4494033 + * @bug 4494033 7028815 * @summary Run tests on doclet stylesheet. * @author jamieh * @library ../lib/ - * @build JavadocTester - * @build TestStylesheet + * @build JavadocTester TestStylesheet * @run main TestStylesheet */ public class TestStylesheet extends JavadocTester { //Test information. - private static final String BUG_ID = "4494033"; + private static final String BUG_ID = "4494033-7028815"; //Javadoc arguments. private static final String[] ARGS = new String[] { @@ -56,15 +55,18 @@ "body {" + NL + " font-family:Helvetica, Arial, sans-serif;" + NL + " color:#000000;" + NL + "}"}, {BUG_ID + FS + "stylesheet.css", - "dl dd ul li {" + NL + " list-style:none;" + NL + - " margin:10px 0 10px 0;" + NL + "}"}, + "ul {" + NL + " margin:10px 0 10px 20px;" + NL + + " list-style-type:disc;" + NL + "}"}, // Test whether a link to the stylesheet file is inserted properly // in the class documentation. {BUG_ID + FS + "pkg" + FS + "A.html", ""} }; - private static final String[][] NEGATED_TEST = NO_TEST; + private static final String[][] NEGATED_TEST = { + {BUG_ID + FS + "stylesheet.css", + "* {" + NL + " margin:0;" + NL + " padding:0;" + NL + "}"} + }; /** * The entry point of the test. diff -r 90adb5d6adc7 -r 14ff19ca715f test/com/sun/javadoc/testSubTitle/TestSubTitle.java --- a/test/com/sun/javadoc/testSubTitle/TestSubTitle.java Mon May 02 09:38:22 2011 -0700 +++ b/test/com/sun/javadoc/testSubTitle/TestSubTitle.java Tue May 03 22:17:58 2011 -0700 @@ -37,8 +37,7 @@ private static final String BUG_ID = "7010342"; private static final String[][] TEST = { {BUG_ID + FS + "pkg" + FS + "package-summary.html", - "
    " + NL + "
    This is the " + - "description of package pkg.
    " + NL + "
    " + "
    This is the description of package pkg.
    " }, {BUG_ID + FS + "pkg" + FS + "C.html", "
    pkg
    " diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/6558548/T6558548.java --- a/test/tools/javac/6558548/T6558548.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/6558548/T6558548.java Tue May 03 22:17:58 2011 -0700 @@ -1,9 +1,9 @@ /* * @test /nodynamiccopyright/ - * @bug 6558548 + * @bug 6558548 7039937 * @summary The compiler needs to be aligned with clarified specification of throws * @compile/fail/ref=T6558548_latest.out -XDrawDiagnostics T6558548.java - * @compile/fail/ref=T6558548_6.out -source 6 -XDrawDiagnostics T6558548.java + * @compile/fail/ref=T6558548_6.out -source 6 -Xlint:-options -XDrawDiagnostics T6558548.java */ class T6558548 { @@ -12,7 +12,7 @@ void checked() throws InterruptedException {} void runtime() throws IllegalArgumentException {} - void m1() { + void m1a() { try { throw new java.io.FileNotFoundException(); } @@ -20,7 +20,7 @@ catch(java.io.IOException exc) { } // 6: ok; latest: unreachable } - void m1a() { + void m1b() { try { throw new java.io.IOException(); } @@ -28,11 +28,20 @@ catch(java.io.IOException exc) { } //ok } - void m2() { + void m1c() { try { - nothing(); + throw new java.io.FileNotFoundException(); } - catch(Exception exc) { } // ok + catch(java.io.FileNotFoundException exc) { } + catch(Exception ex) { } //ok (Exception/Throwable always allowed) + } + + void m1d() { + try { + throw new java.io.FileNotFoundException(); + } + catch(java.io.FileNotFoundException exc) { } + catch(Throwable ex) { } //ok (Exception/Throwable always allowed) } void m3() { @@ -131,7 +140,7 @@ runtime(); } catch(RuntimeException exc) { } - catch(Exception exc) { } //6: ok; latest: unreachable + catch(Exception exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m17() { @@ -139,7 +148,7 @@ nothing(); } catch(RuntimeException exc) { } - catch(Exception exc) { } //6: ok; latest: unreachable + catch(Exception exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m18() { @@ -148,7 +157,7 @@ } catch(RuntimeException exc) { } catch(InterruptedException exc) { } - catch(Exception exc) { } //6: ok; latest: unreachable + catch(Exception exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m19() { @@ -157,7 +166,7 @@ } catch(RuntimeException exc) { } catch(InterruptedException exc) { } //never thrown in try - catch(Exception exc) { } //6: ok; latest: unreachable + catch(Exception exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m20() { @@ -166,7 +175,7 @@ } catch(RuntimeException exc) { } catch(InterruptedException exc) { } //never thrown in try - catch(Exception exc) { } //6: ok; latest: unreachable + catch(Exception exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m21() { @@ -182,7 +191,7 @@ runtime(); } catch(RuntimeException exc) { } - catch(Exception exc) { } // 6: ok; latest: unreachable + catch(Exception exc) { } // 6: ok; latest: ok (Exception/Throwable always allowed) } void m23() { @@ -190,7 +199,7 @@ nothing(); } catch(RuntimeException exc) { } - catch(Exception exc) { } // 6: ok; latest: unreachable + catch(Exception exc) { } // 6: ok; latest: ok (Exception/Throwable always allowed) } void m24() { @@ -208,7 +217,7 @@ } catch(RuntimeException exc) { } catch(Error exc) { } - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m26() { @@ -217,7 +226,7 @@ } catch(RuntimeException exc) { } catch(Error exc) { } - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m27() { @@ -227,7 +236,7 @@ catch(RuntimeException exc) { } catch(Error exc) { } catch(InterruptedException exc) { } - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m28() { @@ -237,7 +246,7 @@ catch(RuntimeException exc) { } catch(Error exc) { } catch(InterruptedException exc) { } //never thrown in try - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m29() { @@ -247,7 +256,7 @@ catch(RuntimeException exc) { } catch(Error exc) { } catch(InterruptedException exc) { } //never thrown in try - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m30() { @@ -265,7 +274,7 @@ } catch(RuntimeException exc) { } catch(Error exc) { } - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m32() { @@ -274,7 +283,7 @@ } catch(RuntimeException exc) { } catch(Error exc) { } - catch(Throwable exc) { } //6: ok; latest: unreachable + catch(Throwable exc) { } //6: ok; latest: ok (Exception/Throwable always allowed) } void m33() { diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/6558548/T6558548_6.out --- a/test/tools/javac/6558548/T6558548_6.out Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/6558548/T6558548_6.out Tue May 03 22:17:58 2011 -0700 @@ -1,9 +1,7 @@ -- compiler.warn.source.no.bootclasspath: 1.6 -T6558548.java:159:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException T6558548.java:168:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:239:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:249:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:291:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:298:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:177:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:248:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:258:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:300:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:307:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException 6 errors -1 warning diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/6558548/T6558548_latest.out --- a/test/tools/javac/6558548/T6558548_latest.out Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/6558548/T6558548_latest.out Tue May 03 22:17:58 2011 -0700 @@ -1,23 +1,9 @@ T6558548.java:20:9: compiler.warn.unreachable.catch: java.io.FileNotFoundException -T6558548.java:134:9: compiler.warn.unreachable.catch: java.lang.RuntimeException -T6558548.java:142:9: compiler.warn.unreachable.catch: java.lang.RuntimeException -T6558548.java:151:9: compiler.warn.unreachable.catch.1: java.lang.InterruptedException,java.lang.RuntimeException -T6558548.java:159:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:160:9: compiler.warn.unreachable.catch: java.lang.RuntimeException T6558548.java:168:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:169:9: compiler.warn.unreachable.catch: java.lang.RuntimeException -T6558548.java:185:9: compiler.warn.unreachable.catch: java.lang.RuntimeException -T6558548.java:193:9: compiler.warn.unreachable.catch: java.lang.RuntimeException -T6558548.java:211:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:220:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:230:9: compiler.warn.unreachable.catch.1: java.lang.InterruptedException,java.lang.RuntimeException,java.lang.Error -T6558548.java:239:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:240:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:249:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:250:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:268:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:277:9: compiler.warn.unreachable.catch.1: java.lang.RuntimeException,java.lang.Error -T6558548.java:291:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException -T6558548.java:298:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:177:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:248:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:258:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:300:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException +T6558548.java:307:9: compiler.err.except.never.thrown.in.try: java.lang.InterruptedException 6 errors -15 warnings +1 warning diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/T7040104.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T7040104.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 7040104 + * @summary javac NPE on Object a[]; Object o = (a=null)[0]; + */ + +public class T7040104 { + public static void main(String[] args) { + T7040104 t = new T7040104(); + t.test1(); + t.test2(); + t.test3(); + if (t.npeCount != 3) { + throw new AssertionError(); + } + } + + int npeCount = 0; + + void test1() { + Object a[]; + try { + Object o = (a = null)[0]; + } + catch (NullPointerException npe) { + npeCount++; + } + } + + void test2() { + Object a[][]; + try { + Object o = (a = null)[0][0]; + } + catch (NullPointerException npe) { + npeCount++; + } + } + + void test3() { + Object a[][][]; + try { + Object o = (a = null)[0][0][0]; + } + catch (NullPointerException npe) { + npeCount++; + } + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/annotations/6550655/T6550655.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/annotations/6550655/T6550655.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/** + * @test + * @bug 6550655 + * @summary javac crashes when compiling against an annotated class + */ + +import java.io.File; +import java.net.URI; +import java.util.Arrays; + +import javax.tools.Diagnostic; +import javax.tools.DiagnosticListener; +import javax.tools.JavaCompiler; +import javax.tools.JavaCompiler.CompilationTask; +import javax.tools.JavaFileObject; +import javax.tools.SimpleJavaFileObject; +import javax.tools.ToolProvider; + +public class T6550655 { + + JavaCompiler javacTool; + File testDir; + TestKind testKind; + EnumActionKind actionKind; + + String testSource = "enum E { NORTH, SOUTH, WEST, EAST; }\n" + + "@I(val = E.NORTH)class A {}\n" + + "@interface I { E val(); }"; + + T6550655(JavaCompiler javacTool, File testDir, TestKind testKind, EnumActionKind actionKind) { + this.javacTool = javacTool; + this.testDir = testDir; + this.testKind = testKind; + this.actionKind = actionKind; + } + + void test() { + testDir.mkdirs(); + compile(null, new JavaSource("Test.java", testSource)); + actionKind.doAction(this); + compile(new DiagnosticChecker(), testKind.source); + } + + void compile(DiagnosticChecker dc, JavaSource... sources) { + try { + CompilationTask ct = javacTool.getTask(null, null, dc, + Arrays.asList("-d", testDir.getAbsolutePath(), "-cp", testDir.getAbsolutePath()), + null, Arrays.asList(sources)); + ct.call(); + } + catch (Exception e) { + error("Internal compilation error"); + } + } + + void replaceEnum(String newSource) { + compile(null, new JavaSource("Replace.java", newSource)); + }; + + void removeEnum() { + File enumClass = new File(testDir, "E.class"); + if (!enumClass.exists()) { + error("Expected file E.class does not exists in folder " + testDir); + } + enumClass.delete(); + }; + + void error(String msg) { + System.err.println(msg); + nerrors++; + } + + class DiagnosticChecker implements DiagnosticListener { + + String[][] expectedKeys = new String[][] { + // DIRECT, INDIRECT + {/*REPLACE1*/ "compiler.err.cant.resolve.location" , "compiler.warn.unknown.enum.constant" }, + {/*REPLACE2*/ "compiler.err.cant.resolve.location.args", "compiler.warn.annotation.method.not.found" }, + {/*REMOVE*/ "compiler.err.cant.resolve" , "compiler.warn.unknown.enum.constant.reason" } }; + + String keyToIgnore = "compiler.err.attribute.value.must.be.constant"; + + public void report(Diagnostic diagnostic) { + String expectedCode = expectedKeys[actionKind.ordinal()][testKind.ordinal()]; + if (!diagnostic.getCode().equals(keyToIgnore) && + !diagnostic.getCode().equals(expectedCode)) { + error("Unexpected diagnostic" + + "\nfound " + diagnostic.getCode() + + "\nexpected " + expectedCode + + "\ntestKind " + testKind + + "\nactionKind " + actionKind); + } + } + } + + //global declarations + + enum EnumActionKind { + REPLACE1("enum E { SOUTH, WEST, EAST; }") { + @Override + void doAction(T6550655 test) { + test.replaceEnum(optionalSource); + } + }, + REPLACE2("@interface I { E valNew() default E.EAST; }") { + @Override + void doAction(T6550655 test) { + test.replaceEnum(optionalSource); + } + }, + REMOVE(null) { + @Override + void doAction(T6550655 test) { test.removeEnum(); } + }; + + String optionalSource; + + private EnumActionKind(String optionalSource) { + this.optionalSource = optionalSource; + } + + abstract void doAction(T6550655 test); + } + + enum TestKind { + DIRECT("@I(val = E.NORTH)class C1 {}"), + INDIRECT("class C2 { A a; }"); + + JavaSource source; + + private TestKind(final String code) { + this.source = new JavaSource("Test.java", code); + } + } + + public static void main(String[] args) throws Exception { + String SCRATCH_DIR = System.getProperty("user.dir"); + JavaCompiler javacTool = ToolProvider.getSystemJavaCompiler(); + int n = 0; + for (TestKind testKind : TestKind.values()) { + for (EnumActionKind actionKind : EnumActionKind.values()) { + File testDir = new File(SCRATCH_DIR, "test"+n); + new T6550655(javacTool, testDir, testKind, actionKind).test(); + n++; + } + } + if (nerrors > 0) { + throw new AssertionError("Some errors have been detected"); + } + } + + static class JavaSource extends SimpleJavaFileObject { + + String source; + + public JavaSource(String filename, String source) { + super(URI.create("myfo:/" + filename), JavaFileObject.Kind.SOURCE); + this.source = source; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + return source; + } + } + + static int nerrors = 0; +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/diags/examples.not-yet.txt --- a/test/tools/javac/diags/examples.not-yet.txt Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/diags/examples.not-yet.txt Tue May 03 22:17:58 2011 -0700 @@ -41,7 +41,6 @@ compiler.err.type.var.more.than.once.in.result # UNUSED compiler.err.undetermined.type compiler.err.unexpected.type -compiler.err.unknown.enum.constant # in bad class file compiler.err.unsupported.cross.fp.lit # Scanner: host system dependent compiler.err.wrong.target.for.polymorphic.signature.definition # Transitional 292 compiler.misc.assignment.from.super-bound @@ -112,3 +111,5 @@ compiler.warn.unchecked.assign # DEAD, replaced by compiler.misc.unchecked.assign compiler.warn.unchecked.cast.to.type # DEAD, replaced by compiler.misc.unchecked.cast.to.type compiler.warn.unexpected.archive.file # Paths: zip file with unknown extn +compiler.warn.unknown.enum.constant # in bad class file +compiler.warn.unknown.enum.constant.reason # in bad class file diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/diags/examples/DiamondAndExplicitParams.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/diags/examples/DiamondAndExplicitParams.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +// key: compiler.misc.diamond.and.explicit.params +// key: compiler.err.cant.apply.diamond.1 + +class DiamondAndAnonClass { + static class Foo { + Foo() {} + } + void m() { + Foo foo = new Foo<>(); + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/diags/examples/UnreachableCatch1.java --- a/test/tools/javac/diags/examples/UnreachableCatch1.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/diags/examples/UnreachableCatch1.java Tue May 03 22:17:58 2011 -0700 @@ -23,14 +23,21 @@ // key: compiler.warn.unreachable.catch.1 +import java.io.*; + class UnreachableCatch1 { void test() { try { - throw new IllegalArgumentException(); + if (true) { + throw new FileNotFoundException(); + } + else { + throw new EOFException(); + } } - catch(Error err) { } - catch(RuntimeException rex) { } - catch(Throwable t) { } //unreachable + catch(FileNotFoundException fnf) { } + catch(EOFException eof) { } + catch(IOException ex) { } //unreachable } } diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/7034511/T7034511a.java --- a/test/tools/javac/generics/7034511/T7034511a.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/generics/7034511/T7034511a.java Tue May 03 22:17:58 2011 -0700 @@ -1,6 +1,7 @@ /* * @test /nodynamiccopyright/ - * @bug 7034511 + * @ignore backing out 7034511, see 7040883 + * @bug 7034511 7040883 * @summary Loophole in typesafety * @compile/fail/ref=T7034511a.out -XDrawDiagnostics T7034511a.java */ diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/7034511/T7034511b.java --- a/test/tools/javac/generics/7034511/T7034511b.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/generics/7034511/T7034511b.java Tue May 03 22:17:58 2011 -0700 @@ -1,6 +1,7 @@ /* * @test /nodynamiccopyright/ - * @bug 7034511 + * @ignore backing out 7034511, see 7040883 + * @bug 7034511 7040883 * @summary Loophole in typesafety * @compile/fail/ref=T7034511b.out -XDrawDiagnostics T7034511b.java */ diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/GenericConstructorAndDiamondTest.java --- a/test/tools/javac/generics/diamond/7030150/GenericConstructorAndDiamondTest.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/generics/diamond/7030150/GenericConstructorAndDiamondTest.java Tue May 03 22:17:58 2011 -0700 @@ -23,7 +23,7 @@ /* * @test - * @bug 7030150 + * @bug 7030150 7039931 * @summary Type inference for generic instance creation failed for formal type parameter */ @@ -125,6 +125,14 @@ default: return false; } } + + boolean matches(TypeArgumentKind other) { + switch (other) { + case STRING: return this != INTEGER; + case INTEGER: return this != STRING; + default: return true; + } + } } enum ArgumentKind { @@ -149,9 +157,11 @@ for (TypeArgumentKind declArgKind : TypeArgumentKind.values()) { for (TypeArgArity arity : TypeArgArity.values()) { for (TypeArgumentKind useArgKind : TypeArgumentKind.values()) { - for (ArgumentKind argKind : ArgumentKind.values()) { - new GenericConstructorAndDiamondTest(boundKind, constructorKind, - declArgKind, arity, useArgKind, argKind).run(comp, fm); + for (TypeArgumentKind diamondArgKind : TypeArgumentKind.values()) { + for (ArgumentKind argKind : ArgumentKind.values()) { + new GenericConstructorAndDiamondTest(boundKind, constructorKind, + declArgKind, arity, useArgKind, diamondArgKind, argKind).run(comp, fm); + } } } } @@ -165,18 +175,21 @@ TypeArgumentKind declTypeArgumentKind; TypeArgArity useTypeArgArity; TypeArgumentKind useTypeArgumentKind; + TypeArgumentKind diamondTypeArgumentKind; ArgumentKind argumentKind; JavaSource source; DiagnosticChecker diagChecker; GenericConstructorAndDiamondTest(BoundKind boundKind, ConstructorKind constructorKind, TypeArgumentKind declTypeArgumentKind, TypeArgArity useTypeArgArity, - TypeArgumentKind useTypeArgumentKind, ArgumentKind argumentKind) { + TypeArgumentKind useTypeArgumentKind, TypeArgumentKind diamondTypeArgumentKind, + ArgumentKind argumentKind) { this.boundKind = boundKind; this.constructorKind = constructorKind; this.declTypeArgumentKind = declTypeArgumentKind; this.useTypeArgArity = useTypeArgArity; this.useTypeArgumentKind = useTypeArgumentKind; + this.diamondTypeArgumentKind = diamondTypeArgumentKind; this.argumentKind = argumentKind; this.source = new JavaSource(); this.diagChecker = new DiagnosticChecker(); @@ -189,7 +202,7 @@ "}\n" + "class Test {\n" + "void test() {\n" + - "Foo#TA1 f = new #TA2 Foo<>(#A);\n" + + "Foo#TA1 f = new #TA2 Foo<#TA3>(#A);\n" + "}\n" + "}\n"; @@ -201,6 +214,7 @@ replace("#CK", constructorKind.constrStr) .replace("#TA1", declTypeArgumentKind.getArgs(TypeArgArity.ONE)) .replace("#TA2", useTypeArgumentKind.getArgs(useTypeArgArity)) + .replace("#TA3", diamondTypeArgumentKind.typeargStr) .replace("#A", argumentKind.argStr); } @@ -227,9 +241,15 @@ boolean badMethodTypeArg = constructorKind != ConstructorKind.NON_GENERIC && !useTypeArgumentKind.matches(argumentKind); - boolean badGenericType = !boundKind.matches(declTypeArgumentKind); + boolean badExplicitParams = (useTypeArgumentKind != TypeArgumentKind.NONE && + diamondTypeArgumentKind == TypeArgumentKind.NONE) || + !boundKind.matches(diamondTypeArgumentKind); - boolean shouldFail = badActual || badArity || badMethodTypeArg || badGenericType; + boolean badGenericType = !boundKind.matches(declTypeArgumentKind) || + !diamondTypeArgumentKind.matches(declTypeArgumentKind); + + boolean shouldFail = badActual || badArity || + badMethodTypeArg || badExplicitParams || badGenericType; if (shouldFail != diagChecker.errorFound) { throw new Error("invalid diagnostics for source:\n" + diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg01.java --- a/test/tools/javac/generics/diamond/7030150/Neg01.java Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 7030150 - * @summary Type inference for generic instance creation failed for formal type parameter - * check that explicit type-argument that causes resolution failure is rejected - * @compile/fail/ref=Neg01.out -XDrawDiagnostics Neg01.java - */ - -class Neg01 { - - static class Foo { - Foo(T t) {} - } - - Foo fi1 = new Foo<>(1); - Foo fi2 = new Foo(1); -} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg01.out --- a/test/tools/javac/generics/diamond/7030150/Neg01.out Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -Neg01.java:15:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg01.Foo), (compiler.misc.infer.no.conforming.assignment.exists: X, int, java.lang.String) -Neg01.java:16:24: compiler.err.cant.apply.symbol.1: kindname.constructor, Foo, T, int, kindname.class, Neg01.Foo, (compiler.misc.no.conforming.assignment.exists: int, java.lang.String) -2 errors diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg02.java --- a/test/tools/javac/generics/diamond/7030150/Neg02.java Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 7030150 - * @summary Type inference for generic instance creation failed for formal type parameter - * check that compiler rejects bad number of explicit type-arguments - * @compile/fail/ref=Neg02.out -XDrawDiagnostics Neg02.java - */ - -class Neg02 { - - static class Foo { - Foo(T t) {} - } - - Foo fi1 = new Foo<>(""); - Foo fi2 = new Foo(""); -} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg02.out --- a/test/tools/javac/generics/diamond/7030150/Neg02.out Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -Neg02.java:15:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg02.Foo), (compiler.misc.arg.length.mismatch) -Neg02.java:16:24: compiler.err.cant.apply.symbol.1: kindname.constructor, Foo, T, java.lang.String, kindname.class, Neg02.Foo, (compiler.misc.arg.length.mismatch) -2 errors diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg03.java --- a/test/tools/javac/generics/diamond/7030150/Neg03.java Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 7030150 - * @summary Type inference for generic instance creation failed for formal type parameter - * check that explicit type-argument that does not conform to bound is rejected - * @compile/fail/ref=Neg03.out -XDrawDiagnostics Neg03.java - */ - -class Neg03 { - - static class Foo { - Foo(T t) {} - } - - Foo fi1 = new Foo<>(1); - Foo fi2 = new Foo(1); -} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Neg03.out --- a/test/tools/javac/generics/diamond/7030150/Neg03.out Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -Neg03.java:15:24: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg03.Foo), (compiler.misc.explicit.param.do.not.conform.to.bounds: java.lang.String, java.lang.Integer) -Neg03.java:16:24: compiler.err.cant.apply.symbol.1: kindname.constructor, Foo, T, int, kindname.class, Neg03.Foo, (compiler.misc.explicit.param.do.not.conform.to.bounds: java.lang.String, java.lang.Integer) -2 errors diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Pos01.java --- a/test/tools/javac/generics/diamond/7030150/Pos01.java Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2011, 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. - * - * 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. - */ - -/* - * @test - * @bug 7030150 - * @summary Type inference for generic instance creation failed for formal type parameter - * check that redundant type-arguments on non-generic constructor are accepted - * @compile Pos01.java - */ - -class Pos01 { - - static class Foo { - Foo(X t) {} - } - - Foo fi1 = new Foo<>(1); - Foo fi2 = new Foo(1); - Foo fi3 = new Foo<>(1); - Foo fi4 = new Foo(1); - Foo fi5 = new Foo<>(1); - Foo fi6 = new Foo(1); -} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/diamond/7030150/Pos02.java --- a/test/tools/javac/generics/diamond/7030150/Pos02.java Mon May 02 09:38:22 2011 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2011, 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. - * - * 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. - */ - -/* - * @test - * @bug 7030150 - * @summary Type inference for generic instance creation failed for formal type parameter - * check that diamond in return context works w/o problems - * @compile Pos02.java - */ - -class Pos02 { - - Pos02(X x) {} - - - Pos02 test(X x) { - return new Pos02<>(x); - } -} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/typevars/T7040883.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/typevars/T7040883.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 7040883 7034511 + * @summary Compilation error: "length in Array is defined in an inaccessible class or interface" + * @compile T7040883.java + */ + +public class T7040883 { + + Z[] getListeners(Class z) { return null; } + + void test(String s) { + int i = getListeners(s.getClass()).length; + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/wildcards/7034495/T7034495.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/wildcards/7034495/T7034495.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2008, 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. + * + * 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. + */ + +/* + * @test + * @bug 7034495 + * @summary Javac asserts on usage of wildcards in bounds + * @compile/fail/ref=T7034495.out -XDrawDiagnostics T7034495.java + */ +class T7034495 { + + interface A { + T foo(); + } + + interface B { + T foo(); + } + + interface C & B> { } + +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/generics/wildcards/7034495/T7034495.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/generics/wildcards/7034495/T7034495.out Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,2 @@ +T7034495.java:40:17: compiler.err.types.incompatible.diff.ret: T7034495.B, T7034495.A, foo() +1 error diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/Neg07.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/multicatch/Neg07.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,50 @@ +/* + * @test /nodynamiccopyright/ + * @bug 7039822 + * @summary Verify typing of lub of exception parameter w.r.t getClass + * @author Joseph D. Darcy + * @compile/fail/ref=Neg07.out -XDrawDiagnostics Neg07.java + */ + +public class Neg07 { + private static void test(int i) { + try { + thrower(i); + } catch (SonException | DaughterException e) { + Class clazz2 = e.getClass(); // Rejected! + HasFoo m = e; + e.foo(); + } + } + + private static interface HasFoo { + void foo(); + } + + static void thrower(int i) throws SonException, DaughterException { + if (i == 0) + throw new SonException(); + else + throw new DaughterException(); + } + + private static class ParentException extends RuntimeException {} + + private static class SonException + extends ParentException + implements HasFoo { + + public void foo() { + System.out.println("SonException.foo"); + } + } + + private static class DaughterException + extends ParentException + implements HasFoo { + + public void foo() { + System.out.println("DaughterException.foo"); + } + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/Neg07.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/multicatch/Neg07.out Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,2 @@ +Neg07.java:14:56: compiler.err.prob.found.req: (compiler.misc.incompatible.types), java.lang.Class, java.lang.Class +1 error diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/Pos10.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/multicatch/Pos10.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 7039822 + * @summary Verify lub of an exception parameter can be an intersection type + * @author Joseph D. Darcy + */ + +public class Pos10 { + public static void main(String... args) { + test(0); + test(1); + + if (record != 0b11) + throw new RuntimeException("Unexpected exception execution: " + + record); + if (closeRecord != 0b11) + throw new RuntimeException("Unexpected close execution: " + + closeRecord); + } + + private static int record = 0; + private static int closeRecord = 0; + + private static void test(int i) { + try { + thrower(i); + } catch (SonException | DaughterException e) { + Class clazz = e.getClass(); + HasFoo m = e; + e.foo(); + + try (AutoCloseable ac = e) { + e.toString(); + } catch(Exception except) { + throw new RuntimeException(except); + } + } + } + + private static interface HasFoo { + void foo(); + } + + private static void thrower(int i) throws SonException, DaughterException { + if (i == 0) + throw new SonException(); + else + throw new DaughterException(); + } + + private static class ParentException extends RuntimeException {} + + private static class SonException + extends ParentException + implements HasFoo, AutoCloseable { + + public void foo() { + record |= 0b01; + } + + @Override + public void close() { + closeRecord |= 0b01; + } + } + + private static class DaughterException + extends ParentException + implements HasFoo, AutoCloseable { + + public void foo() { + record |= 0b10; + } + + @Override + public void close() { + closeRecord |= 0b10; + } + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/model/Model01.java --- a/test/tools/javac/multicatch/model/Model01.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/multicatch/model/Model01.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2011, 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 @@ -43,6 +43,6 @@ else throw new B2(); } - catch(B1 | B2 ex) { } + catch(@UnionTypeInfo({"Test.B1", "Test.B2"}) B1 | B2 ex) { } } } diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/model/ModelChecker.java --- a/test/tools/javac/multicatch/model/ModelChecker.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/multicatch/model/ModelChecker.java Tue May 03 22:17:58 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2011 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 @@ -30,7 +30,7 @@ * @compile -processor ModelChecker Model01.java */ -import com.sun.source.tree.VariableTree; +import com.sun.source.tree.CatchTree; import com.sun.source.util.TreePathScanner; import com.sun.source.util.Trees; import com.sun.source.util.TreePath; @@ -41,6 +41,12 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.TypeElement; +import javax.lang.model.type.TypeMirror; +import javax.lang.model.type.TypeKind; +import javax.lang.model.type.UnionType; +import javax.lang.model.type.UnknownTypeException; +import javax.lang.model.util.SimpleTypeVisitor6; +import javax.lang.model.util.SimpleTypeVisitor7; @SupportedAnnotationTypes("Check") public class ModelChecker extends JavacTestingAbstractProcessor { @@ -69,20 +75,59 @@ } @Override - public Void visitVariable(VariableTree node, Void p) { - Element ex = trees.getElement(getCurrentPath()); + public Void visitCatch(CatchTree node, Void p) { + TreePath param = new TreePath(getCurrentPath(), node.getParameter()); + Element ex = trees.getElement(param); + validateUnionTypeInfo(ex); if (ex.getSimpleName().contentEquals("ex")) { assertTrue(ex.getKind() == ElementKind.EXCEPTION_PARAMETER, "Expected EXCEPTION_PARAMETER - found " + ex.getKind()); - for (Element e : types.asElement(ex.asType()).getEnclosedElements()) { + for (Element e : types.asElement(trees.getLub(node)).getEnclosedElements()) { Member m = e.getAnnotation(Member.class); if (m != null) { assertTrue(e.getKind() == m.value(), "Expected " + m.value() + " - found " + e.getKind()); } } - assertTrue(assertionCount == 3, "Expected 3 assertions - found " + assertionCount); + assertTrue(assertionCount == 9, "Expected 9 assertions - found " + assertionCount); } - return super.visitVariable(node, p); + return super.visitCatch(node, p); + } + } + + private void validateUnionTypeInfo(Element ex) { + UnionTypeInfo ut = ex.getAnnotation(UnionTypeInfo.class); + assertTrue(ut != null, "UnionType annotation must be present"); + + TypeMirror expectedUnionType = ex.asType(); + assertTrue(expectedUnionType.getKind() == TypeKind.UNION, "UNION kind expected"); + + try { + new SimpleTypeVisitor6(){}.visit(expectedUnionType); + throw new RuntimeException("Expected UnknownTypeException not thrown."); + } catch (UnknownTypeException ute) { + ; // Expected } + + UnionType unionType = new SimpleTypeVisitor7(){ + @Override + protected UnionType defaultAction(TypeMirror e, Void p) {return null;} + + @Override + public UnionType visitUnion(UnionType t, Void p) {return t;} + }.visit(expectedUnionType); + assertTrue(unionType != null, "Must get a non-null union type."); + + assertTrue(ut.value().length == unionType.getAlternatives().size(), "Cardinalities do not match"); + + String[] typeNames = ut.value(); + for(int i = 0; i < typeNames.length; i++) { + TypeMirror typeFromAnnotation = nameToType(typeNames[i]); + assertTrue(types.isSameType(typeFromAnnotation, unionType.getAlternatives().get(i)), + "Types were not equal."); + } + } + + private TypeMirror nameToType(String name) { + return elements.getTypeElement(name).asType(); } private static void assertTrue(boolean cond, String msg) { diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/multicatch/model/UnionTypeInfo.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/multicatch/model/UnionTypeInfo.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/** + * Used by ModelChecker to validate the modeling information of a union type. + */ +@interface UnionTypeInfo { + String[] value(); +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/processing/model/TestSymtabItems.java --- a/test/tools/javac/processing/model/TestSymtabItems.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/processing/model/TestSymtabItems.java Tue May 03 22:17:58 2011 -0700 @@ -44,6 +44,7 @@ import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.main.JavaCompiler; import com.sun.tools.javac.model.JavacTypes; import com.sun.tools.javac.util.Context; @@ -62,6 +63,7 @@ JavacFileManager.preRegister(c); Symtab syms = Symtab.instance(c); JavacTypes types = JavacTypes.instance(c); + JavaCompiler.instance(c); // will init ClassReader.sourceCompleter // print("noSymbol", syms.noSymbol); // print("errSymbol", syms.errSymbol); diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/processing/model/type/TestUnionType.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/processing/model/type/TestUnionType.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 7029150 + * @summary Test support for union types + * @library ../../../lib + */ + +import java.net.URI; +import java.util.*; +import javax.annotation.processing.*; +import javax.lang.model.element.*; +import javax.lang.model.type.*; +import javax.lang.model.util.*; +import javax.tools.*; + +import com.sun.source.tree.*; +import com.sun.source.util.*; + + +public class TestUnionType extends JavacTestingAbstractProcessor { + enum TestKind { + SingleType("E1", "E1", + "VariableTree: E1 e", + "VariableTree: elem EXCEPTION_PARAMETER e", + "VariableTree: elem.type DECLARED", + "VariableTree: elem.type.elem CLASS E1", + "VariableTree: type DECLARED", + "VariableTree: type.elem CLASS E1", + "VariableTree: type.elem.type DECLARED"), + + ValidTypes("E1, E2", "E1 | E2", + "VariableTree: E1 | E2 e", + "VariableTree: elem EXCEPTION_PARAMETER e", + "VariableTree: elem.type UNION Test.E1,Test.E2", + "VariableTree: elem.type.elem null", + "VariableTree: type UNION Test.E1,Test.E2", + "VariableTree: type.elem null"), + + InvalidTypes("E1, E2", "E1 | EMissing", + "VariableTree: E1 | EMissing e", + "VariableTree: elem EXCEPTION_PARAMETER e", + "VariableTree: elem.type UNION Test.E1,EMissing", + "VariableTree: elem.type.elem null", + "VariableTree: type UNION Test.E1,EMissing", + "VariableTree: type.elem null"), + + Uncaught("E1", "E1 | E2", + "VariableTree: E1 | E2 e", + "VariableTree: elem EXCEPTION_PARAMETER e", + "VariableTree: elem.type UNION Test.E1,Test.E2", + "VariableTree: elem.type.elem null", + "VariableTree: type UNION Test.E1,Test.E2", + "VariableTree: type.elem null"); + + TestKind(String throwsTypes, String catchTypes, String... gold) { + this.throwsTypes = throwsTypes; + this.catchTypes = catchTypes; + this.gold = Arrays.asList(gold); + } + + final String throwsTypes; + final String catchTypes; + final List gold; + } + + static class TestFileObject extends SimpleJavaFileObject { + public static final String template = + "class Test {\n" + + " class E1 extends Exception { }\n" + + " class E2 extends Exception { }\n" + + " void doSomething() throws #T { }\n" + + " void test() {\n" + + " try {\n" + + " doSomething();\n" + + " } catch (#C e) {\n" + + " }\n" + + " }\n" + + "}\n"; + + public TestFileObject(TestKind tk) { + super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE); + this.tk = tk; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + return template + .replace("#T", tk.throwsTypes) + .replace("#C", tk.catchTypes); + } + final TestKind tk; + } + + public static void main(String... args) throws Exception { + JavaCompiler comp = ToolProvider.getSystemJavaCompiler(); + List options = Arrays.asList("-proc:only"); + for (TestKind tk: TestKind.values()) { + System.err.println("Test: " + tk); + TestUnionType p = new TestUnionType(); + JavaFileObject fo = new TestFileObject(tk); + JavaCompiler.CompilationTask task = comp.getTask(null, null, null, options, null, Arrays.asList(fo)); + task.setProcessors(Arrays.asList(p)); + boolean ok = task.call(); + System.err.println("compilation " + (ok ? "passed" : "failed")); + if (!ok) + throw new Exception("compilation failed unexpectedly"); + if (!p.log.equals(tk.gold)) { + System.err.println("Expected output:"); + for (String g: tk.gold) + System.err.println(g); + throw new Exception("unexpected output from test"); + } + System.err.println(); + } + } + + Trees trees; + List log; + + @Override + public void init(ProcessingEnvironment env) { + super.init(env); + trees = Trees.instance(env); + log = new ArrayList(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + if (!roundEnv.processingOver()) { + for (Element e: roundEnv.getRootElements()) { + scan(trees.getPath(e)); + } + } + return true; + } + + void scan(TreePath path) { + new Scanner().scan(path, null); + } + + class Scanner extends TreePathScanner { + @Override + public Void visitVariable(VariableTree tree, Void ignore) { + TreePath p = getCurrentPath(); + Element e = trees.getElement(p); + if (e.getKind() == ElementKind.EXCEPTION_PARAMETER) { + log("VariableTree: " + tree); + log("VariableTree: elem " + print(e)); + log("VariableTree: elem.type " + print(e.asType())); + log("VariableTree: elem.type.elem " + print(types.asElement(e.asType()))); + TypeMirror tm = trees.getTypeMirror(p); + log("VariableTree: type " + print(tm)); + log("VariableTree: type.elem " + print(types.asElement(tm))); + if (types.asElement(tm) != null) + log("VariableTree: type.elem.type " + print(types.asElement(tm).asType())); + } + return super.visitVariable(tree, null); + } + + String print(TypeMirror tm) { + return (tm == null) ? null : new TypePrinter().visit(tm); + } + + String print(Element e) { + return (e == null) ? null : (e.getKind() + " " + e.getSimpleName()); + } + + void log(String msg) { + System.err.println(msg); + log.add(msg); + } + } + + class TypePrinter extends SimpleTypeVisitor7 { + @Override + protected String defaultAction(TypeMirror tm, Void ignore) { + return String.valueOf(tm.getKind()); + } + + @Override + public String visitUnion(UnionType t, Void ignore) { + return (t.getKind() + " " + t.getAlternatives()); + } + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/scope/7017664/CompoundScopeTest.java --- a/test/tools/javac/scope/7017664/CompoundScopeTest.java Mon May 02 09:38:22 2011 -0700 +++ b/test/tools/javac/scope/7017664/CompoundScopeTest.java Tue May 03 22:17:58 2011 -0700 @@ -23,7 +23,7 @@ /* * @test - * @bug 7017664 + * @bug 7017664 7036906 * @summary Basher for CompoundScopes */ @@ -127,8 +127,17 @@ } } log("testing scope: " + root); - checkElems(root); - checkShadowed(root); + checkElems(root, null); + checkElems(root, new OddFilter()); + checkShadowed(root, null); + checkShadowed(root, new OddFilter()); + } + } + + class OddFilter implements Filter { + public boolean accepts(Symbol s) { + Name numPart = s.name.subName(1, s.name.length()); + return Integer.parseInt(numPart.toString()) % 2 != 0; } } @@ -165,15 +174,20 @@ * Check that CompoundScope.getElements() correctly visits all symbols * in all subscopes (in the correct order) */ - void checkElems(CompoundScope cs) { - List allSymbols = elems; + void checkElems(CompoundScope cs, Filter sf) { int count = 0; - for (Symbol s : cs.getElements()) { + ListBuffer found = ListBuffer.lb(); + List allSymbols = sf == null ? + elems : + filter(elems, sf); + int expectedCount = allSymbols.length(); + for (Symbol s : sf == null ? cs.getElements() : cs.getElements(sf)) { checkSameSymbols(s, allSymbols.head); allSymbols = allSymbols.tail; + found.append(s); count++; } - if (count != elems.size()) { + if (count != expectedCount) { error("CompoundScope.getElements() did not returned enough symbols"); } } @@ -182,22 +196,35 @@ * Check that CompoundScope.getElements() correctly visits all symbols * with a given name in all subscopes (in the correct order) */ - void checkShadowed(CompoundScope cs) { + void checkShadowed(CompoundScope cs, Filter sf) { for (Map.Entry> shadowedEntry : shadowedMap.entrySet()) { int count = 0; - List shadowed = shadowedEntry.getValue(); + List shadowed = sf == null ? + shadowedEntry.getValue() : + filter(shadowedEntry.getValue(), sf); + int expectedCount = shadowed.length(); Name name = shadowedEntry.getKey(); - for (Symbol s : cs.getElementsByName(name)) { + for (Symbol s : sf == null ? cs.getElementsByName(name) : cs.getElementsByName(name, sf)) { checkSameSymbols(s, shadowed.head); shadowed = shadowed.tail; count++; } - if (count != shadowedEntry.getValue().size()) { + if (count != expectedCount) { error("CompoundScope.lookup() did not returned enough symbols for name " + name); } } } + List filter(List elems, Filter sf) { + ListBuffer res = ListBuffer.lb(); + for (Symbol s : elems) { + if (sf.accepts(s)) { + res.append(s); + } + } + return res.toList(); + } + void checkSameSymbols(Symbol found, Symbol req) { if (found != req) { error("Symbol mismatch - found : " + found + ":" + found.hashCode() + "\n" + diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/types/CastObjectToPrimitiveTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/types/CastObjectToPrimitiveTest.java Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2011, 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. + * + * 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. + */ + +/* + * @test + * @bug 7038363 + * @summary cast from object to primitive should be for source >= 1.7 + * @compile/fail/ref=CastObjectToPrimitiveTest.out -XDrawDiagnostics -Xlint:-options -source 5 CastObjectToPrimitiveTest.java + * @compile/fail/ref=CastObjectToPrimitiveTest.out -XDrawDiagnostics -Xlint:-options -source 6 CastObjectToPrimitiveTest.java + * @compile CastObjectToPrimitiveTest.java + */ + +class CastObjectToPrimitiveTest { + void m() { + Object o = 42; + int i = (int) o; + } +} diff -r 90adb5d6adc7 -r 14ff19ca715f test/tools/javac/types/CastObjectToPrimitiveTest.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/types/CastObjectToPrimitiveTest.out Tue May 03 22:17:58 2011 -0700 @@ -0,0 +1,2 @@ +CastObjectToPrimitiveTest.java:36:23: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), java.lang.Object, int +1 error