提交 27214fe3 编写于 作者: L lana

Merge

...@@ -241,6 +241,7 @@ JAVAC_DIRS = \ ...@@ -241,6 +241,7 @@ JAVAC_DIRS = \
javax/annotation/processing \ javax/annotation/processing \
javax/lang/model \ javax/lang/model \
javax/tools \ javax/tools \
jdk/ \
com/sun/source \ com/sun/source \
com/sun/tools/javac com/sun/tools/javac
......
...@@ -116,6 +116,7 @@ javac.includes = \ ...@@ -116,6 +116,7 @@ javac.includes = \
javax/annotation/processing/ \ javax/annotation/processing/ \
javax/lang/model/ \ javax/lang/model/ \
javax/tools/ \ javax/tools/ \
jdk/ \
com/sun/source/ \ com/sun/source/ \
com/sun/tools/javac/ \ com/sun/tools/javac/ \
com/sun/tools/doclint/ com/sun/tools/doclint/
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -196,10 +196,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter { ...@@ -196,10 +196,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
protected void addOverviewComment(Content htmltree) { protected void addOverviewComment(Content htmltree) {
if (root.inlineTags().length > 0) { if (root.inlineTags().length > 0) {
htmltree.addContent(getMarkerAnchor("overview_description")); htmltree.addContent(getMarkerAnchor("overview_description"));
HtmlTree div = new HtmlTree(HtmlTag.DIV); addInlineComment(root, htmltree);
div.addStyle(HtmlStyle.subTitle);
addInlineComment(root, div);
htmltree.addContent(div);
} }
} }
...@@ -211,7 +208,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter { ...@@ -211,7 +208,7 @@ public class PackageIndexWriter extends AbstractPackageIndexWriter {
*/ */
protected void addOverview(Content body) throws IOException { protected void addOverview(Content body) throws IOException {
HtmlTree div = new HtmlTree(HtmlTag.DIV); HtmlTree div = new HtmlTree(HtmlTag.DIV);
div.addStyle(HtmlStyle.footer); div.addStyle(HtmlStyle.contentContainer);
addOverviewComment(div); addOverviewComment(div);
addTagsInfo(root, div); addTagsInfo(root, div);
body.addContent(div); body.addContent(div);
......
...@@ -496,9 +496,9 @@ public abstract class Symbol implements Element { ...@@ -496,9 +496,9 @@ public abstract class Symbol implements Element {
return l.toList(); return l.toList();
} }
public static class DelegatedSymbol extends Symbol { public static class DelegatedSymbol<T extends Symbol> extends Symbol {
protected Symbol other; protected T other;
public DelegatedSymbol(Symbol other) { public DelegatedSymbol(T other) {
super(other.kind, other.flags_field, other.name, other.type, other.owner); super(other.kind, other.flags_field, other.name, other.type, other.owner);
this.other = other; this.other = other;
} }
...@@ -532,6 +532,10 @@ public abstract class Symbol implements Element { ...@@ -532,6 +532,10 @@ public abstract class Symbol implements Element {
public <R, P> R accept(Symbol.Visitor<R, P> v, P p) { public <R, P> R accept(Symbol.Visitor<R, P> v, P p) {
return v.visitSymbol(other, p); return v.visitSymbol(other, p);
} }
public T getUnderlyingSymbol() {
return other;
}
} }
/** A class for type symbols. Type variables are represented by instances /** A class for type symbols. Type variables are represented by instances
......
...@@ -570,10 +570,19 @@ public class Lower extends TreeTranslator { ...@@ -570,10 +570,19 @@ public class Lower extends TreeTranslator {
* @param flags The class symbol's flags * @param flags The class symbol's flags
* @param owner The class symbol's owner * @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. // Create class symbol.
ClassSymbol c = reader.defineClass(names.empty, owner); 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.sourcefile = owner.sourcefile;
c.completer = null; c.completer = null;
c.members_field = new Scope(c); c.members_field = new Scope(c);
...@@ -597,9 +606,8 @@ public class Lower extends TreeTranslator { ...@@ -597,9 +606,8 @@ public class Lower extends TreeTranslator {
cdef.type = c.type; cdef.type = c.type;
// Append class definition tree to owner's definitions. // Append class definition tree to owner's definitions.
odef.defs = odef.defs.prepend(cdef); if (addToDefs) odef.defs = odef.defs.prepend(cdef);
return cdef;
return c;
} }
/************************************************************************** /**************************************************************************
...@@ -706,7 +714,7 @@ public class Lower extends TreeTranslator { ...@@ -706,7 +714,7 @@ public class Lower extends TreeTranslator {
* and synthethise a class (with makeEmptyClass) if one is not available. * and synthethise a class (with makeEmptyClass) if one is not available.
* However, there is a small possibility that an existing class will not * 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 * 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() { private void checkAccessConstructorTags() {
for (List<ClassSymbol> l = accessConstrTags; l.nonEmpty(); l = l.tail) { for (List<ClassSymbol> l = accessConstrTags; l.nonEmpty(); l = l.tail) {
...@@ -714,14 +722,10 @@ public class Lower extends TreeTranslator { ...@@ -714,14 +722,10 @@ public class Lower extends TreeTranslator {
if (isTranslatedClassAvailable(c)) if (isTranslatedClassAvailable(c))
continue; continue;
// Create class definition tree. // Create class definition tree.
JCClassDecl cdef = make.ClassDef( JCClassDecl cdec = makeEmptyClass(STATIC | SYNTHETIC,
make.Modifiers(STATIC | SYNTHETIC), names.empty, c.outermostClass(), c.flatname, false);
List.<JCTypeParameter>nil(), swapAccessConstructorTag(c, cdec.sym);
null, List.<JCExpression>nil(), List.<JCTree>nil()); translated.append(cdec);
cdef.sym = c;
cdef.type = c.type;
// add it to the list of classes to be generated
translated.append(cdef);
} }
} }
// where // where
...@@ -735,6 +739,19 @@ public class Lower extends TreeTranslator { ...@@ -735,6 +739,19 @@ public class Lower extends TreeTranslator {
return false; 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 * Access methods
*************************************************************************/ *************************************************************************/
...@@ -1211,7 +1228,7 @@ public class Lower extends TreeTranslator { ...@@ -1211,7 +1228,7 @@ public class Lower extends TreeTranslator {
"1"); "1");
ClassSymbol ctag = chk.compiled.get(flatname); ClassSymbol ctag = chk.compiled.get(flatname);
if (ctag == null) 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 // keep a record of all tags, to verify that all are generated as required
accessConstrTags = accessConstrTags.prepend(ctag); accessConstrTags = accessConstrTags.prepend(ctag);
return ctag; return ctag;
...@@ -1778,7 +1795,7 @@ public class Lower extends TreeTranslator { ...@@ -1778,7 +1795,7 @@ public class Lower extends TreeTranslator {
if (e.sym.kind == TYP && if (e.sym.kind == TYP &&
e.sym.name == names.empty && e.sym.name == names.empty &&
(e.sym.flags() & INTERFACE) == 0) return (ClassSymbol) e.sym; (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 /** Return symbol for "class$" method. If there is no method definition
......
...@@ -482,10 +482,8 @@ public class ClassWriter extends ClassFile { ...@@ -482,10 +482,8 @@ public class ClassWriter extends ClassFile {
while (i < pool.pp) { while (i < pool.pp) {
Object value = pool.pool[i]; Object value = pool.pool[i];
Assert.checkNonNull(value); Assert.checkNonNull(value);
if (value instanceof Method) if (value instanceof Method || value instanceof Variable)
value = ((Method)value).m; value = ((DelegatedSymbol)value).getUnderlyingSymbol();
else if (value instanceof Variable)
value = ((Variable)value).v;
if (value instanceof MethodSymbol) { if (value instanceof MethodSymbol) {
MethodSymbol m = (MethodSymbol)value; MethodSymbol m = (MethodSymbol)value;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -140,23 +140,23 @@ public class Pool { ...@@ -140,23 +140,23 @@ public class Pool {
return n == null ? -1 : n.intValue(); return n == null ? -1 : n.intValue();
} }
static class Method extends DelegatedSymbol { static class Method extends DelegatedSymbol<MethodSymbol> {
MethodSymbol m;
UniqueType uniqueType; UniqueType uniqueType;
Method(MethodSymbol m, Types types) { Method(MethodSymbol m, Types types) {
super(m); super(m);
this.m = m;
this.uniqueType = new UniqueType(m.type, types); this.uniqueType = new UniqueType(m.type, types);
} }
public boolean equals(Object other) { public boolean equals(Object any) {
if (!(other instanceof Method)) return false; if (!(any instanceof Method)) return false;
MethodSymbol o = ((Method)other).m; MethodSymbol o = ((Method)any).other;
MethodSymbol m = this.other;
return return
o.name == m.name && o.name == m.name &&
o.owner == m.owner && o.owner == m.owner &&
((Method)other).uniqueType.equals(uniqueType); ((Method)any).uniqueType.equals(uniqueType);
} }
public int hashCode() { public int hashCode() {
MethodSymbol m = this.other;
return return
m.name.hashCode() * 33 + m.name.hashCode() * 33 +
m.owner.hashCode() * 9 + m.owner.hashCode() * 9 +
...@@ -173,21 +173,21 @@ public class Pool { ...@@ -173,21 +173,21 @@ public class Pool {
} }
@Override @Override
public boolean equals(Object other) { public boolean equals(Object any) {
if (!super.equals(other)) return false; if (!super.equals(any)) return false;
if (!(other instanceof DynamicMethod)) return false; if (!(any instanceof DynamicMethod)) return false;
DynamicMethodSymbol dm1 = (DynamicMethodSymbol)m; DynamicMethodSymbol dm1 = (DynamicMethodSymbol)other;
DynamicMethodSymbol dm2 = (DynamicMethodSymbol)((DynamicMethod)other).m; DynamicMethodSymbol dm2 = (DynamicMethodSymbol)((DynamicMethod)any).other;
return dm1.bsm == dm2.bsm && return dm1.bsm == dm2.bsm &&
dm1.bsmKind == dm2.bsmKind && dm1.bsmKind == dm2.bsmKind &&
Arrays.equals(uniqueStaticArgs, Arrays.equals(uniqueStaticArgs,
((DynamicMethod)other).uniqueStaticArgs); ((DynamicMethod)any).uniqueStaticArgs);
} }
@Override @Override
public int hashCode() { public int hashCode() {
int hash = super.hashCode(); int hash = super.hashCode();
DynamicMethodSymbol dm = (DynamicMethodSymbol)m; DynamicMethodSymbol dm = (DynamicMethodSymbol)other;
hash += dm.bsmKind * 7 + hash += dm.bsmKind * 7 +
dm.bsm.hashCode() * 11; dm.bsm.hashCode() * 11;
for (int i = 0; i < dm.staticArgs.length; i++) { for (int i = 0; i < dm.staticArgs.length; i++) {
...@@ -209,23 +209,23 @@ public class Pool { ...@@ -209,23 +209,23 @@ public class Pool {
} }
} }
static class Variable extends DelegatedSymbol { static class Variable extends DelegatedSymbol<VarSymbol> {
VarSymbol v;
UniqueType uniqueType; UniqueType uniqueType;
Variable(VarSymbol v, Types types) { Variable(VarSymbol v, Types types) {
super(v); super(v);
this.v = v;
this.uniqueType = new UniqueType(v.type, types); this.uniqueType = new UniqueType(v.type, types);
} }
public boolean equals(Object other) { public boolean equals(Object any) {
if (!(other instanceof Variable)) return false; if (!(any instanceof Variable)) return false;
VarSymbol o = ((Variable)other).v; VarSymbol o = ((Variable)any).other;
VarSymbol v = other;
return return
o.name == v.name && o.name == v.name &&
o.owner == v.owner && o.owner == v.owner &&
((Variable)other).uniqueType.equals(uniqueType); ((Variable)any).uniqueType.equals(uniqueType);
} }
public int hashCode() { public int hashCode() {
VarSymbol v = other;
return return
v.name.hashCode() * 33 + v.name.hashCode() * 33 +
v.owner.hashCode() * 9 + v.owner.hashCode() * 9 +
......
...@@ -629,6 +629,8 @@ public class JavaCompiler implements ClassReader.SourceCompleter { ...@@ -629,6 +629,8 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
if (!taskListener.isEmpty()) { if (!taskListener.isEmpty()) {
TaskEvent e = new TaskEvent(TaskEvent.Kind.PARSE, filename); TaskEvent e = new TaskEvent(TaskEvent.Kind.PARSE, filename);
taskListener.started(e); taskListener.started(e);
keepComments = true;
genEndPos = true;
} }
Parser parser = parserFactory.newParser(content, keepComments(), genEndPos, lineDebugInfo); Parser parser = parserFactory.newParser(content, keepComments(), genEndPos, lineDebugInfo);
tree = parser.parseCompilationUnit(); tree = parser.parseCompilationUnit();
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -279,13 +279,7 @@ public class DocCommentParser { ...@@ -279,13 +279,7 @@ public class DocCommentParser {
try { try {
nextChar(); nextChar();
if (isIdentifierStart(ch)) { if (isIdentifierStart(ch)) {
int namePos = bp; Name name = readIdentifier();
nextChar();
while (isIdentifierPart(ch))
nextChar();
int nameLen = bp - namePos;
Name name = names.fromChars(buf, namePos, nameLen);
TagParser tp = tagParsers.get(name); TagParser tp = tagParsers.get(name);
if (tp == null) { if (tp == null) {
List<DCTree> content = blockContent(); List<DCTree> content = blockContent();
...@@ -334,14 +328,9 @@ public class DocCommentParser { ...@@ -334,14 +328,9 @@ public class DocCommentParser {
try { try {
nextChar(); nextChar();
if (isIdentifierStart(ch)) { if (isIdentifierStart(ch)) {
int namePos = bp; Name name = readIdentifier();
nextChar();
while (isIdentifierPart(ch))
nextChar();
int nameLen = bp - namePos;
skipWhitespace(); skipWhitespace();
Name name = names.fromChars(buf, namePos, nameLen);
TagParser tp = tagParsers.get(name); TagParser tp = tagParsers.get(name);
if (tp == null) { if (tp == null) {
DCTree text = inlineText(); DCTree text = inlineText();
...@@ -575,10 +564,8 @@ public class DocCommentParser { ...@@ -575,10 +564,8 @@ public class DocCommentParser {
int pos = bp; int pos = bp;
if (isJavaIdentifierStart(ch)) { if (isJavaIdentifierStart(ch)) {
nextChar(); Name name = readJavaIdentifier();
while (isJavaIdentifierPart(ch)) return m.at(pos).Identifier(name);
nextChar();
return m.at(pos).Identifier(names.fromChars(buf, pos, bp - pos));
} }
throw new ParseException("dc.identifier.expected"); throw new ParseException("dc.identifier.expected");
...@@ -703,39 +690,36 @@ public class DocCommentParser { ...@@ -703,39 +690,36 @@ public class DocCommentParser {
protected DCTree entity() { protected DCTree entity() {
int p = bp; int p = bp;
nextChar(); nextChar();
int namep = bp; Name name = null;
boolean checkSemi = false; boolean checkSemi = false;
if (ch == '#') { if (ch == '#') {
int namep = bp;
nextChar(); nextChar();
if (isDecimalDigit(ch)) { if (isDecimalDigit(ch)) {
nextChar(); nextChar();
while (isDecimalDigit(ch)) while (isDecimalDigit(ch))
nextChar(); nextChar();
checkSemi = true; name = names.fromChars(buf, namep, bp - namep);
} else if (ch == 'x' || ch == 'X') { } else if (ch == 'x' || ch == 'X') {
nextChar(); nextChar();
if (isHexDigit(ch)) { if (isHexDigit(ch)) {
nextChar(); nextChar();
while (isHexDigit(ch)) while (isHexDigit(ch))
nextChar(); nextChar();
checkSemi = true; name = names.fromChars(buf, namep, bp - namep);
} }
} }
} else if (isIdentifierStart(ch)) { } else if (isIdentifierStart(ch)) {
nextChar(); name = readIdentifier();
while (isIdentifierPart(ch))
nextChar();
checkSemi = true;
} }
if (checkSemi && ch == ';') { if (name == null)
return erroneous("dc.bad.entity", p);
else {
if (ch != ';')
return erroneous("dc.missing.semicolon", p);
nextChar(); nextChar();
return m.at(p).Entity(names.fromChars(buf, namep, bp - namep - 1)); return m.at(p).Entity(name);
} else {
String code = checkSemi
? "dc.missing.semicolon"
: "dc.bad.entity";
return erroneous(code, p);
} }
} }
...@@ -747,11 +731,7 @@ public class DocCommentParser { ...@@ -747,11 +731,7 @@ public class DocCommentParser {
int p = bp; int p = bp;
nextChar(); nextChar();
if (isIdentifierStart(ch)) { if (isIdentifierStart(ch)) {
int namePos = bp; Name name = readIdentifier();
nextChar();
while (isIdentifierPart(ch))
nextChar();
int nameLen = bp - namePos;
List<DCTree> attrs = htmlAttrs(); List<DCTree> attrs = htmlAttrs();
if (attrs != null) { if (attrs != null) {
boolean selfClosing = false; boolean selfClosing = false;
...@@ -761,22 +741,16 @@ public class DocCommentParser { ...@@ -761,22 +741,16 @@ public class DocCommentParser {
} }
if (ch == '>') { if (ch == '>') {
nextChar(); nextChar();
Name name = names.fromChars(buf, namePos, nameLen);
return m.at(p).StartElement(name, attrs, selfClosing); return m.at(p).StartElement(name, attrs, selfClosing);
} }
} }
} else if (ch == '/') { } else if (ch == '/') {
nextChar(); nextChar();
if (isIdentifierStart(ch)) { if (isIdentifierStart(ch)) {
int namePos = bp; Name name = readIdentifier();
nextChar();
while (isIdentifierPart(ch))
nextChar();
int nameLen = bp - namePos;
skipWhitespace(); skipWhitespace();
if (ch == '>') { if (ch == '>') {
nextChar(); nextChar();
Name name = names.fromChars(buf, namePos, nameLen);
return m.at(p).EndElement(name); return m.at(p).EndElement(name);
} }
} }
...@@ -822,10 +796,7 @@ public class DocCommentParser { ...@@ -822,10 +796,7 @@ public class DocCommentParser {
loop: loop:
while (isIdentifierStart(ch)) { while (isIdentifierStart(ch)) {
int namePos = bp; int namePos = bp;
nextChar(); Name name = readIdentifier();
while (isIdentifierPart(ch))
nextChar();
int nameLen = bp - namePos;
skipWhitespace(); skipWhitespace();
List<DCTree> value = null; List<DCTree> value = null;
ValueKind vkind = ValueKind.EMPTY; ValueKind vkind = ValueKind.EMPTY;
...@@ -862,7 +833,6 @@ public class DocCommentParser { ...@@ -862,7 +833,6 @@ public class DocCommentParser {
skipWhitespace(); skipWhitespace();
value = v.toList(); value = v.toList();
} }
Name name = names.fromChars(buf, namePos, nameLen);
DCAttribute attr = m.at(namePos).Attribute(name, vkind, value); DCAttribute attr = m.at(namePos).Attribute(name, vkind, value);
attrs.add(attr); attrs.add(attr);
} }
...@@ -897,7 +867,7 @@ public class DocCommentParser { ...@@ -897,7 +867,7 @@ public class DocCommentParser {
protected DCErroneous erroneous(String code, int pos) { protected DCErroneous erroneous(String code, int pos) {
int i = bp - 1; int i = bp - 1;
loop: loop:
while (i > 0) { while (i > pos) {
switch (buf[i]) { switch (buf[i]) {
case '\f': case '\n': case '\r': case '\f': case '\n': case '\r':
newline = true; newline = true;
...@@ -926,16 +896,24 @@ public class DocCommentParser { ...@@ -926,16 +896,24 @@ public class DocCommentParser {
return Character.isUnicodeIdentifierStart(ch); return Character.isUnicodeIdentifierStart(ch);
} }
protected boolean isIdentifierPart(char ch) { protected Name readIdentifier() {
return Character.isUnicodeIdentifierPart(ch); int start = bp;
nextChar();
while (bp < buflen && Character.isUnicodeIdentifierPart(ch))
nextChar();
return names.fromChars(buf, start, bp - start);
} }
protected boolean isJavaIdentifierStart(char ch) { protected boolean isJavaIdentifierStart(char ch) {
return Character.isJavaIdentifierStart(ch); return Character.isJavaIdentifierStart(ch);
} }
protected boolean isJavaIdentifierPart(char ch) { protected Name readJavaIdentifier() {
return Character.isJavaIdentifierPart(ch); int start = bp;
nextChar();
while (bp < buflen && Character.isJavaIdentifierPart(ch))
nextChar();
return names.fromChars(buf, start, bp - start);
} }
protected boolean isDecimalDigit(char ch) { protected boolean isDecimalDigit(char ch) {
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -236,7 +236,7 @@ public class JavadocTokenizer extends JavaTokenizer { ...@@ -236,7 +236,7 @@ public class JavadocTokenizer extends JavaTokenizer {
// relative to the best match found in the array. // relative to the best match found in the array.
if (pos == Position.NOPOS) if (pos == Position.NOPOS)
return Position.NOPOS; return Position.NOPOS;
if (pos < 0 || pos >= docComment.length()) if (pos < 0 || pos > docComment.length())
throw new StringIndexOutOfBoundsException(String.valueOf(pos)); throw new StringIndexOutOfBoundsException(String.valueOf(pos));
if (docPosns == null) if (docPosns == null)
return Position.NOPOS; return Position.NOPOS;
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -119,7 +119,7 @@ public abstract class DCTree implements DocTree { ...@@ -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() { public String getTagName() {
return getKind().tagName; return getKind().tagName;
} }
...@@ -169,7 +169,7 @@ public abstract class DCTree implements DocTree { ...@@ -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; public final List<DCTree> name;
DCAuthor(List<DCTree> name) { DCAuthor(List<DCTree> name) {
...@@ -640,7 +640,7 @@ public abstract class DCTree implements DocTree { ...@@ -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; public final List<DCTree> body;
DCSince(List<DCTree> body) { DCSince(List<DCTree> body) {
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -139,12 +139,13 @@ public class JavadocTool implements DocumentationTool { ...@@ -139,12 +139,13 @@ public class JavadocTool implements DocumentationTool {
@Override @Override
public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) { public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) {
PrintWriter err_pw = new PrintWriter(err, true); PrintWriter err_pw = new PrintWriter(err == null ? System.err : err, true);
PrintWriter out_pw = new PrintWriter(out); PrintWriter out_pw = new PrintWriter(out == null ? System.out : out);
try { try {
String standardDocletName = "com.sun.tools.doclets.standard.Standard"; String standardDocletName = "com.sun.tools.doclets.standard.Standard";
ClassLoader cl = getClass().getClassLoader();
return com.sun.tools.javadoc.Main.execute( 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 { } finally {
err_pw.flush(); err_pw.flush();
out_pw.flush(); out_pw.flush();
......
/*
* 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;
}
/*
* @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() {}
/**&amp*/
private void entityName() {}
/**<a*/
private void tag() {}
/**</a*/
private void tagEnd() {}
/**<a name*/
private void attribute() {}
}
EndWithIdentifierTest.java:14: error: syntax error in reference
/**{@link*/
^
EndWithIdentifierTest.java:17: error: reference not found
/**@see List*/
^
EndWithIdentifierTest.java:20: error: semicolon missing
/**&amp*/
^
EndWithIdentifierTest.java:23: error: malformed HTML
/**<a*/
^
EndWithIdentifierTest.java:26: error: malformed HTML
/**</a*/
^
EndWithIdentifierTest.java:29: error: malformed HTML
/**<a name*/
^
6 errors
/*
* @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 {
}
UnfinishedInlineTagTest.java:14: error: unterminated inline tag
*/
^
1 error
/*
* 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;
}
}
}
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -174,22 +174,20 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper { ...@@ -174,22 +174,20 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper {
String sourceBase = new String("@Retention("+retentn+")\n" + String sourceBase = new String("@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainedBy( AC.class )\n" + "@Repeatable( AC.class )\n" +
"@interface A { }\n\n" + "@interface A { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainerFor(A.class)\n" +
"@interface AC { A[] value(); }\n\n" + "@interface AC { A[] value(); }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainedBy( BC.class )\n" + "@Repeatable( BC.class )\n" +
"@interface B { }\n\n" + "@interface B { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainerFor(B.class)\n" +
"@interface BC { B[] value(); } \n\n" + "@interface BC { B[] value(); } \n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
...@@ -198,12 +196,11 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper { ...@@ -198,12 +196,11 @@ public class CombinationsTargetTest1 extends ClassfileTestHelper {
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" + "@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
"@ContainedBy(DC.class)\n" + "@Repeatable(DC.class)\n" +
"@interface D { }\n\n" + "@interface D { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" + "@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
"@ContainerFor(D.class) \n" +
"@interface DC { D[] value(); }\n\n"); "@interface DC { D[] value(); }\n\n");
// Test case sources with sample generated source. // Test case sources with sample generated source.
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -171,32 +171,29 @@ public class CombinationsTargetTest2 extends ClassfileTestHelper { ...@@ -171,32 +171,29 @@ public class CombinationsTargetTest2 extends ClassfileTestHelper {
String sourceBase = new String("@Retention("+retentn+")\n" + String sourceBase = new String("@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainedBy( AC.class )\n" + "@Repeatable( AC.class )\n" +
"@interface A { }\n\n" + "@interface A { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainerFor(A.class)\n" +
"@interface AC { A[] value(); }\n\n" + "@interface AC { A[] value(); }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainedBy( BC.class )\n" + "@Repeatable( BC.class )\n" +
"@interface B { }\n\n" + "@interface B { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,_OTHER_})\n" + "@Target({TYPE_USE,_OTHER_})\n" +
"@ContainerFor(B.class)\n" +
"@interface BC { B[] value(); } \n\n" + "@interface BC { B[] value(); } \n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" + "@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
"@ContainedBy(DC.class)\n" + "@Repeatable(DC.class)\n" +
"@interface D { }\n\n" + "@interface D { }\n\n" +
"@Retention("+retentn+")\n" + "@Retention("+retentn+")\n" +
"@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" + "@Target({TYPE_USE,TYPE_PARAMETER,_OTHER_})\n" +
"@ContainerFor(D.class) \n" +
"@interface DC { D[] value(); }\n\n"); "@interface DC { D[] value(); }\n\n");
// Test case sources with sample generated source // Test case sources with sample generated source
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -36,6 +28,14 @@ import java.lang.annotation.Target; ...@@ -36,6 +28,14 @@ import java.lang.annotation.Target;
* @compile/fail/ref=DotClass.out -XDrawDiagnostics DotClass.java * @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}) @Target({TYPE_USE, TYPE_PARAMETER, TYPE})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@interface A {} @interface A {}
......
...@@ -120,7 +120,6 @@ class MyList<E> { } ...@@ -120,7 +120,6 @@ class MyList<E> { }
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@interface RTA { } @interface RTA { }
@ContainerFor(RTA.class)
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@interface RTAs { @interface RTAs {
RTA[] value(); RTA[] value();
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -22,8 +21,6 @@ ...@@ -22,8 +21,6 @@
* questions. * questions.
*/ */
import java.lang.annotation.*;
/* /*
* @test * @test
* @summary test acceptance of varargs annotations * @summary test acceptance of varargs annotations
...@@ -31,6 +28,8 @@ import java.lang.annotation.*; ...@@ -31,6 +28,8 @@ import java.lang.annotation.*;
* @compile Varargs.java * @compile Varargs.java
*/ */
import java.lang.annotation.*;
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
@interface A {} @interface A {}
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -241,8 +241,8 @@ public class Driver { ...@@ -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(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@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@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 RTBs { RTB[] value(); }");
sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})"); sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
sb.append("\n@interface Decl {}"); sb.append("\n@interface Decl {}");
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
......
/*
* 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 @@ ...@@ -26,9 +26,6 @@
* @bug 6306137 * @bug 6306137
* @summary JSR 199: encoding option doesn't affect standard file manager * @summary JSR 199: encoding option doesn't affect standard file manager
* @author Peter von der Ahé * @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; import java.io.File;
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
/* /*
* @test * @test
* @ignore awaits for VM support
* @summary check that javac does not generate bridge methods for defaults * @summary check that javac does not generate bridge methods for defaults
*/ */
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
/* /*
* @test * @test
* @ignore investigate as to whether code generation fails
* @bug 8003280 * @bug 8003280
* @summary Add lambda tests * @summary Add lambda tests
* Compiler crash when local inner class nested inside lambda captures local variables from enclosing scope * Compiler crash when local inner class nested inside lambda captures local variables from enclosing scope
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
/* /*
* @test * @test
* @ignore investigate as to whether code generation fails
* @bug 8003280 * @bug 8003280
* @summary Add lambda tests * @summary Add lambda tests
* check that nested inner class in statement lambdas don't get corrupted return statements * check that nested inner class in statement lambdas don't get corrupted return statements
......
此差异已折叠。
...@@ -41,14 +41,20 @@ import javax.tools.ToolProvider; ...@@ -41,14 +41,20 @@ import javax.tools.ToolProvider;
* *
* If the property is not set the class will use a heuristic to determine the * 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. * 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 { public abstract class JavacTestingAbstractThreadedTest {
protected static AtomicInteger numberOfThreads = new AtomicInteger();
protected static int getThreadPoolSize() { protected static int getThreadPoolSize() {
Integer testConc = Integer.getInteger("test.concurrency"); Integer testConc = Integer.getInteger("test.concurrency");
if (testConc != null) return testConc; if (testConc != null) return testConc;
int cores = Runtime.getRuntime().availableProcessors(); 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 { protected static void checkAfterExec() throws InterruptedException {
...@@ -82,11 +88,18 @@ public abstract class JavacTestingAbstractThreadedTest { ...@@ -82,11 +88,18 @@ public abstract class JavacTestingAbstractThreadedTest {
} else if (printCheckCount) { } else if (printCheckCount) {
outWriter.println("Total check executed: " + checkCount.get()); 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(); closePrinters();
if (printAll) { if (printAll) {
System.out.println(errSWriter.toString()); System.out.println(errSWriter.toString());
System.out.println(outSWriter.toString()); System.out.println(outSWriter.toString());
} }
System.out.println("Total number of threads in thread pool: " +
numberOfThreads.get());
} }
protected static void closePrinters() { protected static void closePrinters() {
......
/* /*
* 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. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 6493690 * @bug 6493690 8007490
* @summary javadoc should have a javax.tools.Tool service provider * @summary javadoc should have a javax.tools.Tool service provider
* @build APITest * @build APITest
* @run main RunTest * @run main RunTest
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.PrintStream;
import javax.tools.DocumentationTool; import javax.tools.DocumentationTool;
import javax.tools.ToolProvider; import javax.tools.ToolProvider;
...@@ -46,7 +47,7 @@ public class RunTest extends APITest { ...@@ -46,7 +47,7 @@ public class RunTest extends APITest {
* Verify that run method can be invoked. * Verify that run method can be invoked.
*/ */
@Test @Test
public void testRun() throws Exception { public void testRunOK() throws Exception {
File testSrc = new File(System.getProperty("test.src")); File testSrc = new File(System.getProperty("test.src"));
File srcFile = new File(testSrc, "pkg/C.java"); File srcFile = new File(testSrc, "pkg/C.java");
File outDir = getOutDir(); File outDir = getOutDir();
...@@ -77,7 +78,7 @@ public class RunTest extends APITest { ...@@ -77,7 +78,7 @@ public class RunTest extends APITest {
* Verify that run method can be invoked. * Verify that run method can be invoked.
*/ */
@Test @Test
public void testRun2() throws Exception { public void testRunFail() throws Exception {
File outDir = getOutDir(); File outDir = getOutDir();
String badfile = "badfile.java"; String badfile = "badfile.java";
String[] args = { "-d", outDir.getPath(), badfile }; String[] args = { "-d", outDir.getPath(), badfile };
...@@ -100,5 +101,48 @@ public class RunTest extends APITest { ...@@ -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");
}
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册