Merge
This commit is contained in:
commit
a5846fb547
langtools
src/share/classes/com/sun
source/util
tools
doclets
formats/html
ClassUseWriter.javaConfigurationImpl.javaDeprecatedListWriter.javaHtmlDoclet.javaHtmlDocletWriter.javaPackageFrameWriter.javaPackageIndexFrameWriter.javaPackageIndexWriter.javaPackageUseWriter.javaPackageWriterImpl.javaSourceToHTMLConverter.javaTagletWriterImpl.javaTreeWriter.java
markup
resources
internal/toolkit
javac
test
com/sun/javadoc
testDocRootLink
testHelpOption
testNestedGenerics
testPackageDeprecation
testStylesheet
testSubTitle
tools/javac
6558548
T7040104.javaannotations/6550655
diags
generics
7034511
diamond/7030150
typevars
wildcards/7034495
multicatch
processing/model
scope/7017664
types
@ -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.lang.model.type.TypeMirror;
|
||||
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 class Trees {
|
||||
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);
|
||||
}
|
||||
|
@ -149,11 +149,20 @@ public class ClassUseWriter extends SubWriterHolderWriter {
|
||||
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]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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.tools.doclets.internal.toolkit.util.*;
|
||||
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 @@ import java.io.*;
|
||||
* @author Robert Field.
|
||||
* @author Atul Dambalkar.
|
||||
* @author Jamie Ho
|
||||
* @author Bhavesh Patel (Modified)
|
||||
*/
|
||||
public class ConfigurationImpl extends Configuration {
|
||||
|
||||
@ -109,6 +111,11 @@ public class ConfigurationImpl extends Configuration {
|
||||
*/
|
||||
public String stylesheetfile = "";
|
||||
|
||||
/**
|
||||
* Argument for command line option "-Xdocrootparent".
|
||||
*/
|
||||
public String docrootparent = "";
|
||||
|
||||
/**
|
||||
* True if command line option "-nohelp" is used. Default value is false.
|
||||
*/
|
||||
@ -239,6 +246,8 @@ public class ConfigurationImpl extends Configuration {
|
||||
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 @@ public class ConfigurationImpl extends Configuration {
|
||||
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 @@ public class ConfigurationImpl extends Configuration {
|
||||
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",
|
||||
|
@ -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 @@ import com.sun.tools.doclets.formats.html.markup.*;
|
||||
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 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
|
||||
};
|
||||
|
||||
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 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
|
||||
};
|
||||
|
||||
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 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
|
||||
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 @@ public class DeprecatedListWriter extends SubWriterHolderWriter {
|
||||
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);
|
||||
|
@ -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 @@ public class HtmlDoclet extends AbstractDoclet {
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,22 +159,42 @@ public class HtmlDocletWriter extends HtmlDocWriter {
|
||||
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();
|
||||
@ -1394,6 +1414,44 @@ public class HtmlDocletWriter extends HtmlDocWriter {
|
||||
return new StringContent(packageName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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<Doc> 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.
|
||||
*
|
||||
@ -2120,7 +2178,7 @@ public class HtmlDocletWriter extends HtmlDocWriter {
|
||||
}
|
||||
}
|
||||
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 class HtmlDocletWriter extends HtmlDocWriter {
|
||||
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 @@ public class HtmlDocletWriter extends HtmlDocWriter {
|
||||
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 (<a>)
|
||||
//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.
|
||||
|
@ -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 @@ public class PackageFrameWriter extends HtmlDocletWriter {
|
||||
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);
|
||||
|
@ -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 @@ public class PackageIndexFrameWriter extends AbstractPackageIndexWriter {
|
||||
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]));
|
||||
}
|
||||
}
|
||||
|
@ -137,6 +137,8 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
|
||||
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);
|
||||
|
@ -242,11 +242,16 @@ public class PackageUseWriter extends SubWriterHolderWriter {
|
||||
*/
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -114,11 +114,12 @@ public class PackageWriterImpl extends HtmlDocletWriter
|
||||
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, "", "");
|
||||
@ -138,6 +139,28 @@ public class PackageWriterImpl extends HtmlDocletWriter
|
||||
return div;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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}
|
||||
*/
|
||||
|
@ -82,12 +82,20 @@ public class SourceToHTMLConverter {
|
||||
}
|
||||
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 @@ public class SourceToHTMLConverter {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 @@ public class TagletWriterImpl extends TagletWriter {
|
||||
* {@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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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 @@ public class TreeWriter extends AbstractTreeWriter {
|
||||
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");
|
||||
|
@ -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 @@ public enum HtmlStyle {
|
||||
contentContainer,
|
||||
description,
|
||||
details,
|
||||
docSummary,
|
||||
header,
|
||||
horizontal,
|
||||
footer,
|
||||
@ -67,6 +68,7 @@ public enum HtmlStyle {
|
||||
subNavList,
|
||||
subTitle,
|
||||
summary,
|
||||
deprecatedContent,
|
||||
tabEnd,
|
||||
title,
|
||||
topNav;
|
||||
|
@ -68,6 +68,7 @@ doclet.see.class_or_package_not_accessible=Tag {0}: reference not accessible: {1
|
||||
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_Constructors=Deprecated Constructors
|
||||
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 @@ doclet.usage=Provided by Standard doclet:\n\
|
||||
-tag <name>:<locations>:<header> Specify single argument custom tags\n\
|
||||
-taglet The fully qualified name of Taglet to register\n\
|
||||
-tagletpath The path to Taglets\n\
|
||||
-Xdocrootparent <url> Replaces all appearances of @docRoot followed by /.. in doc comments with <url>\n\
|
||||
-charset <charset> Charset for cross-platform viewing of generated documentation.\n\
|
||||
-helpfile <file> Include file that help link links to\n\
|
||||
-linksource Generate source in HTML\n\
|
||||
|
@ -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 @@ public abstract class Configuration {
|
||||
docencoding = encoding;
|
||||
}
|
||||
|
||||
classDocCatalog = new ClassDocCatalog(root.specifiedClasses());
|
||||
classDocCatalog = new ClassDocCatalog(root.specifiedClasses(), this);
|
||||
initTagletManager(customTagStrs);
|
||||
}
|
||||
|
||||
@ -677,15 +677,18 @@ public abstract class Configuration {
|
||||
}
|
||||
|
||||
/**
|
||||
* 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()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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 @@ h4 {
|
||||
}
|
||||
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 @@ Document title and Copyright styles
|
||||
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 @@ Navigation bar styles
|
||||
*/
|
||||
.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 styles
|
||||
/* 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 @@ Navigation bar styles
|
||||
ul.navList li{
|
||||
list-style:none;
|
||||
float:left;
|
||||
padding:3px 4px;
|
||||
padding:0 4px;
|
||||
color:#000000;
|
||||
font-size:0.98em;
|
||||
}
|
||||
@ -142,14 +115,16 @@ ul.navList li.navBarCell1Rev {
|
||||
.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 @@ Page header and footer styles
|
||||
*/
|
||||
.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 @@ Page header and footer styles
|
||||
margin:0;
|
||||
}
|
||||
.subTitle {
|
||||
padding-top:10px;
|
||||
}
|
||||
/*
|
||||
Content styles
|
||||
*/
|
||||
.deprecatedContent {
|
||||
margin:0;
|
||||
padding:10px 0;
|
||||
}
|
||||
.docSummary {
|
||||
padding-top:10px;
|
||||
}
|
||||
/*
|
||||
@ -190,11 +174,11 @@ Page layout container styles
|
||||
.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 @@ Heading styles
|
||||
.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 @@ div.summary ul.blockList ul.blockList li.blockList h3 {
|
||||
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.blockList li.blockList h4,
|
||||
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 @@ Table styles
|
||||
}
|
||||
/* 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 @@ ul.horizontal li {
|
||||
/* Container specific list styles */
|
||||
.indexContainer ul {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
.indexContainer ul li {
|
||||
list-style:none;
|
||||
@ -376,6 +358,7 @@ ul.horizontal li {
|
||||
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 @@ ul.blockList ul.blockList ul.blockList li.blockList {
|
||||
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 @@ dl.nameValue dt, dl.nameValue dd{
|
||||
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{
|
||||
|
@ -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
|
||||
@ -44,13 +44,6 @@ public class DeprecatedTaglet extends BaseTaglet{
|
||||
name = "deprecated";
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public boolean inPackage() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
|
@ -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 com.sun.javadoc.*;
|
||||
import java.util.*;
|
||||
import com.sun.javadoc.*;
|
||||
import com.sun.tools.doclets.internal.toolkit.Configuration;
|
||||
|
||||
/**
|
||||
* This class acts as an artificial PackageDoc for classes specified
|
||||
@ -88,13 +89,16 @@ import java.util.*;
|
||||
*/
|
||||
private Map<String,Set<ClassDoc>> 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 @@ import java.util.*;
|
||||
private void addClass(ClassDoc classdoc, Map<String,Set<ClassDoc>> 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);
|
||||
|
@ -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 @@ public class ClassTree {
|
||||
*/
|
||||
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()) {
|
||||
|
@ -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 @@ package com.sun.tools.doclets.internal.toolkit.util;
|
||||
|
||||
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 @@ public class DeprecatedAPIListBuilder {
|
||||
/**
|
||||
* 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<List<Doc>>();
|
||||
for (int i = 0; i < NUM_TYPES; i++) {
|
||||
deprecatedLists.add(i, new ArrayList<Doc>());
|
||||
}
|
||||
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 @@ public class DeprecatedAPIListBuilder {
|
||||
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 @@ public class DeprecatedAPIListBuilder {
|
||||
}
|
||||
if (cd.isAnnotationType()) {
|
||||
composeDeprecatedList(getList(ANNOTATION_TYPE_MEMBER),
|
||||
((AnnotationTypeDoc) cd).elements());
|
||||
((AnnotationTypeDoc) cd).elements());
|
||||
}
|
||||
}
|
||||
sortDeprecatedLists();
|
||||
|
@ -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 @@ public class IndexBuilder {
|
||||
* 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())));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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 @@ public class PackageListWriter extends PrintWriter {
|
||||
|
||||
protected void generatePackageListFile(RootDoc root) {
|
||||
PackageDoc[] packages = configuration.packages;
|
||||
String[] names = new String[packages.length];
|
||||
ArrayList<String> names = new ArrayList<String>();
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -861,11 +861,15 @@ public class Util {
|
||||
* @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())){
|
||||
|
@ -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.Element;
|
||||
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.Flags;
|
||||
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 @@ public class JavacTrees extends Trees {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -649,7 +649,7 @@ public class Scope {
|
||||
public Iterator<Symbol> iterator() {
|
||||
return new CompoundScopeIterator(subScopes) {
|
||||
Iterator<Symbol> nextIterator(Scope s) {
|
||||
return s.getElements().iterator();
|
||||
return s.getElements(sf).iterator();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -186,6 +186,9 @@ public enum Source {
|
||||
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:
|
||||
|
@ -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 @@ public class Type implements PrimitiveType {
|
||||
}
|
||||
}
|
||||
|
||||
// a clone of a ClassType that knows about the alternatives of a union type.
|
||||
public static class UnionClassType extends ClassType implements UnionType {
|
||||
final List<? extends Type> alternatives_field;
|
||||
|
||||
public UnionClassType(ClassType ct, List<? extends Type> 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<? extends TypeMirror> getAlternatives() {
|
||||
return Collections.unmodifiableList(alternatives_field);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TypeKind getKind() {
|
||||
return TypeKind.UNION;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R, P> R accept(TypeVisitor<R, P> v, P p) {
|
||||
return v.visitUnion(this, p);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ArrayType extends Type
|
||||
implements javax.lang.model.type.ArrayType {
|
||||
|
||||
|
@ -74,8 +74,9 @@ public class Types {
|
||||
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<Warner> warnStack = List.nil();
|
||||
final Name capturedName;
|
||||
@ -92,9 +93,11 @@ public class Types {
|
||||
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("<captured wildcard>");
|
||||
messages = JavacMessages.instance(context);
|
||||
@ -409,6 +412,7 @@ public class Types {
|
||||
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 @@ public class Types {
|
||||
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 @@ public class Types {
|
||||
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 @@ public class Types {
|
||||
|
||||
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 class Types {
|
||||
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 @@ public class Types {
|
||||
}
|
||||
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 @@ public class Types {
|
||||
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);
|
||||
|
@ -168,11 +168,11 @@ public class Annotate {
|
||||
}
|
||||
JCIdent left = (JCIdent)assign.lhs;
|
||||
Symbol method = rs.resolveQualifiedMethod(left.pos(),
|
||||
env,
|
||||
a.type,
|
||||
left.name,
|
||||
List.<Type>nil(),
|
||||
null);
|
||||
env,
|
||||
a.type,
|
||||
left.name,
|
||||
List.<Type>nil(),
|
||||
null);
|
||||
left.sym = method;
|
||||
left.type = method.type;
|
||||
if (method.owner != a.type.tsym)
|
||||
@ -190,6 +190,15 @@ public class Annotate {
|
||||
Attribute enterAttributeValue(Type expected,
|
||||
JCExpression tree,
|
||||
Env<AttrContext> 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())
|
||||
|
@ -2910,6 +2910,7 @@ public class Attr extends JCTree.Visitor {
|
||||
|
||||
public void visitTypeUnion(JCTypeUnion tree) {
|
||||
ListBuffer<Type> multicatchTypes = ListBuffer.lb();
|
||||
ListBuffer<Type> 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 @@ public class Attr extends JCTree.Visitor {
|
||||
}
|
||||
}
|
||||
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<Type> alternatives =
|
||||
((all_multicatchTypes == null) ? multicatchTypes : all_multicatchTypes).toList();
|
||||
t = new UnionClassType((ClassType) t, alternatives);
|
||||
}
|
||||
tree.type = result = t;
|
||||
}
|
||||
|
||||
public void visitTypeParameter(JCTypeParameter tree) {
|
||||
|
@ -681,6 +681,12 @@ public class Check {
|
||||
"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;
|
||||
}
|
||||
|
@ -1153,8 +1153,7 @@ public class Flow extends TreeScanner {
|
||||
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 @@ public class Flow extends TreeScanner {
|
||||
// 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 @@ public class Flow extends TreeScanner {
|
||||
}
|
||||
}
|
||||
}
|
||||
//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);
|
||||
|
@ -1609,18 +1609,31 @@ public class ClassReader implements Completer {
|
||||
// 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);
|
||||
}
|
||||
|
@ -479,7 +479,12 @@ public class Code {
|
||||
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();
|
||||
|
@ -72,11 +72,11 @@ public class JavacTypes implements javax.lang.model.util.Types {
|
||||
}
|
||||
|
||||
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;
|
||||
|
@ -762,9 +762,6 @@ compiler.err.unclosed.comment=\
|
||||
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=\
|
||||
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=\
|
||||
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}
|
||||
|
@ -266,6 +266,8 @@ com.sun.security.sasl.util = tiger legacy
|
||||
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
|
||||
|
@ -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",
|
||||
"<a href=\"../../technotes/guides/index.html\">"
|
||||
},
|
||||
{BUG_ID + FS + "pkg1" + FS + "package-summary.html",
|
||||
"<a href=\"../../technotes/guides/index.html\">"
|
||||
}
|
||||
};
|
||||
private static final String[][] NEGATED_TEST1 = {
|
||||
{BUG_ID + FS + "pkg1" + FS + "C1.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
},
|
||||
{BUG_ID + FS + "pkg1" + FS + "package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
}
|
||||
};
|
||||
private static final String[][] TEST2 = {
|
||||
{BUG_ID + FS + "pkg2" + FS + "C2.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
},
|
||||
{BUG_ID + FS + "pkg2" + FS + "package-summary.html",
|
||||
"<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
|
||||
}
|
||||
};
|
||||
private static final String[][] NEGATED_TEST2 = {
|
||||
{BUG_ID + FS + "pkg2" + FS + "C2.html",
|
||||
"<a href=\"../../technotes/guides/index.html\">"
|
||||
},
|
||||
{BUG_ID + FS + "pkg2" + FS + "package-summary.html",
|
||||
"<a href=\"../../technotes/guides/index.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();
|
||||
}
|
||||
}
|
31
langtools/test/com/sun/javadoc/testDocRootLink/pkg1/C1.java
Normal file
31
langtools/test/com/sun/javadoc/testDocRootLink/pkg1/C1.java
Normal file
@ -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 <a href="{@docRoot}/../technotes/guides/index.html">Here</a>. Lets see if this works
|
||||
* or not.
|
||||
*/
|
||||
public class C1 {}
|
@ -0,0 +1,18 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>javax.management package</title>
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
This is a test.
|
||||
<p id="spec">
|
||||
@see <a href="{@docRoot}/../technotes/guides/index.html">
|
||||
Test document 1</a>
|
||||
in particular the
|
||||
<a href="{@docRoot}/../technotes/guides/index.html">
|
||||
|
||||
Test document 2.</a>
|
||||
|
||||
@since 1.5
|
||||
|
||||
</body>
|
||||
</html>
|
31
langtools/test/com/sun/javadoc/testDocRootLink/pkg2/C2.java
Normal file
31
langtools/test/com/sun/javadoc/testDocRootLink/pkg2/C2.java
Normal file
@ -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 <a href="{@docRoot}/../technotes/guides/index.html">Here</a>. Lets see if this works
|
||||
* or not.
|
||||
*/
|
||||
public class C2 {}
|
@ -0,0 +1,18 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>javax.management package</title>
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
This is a test.
|
||||
<p id="spec">
|
||||
@see <a href="{@docRoot}/../technotes/guides/index.html">
|
||||
Test document 1</a>
|
||||
in particular the
|
||||
<a href="{@docRoot}/../technotes/guides/index.html">
|
||||
|
||||
Test document 2.</a>
|
||||
|
||||
@since 1.5
|
||||
|
||||
</body>
|
||||
</html>
|
@ -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 @@ public class TestHelpOption extends JavadocTester {
|
||||
{STANDARD_OUTPUT, "-tag "},
|
||||
{STANDARD_OUTPUT, "-taglet "},
|
||||
{STANDARD_OUTPUT, "-tagletpath "},
|
||||
{STANDARD_OUTPUT, "-Xdocrootparent "},
|
||||
{STANDARD_OUTPUT, "-charset "},
|
||||
{STANDARD_OUTPUT, "-helpfile "},
|
||||
{STANDARD_OUTPUT, "-linksource "},
|
||||
|
@ -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",
|
||||
"<div class=\"block\">Contains <a " +
|
||||
"href=\"../pkg/NestedGenerics.html#foo(java.util.Map)\"><code>foo" +
|
||||
"(java.util.Map<A, java.util.Map<A, A>>)</code></a></div>"
|
||||
}
|
||||
};
|
||||
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();
|
||||
}
|
||||
}
|
@ -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 <A> void foo(Map<A, Map<A, A>> map) {}
|
||||
}
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
@ -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<Object> o){}
|
||||
|
||||
}
|
@ -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",
|
||||
"<div class=\"deprecatedContent\"><span class=\"strong\">Deprecated.</span>" + NL +
|
||||
"<div class=\"block\"><i>This package is Deprecated.</i></div>"
|
||||
},
|
||||
{BUG_ID + "-1" + FS + "deprecated-list.html",
|
||||
"<li><a href=\"#package\">Deprecated Packages</a></li>"
|
||||
}
|
||||
};
|
||||
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();
|
||||
}
|
||||
}
|
@ -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 = "<Hello World>";
|
||||
|
||||
public A() {
|
||||
}
|
||||
}
|
@ -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 <T extends Foo & Foo2> {
|
||||
|
||||
public <T extends Foo & Foo2> T method(T t) {
|
||||
return null;
|
||||
}
|
||||
}
|
@ -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<Object> o){}
|
||||
|
||||
}
|
@ -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 {}
|
@ -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;
|
@ -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 @@ public class TestStylesheet extends JavadocTester {
|
||||
"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",
|
||||
"<link rel=\"stylesheet\" type=\"text/css\" " +
|
||||
"href=\"../stylesheet.css\" title=\"Style\">"}
|
||||
};
|
||||
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.
|
||||
|
@ -37,8 +37,7 @@ public class TestSubTitle extends JavadocTester {
|
||||
private static final String BUG_ID = "7010342";
|
||||
private static final String[][] TEST = {
|
||||
{BUG_ID + FS + "pkg" + FS + "package-summary.html",
|
||||
"<div class=\"subTitle\">" + NL + "<div class=\"block\">This is the " +
|
||||
"description of package pkg.</div>" + NL + "</div>"
|
||||
"<div class=\"block\">This is the description of package pkg.</div>"
|
||||
},
|
||||
{BUG_ID + FS + "pkg" + FS + "C.html",
|
||||
"<div class=\"subTitle\">pkg</div>"
|
||||
|
@ -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 @@ class T6558548 {
|
||||
void checked() throws InterruptedException {}
|
||||
void runtime() throws IllegalArgumentException {}
|
||||
|
||||
void m1() {
|
||||
void m1a() {
|
||||
try {
|
||||
throw new java.io.FileNotFoundException();
|
||||
}
|
||||
@ -20,7 +20,7 @@ class T6558548 {
|
||||
catch(java.io.IOException exc) { } // 6: ok; latest: unreachable
|
||||
}
|
||||
|
||||
void m1a() {
|
||||
void m1b() {
|
||||
try {
|
||||
throw new java.io.IOException();
|
||||
}
|
||||
@ -28,11 +28,20 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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 @@ class T6558548 {
|
||||
}
|
||||
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() {
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
72
langtools/test/tools/javac/T7040104.java
Normal file
72
langtools/test/tools/javac/T7040104.java
Normal file
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
191
langtools/test/tools/javac/annotations/6550655/T6550655.java
Normal file
191
langtools/test/tools/javac/annotations/6550655/T6550655.java
Normal file
@ -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<JavaFileObject> {
|
||||
|
||||
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<? extends JavaFileObject> 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;
|
||||
}
|
@ -41,7 +41,6 @@ compiler.err.type.var.more.than.once # UNUSED
|
||||
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.proc.type.already.exists # JavacFiler: just menti
|
||||
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
|
||||
|
@ -21,24 +21,14 @@
|
||||
* 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 {
|
||||
// key: compiler.misc.diamond.and.explicit.params
|
||||
// key: compiler.err.cant.apply.diamond.1
|
||||
|
||||
class DiamondAndAnonClass {
|
||||
static class Foo<X> {
|
||||
Foo(X t) {}
|
||||
<Z> Foo() {}
|
||||
}
|
||||
void m() {
|
||||
Foo<String> foo = new <Integer> Foo<>();
|
||||
}
|
||||
|
||||
Foo<Integer> fi1 = new Foo<>(1);
|
||||
Foo<Integer> fi2 = new Foo<Integer>(1);
|
||||
Foo<Integer> fi3 = new <String> Foo<>(1);
|
||||
Foo<Integer> fi4 = new <String> Foo<Integer>(1);
|
||||
Foo<Integer> fi5 = new <String, String> Foo<>(1);
|
||||
Foo<Integer> fi6 = new <String, String> Foo<Integer>(1);
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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 @@ public class GenericConstructorAndDiamondTest {
|
||||
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 @@ public class GenericConstructorAndDiamondTest {
|
||||
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 @@ public class GenericConstructorAndDiamondTest {
|
||||
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 @@ public class GenericConstructorAndDiamondTest {
|
||||
"}\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 @@ public class GenericConstructorAndDiamondTest {
|
||||
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 @@ public class GenericConstructorAndDiamondTest {
|
||||
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" +
|
||||
|
@ -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<X> {
|
||||
<T> Foo(T t) {}
|
||||
}
|
||||
|
||||
Foo<Integer> fi1 = new <String> Foo<>(1);
|
||||
Foo<Integer> fi2 = new <String> Foo<Integer>(1);
|
||||
}
|
@ -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<X>, (compiler.misc.no.conforming.assignment.exists: int, java.lang.String)
|
||||
2 errors
|
@ -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<X> {
|
||||
<T> Foo(T t) {}
|
||||
}
|
||||
|
||||
Foo<Integer> fi1 = new <String, Integer> Foo<>("");
|
||||
Foo<Integer> fi2 = new <String, Integer> Foo<Integer>("");
|
||||
}
|
@ -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<X>, (compiler.misc.arg.length.mismatch)
|
||||
2 errors
|
@ -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<X> {
|
||||
<T extends Integer> Foo(T t) {}
|
||||
}
|
||||
|
||||
Foo<Integer> fi1 = new <String> Foo<>(1);
|
||||
Foo<Integer> fi2 = new <String> Foo<Integer>(1);
|
||||
}
|
@ -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<X>, (compiler.misc.explicit.param.do.not.conform.to.bounds: java.lang.String, java.lang.Integer)
|
||||
2 errors
|
@ -23,18 +23,16 @@
|
||||
|
||||
/*
|
||||
* @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
|
||||
* @bug 7040883 7034511
|
||||
* @summary Compilation error: "length in Array is defined in an inaccessible class or interface"
|
||||
* @compile T7040883.java
|
||||
*/
|
||||
|
||||
class Pos02<X> {
|
||||
public class T7040883 {
|
||||
|
||||
Pos02(X x) {}
|
||||
<Z> Z[] getListeners(Class<Z> z) { return null; }
|
||||
|
||||
|
||||
Pos02<X> test(X x) {
|
||||
return new Pos02<>(x);
|
||||
void test(String s) {
|
||||
int i = getListeners(s.getClass()).length;
|
||||
}
|
||||
}
|
@ -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> {
|
||||
T foo();
|
||||
}
|
||||
|
||||
interface B<T> {
|
||||
T foo();
|
||||
}
|
||||
|
||||
interface C<T extends A<?> & B<?>> { }
|
||||
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
T7034495.java:40:17: compiler.err.types.incompatible.diff.ret: T7034495.B<?>, T7034495.A<?>, foo()
|
||||
1 error
|
50
langtools/test/tools/javac/multicatch/Neg07.java
Normal file
50
langtools/test/tools/javac/multicatch/Neg07.java
Normal file
@ -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<? extends HasFoo> 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");
|
||||
}
|
||||
}
|
||||
}
|
2
langtools/test/tools/javac/multicatch/Neg07.out
Normal file
2
langtools/test/tools/javac/multicatch/Neg07.out
Normal file
@ -0,0 +1,2 @@
|
||||
Neg07.java:14:56: compiler.err.prob.found.req: (compiler.misc.incompatible.types), java.lang.Class<compiler.misc.type.captureof: 1, ? extends Neg07.ParentException>, java.lang.Class<? extends Neg07.HasFoo>
|
||||
1 error
|
103
langtools/test/tools/javac/multicatch/Pos10.java
Normal file
103
langtools/test/tools/javac/multicatch/Pos10.java
Normal file
@ -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<? extends ParentException> 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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 @@ class Test {
|
||||
else
|
||||
throw new B2();
|
||||
}
|
||||
catch(B1 | B2 ex) { }
|
||||
catch(@UnionTypeInfo({"Test.B1", "Test.B2"}) B1 | B2 ex) { }
|
||||
}
|
||||
}
|
||||
|
@ -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.annotation.processing.SupportedAnnotationTypes;
|
||||
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,22 +75,61 @@ public class ModelChecker extends JavacTestingAbstractProcessor {
|
||||
}
|
||||
|
||||
@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<Void, Void>(){}.visit(expectedUnionType);
|
||||
throw new RuntimeException("Expected UnknownTypeException not thrown.");
|
||||
} catch (UnknownTypeException ute) {
|
||||
; // Expected
|
||||
}
|
||||
|
||||
UnionType unionType = new SimpleTypeVisitor7<UnionType, Void>(){
|
||||
@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) {
|
||||
assertionCount++;
|
||||
if (!cond)
|
||||
|
@ -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();
|
||||
}
|
@ -44,6 +44,7 @@ import javax.lang.model.util.Types;
|
||||
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 @@ public class TestSymtabItems {
|
||||
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);
|
||||
|
@ -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<String> 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<String> 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<String> log;
|
||||
|
||||
@Override
|
||||
public void init(ProcessingEnvironment env) {
|
||||
super.init(env);
|
||||
trees = Trees.instance(env);
|
||||
log = new ArrayList<String>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> 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<Void,Void> {
|
||||
@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<String, Void> {
|
||||
@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());
|
||||
}
|
||||
}
|
||||
}
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 7017664
|
||||
* @bug 7017664 7036906
|
||||
* @summary Basher for CompoundScopes
|
||||
*/
|
||||
|
||||
@ -127,8 +127,17 @@ public class CompoundScopeTest {
|
||||
}
|
||||
}
|
||||
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<Symbol> {
|
||||
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 @@ public class CompoundScopeTest {
|
||||
* Check that CompoundScope.getElements() correctly visits all symbols
|
||||
* in all subscopes (in the correct order)
|
||||
*/
|
||||
void checkElems(CompoundScope cs) {
|
||||
List<Symbol> allSymbols = elems;
|
||||
void checkElems(CompoundScope cs, Filter<Symbol> sf) {
|
||||
int count = 0;
|
||||
for (Symbol s : cs.getElements()) {
|
||||
ListBuffer<Symbol> found = ListBuffer.lb();
|
||||
List<Symbol> 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 @@ public class CompoundScopeTest {
|
||||
* 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<Symbol> sf) {
|
||||
for (Map.Entry<Name, List<Symbol>> shadowedEntry : shadowedMap.entrySet()) {
|
||||
int count = 0;
|
||||
List<Symbol> shadowed = shadowedEntry.getValue();
|
||||
List<Symbol> 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<Symbol> filter(List<Symbol> elems, Filter<Symbol> sf) {
|
||||
ListBuffer<Symbol> 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" +
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
CastObjectToPrimitiveTest.java:36:23: compiler.err.prob.found.req: (compiler.misc.inconvertible.types), java.lang.Object, int
|
||||
1 error
|
Loading…
x
Reference in New Issue
Block a user