mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-08 20:49:44 +00:00
Merge
This commit is contained in:
commit
e8d53ad94a
@ -241,6 +241,7 @@ JAVAC_DIRS = \
|
||||
javax/annotation/processing \
|
||||
javax/lang/model \
|
||||
javax/tools \
|
||||
jdk/ \
|
||||
com/sun/source \
|
||||
com/sun/tools/javac
|
||||
|
||||
|
||||
@ -116,6 +116,7 @@ javac.includes = \
|
||||
javax/annotation/processing/ \
|
||||
javax/lang/model/ \
|
||||
javax/tools/ \
|
||||
jdk/ \
|
||||
com/sun/source/ \
|
||||
com/sun/tools/javac/ \
|
||||
com/sun/tools/doclint/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2013, 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
|
||||
@ -196,10 +196,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
|
||||
protected void addOverviewComment(Content htmltree) {
|
||||
if (root.inlineTags().length > 0) {
|
||||
htmltree.addContent(getMarkerAnchor("overview_description"));
|
||||
HtmlTree div = new HtmlTree(HtmlTag.DIV);
|
||||
div.addStyle(HtmlStyle.subTitle);
|
||||
addInlineComment(root, div);
|
||||
htmltree.addContent(div);
|
||||
addInlineComment(root, htmltree);
|
||||
}
|
||||
}
|
||||
|
||||
@ -211,7 +208,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
|
||||
*/
|
||||
protected void addOverview(Content body) throws IOException {
|
||||
HtmlTree div = new HtmlTree(HtmlTag.DIV);
|
||||
div.addStyle(HtmlStyle.footer);
|
||||
div.addStyle(HtmlStyle.contentContainer);
|
||||
addOverviewComment(div);
|
||||
addTagsInfo(root, div);
|
||||
body.addContent(div);
|
||||
|
||||
@ -496,9 +496,9 @@ public abstract class Symbol implements Element {
|
||||
return l.toList();
|
||||
}
|
||||
|
||||
public static class DelegatedSymbol extends Symbol {
|
||||
protected Symbol other;
|
||||
public DelegatedSymbol(Symbol other) {
|
||||
public static class DelegatedSymbol<T extends Symbol> extends Symbol {
|
||||
protected T other;
|
||||
public DelegatedSymbol(T other) {
|
||||
super(other.kind, other.flags_field, other.name, other.type, other.owner);
|
||||
this.other = other;
|
||||
}
|
||||
@ -532,6 +532,10 @@ public abstract class Symbol implements Element {
|
||||
public <R, P> R accept(Symbol.Visitor<R, P> v, P p) {
|
||||
return v.visitSymbol(other, p);
|
||||
}
|
||||
|
||||
public T getUnderlyingSymbol() {
|
||||
return other;
|
||||
}
|
||||
}
|
||||
|
||||
/** A class for type symbols. Type variables are represented by instances
|
||||
|
||||
@ -570,10 +570,19 @@ public class Lower extends TreeTranslator {
|
||||
* @param flags The class symbol's flags
|
||||
* @param owner The class symbol's owner
|
||||
*/
|
||||
ClassSymbol makeEmptyClass(long flags, ClassSymbol owner) {
|
||||
JCClassDecl makeEmptyClass(long flags, ClassSymbol owner) {
|
||||
return makeEmptyClass(flags, owner, null, true);
|
||||
}
|
||||
|
||||
JCClassDecl makeEmptyClass(long flags, ClassSymbol owner, Name flatname,
|
||||
boolean addToDefs) {
|
||||
// Create class symbol.
|
||||
ClassSymbol c = reader.defineClass(names.empty, owner);
|
||||
c.flatname = chk.localClassName(c);
|
||||
if (flatname != null) {
|
||||
c.flatname = flatname;
|
||||
} else {
|
||||
c.flatname = chk.localClassName(c);
|
||||
}
|
||||
c.sourcefile = owner.sourcefile;
|
||||
c.completer = null;
|
||||
c.members_field = new Scope(c);
|
||||
@ -597,9 +606,8 @@ public class Lower extends TreeTranslator {
|
||||
cdef.type = c.type;
|
||||
|
||||
// Append class definition tree to owner's definitions.
|
||||
odef.defs = odef.defs.prepend(cdef);
|
||||
|
||||
return c;
|
||||
if (addToDefs) odef.defs = odef.defs.prepend(cdef);
|
||||
return cdef;
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
@ -706,7 +714,7 @@ public class Lower extends TreeTranslator {
|
||||
* and synthethise a class (with makeEmptyClass) if one is not available.
|
||||
* However, there is a small possibility that an existing class will not
|
||||
* be generated as expected if it is inside a conditional with a constant
|
||||
* expression. If that is found to be the case, create an empty class here.
|
||||
* expression. If that is found to be the case, create an empty class tree here.
|
||||
*/
|
||||
private void checkAccessConstructorTags() {
|
||||
for (List<ClassSymbol> l = accessConstrTags; l.nonEmpty(); l = l.tail) {
|
||||
@ -714,14 +722,10 @@ public class Lower extends TreeTranslator {
|
||||
if (isTranslatedClassAvailable(c))
|
||||
continue;
|
||||
// Create class definition tree.
|
||||
JCClassDecl cdef = make.ClassDef(
|
||||
make.Modifiers(STATIC | SYNTHETIC), names.empty,
|
||||
List.<JCTypeParameter>nil(),
|
||||
null, List.<JCExpression>nil(), List.<JCTree>nil());
|
||||
cdef.sym = c;
|
||||
cdef.type = c.type;
|
||||
// add it to the list of classes to be generated
|
||||
translated.append(cdef);
|
||||
JCClassDecl cdec = makeEmptyClass(STATIC | SYNTHETIC,
|
||||
c.outermostClass(), c.flatname, false);
|
||||
swapAccessConstructorTag(c, cdec.sym);
|
||||
translated.append(cdec);
|
||||
}
|
||||
}
|
||||
// where
|
||||
@ -735,6 +739,19 @@ public class Lower extends TreeTranslator {
|
||||
return false;
|
||||
}
|
||||
|
||||
void swapAccessConstructorTag(ClassSymbol oldCTag, ClassSymbol newCTag) {
|
||||
for (MethodSymbol methodSymbol : accessConstrs.values()) {
|
||||
Assert.check(methodSymbol.type.hasTag(METHOD));
|
||||
MethodType oldMethodType =
|
||||
(MethodType)methodSymbol.type;
|
||||
if (oldMethodType.argtypes.head.tsym == oldCTag)
|
||||
methodSymbol.type =
|
||||
types.createMethodTypeWithParameters(oldMethodType,
|
||||
oldMethodType.getParameterTypes().tail
|
||||
.prepend(newCTag.erasure(types)));
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* Access methods
|
||||
*************************************************************************/
|
||||
@ -1211,7 +1228,7 @@ public class Lower extends TreeTranslator {
|
||||
"1");
|
||||
ClassSymbol ctag = chk.compiled.get(flatname);
|
||||
if (ctag == null)
|
||||
ctag = makeEmptyClass(STATIC | SYNTHETIC, topClass);
|
||||
ctag = makeEmptyClass(STATIC | SYNTHETIC, topClass).sym;
|
||||
// keep a record of all tags, to verify that all are generated as required
|
||||
accessConstrTags = accessConstrTags.prepend(ctag);
|
||||
return ctag;
|
||||
@ -1778,7 +1795,7 @@ public class Lower extends TreeTranslator {
|
||||
if (e.sym.kind == TYP &&
|
||||
e.sym.name == names.empty &&
|
||||
(e.sym.flags() & INTERFACE) == 0) return (ClassSymbol) e.sym;
|
||||
return makeEmptyClass(STATIC | SYNTHETIC, clazz);
|
||||
return makeEmptyClass(STATIC | SYNTHETIC, clazz).sym;
|
||||
}
|
||||
|
||||
/** Return symbol for "class$" method. If there is no method definition
|
||||
|
||||
@ -482,10 +482,8 @@ public class ClassWriter extends ClassFile {
|
||||
while (i < pool.pp) {
|
||||
Object value = pool.pool[i];
|
||||
Assert.checkNonNull(value);
|
||||
if (value instanceof Method)
|
||||
value = ((Method)value).m;
|
||||
else if (value instanceof Variable)
|
||||
value = ((Variable)value).v;
|
||||
if (value instanceof Method || value instanceof Variable)
|
||||
value = ((DelegatedSymbol)value).getUnderlyingSymbol();
|
||||
|
||||
if (value instanceof MethodSymbol) {
|
||||
MethodSymbol m = (MethodSymbol)value;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 2013, 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
|
||||
@ -140,23 +140,23 @@ public class Pool {
|
||||
return n == null ? -1 : n.intValue();
|
||||
}
|
||||
|
||||
static class Method extends DelegatedSymbol {
|
||||
MethodSymbol m;
|
||||
static class Method extends DelegatedSymbol<MethodSymbol> {
|
||||
UniqueType uniqueType;
|
||||
Method(MethodSymbol m, Types types) {
|
||||
super(m);
|
||||
this.m = m;
|
||||
this.uniqueType = new UniqueType(m.type, types);
|
||||
}
|
||||
public boolean equals(Object other) {
|
||||
if (!(other instanceof Method)) return false;
|
||||
MethodSymbol o = ((Method)other).m;
|
||||
public boolean equals(Object any) {
|
||||
if (!(any instanceof Method)) return false;
|
||||
MethodSymbol o = ((Method)any).other;
|
||||
MethodSymbol m = this.other;
|
||||
return
|
||||
o.name == m.name &&
|
||||
o.owner == m.owner &&
|
||||
((Method)other).uniqueType.equals(uniqueType);
|
||||
((Method)any).uniqueType.equals(uniqueType);
|
||||
}
|
||||
public int hashCode() {
|
||||
MethodSymbol m = this.other;
|
||||
return
|
||||
m.name.hashCode() * 33 +
|
||||
m.owner.hashCode() * 9 +
|
||||
@ -173,21 +173,21 @@ public class Pool {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (!super.equals(other)) return false;
|
||||
if (!(other instanceof DynamicMethod)) return false;
|
||||
DynamicMethodSymbol dm1 = (DynamicMethodSymbol)m;
|
||||
DynamicMethodSymbol dm2 = (DynamicMethodSymbol)((DynamicMethod)other).m;
|
||||
public boolean equals(Object any) {
|
||||
if (!super.equals(any)) return false;
|
||||
if (!(any instanceof DynamicMethod)) return false;
|
||||
DynamicMethodSymbol dm1 = (DynamicMethodSymbol)other;
|
||||
DynamicMethodSymbol dm2 = (DynamicMethodSymbol)((DynamicMethod)any).other;
|
||||
return dm1.bsm == dm2.bsm &&
|
||||
dm1.bsmKind == dm2.bsmKind &&
|
||||
Arrays.equals(uniqueStaticArgs,
|
||||
((DynamicMethod)other).uniqueStaticArgs);
|
||||
((DynamicMethod)any).uniqueStaticArgs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = super.hashCode();
|
||||
DynamicMethodSymbol dm = (DynamicMethodSymbol)m;
|
||||
DynamicMethodSymbol dm = (DynamicMethodSymbol)other;
|
||||
hash += dm.bsmKind * 7 +
|
||||
dm.bsm.hashCode() * 11;
|
||||
for (int i = 0; i < dm.staticArgs.length; i++) {
|
||||
@ -209,23 +209,23 @@ public class Pool {
|
||||
}
|
||||
}
|
||||
|
||||
static class Variable extends DelegatedSymbol {
|
||||
VarSymbol v;
|
||||
static class Variable extends DelegatedSymbol<VarSymbol> {
|
||||
UniqueType uniqueType;
|
||||
Variable(VarSymbol v, Types types) {
|
||||
super(v);
|
||||
this.v = v;
|
||||
this.uniqueType = new UniqueType(v.type, types);
|
||||
}
|
||||
public boolean equals(Object other) {
|
||||
if (!(other instanceof Variable)) return false;
|
||||
VarSymbol o = ((Variable)other).v;
|
||||
public boolean equals(Object any) {
|
||||
if (!(any instanceof Variable)) return false;
|
||||
VarSymbol o = ((Variable)any).other;
|
||||
VarSymbol v = other;
|
||||
return
|
||||
o.name == v.name &&
|
||||
o.owner == v.owner &&
|
||||
((Variable)other).uniqueType.equals(uniqueType);
|
||||
((Variable)any).uniqueType.equals(uniqueType);
|
||||
}
|
||||
public int hashCode() {
|
||||
VarSymbol v = other;
|
||||
return
|
||||
v.name.hashCode() * 33 +
|
||||
v.owner.hashCode() * 9 +
|
||||
|
||||
@ -629,6 +629,8 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
if (!taskListener.isEmpty()) {
|
||||
TaskEvent e = new TaskEvent(TaskEvent.Kind.PARSE, filename);
|
||||
taskListener.started(e);
|
||||
keepComments = true;
|
||||
genEndPos = true;
|
||||
}
|
||||
Parser parser = parserFactory.newParser(content, keepComments(), genEndPos, lineDebugInfo);
|
||||
tree = parser.parseCompilationUnit();
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, 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
|
||||
@ -279,13 +279,7 @@ public class DocCommentParser {
|
||||
try {
|
||||
nextChar();
|
||||
if (isIdentifierStart(ch)) {
|
||||
int namePos = bp;
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
int nameLen = bp - namePos;
|
||||
|
||||
Name name = names.fromChars(buf, namePos, nameLen);
|
||||
Name name = readIdentifier();
|
||||
TagParser tp = tagParsers.get(name);
|
||||
if (tp == null) {
|
||||
List<DCTree> content = blockContent();
|
||||
@ -334,14 +328,9 @@ public class DocCommentParser {
|
||||
try {
|
||||
nextChar();
|
||||
if (isIdentifierStart(ch)) {
|
||||
int namePos = bp;
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
int nameLen = bp - namePos;
|
||||
Name name = readIdentifier();
|
||||
skipWhitespace();
|
||||
|
||||
Name name = names.fromChars(buf, namePos, nameLen);
|
||||
TagParser tp = tagParsers.get(name);
|
||||
if (tp == null) {
|
||||
DCTree text = inlineText();
|
||||
@ -575,10 +564,8 @@ public class DocCommentParser {
|
||||
int pos = bp;
|
||||
|
||||
if (isJavaIdentifierStart(ch)) {
|
||||
nextChar();
|
||||
while (isJavaIdentifierPart(ch))
|
||||
nextChar();
|
||||
return m.at(pos).Identifier(names.fromChars(buf, pos, bp - pos));
|
||||
Name name = readJavaIdentifier();
|
||||
return m.at(pos).Identifier(name);
|
||||
}
|
||||
|
||||
throw new ParseException("dc.identifier.expected");
|
||||
@ -703,39 +690,36 @@ public class DocCommentParser {
|
||||
protected DCTree entity() {
|
||||
int p = bp;
|
||||
nextChar();
|
||||
int namep = bp;
|
||||
Name name = null;
|
||||
boolean checkSemi = false;
|
||||
if (ch == '#') {
|
||||
int namep = bp;
|
||||
nextChar();
|
||||
if (isDecimalDigit(ch)) {
|
||||
nextChar();
|
||||
while (isDecimalDigit(ch))
|
||||
nextChar();
|
||||
checkSemi = true;
|
||||
name = names.fromChars(buf, namep, bp - namep);
|
||||
} else if (ch == 'x' || ch == 'X') {
|
||||
nextChar();
|
||||
if (isHexDigit(ch)) {
|
||||
nextChar();
|
||||
while (isHexDigit(ch))
|
||||
nextChar();
|
||||
checkSemi = true;
|
||||
name = names.fromChars(buf, namep, bp - namep);
|
||||
}
|
||||
}
|
||||
} else if (isIdentifierStart(ch)) {
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
checkSemi = true;
|
||||
name = readIdentifier();
|
||||
}
|
||||
|
||||
if (checkSemi && ch == ';') {
|
||||
if (name == null)
|
||||
return erroneous("dc.bad.entity", p);
|
||||
else {
|
||||
if (ch != ';')
|
||||
return erroneous("dc.missing.semicolon", p);
|
||||
nextChar();
|
||||
return m.at(p).Entity(names.fromChars(buf, namep, bp - namep - 1));
|
||||
} else {
|
||||
String code = checkSemi
|
||||
? "dc.missing.semicolon"
|
||||
: "dc.bad.entity";
|
||||
return erroneous(code, p);
|
||||
return m.at(p).Entity(name);
|
||||
}
|
||||
}
|
||||
|
||||
@ -747,11 +731,7 @@ public class DocCommentParser {
|
||||
int p = bp;
|
||||
nextChar();
|
||||
if (isIdentifierStart(ch)) {
|
||||
int namePos = bp;
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
int nameLen = bp - namePos;
|
||||
Name name = readIdentifier();
|
||||
List<DCTree> attrs = htmlAttrs();
|
||||
if (attrs != null) {
|
||||
boolean selfClosing = false;
|
||||
@ -761,22 +741,16 @@ public class DocCommentParser {
|
||||
}
|
||||
if (ch == '>') {
|
||||
nextChar();
|
||||
Name name = names.fromChars(buf, namePos, nameLen);
|
||||
return m.at(p).StartElement(name, attrs, selfClosing);
|
||||
}
|
||||
}
|
||||
} else if (ch == '/') {
|
||||
nextChar();
|
||||
if (isIdentifierStart(ch)) {
|
||||
int namePos = bp;
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
int nameLen = bp - namePos;
|
||||
Name name = readIdentifier();
|
||||
skipWhitespace();
|
||||
if (ch == '>') {
|
||||
nextChar();
|
||||
Name name = names.fromChars(buf, namePos, nameLen);
|
||||
return m.at(p).EndElement(name);
|
||||
}
|
||||
}
|
||||
@ -822,10 +796,7 @@ public class DocCommentParser {
|
||||
loop:
|
||||
while (isIdentifierStart(ch)) {
|
||||
int namePos = bp;
|
||||
nextChar();
|
||||
while (isIdentifierPart(ch))
|
||||
nextChar();
|
||||
int nameLen = bp - namePos;
|
||||
Name name = readIdentifier();
|
||||
skipWhitespace();
|
||||
List<DCTree> value = null;
|
||||
ValueKind vkind = ValueKind.EMPTY;
|
||||
@ -862,7 +833,6 @@ public class DocCommentParser {
|
||||
skipWhitespace();
|
||||
value = v.toList();
|
||||
}
|
||||
Name name = names.fromChars(buf, namePos, nameLen);
|
||||
DCAttribute attr = m.at(namePos).Attribute(name, vkind, value);
|
||||
attrs.add(attr);
|
||||
}
|
||||
@ -897,7 +867,7 @@ public class DocCommentParser {
|
||||
protected DCErroneous erroneous(String code, int pos) {
|
||||
int i = bp - 1;
|
||||
loop:
|
||||
while (i > 0) {
|
||||
while (i > pos) {
|
||||
switch (buf[i]) {
|
||||
case '\f': case '\n': case '\r':
|
||||
newline = true;
|
||||
@ -926,16 +896,24 @@ public class DocCommentParser {
|
||||
return Character.isUnicodeIdentifierStart(ch);
|
||||
}
|
||||
|
||||
protected boolean isIdentifierPart(char ch) {
|
||||
return Character.isUnicodeIdentifierPart(ch);
|
||||
protected Name readIdentifier() {
|
||||
int start = bp;
|
||||
nextChar();
|
||||
while (bp < buflen && Character.isUnicodeIdentifierPart(ch))
|
||||
nextChar();
|
||||
return names.fromChars(buf, start, bp - start);
|
||||
}
|
||||
|
||||
protected boolean isJavaIdentifierStart(char ch) {
|
||||
return Character.isJavaIdentifierStart(ch);
|
||||
}
|
||||
|
||||
protected boolean isJavaIdentifierPart(char ch) {
|
||||
return Character.isJavaIdentifierPart(ch);
|
||||
protected Name readJavaIdentifier() {
|
||||
int start = bp;
|
||||
nextChar();
|
||||
while (bp < buflen && Character.isJavaIdentifierPart(ch))
|
||||
nextChar();
|
||||
return names.fromChars(buf, start, bp - start);
|
||||
}
|
||||
|
||||
protected boolean isDecimalDigit(char ch) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2004, 2013, 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
|
||||
@ -236,7 +236,7 @@ public class JavadocTokenizer extends JavaTokenizer {
|
||||
// relative to the best match found in the array.
|
||||
if (pos == Position.NOPOS)
|
||||
return Position.NOPOS;
|
||||
if (pos < 0 || pos >= docComment.length())
|
||||
if (pos < 0 || pos > docComment.length())
|
||||
throw new StringIndexOutOfBoundsException(String.valueOf(pos));
|
||||
if (docPosns == null)
|
||||
return Position.NOPOS;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2013, 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
|
||||
@ -119,7 +119,7 @@ public abstract class DCTree implements DocTree {
|
||||
|
||||
}
|
||||
|
||||
public static abstract class DCBlockTag extends DCTree implements InlineTagTree {
|
||||
public static abstract class DCBlockTag extends DCTree implements BlockTagTree {
|
||||
public String getTagName() {
|
||||
return getKind().tagName;
|
||||
}
|
||||
@ -169,7 +169,7 @@ public abstract class DCTree implements DocTree {
|
||||
}
|
||||
}
|
||||
|
||||
public static class DCAuthor extends DCInlineTag implements AuthorTree {
|
||||
public static class DCAuthor extends DCBlockTag implements AuthorTree {
|
||||
public final List<DCTree> name;
|
||||
|
||||
DCAuthor(List<DCTree> name) {
|
||||
@ -640,7 +640,7 @@ public abstract class DCTree implements DocTree {
|
||||
}
|
||||
}
|
||||
|
||||
public static class DCSince extends DCInlineTag implements SinceTree {
|
||||
public static class DCSince extends DCBlockTag implements SinceTree {
|
||||
public final List<DCTree> body;
|
||||
|
||||
DCSince(List<DCTree> body) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, 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
|
||||
@ -139,12 +139,13 @@ public class JavadocTool implements DocumentationTool {
|
||||
|
||||
@Override
|
||||
public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) {
|
||||
PrintWriter err_pw = new PrintWriter(err, true);
|
||||
PrintWriter out_pw = new PrintWriter(out);
|
||||
PrintWriter err_pw = new PrintWriter(err == null ? System.err : err, true);
|
||||
PrintWriter out_pw = new PrintWriter(out == null ? System.out : out);
|
||||
try {
|
||||
String standardDocletName = "com.sun.tools.doclets.standard.Standard";
|
||||
ClassLoader cl = getClass().getClassLoader();
|
||||
return com.sun.tools.javadoc.Main.execute(
|
||||
"javadoc", err_pw, err_pw, out_pw, standardDocletName, arguments);
|
||||
"javadoc", err_pw, err_pw, out_pw, standardDocletName, cl, arguments);
|
||||
} finally {
|
||||
err_pw.flush();
|
||||
out_pw.flush();
|
||||
|
||||
53
langtools/src/share/classes/jdk/Supported.java
Normal file
53
langtools/src/share/classes/jdk/Supported.java
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (c) 2013, 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. Oracle designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle in the LICENSE file that accompanied this code.
|
||||
*
|
||||
* 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 jdk;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* Indicates whether or not a JDK specific type or package is a
|
||||
* supported part of the JDK.
|
||||
*
|
||||
* This annotation should only be applied to types and packages
|
||||
* <em>outside</em> of the Java SE namespaces of {@code java.*} and
|
||||
* {@code javax.*} packages. For example, certain portions of {@code
|
||||
* com.sun.*} are official parts of the JDK meant to be generally
|
||||
* usable while other portions of {@code com.sun.*} are not. This
|
||||
* annotation type allows those portions to be easily and
|
||||
* programmaticly distinguished.
|
||||
*
|
||||
* @since 1.8
|
||||
*/
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.PACKAGE})
|
||||
@Supported
|
||||
public @interface Supported {
|
||||
/**
|
||||
* Whether or not this package or type is a supported part of the JDK.
|
||||
*/
|
||||
boolean value() default true;
|
||||
}
|
||||
32
langtools/test/tools/doclint/EndWithIdentifierTest.java
Normal file
32
langtools/test/tools/doclint/EndWithIdentifierTest.java
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8007096
|
||||
* @summary DocLint parsing problems with some comments
|
||||
* @build DocLintTester
|
||||
* @run main DocLintTester -Xmsgs:-html EndWithIdentifierTest.java
|
||||
* @run main DocLintTester -Xmsgs -ref EndWithIdentifierTest.out EndWithIdentifierTest.java
|
||||
* @author jlahoda
|
||||
*/
|
||||
|
||||
/**@deprecated*/
|
||||
public class EndWithIdentifierTest {
|
||||
|
||||
/**{@link*/
|
||||
private void unfinishedInlineTagName() {}
|
||||
|
||||
/**@see List*/
|
||||
private void endsWithIdentifier() {}
|
||||
|
||||
/**&*/
|
||||
private void entityName() {}
|
||||
|
||||
/**<a*/
|
||||
private void tag() {}
|
||||
|
||||
/**</a*/
|
||||
private void tagEnd() {}
|
||||
|
||||
/**<a name*/
|
||||
private void attribute() {}
|
||||
}
|
||||
|
||||
20
langtools/test/tools/doclint/EndWithIdentifierTest.out
Normal file
20
langtools/test/tools/doclint/EndWithIdentifierTest.out
Normal file
@ -0,0 +1,20 @@
|
||||
EndWithIdentifierTest.java:14: error: syntax error in reference
|
||||
/**{@link*/
|
||||
^
|
||||
EndWithIdentifierTest.java:17: error: reference not found
|
||||
/**@see List*/
|
||||
^
|
||||
EndWithIdentifierTest.java:20: error: semicolon missing
|
||||
/**&*/
|
||||
^
|
||||
EndWithIdentifierTest.java:23: error: malformed HTML
|
||||
/**<a*/
|
||||
^
|
||||
EndWithIdentifierTest.java:26: error: malformed HTML
|
||||
/**</a*/
|
||||
^
|
||||
EndWithIdentifierTest.java:29: error: malformed HTML
|
||||
/**<a name*/
|
||||
^
|
||||
6 errors
|
||||
|
||||
17
langtools/test/tools/doclint/UnfinishedInlineTagTest.java
Normal file
17
langtools/test/tools/doclint/UnfinishedInlineTagTest.java
Normal file
@ -0,0 +1,17 @@
|
||||
/*
|
||||
* @test /nodynamiccopyright/
|
||||
* @bug 8007096
|
||||
* @summary DocLint parsing problems with some comments
|
||||
* @build DocLintTester
|
||||
* @run main DocLintTester -Xmsgs:-html UnfinishedInlineTagTest.java
|
||||
* @run main DocLintTester -Xmsgs -ref UnfinishedInlineTagTest.out UnfinishedInlineTagTest.java
|
||||
* @author jlahoda
|
||||
*/
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**{@link List
|
||||
*/
|
||||
public class UnfinishedInlineTagTest {
|
||||
}
|
||||
|
||||
5
langtools/test/tools/doclint/UnfinishedInlineTagTest.out
Normal file
5
langtools/test/tools/doclint/UnfinishedInlineTagTest.out
Normal file
@ -0,0 +1,5 @@
|
||||
UnfinishedInlineTagTest.java:14: error: unterminated inline tag
|
||||
*/
|
||||
^
|
||||
1 error
|
||||
|
||||
@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2013, 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 7199823
|
||||
* @summary javac generates inner class that can't be verified
|
||||
* @run main InnerClassCannotBeVerified
|
||||
*/
|
||||
|
||||
import java.util.Arrays;
|
||||
import javax.tools.JavaFileObject;
|
||||
import java.net.URI;
|
||||
import javax.tools.SimpleJavaFileObject;
|
||||
import javax.tools.ToolProvider;
|
||||
import javax.tools.JavaCompiler;
|
||||
import com.sun.source.util.JavacTask;
|
||||
import com.sun.tools.classfile.ClassFile;
|
||||
import com.sun.tools.classfile.ConstantPoolException;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public class InnerClassCannotBeVerified {
|
||||
|
||||
private static final String errorMessage =
|
||||
"Compile error while compiling the following source:\n";
|
||||
|
||||
public static void main(String... args) throws Exception {
|
||||
new InnerClassCannotBeVerified().run();
|
||||
}
|
||||
|
||||
void run() throws Exception {
|
||||
JavaCompiler comp = ToolProvider.getSystemJavaCompiler();
|
||||
JavaSource source = new JavaSource();
|
||||
JavacTask ct = (JavacTask)comp.getTask(null, null, null,
|
||||
null, null, Arrays.asList(source));
|
||||
try {
|
||||
if (!ct.call()) {
|
||||
throw new AssertionError(errorMessage +
|
||||
source.getCharContent(true));
|
||||
}
|
||||
} catch (Throwable ex) {
|
||||
throw new AssertionError(errorMessage +
|
||||
source.getCharContent(true));
|
||||
}
|
||||
check();
|
||||
}
|
||||
|
||||
private void check() throws IOException, ConstantPoolException {
|
||||
File file = new File("Test$1.class");
|
||||
ClassFile classFile = ClassFile.read(file);
|
||||
boolean inheritsFromObject =
|
||||
classFile.getSuperclassName().equals("java/lang/Object");
|
||||
boolean implementsNoInterface = classFile.interfaces.length == 0;
|
||||
boolean noMethods = classFile.methods.length == 0;
|
||||
if (!(inheritsFromObject &&
|
||||
implementsNoInterface &&
|
||||
noMethods)) {
|
||||
throw new AssertionError("The inner classes reused as " +
|
||||
"access constructor tag for this code must be empty");
|
||||
}
|
||||
}
|
||||
|
||||
class JavaSource extends SimpleJavaFileObject {
|
||||
|
||||
String internalSource =
|
||||
"public class Test {\n" +
|
||||
" private static class Foo {}\n" +
|
||||
" public static void main(String[] args){ \n" +
|
||||
" new Foo();\n" +
|
||||
" if(false) {\n" +
|
||||
" new Runnable() {\n" +
|
||||
" @Override\n" +
|
||||
" public void run() {\n" +
|
||||
" System.out.println();\n" +
|
||||
" }\n" +
|
||||
" }.run();\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
"}";
|
||||
public JavaSource() {
|
||||
super(URI.create("Test.java"), JavaFileObject.Kind.SOURCE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
|
||||
return internalSource;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 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
|
||||
@ -174,22 +174,20 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper {
|
||||
|
||||
String sourceBase = new String("@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainedBy( AC.class )\n" +
|
||||
"@Repeatable( AC.class )\n" +
|
||||
"@interface A { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainerFor(A.class)\n" +
|
||||
"@interface AC { A[] value(); }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainedBy( BC.class )\n" +
|
||||
"@Repeatable( BC.class )\n" +
|
||||
"@interface B { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainerFor(B.class)\n" +
|
||||
"@interface BC { B[] value(); } \n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
@ -198,12 +196,11 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper {
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
|
||||
"@ContainedBy(DC.class)\n" +
|
||||
"@Repeatable(DC.class)\n" +
|
||||
"@interface D { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
|
||||
"@ContainerFor(D.class) \n" +
|
||||
"@interface DC { D[] value(); }\n\n");
|
||||
|
||||
// Test case sources with sample generated source.
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 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
|
||||
@ -171,32 +171,29 @@ public class CombinationsTargetTest2 extends ClassfileTestHelper {
|
||||
|
||||
String sourceBase = new String("@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainedBy( AC.class )\n" +
|
||||
"@Repeatable( AC.class )\n" +
|
||||
"@interface A { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainerFor(A.class)\n" +
|
||||
"@interface AC { A[] value(); }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainedBy( BC.class )\n" +
|
||||
"@Repeatable( BC.class )\n" +
|
||||
"@interface B { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,_OTHER_})\n" +
|
||||
"@ContainerFor(B.class)\n" +
|
||||
"@interface BC { B[] value(); } \n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
|
||||
"@ContainedBy(DC.class)\n" +
|
||||
"@Repeatable(DC.class)\n" +
|
||||
"@interface D { }\n\n" +
|
||||
|
||||
"@Retention("+retentn+")\n" +
|
||||
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
|
||||
"@ContainerFor(D.class) \n" +
|
||||
"@interface DC { D[] value(); }\n\n");
|
||||
|
||||
// Test case sources with sample generated source
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008 Oracle and/or its affiliates. All rights reserved.
|
||||
* 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.ElementType.TYPE_PARAMETER;
|
||||
import static java.lang.annotation.ElementType.TYPE_USE;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
@ -36,6 +28,14 @@ import java.lang.annotation.Target;
|
||||
* @compile/fail/ref=DotClass.out -XDrawDiagnostics DotClass.java
|
||||
*/
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.ElementType.TYPE_PARAMETER;
|
||||
import static java.lang.annotation.ElementType.TYPE_USE;
|
||||
|
||||
@Target({TYPE_USE, TYPE_PARAMETER, TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@interface A {}
|
||||
|
||||
@ -120,7 +120,6 @@ class MyList<E> { }
|
||||
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
|
||||
@interface RTA { }
|
||||
|
||||
@ContainerFor(RTA.class)
|
||||
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
|
||||
@interface RTAs {
|
||||
RTA[] value();
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Oracle and/or its affiliates. All rights reserved.
|
||||
* 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
|
||||
@ -22,8 +21,6 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @summary test acceptance of varargs annotations
|
||||
@ -31,6 +28,8 @@ import java.lang.annotation.*;
|
||||
* @compile Varargs.java
|
||||
*/
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
|
||||
@interface A {}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 2013, 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
|
||||
@ -241,8 +241,8 @@ public class Driver {
|
||||
sb.append("\n@Repeatable(RTAs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTA {}");
|
||||
sb.append("\n@Repeatable(RTBs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTB {}");
|
||||
|
||||
sb.append("\n@ContainerFor(RTA.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTAs { RTA[] value(); }");
|
||||
sb.append("\n@ContainerFor(RTB.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTBs { RTB[] value(); }");
|
||||
sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTAs { RTA[] value(); }");
|
||||
sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTBs { RTB[] value(); }");
|
||||
|
||||
sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
|
||||
sb.append("\n@interface Decl {}");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2009 Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2009, 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
|
||||
|
||||
227
langtools/test/tools/javac/api/8007344/Test.java
Normal file
227
langtools/test/tools/javac/api/8007344/Test.java
Normal file
@ -0,0 +1,227 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, 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 8007344
|
||||
* @summary javac may not make tree end positions and/or doc comments
|
||||
* available to processors and listeners
|
||||
* @library /tools/javac/lib
|
||||
* @build JavacTestingAbstractProcessor
|
||||
* @run main Test
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.processing.RoundEnvironment;
|
||||
import javax.lang.model.element.Element;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import javax.tools.JavaFileObject;
|
||||
import javax.tools.StandardJavaFileManager;
|
||||
|
||||
import com.sun.source.doctree.DocCommentTree;
|
||||
import com.sun.source.tree.*;
|
||||
import com.sun.source.util.DocTrees;
|
||||
import com.sun.source.util.JavacTask;
|
||||
import com.sun.source.util.SourcePositions;
|
||||
import com.sun.source.util.TaskEvent;
|
||||
import com.sun.source.util.TaskListener;
|
||||
import com.sun.source.util.TreePath;
|
||||
import com.sun.source.util.TreePathScanner;
|
||||
import com.sun.tools.javac.api.JavacTool;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.tree.Pretty;
|
||||
import com.sun.tools.javac.util.Position;
|
||||
|
||||
/** Doc comment: Test */
|
||||
public class Test {
|
||||
public static final int EXPECT_DOC_COMMENTS = 3;
|
||||
|
||||
/** Doc comment: main */
|
||||
public static void main(String... args) throws Exception {
|
||||
PrintWriter out = new PrintWriter(System.err);
|
||||
try {
|
||||
new Test(out).run();
|
||||
} finally {
|
||||
out.flush();
|
||||
}
|
||||
}
|
||||
|
||||
PrintWriter out;
|
||||
int errors;
|
||||
|
||||
Test(PrintWriter out) {
|
||||
this.out = out;
|
||||
}
|
||||
|
||||
/** Doc comment: run */
|
||||
void run() throws Exception {
|
||||
File testSrc = new File(System.getProperty("test.src"));
|
||||
File thisFile = new File(testSrc, getClass().getName() + ".java");
|
||||
JavacTool javac = JavacTool.create();
|
||||
StandardJavaFileManager fm = javac.getStandardFileManager(null, null, null);
|
||||
Iterable<? extends JavaFileObject> fos = fm.getJavaFileObjects(thisFile);
|
||||
testAnnoProcessor(javac, fm, fos, out, EXPECT_DOC_COMMENTS);
|
||||
testTaskListener(javac, fm, fos, out, EXPECT_DOC_COMMENTS);
|
||||
|
||||
if (errors > 0)
|
||||
throw new Exception(errors + " errors occurred");
|
||||
}
|
||||
|
||||
void testAnnoProcessor(JavacTool javac, StandardJavaFileManager fm,
|
||||
Iterable<? extends JavaFileObject> files, PrintWriter out,
|
||||
int expectedDocComments) {
|
||||
out.println("Test annotation processor");
|
||||
JavacTask task = javac.getTask(out, fm, null, null, null, files);
|
||||
AnnoProc ap = new AnnoProc(DocTrees.instance(task));
|
||||
task.setProcessors(Arrays.asList(ap));
|
||||
task.call();
|
||||
ap.checker.checkDocComments(expectedDocComments);
|
||||
}
|
||||
|
||||
void testTaskListener(JavacTool javac, StandardJavaFileManager fm,
|
||||
Iterable<? extends JavaFileObject> files, PrintWriter out,
|
||||
int expectedDocComments) {
|
||||
out.println("Test task listener");
|
||||
JavacTask task = javac.getTask(out, fm, null, null, null, files);
|
||||
TaskListnr tl = new TaskListnr(DocTrees.instance(task));
|
||||
task.addTaskListener(tl);
|
||||
task.call();
|
||||
tl.checker.checkDocComments(expectedDocComments);
|
||||
}
|
||||
|
||||
void error(String msg) {
|
||||
out.println("Error: " + msg);
|
||||
errors++;
|
||||
}
|
||||
|
||||
class AnnoProc extends JavacTestingAbstractProcessor {
|
||||
Checker checker;
|
||||
|
||||
AnnoProc(DocTrees trees) {
|
||||
checker = new Checker(trees);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
|
||||
for (Element e : roundEnv.getRootElements()) {
|
||||
checker.scan(checker.trees.getPath(e), null);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class TaskListnr implements TaskListener {
|
||||
Checker checker;
|
||||
|
||||
TaskListnr(DocTrees trees) {
|
||||
checker = new Checker(trees);
|
||||
}
|
||||
|
||||
public void started(TaskEvent e) {
|
||||
if (e.getKind() == TaskEvent.Kind.ANALYZE)
|
||||
checker.scan(new TreePath(e.getCompilationUnit()), null);
|
||||
}
|
||||
|
||||
public void finished(TaskEvent e) {
|
||||
}
|
||||
}
|
||||
|
||||
class Checker extends TreePathScanner<Void,Void> {
|
||||
DocTrees trees;
|
||||
SourcePositions srcPosns;
|
||||
|
||||
int docComments = 0;
|
||||
|
||||
Checker(DocTrees trees) {
|
||||
this.trees = trees;
|
||||
srcPosns = trees.getSourcePositions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void scan(Tree tree, Void ignore) {
|
||||
if (tree != null) {
|
||||
switch (tree.getKind()) {
|
||||
// HACK: Workaround 8007350
|
||||
// Some tree nodes do not have endpos set
|
||||
case ASSIGNMENT:
|
||||
case BLOCK:
|
||||
case IDENTIFIER:
|
||||
case METHOD_INVOCATION:
|
||||
break;
|
||||
|
||||
default:
|
||||
checkEndPos(getCurrentPath().getCompilationUnit(), tree);
|
||||
}
|
||||
}
|
||||
return super.scan(tree, ignore);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitClass(ClassTree tree, Void ignore) {
|
||||
checkComment();
|
||||
return super.visitClass(tree, ignore);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitMethod(MethodTree tree, Void ignore) {
|
||||
checkComment();
|
||||
return super.visitMethod(tree, ignore);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void visitVariable(VariableTree tree, Void ignore) {
|
||||
checkComment();
|
||||
return super.visitVariable(tree, ignore);
|
||||
}
|
||||
|
||||
void checkComment() {
|
||||
DocCommentTree dc = trees.getDocCommentTree(getCurrentPath());
|
||||
if (dc != null) {
|
||||
out.println("comment: " + dc.toString().replaceAll("\\s+", " "));
|
||||
docComments++;
|
||||
}
|
||||
}
|
||||
|
||||
void checkEndPos(CompilationUnitTree unit, Tree tree) {
|
||||
long sp = srcPosns.getStartPosition(unit, tree);
|
||||
long ep = srcPosns.getEndPosition(unit, tree);
|
||||
if (sp >= 0 && ep == Position.NOPOS) {
|
||||
error("endpos not set for " + tree.getKind()
|
||||
+ " " + Pretty.toSimpleString(((JCTree) tree))
|
||||
+", start:" + sp);
|
||||
}
|
||||
}
|
||||
|
||||
void checkDocComments(int expected) {
|
||||
if (docComments != expected) {
|
||||
error("Unexpected number of doc comments received: "
|
||||
+ docComments + ", expected: " + expected);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -26,9 +26,6 @@
|
||||
* @bug 6306137
|
||||
* @summary JSR 199: encoding option doesn't affect standard file manager
|
||||
* @author Peter von der Ahé
|
||||
* @ignore
|
||||
* Need to make the contentCache in JavacFileManager be aware of changes to the encoding.
|
||||
* Need to propogate -source (and -encoding?) down to the JavacFileManager
|
||||
*/
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@ -23,7 +23,6 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @ignore awaits for VM support
|
||||
* @summary check that javac does not generate bridge methods for defaults
|
||||
*/
|
||||
|
||||
|
||||
@ -23,7 +23,6 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @ignore investigate as to whether code generation fails
|
||||
* @bug 8003280
|
||||
* @summary Add lambda tests
|
||||
* Compiler crash when local inner class nested inside lambda captures local variables from enclosing scope
|
||||
|
||||
@ -23,7 +23,6 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @ignore investigate as to whether code generation fails
|
||||
* @bug 8003280
|
||||
* @summary Add lambda tests
|
||||
* check that nested inner class in statement lambdas don't get corrupted return statements
|
||||
|
||||
1331
langtools/test/tools/javac/lib/DPrinter.java
Normal file
1331
langtools/test/tools/javac/lib/DPrinter.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -41,14 +41,20 @@ import javax.tools.ToolProvider;
|
||||
*
|
||||
* If the property is not set the class will use a heuristic to determine the
|
||||
* maximum number of threads that can be fired to execute a given test.
|
||||
*
|
||||
* This code will have to be revisited if jprt starts using concurrency for
|
||||
* for running jtreg tests.
|
||||
*/
|
||||
public abstract class JavacTestingAbstractThreadedTest {
|
||||
|
||||
protected static AtomicInteger numberOfThreads = new AtomicInteger();
|
||||
|
||||
protected static int getThreadPoolSize() {
|
||||
Integer testConc = Integer.getInteger("test.concurrency");
|
||||
if (testConc != null) return testConc;
|
||||
int cores = Runtime.getRuntime().availableProcessors();
|
||||
return Math.max(2, Math.min(8, cores / 2));
|
||||
numberOfThreads.set(Math.max(2, Math.min(8, cores / 2)));
|
||||
return numberOfThreads.get();
|
||||
}
|
||||
|
||||
protected static void checkAfterExec() throws InterruptedException {
|
||||
@ -82,11 +88,18 @@ public abstract class JavacTestingAbstractThreadedTest {
|
||||
} else if (printCheckCount) {
|
||||
outWriter.println("Total check executed: " + checkCount.get());
|
||||
}
|
||||
/*
|
||||
* This output is for supporting debugging. It does not mean that a given
|
||||
* test had executed that number of threads concurrently. The value printed
|
||||
* here is the maximum possible amount.
|
||||
*/
|
||||
closePrinters();
|
||||
if (printAll) {
|
||||
System.out.println(errSWriter.toString());
|
||||
System.out.println(outSWriter.toString());
|
||||
}
|
||||
System.out.println("Total number of threads in thread pool: " +
|
||||
numberOfThreads.get());
|
||||
}
|
||||
|
||||
protected static void closePrinters() {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2012, 2013, 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,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6493690
|
||||
* @bug 6493690 8007490
|
||||
* @summary javadoc should have a javax.tools.Tool service provider
|
||||
* @build APITest
|
||||
* @run main RunTest
|
||||
@ -31,6 +31,7 @@
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import javax.tools.DocumentationTool;
|
||||
import javax.tools.ToolProvider;
|
||||
|
||||
@ -46,7 +47,7 @@ public class RunTest extends APITest {
|
||||
* Verify that run method can be invoked.
|
||||
*/
|
||||
@Test
|
||||
public void testRun() throws Exception {
|
||||
public void testRunOK() throws Exception {
|
||||
File testSrc = new File(System.getProperty("test.src"));
|
||||
File srcFile = new File(testSrc, "pkg/C.java");
|
||||
File outDir = getOutDir();
|
||||
@ -77,7 +78,7 @@ public class RunTest extends APITest {
|
||||
* Verify that run method can be invoked.
|
||||
*/
|
||||
@Test
|
||||
public void testRun2() throws Exception {
|
||||
public void testRunFail() throws Exception {
|
||||
File outDir = getOutDir();
|
||||
String badfile = "badfile.java";
|
||||
String[] args = { "-d", outDir.getPath(), badfile };
|
||||
@ -100,5 +101,48 @@ public class RunTest extends APITest {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify that null args are accepted.
|
||||
*/
|
||||
@Test
|
||||
public void testNullArgs() throws Exception {
|
||||
File testSrc = new File(System.getProperty("test.src"));
|
||||
File srcFile = new File(testSrc, "pkg/C.java");
|
||||
File outDir = getOutDir();
|
||||
String[] args = { "-d", outDir.getPath(), srcFile.getPath() };
|
||||
|
||||
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
|
||||
PrintStream prevStdout = System.out;
|
||||
System.setOut(new PrintStream(stdout));
|
||||
|
||||
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
|
||||
PrintStream prevStderr = System.err;
|
||||
System.setErr(new PrintStream(stderr));
|
||||
|
||||
int rc ;
|
||||
try {
|
||||
DocumentationTool tool = ToolProvider.getSystemDocumentationTool();
|
||||
rc = tool.run(null, null, null, args);
|
||||
} finally {
|
||||
System.setOut(prevStdout);
|
||||
System.setErr(prevStderr);
|
||||
}
|
||||
|
||||
System.err.println("stdout >>" + stdout.toString() + "<<");
|
||||
System.err.println("stderr >>" + stderr.toString() + "<<");
|
||||
|
||||
if (rc == 0) {
|
||||
System.err.println("call succeeded");
|
||||
checkFiles(outDir, standardExpectFiles);
|
||||
String out = stdout.toString();
|
||||
for (String f: standardExpectFiles) {
|
||||
String f1 = f.replace('/', File.separatorChar);
|
||||
if (f1.endsWith(".html") && !out.contains(f1))
|
||||
error("expected string not found: " + f1);
|
||||
}
|
||||
} else {
|
||||
error("call failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user