--- a/langtools/src/share/classes/com/sun/javadoc/ExecutableMemberDoc.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/javadoc/ExecutableMemberDoc.java Wed Apr 17 21:50:43 2013 -0700
@@ -88,13 +88,12 @@
Parameter[] parameters();
/**
- * Get the receiver annotations of this executable element.
- * Return an empty array if there are none.
+ * Get the receiver type of this executable element.
*
- * @return the receiver annotations of this executable element.
+ * @return the receiver type of this executable element.
* @since 1.8
*/
- AnnotationDesc[] receiverAnnotations();
+ Type receiverType();
/**
* Return the throws tags in this method.
--- a/langtools/src/share/classes/com/sun/javadoc/Type.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/javadoc/Type.java Wed Apr 17 21:50:43 2013 -0700
@@ -160,4 +160,13 @@
* @since 1.5
*/
AnnotationTypeDoc asAnnotationTypeDoc();
+
+ /**
+ * If this type is an array type, return the element type of the
+ * array. Otherwise, return null.
+ *
+ * @return a <code>Type</code> representing the element type or null.
+ * @since 1.8
+ */
+ Type getElementType();
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java Wed Apr 17 21:50:43 2013 -0700
@@ -139,12 +139,24 @@
}
}
- protected void addReceiverAnnotations(ExecutableMemberDoc member,
- Content tree) {
- if (member.receiverAnnotations().length > 0) {
- tree.addContent(writer.getSpace());
- writer.addReceiverAnnotationInfo(member, tree);
- }
+ /**
+ * Add the receiver annotations information.
+ *
+ * @param member the member to write receiver annotations for.
+ * @param rcvrType the receiver type.
+ * @param descList list of annotation description.
+ * @param tree the content tree to which the information will be added.
+ */
+ protected void addReceiverAnnotations(ExecutableMemberDoc member, Type rcvrType,
+ AnnotationDesc[] descList, Content tree) {
+ writer.addReceiverAnnotationInfo(member, descList, tree);
+ tree.addContent(writer.getSpace());
+ tree.addContent(rcvrType.typeName());
+ LinkInfoImpl linkInfo = new LinkInfoImpl(configuration,
+ LinkInfoImpl.CONTEXT_CLASS_SIGNATURE, rcvrType);
+ tree.addContent(new RawHtml(writer.getTypeParameterLinks(linkInfo)));
+ tree.addContent(writer.getSpace());
+ tree.addContent("this");
}
@@ -168,14 +180,24 @@
protected void addParameters(ExecutableMemberDoc member,
boolean includeAnnotations, Content htmltree) {
htmltree.addContent("(");
+ String sep = "";
Parameter[] params = member.parameters();
String indent = makeSpace(writer.displayLength);
if (configuration.linksource) {
//add spaces to offset indentation changes caused by link.
indent+= makeSpace(member.name().length());
}
+ Type rcvrType = member.receiverType();
+ if (includeAnnotations && rcvrType instanceof AnnotatedType) {
+ AnnotationDesc[] descList = rcvrType.asAnnotatedType().annotations();
+ if (descList.length > 0) {
+ addReceiverAnnotations(member, rcvrType, descList, htmltree);
+ sep = "," + DocletConstants.NL + indent;
+ }
+ }
int paramstart;
for (paramstart = 0; paramstart < params.length; paramstart++) {
+ htmltree.addContent(sep);
Parameter param = params[paramstart];
if (!param.name().startsWith("this$")) {
if (includeAnnotations) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -137,7 +137,6 @@
addName(constructor.name(), pre);
}
addParameters(constructor, pre);
- writer.addReceiverAnnotationInfo(constructor, pre);
addExceptions(constructor, pre);
return pre;
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java Wed Apr 17 21:50:43 2013 -0700
@@ -1860,11 +1860,13 @@
* Add the annotation types of the executable receiver.
*
* @param method the executable to write the receiver annotations for.
+ * @param descList list of annotation description.
* @param htmltree the documentation tree to which the annotation info will be
* added
*/
- public void addReceiverAnnotationInfo(ExecutableMemberDoc method, Content htmltree) {
- addAnnotationInfo(method, method.receiverAnnotations(), htmltree);
+ public void addReceiverAnnotationInfo(ExecutableMemberDoc method, AnnotationDesc[] descList,
+ Content htmltree) {
+ addAnnotationInfo(0, method, descList, false, htmltree);
}
/**
@@ -1915,13 +1917,16 @@
private boolean addAnnotationInfo(int indent, Doc doc,
AnnotationDesc[] descList, boolean lineBreak, Content htmltree) {
List<String> annotations = getAnnotations(indent, descList, lineBreak);
+ String sep ="";
if (annotations.size() == 0) {
return false;
}
Content annotationContent;
for (Iterator<String> iter = annotations.iterator(); iter.hasNext();) {
+ htmltree.addContent(sep);
annotationContent = new RawHtml(iter.next());
htmltree.addContent(annotationContent);
+ sep = " ";
}
return true;
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkFactoryImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -157,9 +157,9 @@
if (!isFirst) {
linkInfo.displayLength += 1;
output.append(" ");
- isFirst = false;
}
output.append(anno);
+ isFirst = false;
}
if (!annos.isEmpty()) {
linkInfo.displayLength += 1;
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkOutputImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/LinkOutputImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -63,6 +63,13 @@
/**
* {@inheritDoc}
*/
+ public void insert(int offset, Object o) {
+ output.insert(offset, o.toString());
+ }
+
+ /**
+ * {@inheritDoc}
+ */
public String toString() {
return output.toString();
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -130,7 +130,6 @@
addName(method.name(), pre);
}
addParameters(method, pre);
- addReceiverAnnotations(method, pre);
addExceptions(method, pre);
return pre;
}
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkFactory.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkFactory.java Wed Apr 17 21:50:43 2013 -0700
@@ -61,7 +61,7 @@
//Just a primitive.
linkInfo.displayLength += type.typeName().length();
linkOutput.append(type.typeName());
- } else if (type.asAnnotatedType() != null) {
+ } else if (type.asAnnotatedType() != null && type.dimension().length() == 0) {
linkOutput.append(getTypeAnnotationLinks(linkInfo));
linkInfo.type = type.asAnnotatedType().underlyingType();
linkOutput.append(getLinkOutput(linkInfo));
@@ -141,8 +141,21 @@
linkInfo.displayLength += 3;
linkOutput.append("...");
} else {
- linkInfo.displayLength += type.dimension().length();
- linkOutput.append(type.dimension());
+ while (type != null && type.dimension().length() > 0) {
+ linkInfo.displayLength += type.dimension().length();
+ if (type.asAnnotatedType() != null) {
+ linkInfo.type = type;
+ linkOutput.append(" ");
+ linkOutput.append(getTypeAnnotationLinks(linkInfo));
+ linkOutput.append("[]");
+ type = type.asAnnotatedType().underlyingType().getElementType();
+ } else {
+ linkOutput.append("[]");
+ type = type.getElementType();
+ }
+ }
+ linkInfo.type = type;
+ linkOutput.insert(0, getTypeAnnotationLinks(linkInfo));
}
return linkOutput;
} else if (linkInfo.classDoc != null) {
--- a/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkOutput.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/LinkOutput.java Wed Apr 17 21:50:43 2013 -0700
@@ -44,4 +44,12 @@
* @param o the object to append.
*/
public void append(Object o);
+
+ /**
+ * Insert the given object into the output sequence.
+ *
+ * @param offset the offset.
+ * @param o the object to be inserted.
+ */
+ public void insert(int offset, Object o);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symbol.java Wed Apr 17 21:50:43 2013 -0700
@@ -454,8 +454,7 @@
}
public Set<Modifier> getModifiers() {
- long flags = flags();
- return Flags.asModifierSet((flags & DEFAULT) != 0 ? flags & ~ABSTRACT : flags);
+ return Flags.asModifierSet(flags());
}
public Name getSimpleName() {
@@ -496,10 +495,11 @@
return List.nil();
}
- public List<TypeSymbol> getTypeParameters() {
- ListBuffer<TypeSymbol> l = ListBuffer.lb();
+ public List<TypeVariableSymbol> getTypeParameters() {
+ ListBuffer<TypeVariableSymbol> l = ListBuffer.lb();
for (Type t : type.getTypeArguments()) {
- l.append(t.tsym);
+ Assert.check(t.tsym.getKind() == ElementKind.TYPE_PARAMETER);
+ l.append((TypeVariableSymbol)t.tsym);
}
return l.toList();
}
@@ -546,19 +546,12 @@
}
}
- /** A class for type symbols. Type variables are represented by instances
- * of this class, classes and packages by instances of subclasses.
+ /** A base class for Symbols representing types.
*/
- public static class TypeSymbol
- extends Symbol implements TypeParameterElement {
- // Implements TypeParameterElement because type parameters don't
- // have their own TypeSymbol subclass.
- // TODO: type parameters should have their own TypeSymbol subclass
-
- public TypeSymbol(long flags, Name name, Type type, Symbol owner) {
- super(TYP, flags, name, type, owner);
+ public static abstract class TypeSymbol extends Symbol {
+ public TypeSymbol(int kind, long flags, Name name, Type type, Symbol owner) {
+ super(kind, flags, name, type, owner);
}
-
/** form a fully qualified name from a name and an owner
*/
static public Name formFullName(Name name, Symbol owner) {
@@ -610,11 +603,7 @@
return this.type.hasTag(TYPEVAR);
}
- // For type params; overridden in subclasses.
- public ElementKind getKind() {
- return ElementKind.TYPE_PARAMETER;
- }
-
+ @Override
public java.util.List<Symbol> getEnclosedElements() {
List<Symbol> list = List.nil();
if (kind == TYP && type.hasTag(TYPEVAR)) {
@@ -627,21 +616,29 @@
return list;
}
- // For type params.
- // Perhaps not needed if getEnclosingElement can be spec'ed
- // to do the same thing.
- // TODO: getGenericElement() might not be needed
- public Symbol getGenericElement() {
- return owner;
+ @Override
+ public <R, P> R accept(Symbol.Visitor<R, P> v, P p) {
+ return v.visitTypeSymbol(this, p);
+ }
+ }
+
+ /**
+ * Type variables are represented by instances of this class.
+ */
+ public static class TypeVariableSymbol
+ extends TypeSymbol implements TypeParameterElement {
+
+ public TypeVariableSymbol(long flags, Name name, Type type, Symbol owner) {
+ super(TYP, flags, name, type, owner);
}
- public <R, P> R accept(ElementVisitor<R, P> v, P p) {
- Assert.check(type.hasTag(TYPEVAR)); // else override will be invoked
- return v.visitTypeParameter(this, p);
+ public ElementKind getKind() {
+ return ElementKind.TYPE_PARAMETER;
}
- public <R, P> R accept(Symbol.Visitor<R, P> v, P p) {
- return v.visitTypeSymbol(this, p);
+ @Override
+ public Symbol getGenericElement() {
+ return owner;
}
public List<Type> getBounds() {
@@ -658,6 +655,11 @@
return ct.interfaces_field;
}
}
+
+ @Override
+ public <R, P> R accept(ElementVisitor<R, P> v, P p) {
+ return v.visitTypeParameter(this, p);
+ }
}
/** A class for package symbols
@@ -670,8 +672,7 @@
public ClassSymbol package_info; // see bug 6443073
public PackageSymbol(Name name, Type type, Symbol owner) {
- super(0, name, type, owner);
- this.kind = PCK;
+ super(PCK, 0, name, type, owner);
this.members_field = null;
this.fullname = formFullName(name, owner);
}
@@ -783,7 +784,7 @@
public Pool pool;
public ClassSymbol(long flags, Name name, Type type, Symbol owner) {
- super(flags, name, type, owner);
+ super(TYP, flags, name, type, owner);
this.members_field = null;
this.fullname = formFullName(name, owner);
this.flatname = formFlatName(name, owner);
@@ -1126,6 +1127,12 @@
return m;
}
+ @Override
+ public Set<Modifier> getModifiers() {
+ long flags = flags();
+ return Flags.asModifierSet((flags & DEFAULT) != 0 ? flags & ~ABSTRACT : flags);
+ }
+
/** The Java source which this symbol represents.
*/
public String toString() {
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Symtab.java Wed Apr 17 21:50:43 2013 -0700
@@ -404,12 +404,11 @@
return messages.getLocalizedString("compiler.misc.unnamed.package");
}
};
- noSymbol = new TypeSymbol(0, names.empty, Type.noType, rootPackage) {
+ noSymbol = new TypeSymbol(Kinds.NIL, 0, names.empty, Type.noType, rootPackage) {
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitUnknown(this, p);
}
};
- noSymbol.kind = Kinds.NIL;
// create the error symbols
errSymbol = new ClassSymbol(PUBLIC|STATIC|ACYCLIC, names.any, null, rootPackage);
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Type.java Wed Apr 17 21:50:43 2013 -0700
@@ -1145,7 +1145,7 @@
public TypeVar(Name name, Symbol owner, Type lower) {
super(TYPEVAR, null);
- tsym = new TypeSymbol(0, name, this, owner);
+ tsym = new TypeVariableSymbol(0, name, this, owner);
this.lower = lower;
}
--- a/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/Types.java Wed Apr 17 21:50:43 2013 -0700
@@ -589,7 +589,7 @@
CapturedType capVar = (CapturedType)capturedTypeargs.head;
//use declared bound if it doesn't depend on formal type-args
bound = capVar.bound.containsAny(capturedSite.getTypeArguments()) ?
- syms.objectType : capVar.bound;
+ wt.type : capVar.bound;
break;
default:
bound = wt.type;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java Wed Apr 17 21:50:43 2013 -0700
@@ -148,6 +148,7 @@
varInfo = new ResultInfo(VAR, Type.noType);
unknownExprInfo = new ResultInfo(VAL, Type.noType);
unknownTypeInfo = new ResultInfo(TYP, Type.noType);
+ unknownTypeExprInfo = new ResultInfo(Kinds.TYP | Kinds.VAL, Type.noType);
recoveryInfo = new RecoveryInfo(deferredAttr.emptyDeferredAttrContext);
}
@@ -559,6 +560,7 @@
final ResultInfo varInfo;
final ResultInfo unknownExprInfo;
final ResultInfo unknownTypeInfo;
+ final ResultInfo unknownTypeExprInfo;
final ResultInfo recoveryInfo;
Type pt() {
@@ -667,7 +669,7 @@
List<Type> attribArgs(List<JCExpression> trees, Env<AttrContext> env) {
ListBuffer<Type> argtypes = new ListBuffer<Type>();
for (JCExpression arg : trees) {
- Type argtype = allowPoly && TreeInfo.isPoly(arg, env.tree) ?
+ Type argtype = allowPoly && deferredAttr.isDeferred(env, arg) ?
deferredAttr.new DeferredType(arg, env) :
chk.checkNonVoid(arg, attribExpr(arg, env, Infer.anyPoly));
argtypes.append(argtype);
@@ -2455,20 +2457,24 @@
argtypes.append(param.vartype.type) :
argtypes.append(syms.errType);
}
- return new MethodType(argtypes, Type.recoveryType, List.<Type>nil(), syms.methodClass);
+ return new MethodType(argtypes, Type.recoveryType,
+ List.of(syms.throwableType), syms.methodClass);
case REFERENCE:
- return new MethodType(List.<Type>nil(), Type.recoveryType, List.<Type>nil(), syms.methodClass);
+ return new MethodType(List.<Type>nil(), Type.recoveryType,
+ List.of(syms.throwableType), syms.methodClass);
default:
Assert.error("Cannot get here!");
}
return null;
}
- private void checkAccessibleTypes(final DiagnosticPosition pos, final Env<AttrContext> env, final InferenceContext inferenceContext, final Type... ts) {
+ private void checkAccessibleTypes(final DiagnosticPosition pos, final Env<AttrContext> env,
+ final InferenceContext inferenceContext, final Type... ts) {
checkAccessibleTypes(pos, env, inferenceContext, List.from(ts));
}
- private void checkAccessibleTypes(final DiagnosticPosition pos, final Env<AttrContext> env, final InferenceContext inferenceContext, final List<Type> ts) {
+ private void checkAccessibleTypes(final DiagnosticPosition pos, final Env<AttrContext> env,
+ final InferenceContext inferenceContext, final List<Type> ts) {
if (inferenceContext.free(ts)) {
inferenceContext.addFreeTypeListener(ts, new FreeTypeListener() {
@Override
@@ -2985,7 +2991,8 @@
Env<AttrContext> localEnv = env.dup(tree);
//should we propagate the target type?
final ResultInfo castInfo;
- final boolean isPoly = TreeInfo.isPoly(tree.expr, tree);
+ JCExpression expr = TreeInfo.skipParens(tree.expr);
+ boolean isPoly = expr.hasTag(LAMBDA) || expr.hasTag(REFERENCE);
if (isPoly) {
//expression is a poly - we need to propagate target type info
castInfo = new ResultInfo(VAL, clazztype, new Check.NestedCheckContext(resultInfo.checkContext) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/CompileStates.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,92 @@
+/*
+ * 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 com.sun.tools.javac.comp;
+
+import java.util.HashMap;
+
+import com.sun.tools.javac.util.Context;
+
+/** Partial map to record which compiler phases have been executed
+ * for each compilation unit. Used for ATTR and FLOW phases.
+ *
+ * <p><b>This is NOT part of any supported API.
+ * If you write code that depends on this, you do so at your own risk.
+ * This code and its internal interfaces are subject to change or
+ * deletion without notice.</b>
+ */
+public class CompileStates extends HashMap<Env<AttrContext>, CompileStates.CompileState> {
+ /** The context key for the compile states. */
+ protected static final Context.Key<CompileStates> compileStatesKey =
+ new Context.Key<CompileStates>();
+
+ /** Get the CompileStates instance for this context. */
+ public static CompileStates instance(Context context) {
+ CompileStates instance = context.get(compileStatesKey);
+ if (instance == null) {
+ instance = new CompileStates(context);
+ }
+ return instance;
+ }
+
+ /** Ordered list of compiler phases for each compilation unit. */
+ public enum CompileState {
+ INIT(0),
+ PARSE(1),
+ ENTER(2),
+ PROCESS(3),
+ ATTR(4),
+ FLOW(5),
+ TRANSTYPES(6),
+ UNLAMBDA(7),
+ LOWER(8),
+ GENERATE(9);
+
+ CompileState(int value) {
+ this.value = value;
+ }
+ public boolean isAfter(CompileState other) {
+ return value > other.value;
+ }
+ public static CompileState max(CompileState a, CompileState b) {
+ return a.value > b.value ? a : b;
+ }
+ private final int value;
+ };
+
+ private static final long serialVersionUID = 1812267524140424433L;
+
+ protected Context context;
+
+ public CompileStates(Context context) {
+ this.context = context;
+ context.put(compileStatesKey, this);
+ }
+
+ public boolean isDone(Env<AttrContext> env, CompileState cs) {
+ CompileState ecs = get(env);
+ return (ecs != null) && !cs.isAfter(ecs);
+ }
+}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java Wed Apr 17 21:50:43 2013 -0700
@@ -800,4 +800,219 @@
}
}
}
+
+ /**
+ * Does the argument expression {@code expr} need speculative type-checking?
+ */
+ boolean isDeferred(Env<AttrContext> env, JCExpression expr) {
+ DeferredChecker dc = new DeferredChecker(env);
+ dc.scan(expr);
+ return dc.result.isPoly();
+ }
+
+ /**
+ * The kind of an argument expression. This is used by the analysis that
+ * determines as to whether speculative attribution is necessary.
+ */
+ enum ArgumentExpressionKind {
+
+ /** kind that denotes poly argument expression */
+ POLY,
+ /** kind that denotes a standalone expression */
+ NO_POLY,
+ /** kind that denotes a primitive/boxed standalone expression */
+ PRIMITIVE;
+
+ /**
+ * Does this kind denote a poly argument expression
+ */
+ public final boolean isPoly() {
+ return this == POLY;
+ }
+
+ /**
+ * Does this kind denote a primitive standalone expression
+ */
+ public final boolean isPrimitive() {
+ return this == PRIMITIVE;
+ }
+
+ /**
+ * Compute the kind of a standalone expression of a given type
+ */
+ static ArgumentExpressionKind standaloneKind(Type type, Types types) {
+ return types.unboxedTypeOrType(type).isPrimitive() ?
+ ArgumentExpressionKind.PRIMITIVE :
+ ArgumentExpressionKind.NO_POLY;
+ }
+
+ /**
+ * Compute the kind of a method argument expression given its symbol
+ */
+ static ArgumentExpressionKind methodKind(Symbol sym, Types types) {
+ Type restype = sym.type.getReturnType();
+ if (sym.type.hasTag(FORALL) &&
+ restype.containsAny(((ForAll)sym.type).tvars)) {
+ return ArgumentExpressionKind.POLY;
+ } else {
+ return ArgumentExpressionKind.standaloneKind(restype, types);
+ }
+ }
+ }
+
+ /**
+ * Tree scanner used for checking as to whether an argument expression
+ * requires speculative attribution
+ */
+ final class DeferredChecker extends FilterScanner {
+
+ Env<AttrContext> env;
+ ArgumentExpressionKind result;
+
+ public DeferredChecker(Env<AttrContext> env) {
+ super(deferredCheckerTags);
+ this.env = env;
+ }
+
+ @Override
+ public void visitLambda(JCLambda tree) {
+ //a lambda is always a poly expression
+ result = ArgumentExpressionKind.POLY;
+ }
+
+ @Override
+ public void visitReference(JCMemberReference tree) {
+ //a method reference is always a poly expression
+ result = ArgumentExpressionKind.POLY;
+ }
+
+ @Override
+ public void visitTypeCast(JCTypeCast tree) {
+ //a cast is always a standalone expression
+ result = ArgumentExpressionKind.NO_POLY;
+ }
+
+ @Override
+ public void visitConditional(JCConditional tree) {
+ scan(tree.truepart);
+ if (!result.isPrimitive()) {
+ result = ArgumentExpressionKind.POLY;
+ return;
+ }
+ scan(tree.falsepart);
+ result = reduce(ArgumentExpressionKind.PRIMITIVE);
+ }
+
+ @Override
+ public void visitNewClass(JCNewClass tree) {
+ result = (TreeInfo.isDiamond(tree) || attr.findDiamonds) ?
+ ArgumentExpressionKind.POLY : ArgumentExpressionKind.NO_POLY;
+ }
+
+ @Override
+ public void visitApply(JCMethodInvocation tree) {
+ Name name = TreeInfo.name(tree.meth);
+
+ //fast path
+ if (tree.typeargs.nonEmpty() ||
+ name == name.table.names._this ||
+ name == name.table.names._super) {
+ result = ArgumentExpressionKind.NO_POLY;
+ return;
+ }
+
+ //slow path
+ final JCExpression rec = tree.meth.hasTag(SELECT) ?
+ ((JCFieldAccess)tree.meth).selected :
+ null;
+
+ if (rec != null && !isSimpleReceiver(rec)) {
+ //give up if receiver is too complex (to cut down analysis time)
+ result = ArgumentExpressionKind.POLY;
+ return;
+ }
+
+ Type site = rec != null ?
+ attribSpeculative(rec, env, attr.unknownTypeExprInfo).type :
+ env.enclClass.sym.type;
+
+ ListBuffer<Type> args = ListBuffer.lb();
+ for (int i = 0; i < tree.args.length(); i ++) {
+ args.append(Type.noType);
+ }
+
+ Resolve.LookupHelper lh = rs.new LookupHelper(name, site, args.toList(), List.<Type>nil(), MethodResolutionPhase.VARARITY) {
+ @Override
+ Symbol lookup(Env<AttrContext> env, MethodResolutionPhase phase) {
+ return rec == null ?
+ rs.findFun(env, name, argtypes, typeargtypes, phase.isBoxingRequired(), phase.isVarargsRequired()) :
+ rs.findMethod(env, site, name, argtypes, typeargtypes, phase.isBoxingRequired(), phase.isVarargsRequired(), false);
+ }
+ @Override
+ Symbol access(Env<AttrContext> env, DiagnosticPosition pos, Symbol location, Symbol sym) {
+ return sym;
+ }
+ };
+
+ Symbol sym = rs.lookupMethod(env, tree, site.tsym, rs.arityMethodCheck, lh);
+
+ if (sym.kind == Kinds.AMBIGUOUS) {
+ Resolve.AmbiguityError err = (Resolve.AmbiguityError)sym.baseSymbol();
+ result = ArgumentExpressionKind.PRIMITIVE;
+ for (List<Symbol> ambigousSyms = err.ambiguousSyms ;
+ ambigousSyms.nonEmpty() && !result.isPoly() ;
+ ambigousSyms = ambigousSyms.tail) {
+ Symbol s = ambigousSyms.head;
+ if (s.kind == Kinds.MTH) {
+ result = reduce(ArgumentExpressionKind.methodKind(s, types));
+ }
+ }
+ } else {
+ result = (sym.kind == Kinds.MTH) ?
+ ArgumentExpressionKind.methodKind(sym, types) :
+ ArgumentExpressionKind.NO_POLY;
+ }
+ }
+ //where
+ private boolean isSimpleReceiver(JCTree rec) {
+ switch (rec.getTag()) {
+ case IDENT:
+ return true;
+ case SELECT:
+ return isSimpleReceiver(((JCFieldAccess)rec).selected);
+ case TYPEAPPLY:
+ case TYPEARRAY:
+ return true;
+ case ANNOTATED_TYPE:
+ return isSimpleReceiver(((JCAnnotatedType)rec).underlyingType);
+ default:
+ return false;
+ }
+ }
+ private ArgumentExpressionKind reduce(ArgumentExpressionKind kind) {
+ switch (result) {
+ case PRIMITIVE: return kind;
+ case NO_POLY: return kind.isPoly() ? kind : result;
+ case POLY: return result;
+ default:
+ Assert.error();
+ return null;
+ }
+ }
+
+ @Override
+ public void visitLiteral(JCLiteral tree) {
+ Type litType = attr.litType(tree.typetag);
+ result = ArgumentExpressionKind.standaloneKind(litType, types);
+ }
+
+ @Override
+ void skip(JCTree tree) {
+ result = ArgumentExpressionKind.NO_POLY;
+ }
+ }
+ //where
+ private EnumSet<JCTree.Tag> deferredCheckerTags =
+ EnumSet.of(LAMBDA, REFERENCE, PARENS, TYPECAST,
+ CONDEXPR, NEWCLASS, APPLY, LITERAL);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java Wed Apr 17 21:50:43 2013 -0700
@@ -719,7 +719,7 @@
Flow.this.make = make;
pendingExits = new ListBuffer<PendingExit>();
alive = true;
- scan(env.tree);
+ scan(tree);
} finally {
pendingExits = null;
Flow.this.make = null;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java Wed Apr 17 21:50:43 2013 -0700
@@ -262,7 +262,7 @@
UndetVar uv = (UndetVar)inferenceContext.asFree(t);
List<Type> upperBounds = uv.getBounds(InferenceBound.UPPER);
if (Type.containsAny(upperBounds, vars)) {
- TypeSymbol fresh_tvar = new TypeSymbol(Flags.SYNTHETIC, uv.qtype.tsym.name, null, uv.qtype.tsym.owner);
+ TypeSymbol fresh_tvar = new TypeVariableSymbol(Flags.SYNTHETIC, uv.qtype.tsym.name, null, uv.qtype.tsym.owner);
fresh_tvar.type = new TypeVar(fresh_tvar, types.makeCompoundType(uv.getBounds(InferenceBound.UPPER)), null);
todo.append(uv);
uv.inst = fresh_tvar.type;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Apr 17 21:50:43 2013 -0700
@@ -48,6 +48,7 @@
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.jvm.ByteCodes.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
+import javax.lang.model.type.TypeKind;
/** This pass translates away some syntactic sugar: inner classes,
* class literals, assertions, foreach loops, etc.
@@ -3400,8 +3401,11 @@
if (iterableType.getTypeArguments().nonEmpty())
iteratorTarget = types.erasure(iterableType.getTypeArguments().head);
Type eType = tree.expr.type;
+ while (eType.hasTag(TYPEVAR)) {
+ eType = eType.getUpperBound();
+ }
tree.expr.type = types.erasure(eType);
- if (eType.hasTag(TYPEVAR) && eType.getUpperBound().isCompound())
+ if (eType.isCompound())
tree.expr = make.TypeCast(types.erasure(iterableType), tree.expr);
Symbol iterator = lookupMethod(tree.expr.pos(),
names.iterator,
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Apr 17 21:50:43 2013 -0700
@@ -3604,6 +3604,11 @@
}
@Override
+ public Symbol baseSymbol() {
+ return delegatedError.baseSymbol();
+ }
+
+ @Override
protected Symbol access(Name name, TypeSymbol location) {
return delegatedError.access(name, location);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/TransTypes.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/TransTypes.java Wed Apr 17 21:50:43 2013 -0700
@@ -40,6 +40,7 @@
import static com.sun.tools.javac.code.TypeTag.CLASS;
import static com.sun.tools.javac.code.TypeTag.TYPEVAR;
import static com.sun.tools.javac.code.TypeTag.VOID;
+import static com.sun.tools.javac.comp.CompileStates.CompileState;
/** This pass translates Generic Java to conventional Java.
*
@@ -77,8 +78,11 @@
*/
private final boolean addBridges;
+ private final CompileStates compileStates;
+
protected TransTypes(Context context) {
context.put(transTypesKey, this);
+ compileStates = CompileStates.instance(context);
names = Names.instance(context);
log = Log.instance(context);
syms = Symtab.instance(context);
@@ -706,8 +710,18 @@
public void visitTypeCast(JCTypeCast tree) {
tree.clazz = translate(tree.clazz, null);
+ Type originalTarget = tree.type;
tree.type = erasure(tree.type);
tree.expr = translate(tree.expr, tree.type);
+ if (originalTarget.isCompound()) {
+ Type.IntersectionClassType ict = (Type.IntersectionClassType)originalTarget;
+ for (Type c : ict.getExplicitComponents()) {
+ Type ec = erasure(c);
+ if (!types.isSameType(ec, tree.type)) {
+ tree.expr = coerce(tree.expr, ec);
+ }
+ }
+ }
result = tree;
}
@@ -904,16 +918,40 @@
private Env<AttrContext> env;
+ private static final String statePreviousToFlowAssertMsg =
+ "The current compile state [%s] of class %s is previous to FLOW";
+
void translateClass(ClassSymbol c) {
Type st = types.supertype(c.type);
-
// process superclass before derived
- if (st.hasTag(CLASS))
+ if (st.hasTag(CLASS)) {
translateClass((ClassSymbol)st.tsym);
+ }
Env<AttrContext> myEnv = enter.typeEnvs.remove(c);
- if (myEnv == null)
+ if (myEnv == null) {
return;
+ }
+
+ /* The two assertions below are set for early detection of any attempt
+ * to translate a class that:
+ *
+ * 1) has no compile state being it the most outer class.
+ * We accept this condition for inner classes.
+ *
+ * 2) has a compile state which is previous to Flow state.
+ */
+ boolean envHasCompState = compileStates.get(myEnv) != null;
+ if (!envHasCompState && c.outermostClass() == c) {
+ Assert.error("No info for outermost class: " + myEnv.enclClass.sym);
+ }
+
+ if (envHasCompState &&
+ CompileState.FLOW.isAfter(compileStates.get(myEnv))) {
+ Assert.error(String.format(statePreviousToFlowAssertMsg,
+ compileStates.get(myEnv), myEnv.enclClass.sym));
+ }
+
Env<AttrContext> oldEnv = env;
try {
env = myEnv;
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Apr 17 21:50:43 2013 -0700
@@ -1016,7 +1016,8 @@
// log.errWriter.println("enter inner " + c);//DEBUG
enterInner(c.owner.enclClass());
pool.put(c);
- pool.put(c.name);
+ if (c.name != names.empty)
+ pool.put(c.name);
if (innerClasses == null) {
innerClasses = new HashSet<ClassSymbol>();
innerClassesQueue = new ListBuffer<ClassSymbol>();
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Apr 17 21:50:43 2013 -0700
@@ -25,6 +25,7 @@
package com.sun.tools.javac.main;
+import com.sun.tools.javac.comp.CompileStates;
import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
@@ -61,6 +62,7 @@
import com.sun.tools.javac.tree.*;
import com.sun.tools.javac.tree.JCTree.*;
import com.sun.tools.javac.util.*;
+import com.sun.tools.javac.comp.CompileStates.CompileState;
import com.sun.tools.javac.util.Log.WriterKind;
import static com.sun.tools.javac.code.TypeTag.CLASS;
@@ -326,6 +328,8 @@
**/
protected boolean implicitSourceFilesRead;
+ protected CompileStates compileStates;
+
/** Construct a new compiler using a shared context.
*/
public JavaCompiler(Context context) {
@@ -348,6 +352,7 @@
fileManager = context.get(JavaFileManager.class);
parserFactory = ParserFactory.instance(context);
+ compileStates = CompileStates.instance(context);
try {
// catch completion problems with predefineds
@@ -521,42 +526,6 @@
*/
public List<Closeable> closeables = List.nil();
- /** Ordered list of compiler phases for each compilation unit. */
- public enum CompileState {
- INIT(0),
- PARSE(1),
- ENTER(2),
- PROCESS(3),
- ATTR(4),
- FLOW(5),
- TRANSTYPES(6),
- UNLAMBDA(7),
- LOWER(8),
- GENERATE(9);
-
- CompileState(int value) {
- this.value = value;
- }
- boolean isAfter(CompileState other) {
- return value > other.value;
- }
- public static CompileState max(CompileState a, CompileState b) {
- return a.value > b.value ? a : b;
- }
- private final int value;
- };
- /** Partial map to record which compiler phases have been executed
- * for each compilation unit. Used for ATTR and FLOW phases.
- */
- protected class CompileStates extends HashMap<Env<AttrContext>,CompileState> {
- private static final long serialVersionUID = 1812267524140424433L;
- boolean isDone(Env<AttrContext> env, CompileState cs) {
- CompileState ecs = get(env);
- return (ecs != null) && !cs.isAfter(ecs);
- }
- }
- private CompileStates compileStates = new CompileStates();
-
/** The set of currently compiled inputfiles, needed to ensure
* we don't accidentally overwrite an input file when -s is set.
* initialized by `compile'.
@@ -1395,13 +1364,17 @@
@Override
public void visitClassDef(JCClassDecl node) {
Type st = types.supertype(node.sym.type);
- if (st.hasTag(CLASS)) {
+ boolean envForSuperTypeFound = false;
+ while (!envForSuperTypeFound && st.hasTag(CLASS)) {
ClassSymbol c = st.tsym.outermostClass();
Env<AttrContext> stEnv = enter.getEnv(c);
if (stEnv != null && env != stEnv) {
- if (dependencies.add(stEnv))
+ if (dependencies.add(stEnv)) {
scan(stEnv.tree);
+ }
+ envForSuperTypeFound = true;
}
+ st = types.supertype(st);
}
super.visitClassDef(node);
}
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Wed Apr 17 21:50:43 2013 -0700
@@ -59,7 +59,6 @@
import com.sun.tools.javac.jvm.*;
import com.sun.tools.javac.jvm.ClassReader.BadClassFile;
import com.sun.tools.javac.main.JavaCompiler;
-import com.sun.tools.javac.main.JavaCompiler.CompileState;
import com.sun.tools.javac.model.JavacElements;
import com.sun.tools.javac.model.JavacTypes;
import com.sun.tools.javac.parser.*;
@@ -79,6 +78,7 @@
import com.sun.tools.javac.util.Options;
import static com.sun.tools.javac.code.Lint.LintCategory.PROCESSING;
import static com.sun.tools.javac.main.Option.*;
+import static com.sun.tools.javac.comp.CompileStates.CompileState;
import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticFlag.*;
/**
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Apr 17 21:50:43 2013 -0700
@@ -249,23 +249,6 @@
}
}
- /** Return true if a a tree corresponds to a poly expression. */
- public static boolean isPoly(JCTree tree, JCTree origin) {
- switch (tree.getTag()) {
- case APPLY:
- case NEWCLASS:
- case CONDEXPR:
- return !origin.hasTag(TYPECAST);
- case LAMBDA:
- case REFERENCE:
- return true;
- case PARENS:
- return isPoly(((JCParens)tree).expr, origin);
- default:
- return false;
- }
- }
-
/** set 'polyKind' on given tree */
public static void setPolyKind(JCTree tree, PolyKind pkind) {
switch (tree.getTag()) {
--- a/langtools/src/share/classes/com/sun/tools/javadoc/AbstractTypeImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/AbstractTypeImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -61,6 +61,10 @@
return type.tsym.getQualifiedName().toString();
}
+ public com.sun.javadoc.Type getElementType() {
+ return null;
+ }
+
public String simpleTypeName() {
return type.tsym.name.toString();
}
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -108,6 +108,10 @@
this.tsym = sym;
}
+ public com.sun.javadoc.Type getElementType() {
+ return null;
+ }
+
/**
* Returns the flags in terms of javac's flags
*/
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Wed Apr 17 21:50:43 2013 -0700
@@ -199,22 +199,15 @@
return result;
}
- public AnnotationDesc[] receiverAnnotations() {
- // TODO: change how receiver annotations are output!
+ /**
+ * Get the receiver type of this executable element.
+ *
+ * @return the receiver type of this executable element.
+ * @since 1.8
+ */
+ public com.sun.javadoc.Type receiverType() {
Type recvtype = sym.type.asMethodType().recvtype;
- if (recvtype == null) {
- return new AnnotationDesc[0];
- }
- if (!recvtype.isAnnotated()) {
- return new AnnotationDesc[0];
- }
- List<? extends Compound> typeAnnos = ((com.sun.tools.javac.code.Type.AnnotatedType)recvtype).typeAnnotations;
- AnnotationDesc result[] = new AnnotationDesc[typeAnnos.length()];
- int i = 0;
- for (Attribute.Compound a : typeAnnos) {
- result[i++] = new AnnotationDescImpl(env, a);
- }
- return result;
+ return (recvtype != null) ? TypeMaker.getType(env, recvtype, false, true) : null;
}
/**
--- a/langtools/src/share/classes/com/sun/tools/javadoc/PrimitiveType.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/PrimitiveType.java Wed Apr 17 21:50:43 2013 -0700
@@ -63,6 +63,10 @@
return name;
}
+ public com.sun.javadoc.Type getElementType() {
+ return null;
+ }
+
/**
* Return qualified name of type excluding any dimension information.
*<p>
--- a/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/TypeMaker.java Wed Apr 17 21:50:43 2013 -0700
@@ -222,6 +222,10 @@
private com.sun.javadoc.Type skipArraysCache = null;
+ public com.sun.javadoc.Type getElementType() {
+ return TypeMaker.getType(env, env.types.elemtype(arrayType));
+ }
+
private com.sun.javadoc.Type skipArrays() {
if (skipArraysCache == null) {
Type t;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/TestTypeAnnotations.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,421 @@
+/*
+ * 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.
+ *
+ * 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 8005091 8009686
+ * @summary Make sure that type annotations are displayed correctly
+ * @author Bhavesh Patel
+ * @library ../lib/
+ * @build JavadocTester TestTypeAnnotations
+ * @run main TestTypeAnnotations
+ */
+
+public class TestTypeAnnotations extends JavadocTester {
+
+ //Test information.
+ private static final String BUG_ID = "8005091-8009686";
+
+ //Javadoc arguments.
+ private static final String[] ARGS = new String[] {
+ "-d", BUG_ID, "-sourcepath", SRC_DIR, "-private", "typeannos"
+ };
+
+ //Input for string search tests.
+ private static final String[][] NEGATED_TEST = NO_TEST;
+ private static final String[][] TEST = {
+ // Test for type annotations on Class Extends (ClassExtends.java).
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "MyClass.html",
+ "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
+ "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" " +
+ "title=\"class in typeannos\">ParameterizedClass</a><<a href=\"" +
+ "../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">" +
+ "@ClassExtB</a> java.lang.String>"
+ },
+ */
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "MyClass.html",
+ "implements <a href=\"../typeannos/ClassExtB.html\" title=\"" +
+ "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, " +
+ "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in " +
+ "typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedInterface.html\" " +
+ "title=\"interface in typeannos\">ParameterizedInterface</a><" +
+ "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
+ "typeannos\">@ClassExtB</a> java.lang.String></pre>"
+ },
+ */
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "MyInterface.html",
+ "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
+ "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/" +
+ "ParameterizedInterface.html\" title=\"interface in typeannos\">" +
+ "ParameterizedInterface</a><<a href=\"../typeannos/ClassExtA.html\" " +
+ "title=\"annotation in typeannos\">@ClassExtA</a> java.lang.String>, " +
+ "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
+ "typeannos\">@ClassExtB</a> java.lang.CharSequence</pre>"
+ },
+ */
+
+ // Test for type annotations on Class Parameters (ClassParameters.java).
+ {BUG_ID + FS + "typeannos" + FS + "ExtendsBound.html",
+ "class <span class=\"strong\">ExtendsBound<K extends <a " +
+ "href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
+ "typeannos\">@ClassParamA</a> java.lang.String></span>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "ExtendsGeneric.html",
+ "<pre> class <span class=\"strong\">ExtendsGeneric<K extends " +
+ "<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
+ "typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" " +
+ "title=\"class in typeannos\">Unannotated</a><<a href=\"" +
+ "../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">" +
+ "@ClassParamB</a> java.lang.String>></span>"
+ },
+ */
+ {BUG_ID + FS + "typeannos" + FS + "TwoBounds.html",
+ "<pre> class <span class=\"strong\">TwoBounds<K extends <a href=\"" +
+ "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
+ "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/" +
+ "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB" +
+ "</a> java.lang.String></span>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "Complex1.html",
+ "class <span class=\"strong\">Complex1<K extends <a href=\"../" +
+ "typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
+ "@ClassParamA</a> java.lang.String & java.lang.Runnable></span>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "Complex2.html",
+ "class <span class=\"strong\">Complex2<K extends java.lang." +
+ "String & <a href=\"../typeannos/ClassParamB.html\" title=\"" +
+ "annotation in typeannos\">@ClassParamB</a> java.lang.Runnable></span>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ComplexBoth.html",
+ "class <span class=\"strong\">ComplexBoth<K extends <a href=\"" +
+ "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\"" +
+ ">@ClassParamA</a> java.lang.String & <a href=\"../typeannos/" +
+ "ClassParamA.html\" title=\"annotation in typeannos\">@ClassParamA" +
+ "</a> java.lang.Runnable></span>"
+ },
+
+ // Test for type annotations on fields (Fields.java).
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
+ "<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in " +
+ "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" " +
+ "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
+ "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
+ "@FldB</a> java.lang.String> bothTypeArgs</pre>"
+ },
+ */
+ {BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
+ "<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in " +
+ "typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/" +
+ "FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] " +
+ "array1Deep</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
+ "<pre>java.lang.String[] <a href=\"../typeannos/FldB.html\" " +
+ "title=\"annotation in typeannos\">@FldB</a> [] array2SecondOld</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "DefaultScope.html",
+ "<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in " +
+ "typeannos\">@FldD</a> java.lang.String <a href=\"../typeannos/" +
+ "FldC.html\" title=\"annotation in typeannos\">@FldC</a> <a href=\"" +
+ "../typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA" +
+ "</a> [] <a href=\"../typeannos/FldC.html\" title=\"annotation in " +
+ "typeannos\">@FldC</a> <a href=\"../typeannos/FldB.html\" title=\"" +
+ "annotation in typeannos\">@FldB</a> [] array2Deep</pre>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "ModifiedScoped.html",
+ "<pre>public final <a href=\"../typeannos/Parameterized.html\" " +
+ "title=\"class in typeannos\">Parameterized</a><<a href=\"../" +
+ "typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> " +
+ "<a href=\"../typeannos/Parameterized.html\" title=\"class in " +
+ "typeannos\">Parameterized</a><<a href=\"../typeannos/FldA.html\" " +
+ "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
+ "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
+ "@FldB</a> java.lang.String>,<a href=\"../typeannos/FldB.html\" " +
+ "title=\"annotation in typeannos\">@FldB</a> java.lang.String> " +
+ "nestedParameterized</pre>"
+ },
+ */
+ {BUG_ID + FS + "typeannos" + FS + "ModifiedScoped.html",
+ "<pre>public final <a href=\"../typeannos/FldA.html\" " +
+ "title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] " +
+ "array2</pre>"
+ },
+
+ // Test for type annotations on method return types (MethodReturnType.java).
+ {BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
+ "<pre>public <T> <a href=\"../typeannos/MRtnA.html\" " +
+ "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String" +
+ " method()</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
+ "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
+ "typeannos\">@MRtnA</a> java.lang.String <a href=\"../typeannos/" +
+ "MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> [] <a " +
+ "href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">" +
+ "@MRtnB</a> [] array2Deep()</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "MtdDefaultScope.html",
+ "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
+ "typeannos\">@MRtnA</a> java.lang.String[][] array2()</pre>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "MtdModifiedScoped.html",
+ "<pre>public final <a href=\"../typeannos/MtdParameterized.html\" " +
+ "title=\"class in typeannos\">MtdParameterized</a><<a href=\"../" +
+ "typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> " +
+ "<a href=\"../typeannos/MtdParameterized.html\" title=\"class in " +
+ "typeannos\">MtdParameterized</a><<a href=\"../typeannos/MRtnA." +
+ "html\" title=\"annotation in typeannos\">@MRtnA</a> java.lang." +
+ "String,<a href=\"../typeannos/MRtnB.html\" title=\"annotation in " +
+ "typeannos\">@MRtnB</a> java.lang.String>,<a href=\"../typeannos/" +
+ "MRtnB.html\" title=\"annotation in typeannos\">@MRtnB</a> java." +
+ "lang.String> nestedMtdParameterized()</pre>"
+ },
+ */
+
+ // Test for type annotations on method type parameters (MethodTypeParameters.java).
+ {BUG_ID + FS + "typeannos" + FS + "UnscopedUnmodified.html",
+ "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
+ "annotation in typeannos\">@MTyParamA</a> java.lang.String>" +
+ " void methodExtends()</pre>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "UnscopedUnmodified.html",
+ "<pre><K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
+ "annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/" +
+ "MtdTyParameterized.html\" title=\"class in typeannos\">" +
+ "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" " +
+ "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
+ ">> void nestedExtends()</pre>"
+ },
+ */
+ {BUG_ID + FS + "typeannos" + FS + "PublicModifiedMethods.html",
+ "<pre>public final <K extends <a href=\"../typeannos/" +
+ "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
+ "java.lang.String> void methodExtends()</pre>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "PublicModifiedMethods.html",
+ "<pre>public final <K extends <a href=\"../typeannos/" +
+ "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
+ "java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" " +
+ "title=\"annotation in typeannos\">@MTyParamA</a> <a href=\"../" +
+ "typeannos/MtdTyParameterized.html\" title=\"class in typeannos\">" +
+ "MtdTyParameterized</a><<a href=\"../typeannos/MTyParamB.html\" " +
+ "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
+ ">> void dual()</pre>"
+ },
+ */
+
+ // Test for type annotations on parameters (Parameters.java).
+ {BUG_ID + FS + "typeannos" + FS + "Parameters.html",
+ "<pre>void unannotated(<a href=\"../typeannos/" +
+ "ParaParameterized.html\" title=\"class in typeannos\">" +
+ "ParaParameterized</a><java.lang.String,java.lang.String>" +
+ " a)</pre>"
+ },
+ /* @ignore 8012173
+ {BUG_ID + FS + "typeannos" + FS + "Parameters.html",
+ "<pre>void nestedParaParameterized(<a href=\"../typeannos/" +
+ "ParaParameterized.html\" title=\"class in typeannos\">" +
+ "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" " +
+ "title=\"annotation in typeannos\">@ParamA</a> <a href=\"../" +
+ "typeannos/ParaParameterized.html\" title=\"class in typeannos\">" +
+ "ParaParameterized</a><<a href=\"../typeannos/ParamA.html\" " +
+ "title=\"annotation in typeannos\">@ParamA</a> java.lang.String," +
+ "<a href=\"../typeannos/ParamB.html\" title=\"annotation in " +
+ "typeannos\">@ParamB</a> java.lang.String>,<a href=\"../" +
+ "typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB" +
+ "</a> java.lang.String> a)</pre>"
+ },
+ */
+ {BUG_ID + FS + "typeannos" + FS + "Parameters.html",
+ "<pre>void array2Deep(<a href=\"../typeannos/ParamA.html\" " +
+ "title=\"annotation in typeannos\">@ParamA</a> java.lang.String " +
+ "<a href=\"../typeannos/ParamA.html\" title=\"annotation in " +
+ "typeannos\">@ParamA</a> [] <a href=\"../typeannos/ParamB.html\" " +
+ "title=\"annotation in typeannos\">@ParamB</a> [] a)</pre>"
+ },
+
+ // Test for type annotations on throws (Throws.java).
+ {BUG_ID + FS + "typeannos" + FS + "ThrDefaultUnmodified.html",
+ "<pre>void oneException()" + NL +
+ " throws <a href=\"../typeannos/ThrA.html\" title=\"" +
+ "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ThrDefaultUnmodified.html",
+ "<pre>void twoExceptions()" + NL +
+ " throws <a href=\"../typeannos/ThrA.html\" title=\"" +
+ "annotation in typeannos\">@ThrA</a> java.lang.RuntimeException," + NL +
+ " <a href=\"../typeannos/ThrA.html\" title=\"" +
+ "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ThrPublicModified.html",
+ "<pre>public final void oneException(java.lang.String a)" + NL +
+ " throws <a href=\"../typeannos/ThrA.html\" " +
+ "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ThrPublicModified.html",
+ "<pre>public final void twoExceptions(java.lang.String a)" + NL +
+ " throws <a href=\"../typeannos/ThrA.html\" " +
+ "title=\"annotation in typeannos\">@ThrA</a> java.lang.RuntimeException," + NL +
+ " <a href=\"../typeannos/ThrA.html\" " +
+ "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ThrWithValue.html",
+ "<pre>void oneException()" + NL +
+ " throws <a href=\"../typeannos/ThrB.html\" title=\"" +
+ "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
+ "ThrB.html#value()\">value</a>=\"m\") java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "ThrWithValue.html",
+ "<pre>void twoExceptions()" + NL +
+ " throws <a href=\"../typeannos/ThrB.html\" title=\"" +
+ "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
+ "ThrB.html#value()\">value</a>=\"m\") java.lang.RuntimeException," + NL +
+ " <a href=\"../typeannos/ThrA.html\" title=\"" +
+ "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
+ },
+
+ // Test for type annotations on type parameters (TypeParameters.java).
+ {BUG_ID + FS + "typeannos" + FS + "TestMethods.html",
+ "<pre><K,V extends <a href=\"../typeannos/TyParaA.html\" title=\"" +
+ "annotation in typeannos\">@TyParaA</a> java.lang.String> " +
+ "void secondAnnotated()</pre>"
+ },
+
+ // Test for type annotations on wildcard type (Wildcards.java).
+ {BUG_ID + FS + "typeannos" + FS + "BoundTest.html",
+ "<pre>void wcExtends(<a href=\"../typeannos/MyList.html\" " +
+ "title=\"class in typeannos\">MyList</a><? extends <a href=\"" +
+ "../typeannos/WldA.html\" title=\"annotation in typeannos\">@WldA" +
+ "</a> java.lang.String> l)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "BoundTest.html",
+ "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
+ "typeannos\">MyList</a><? super <a href=\"../typeannos/WldA.html\" " +
+ "title=\"annotation in typeannos\">@WldA</a> java.lang.String>" +
+ " returnWcSuper()</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "BoundWithValue.html",
+ "<pre>void wcSuper(<a href=\"../typeannos/MyList.html\" title=\"" +
+ "class in typeannos\">MyList</a><? super <a href=\"../typeannos/" +
+ "WldB.html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"" +
+ "../typeannos/WldB.html#value()\">value</a>=\"m\") java.lang." +
+ "String> l)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "BoundWithValue.html",
+ "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
+ "typeannos\">MyList</a><? extends <a href=\"../typeannos/WldB." +
+ "html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"../" +
+ "typeannos/WldB.html#value()\">value</a>=\"m\") java.lang.String" +
+ "> returnWcExtends()</pre>"
+ },
+
+ // Test for receiver annotations (Receivers.java).
+ {BUG_ID + FS + "typeannos" + FS + "DefaultUnmodified.html",
+ "<pre>void withException(<a href=\"../typeannos/RcvrA.html\" " +
+ "title=\"annotation in typeannos\">@RcvrA</a> " +
+ "DefaultUnmodified this)" + NL + " throws java." +
+ "lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "DefaultUnmodified.html",
+ "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrA." +
+ "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\"../" +
+ "typeannos/RcvrB.html\" title=\"annotation in typeannos\">@RcvrB" +
+ "</a>(<a href=\"../typeannos/RcvrB.html#value()\">value</a>=\"m\")" +
+ " DefaultUnmodified this)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "DefaultUnmodified.html",
+ "<pre><T extends java.lang.Runnable> void accept(" +
+ "<a href=\"../typeannos/RcvrA.html\" title=\"annotation in " +
+ "typeannos\">@RcvrA</a> DefaultUnmodified this," + NL +
+ " T r)" + NL +
+ " throws java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "PublicModified.html",
+ "<pre>public final java.lang.String nonVoid(<a href=\"" +
+ "../typeannos/RcvrA.html\" title=\"annotation in typeannos\">" +
+ "@RcvrA</a> PublicModified this)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "PublicModified.html",
+ "<pre>public final <T extends java.lang.Runnable> " +
+ "void accept(<a href=\"../typeannos/RcvrA.html\" title=\"" +
+ "annotation in typeannos\">@RcvrA</a> PublicModified this," + NL +
+ " T r)" + NL +
+ " throws java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "WithValue.html",
+ "<pre><T extends java.lang.Runnable> void accept(" +
+ "<a href=\"../typeannos/RcvrB.html\" title=\"annotation in " +
+ "typeannos\">@RcvrB</a>(<a href=\"../typeannos/RcvrB.html#value()\">" +
+ "value</a>=\"m\") WithValue this," + NL +
+ " T r)" + NL +
+ " throws java.lang.Exception</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "WithFinal.html",
+ "<pre>java.lang.String nonVoid(<a href=\"../typeannos/RcvrB." +
+ "html\" title=\"annotation in typeannos\">@RcvrB</a>(<a href=\"../" +
+ "typeannos/RcvrB.html#value()\">value</a>=\"m\") WithFinal" +
+ " this)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "WithBody.html",
+ "<pre>void field(<a href=\"../typeannos/RcvrA.html\" title=\"" +
+ "annotation in typeannos\">@RcvrA</a> WithBody this)</pre>"
+ },
+ {BUG_ID + FS + "typeannos" + FS + "Generic2.html",
+ "<pre>void test2(<a href=\"../typeannos/RcvrA.html\" title=\"" +
+ "annotation in typeannos\">@RcvrA</a> Generic2<X> this)</pre>"
+ }
+ };
+
+ /**
+ * The entry point of the test.
+ * @param args the array of command line arguments.
+ */
+ public static void main(String[] args) {
+ TestTypeAnnotations tester = new TestTypeAnnotations();
+ run(tester, ARGS, TEST, NEGATED_TEST);
+ tester.printSummary();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getBugId() {
+ return BUG_ID;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getBugName() {
+ return getClass().getName();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/ClassExtends.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+abstract class MyClass extends @ClassExtA ParameterizedClass<@ClassExtB String>
+ implements @ClassExtB CharSequence, @ClassExtA ParameterizedInterface<@ClassExtB String> { }
+
+interface MyInterface extends @ClassExtA ParameterizedInterface<@ClassExtA String>,
+ @ClassExtB CharSequence { }
+
+class ParameterizedClass<K> {}
+interface ParameterizedInterface<K> {}
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ClassExtA {}
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ClassExtB {}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/ClassParameters.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class Unannotated<K> { }
+
+class ExtendsBound<K extends @ClassParamA String> { }
+class ExtendsGeneric<K extends @ClassParamA Unannotated<@ClassParamB String>> { }
+class TwoBounds<K extends @ClassParamA String, V extends @ClassParamB String> { }
+
+class Complex1<K extends @ClassParamA String&Runnable> { }
+class Complex2<K extends String & @ClassParamB Runnable> { }
+class ComplexBoth<K extends @ClassParamA String & @ClassParamA Runnable> { }
+
+class ClassParamOuter {
+ void inner() {
+ class LUnannotated<K> { }
+
+ class LExtendsBound<K extends @ClassParamA String> { }
+ class LExtendsGeneric<K extends @ClassParamA LUnannotated<@ClassParamB String>> { }
+ class LTwoBounds<K extends @ClassParamA String, V extends @ClassParamB String> { }
+
+ class LComplex1<K extends @ClassParamA String&Runnable> { }
+ class LComplex2<K extends String & @ClassParamB Runnable> { }
+ class LComplexBoth<K extends @ClassParamA String & @ClassParamA Runnable> { }
+ }
+}
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ClassParamA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ClassParamB { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Fields.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class DefaultScope {
+ Parameterized<String, String> unannotated;
+ Parameterized<@FldA String, String> firstTypeArg;
+ Parameterized<String, @FldA String> secondTypeArg;
+ Parameterized<@FldA String, @FldB String> bothTypeArgs;
+
+ Parameterized<@FldA Parameterized<@FldA String, @FldB String>, @FldB String>
+ nestedParameterized;
+
+ @FldA String [] array1;
+ @FldA String @FldB [] array1Deep;
+ @FldA String [] [] array2;
+ @FldD String @FldC @FldA [] @FldC @FldB [] array2Deep;
+ String @FldA [] [] array2First;
+ String [] @FldB [] array2Second;
+
+ // Old-style array syntax
+ String array2FirstOld @FldA [];
+ String array2SecondOld [] @FldB [];
+}
+
+class ModifiedScoped {
+ public final Parameterized<String, String> unannotated = null;
+ public final Parameterized<@FldA String, String> firstTypeArg = null;
+ public final Parameterized<String, @FldA String> secondTypeArg = null;
+ public final Parameterized<@FldA String, @FldB String> bothTypeArgs = null;
+
+ public final Parameterized<@FldA Parameterized<@FldA String, @FldB String>, @FldB String>
+ nestedParameterized = null;
+
+ public final @FldA String [] array1 = null;
+ public final @FldA String @FldB [] array1Deep = null;
+ public final @FldA String [] [] array2 = null;
+ public final @FldA String @FldA [] @FldB [] array2Deep = null;
+ public final String @FldA [] [] array2First = null;
+ public final String [] @FldB [] array2Second = null;
+}
+
+class Parameterized<K, V> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface FldA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface FldB { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface FldC { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface FldD { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/MethodReturnType.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class MtdDefaultScope {
+ MtdParameterized<String, String> unannotated() { return null; }
+ MtdParameterized<@MRtnA String, String> firstTypeArg() { return null; }
+ MtdParameterized<String, @MRtnA String> secondTypeArg() { return null; }
+ MtdParameterized<@MRtnA String, @MRtnB String> bothTypeArgs() { return null; }
+
+ MtdParameterized<@MRtnA MtdParameterized<@MRtnA String, @MRtnB String>, @MRtnB String>
+ nestedMtdParameterized() { return null; }
+
+ public <T> @MRtnA String method() { return null; }
+
+ @MRtnA String [] array1() { return null; }
+ @MRtnA String @MRtnB [] array1Deep() { return null; }
+ @MRtnA String [] [] array2() { return null; }
+ @MRtnA String @MRtnA [] @MRtnB [] array2Deep() { return null; }
+ String @MRtnA [] [] array2First() { return null; }
+ String [] @MRtnB [] array2Second() { return null; }
+
+ // Old-style array syntax
+ String array2FirstOld() @MRtnA [] { return null; }
+ String array2SecondOld() [] @MRtnB [] { return null; }
+}
+
+class MtdModifiedScoped {
+ public final MtdParameterized<String, String> unannotated() { return null; }
+ public final MtdParameterized<@MRtnA String, String> firstTypeArg() { return null; }
+ public final MtdParameterized<String, @MRtnA String> secondTypeArg() { return null; }
+ public final MtdParameterized<@MRtnA String, @MRtnB String> bothTypeArgs() { return null; }
+
+ public final MtdParameterized<@MRtnA MtdParameterized<@MRtnA String, @MRtnB String>, @MRtnB String>
+ nestedMtdParameterized() { return null; }
+
+ public final @MRtnA String [] array1() { return null; }
+ public final @MRtnA String @MRtnB [] array1Deep() { return null; }
+ public final @MRtnA String [] [] array2() { return null; }
+ public final @MRtnA String @MRtnA [] @MRtnB [] array2Deep() { return null; }
+ public final String @MRtnA [] [] array2First() { return null; }
+ public final String [] @MRtnB [] array2Second() { return null; }
+}
+
+class MtdParameterized<K, V> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface MRtnA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface MRtnB { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/MethodTypeParameters.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class UnscopedUnmodified {
+ <K extends @MTyParamA String> void methodExtends() {}
+ <K extends @MTyParamA MtdTyParameterized<@MTyParamB String>> void nestedExtends() {}
+ <K extends @MTyParamA String, V extends @MTyParamA MtdTyParameterized<@MTyParamB String>> void dual() {}
+ <K extends String, V extends MtdTyParameterized<@MTyParamB String>> void dualOneAnno() {}
+}
+
+class PublicModifiedMethods {
+ public final <K extends @MTyParamA String> void methodExtends() {}
+ public final <K extends @MTyParamA MtdTyParameterized<@MTyParamB String>> void nestedExtends() {}
+ public final <K extends @MTyParamA String, V extends @MTyParamA MtdTyParameterized<@MTyParamB String>> void dual() {}
+ public final <K extends String, V extends MtdTyParameterized<@MTyParamB String>> void dualOneAnno() {}
+}
+
+class MtdTyParameterized<K> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface MTyParamA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface MTyParamB { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Parameters.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class Parameters {
+ void unannotated(ParaParameterized<String, String> a) {}
+ void firstTypeArg(ParaParameterized<@ParamA String, String> a) {}
+ void secondTypeArg(ParaParameterized<String, @ParamA String> a) {}
+ void bothTypeArgs(ParaParameterized<@ParamA String, @ParamB String> both) {}
+
+ void nestedParaParameterized(ParaParameterized<@ParamA ParaParameterized<@ParamA String, @ParamB String>, @ParamB String> a) {}
+
+ void array1(@ParamA String [] a) {}
+ void array1Deep(@ParamA String @ParamB [] a) {}
+ void array2(@ParamA String [] [] a) {}
+ void array2Deep(@ParamA String @ParamA [] @ParamB [] a) {}
+ void array2First(String @ParamA [] [] a) {}
+ void array2Second(String [] @ParamB [] a) {}
+}
+
+class ParaParameterized<K, V> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ParamA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ParamB { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Receivers.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,131 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class DefaultUnmodified {
+ void plain(@RcvrA DefaultUnmodified this) { }
+ <T> void generic(@RcvrA DefaultUnmodified this) { }
+ void withException(@RcvrA DefaultUnmodified this) throws Exception { }
+ String nonVoid(@RcvrA @RcvrB("m") DefaultUnmodified this) { return null; }
+ <T extends Runnable> void accept(@RcvrA DefaultUnmodified this, T r) throws Exception { }
+}
+
+class PublicModified {
+ public final void plain(@RcvrA PublicModified this) { }
+ public final <T> void generic(@RcvrA PublicModified this) { }
+ public final void withException(@RcvrA PublicModified this) throws Exception { }
+ public final String nonVoid(@RcvrA PublicModified this) { return null; }
+ public final <T extends Runnable> void accept(@RcvrA PublicModified this, T r) throws Exception { }
+}
+
+class WithValue {
+ void plain(@RcvrB("m") WithValue this) { }
+ <T> void generic(@RcvrB("m") WithValue this) { }
+ void withException(@RcvrB("m") WithValue this) throws Exception { }
+ String nonVoid(@RcvrB("m") WithValue this) { return null; }
+ <T extends Runnable> void accept(@RcvrB("m") WithValue this, T r) throws Exception { }
+}
+
+class WithFinal {
+ void plain(final @RcvrB("m") WithFinal this) { }
+ <T> void generic(final @RcvrB("m") WithFinal this) { }
+ void withException(final @RcvrB("m") WithFinal this) throws Exception { }
+ String nonVoid(final @RcvrB("m") WithFinal this) { return null; }
+ <T extends Runnable> void accept(final @RcvrB("m") WithFinal this, T r) throws Exception { }
+}
+
+class WithBody {
+ Object f;
+
+ void field(@RcvrA WithBody this) {
+ this.f = null;
+ }
+ void meth(@RcvrA WithBody this) {
+ this.toString();
+ }
+}
+
+class Generic1<X> {
+ void test1(Generic1<X> this) {}
+ void test2(@RcvrA Generic1<X> this) {}
+ void test3(Generic1<@RcvrA X> this) {}
+ void test4(@RcvrA Generic1<@RcvrA X> this) {}
+}
+
+class Generic2<@RcvrA X> {
+ void test1(Generic2<X> this) {}
+ void test2(@RcvrA Generic2<X> this) {}
+ void test3(Generic2<@RcvrA X> this) {}
+ void test4(@RcvrA Generic2<@RcvrA X> this) {}
+}
+
+class Generic3<X extends @RcvrA Object> {
+ void test1(Generic3<X> this) {}
+ void test2(@RcvrA Generic3<X> this) {}
+ void test3(Generic3<@RcvrA X> this) {}
+ void test4(@RcvrA Generic3<@RcvrA X> this) {}
+}
+
+class Generic4<X extends @RcvrA Object> {
+ <Y> void test1(Generic4<X> this) {}
+ <Y> void test2(@RcvrA Generic4<X> this) {}
+ <Y> void test3(Generic4<@RcvrA X> this) {}
+ <Y> void test4(@RcvrA Generic4<@RcvrA X> this) {}
+}
+
+class Outer {
+ class Inner {
+ void none(Outer.Inner this) {}
+ void outer(@RcvrA Outer.Inner this) {}
+ void inner(Outer. @RcvrB("i") Inner this) {}
+ void both(@RcvrA Outer.@RcvrB("i") Inner this) {}
+
+ void innerOnlyNone(Inner this) {}
+ void innerOnly(@RcvrA Inner this) {}
+ }
+}
+
+class GenericOuter<S, T> {
+ class GenericInner<U, V> {
+ void none(GenericOuter<S, T>.GenericInner<U, V> this) {}
+ void outer(@RcvrA GenericOuter<S, T>.GenericInner<U, V> this) {}
+ void inner(GenericOuter<S, T>. @RcvrB("i") GenericInner<U, V> this) {}
+ void both(@RcvrA GenericOuter<S, T>.@RcvrB("i") GenericInner<U, V> this) {}
+
+ void innerOnlyNone(GenericInner<U, V> this) {}
+ void innerOnly(@RcvrA GenericInner<U, V> this) {}
+ }
+}
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface RcvrA {}
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface RcvrB { String value(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Throws.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,51 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class ThrDefaultUnmodified {
+ void oneException() throws @ThrA Exception {}
+ void twoExceptions() throws @ThrA RuntimeException, @ThrA Exception {}
+}
+
+class ThrPublicModified {
+ public final void oneException(String a) throws @ThrA Exception {}
+ public final void twoExceptions(String a) throws @ThrA RuntimeException, @ThrA Exception {}
+}
+
+class ThrWithValue {
+ void oneException() throws @ThrB("m") Exception {}
+ void twoExceptions() throws @ThrB(value="m") RuntimeException, @ThrA Exception {}
+}
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ThrA {}
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface ThrB { String value(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/TypeParameters.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,60 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class TypUnannotated<K> { }
+class OneAnnotated<@TyParaA K> { }
+class TwoAnnotated<@TyParaA K, @TyParaA V> { }
+class SecondAnnotated<K, @TyParaA V extends String> { }
+
+class TestMethods {
+ <K> void unannotated() { }
+ <@TyParaA K> void oneAnnotated() { }
+ <@TyParaA K, @TyParaB("m") V> void twoAnnotated() { }
+ <K, @TyParaA V extends @TyParaA String> void secondAnnotated() { }
+}
+
+class UnannotatedB<K> { }
+class OneAnnotatedB<@TyParaB("m") K> { }
+class TwoAnnotatedB<@TyParaB("m") K, @TyParaB("m") V> { }
+class SecondAnnotatedB<K, @TyParaB("m") V extends @TyParaB("m") String> { }
+
+class OneAnnotatedC<@TyParaC K> { }
+class TwoAnnotatedC<@TyParaC K, @TyParaC V> { }
+class SecondAnnotatedC<K, @TyParaC V extends String> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface TyParaA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface TyParaB { String value(); }
+@Target(ElementType.TYPE_USE)
+@Documented
+@interface TyParaC { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Varargs.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,42 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface VarArgA {}
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class Varargs {
+
+ // Handle annotations on a varargs element type
+ void varargPlain(Object @VarArgA... objs) {
+ }
+
+ void varargGeneric(Class<?> @VarArgA ... clz) {
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/typeannos/Wildcards.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ *
+ * 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 typeannos;
+
+import java.lang.annotation.*;
+
+/*
+ * This class is replicated from test/tools/javac/annotations/typeAnnotations/newlocations.
+ */
+class BoundTest {
+ void wcExtends(MyList<? extends @WldA String> l) { }
+ void wcSuper(MyList<? super @WldA String> l) { }
+
+ MyList<? extends @WldA String> returnWcExtends() { return null; }
+ MyList<? super @WldA String> returnWcSuper() { return null; }
+ MyList<? extends @WldA MyList<? super @WldB("m") String>> complex() { return null; }
+}
+
+class BoundWithValue {
+ void wcExtends(MyList<? extends @WldB("m") String> l) { }
+ void wcSuper(MyList<? super @WldB(value="m") String> l) { }
+
+ MyList<? extends @WldB("m") String> returnWcExtends() { return null; }
+ MyList<? super @WldB(value="m") String> returnWcSuper() { return null; }
+ MyList<? extends @WldB("m") MyList<? super @WldB("m") String>> complex() { return null; }
+}
+
+class SelfTest {
+ void wcExtends(MyList<@WldA ?> l) { }
+ void wcSuper(MyList<@WldA ?> l) { }
+
+ MyList<@WldA ?> returnWcExtends() { return null; }
+ MyList<@WldA ?> returnWcSuper() { return null; }
+ MyList<@WldA ? extends @WldA MyList<@WldB("m") ?>> complex() { return null; }
+}
+
+class SelfWithValue {
+ void wcExtends(MyList<@WldB("m") ?> l) { }
+ void wcSuper(MyList<@WldB(value="m") ?> l) { }
+
+ MyList<@WldB("m") ?> returnWcExtends() { return null; }
+ MyList<@WldB(value="m") ?> returnWcSuper() { return null; }
+ MyList<@WldB("m") ? extends MyList<@WldB("m") ? super String>> complex() { return null; }
+}
+
+class MyList<K> { }
+
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface WldA { }
+@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
+@Documented
+@interface WldB { String value(); }
--- a/langtools/test/tools/javac/T5053846/MethodRefDupInConstantPoolTest.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/T5053846/MethodRefDupInConstantPoolTest.java Wed Apr 17 21:50:43 2013 -0700
@@ -23,8 +23,9 @@
/*
* @test
- * @bug 5053846
+ * @bug 5053846 8011432
* @summary javac: MethodRef entries are duplicated in the constant pool
+ * @summary javac, compiler regression iterable + captured type
*/
import java.io.PrintWriter;
@@ -43,9 +44,13 @@
void run() {
check("-v", Paths.get(System.getProperty("test.classes"),
- "TestHelper1.class").toString());
+ this.getClass().getSimpleName() + "$TestHelper1.class").toString());
+ check("-v", Paths.get(System.getProperty("test.classes"),
+ this.getClass().getSimpleName() + "$TestHelper2.class").toString());
check("-v", Paths.get(System.getProperty("test.classes"),
- "TestHelper2.class").toString());
+ this.getClass().getSimpleName() + "$TestHelper3.class").toString());
+ check("-v", Paths.get(System.getProperty("test.classes"),
+ this.getClass().getSimpleName() + "$TestHelper4.class").toString());
}
void check(String... params) {
@@ -68,24 +73,38 @@
int end = out.indexOf("{");
return out.substring(start, end);
}
-}
-class TestHelper1 {
- void m() {
- Vector v = new Vector();
- Iterator iter = v.iterator();
- while (iter.hasNext()) {
- Object o = iter.next();
- Object o2 = o;
- }
- for (Object o: v) {
- Object o2 = o;
+ class TestHelper1 {
+ void m() {
+ Vector v = new Vector();
+ Iterator iter = v.iterator();
+ while (iter.hasNext()) {
+ Object o = iter.next();
+ Object o2 = o;
+ }
+ for (Object o: v) {
+ Object o2 = o;
+ }
}
}
-}
+
+ class TestHelper2<X extends Number & Iterable<String>> {
+ void test(X x) {
+ for (String s : x) { }
+ }
+ }
+
+ interface Data extends Iterable<String> {}
-class TestHelper2<X extends Number & Iterable<String>> {
- void test(X x) {
- for (String s : x) { }
+ class TestHelper3<X extends Number & Iterable<? extends Data>> {
+ void test(X x) {
+ for (Data s : x) { }
+ }
+ }
+
+ class TestHelper4 {
+ void test(Iterable<? extends Data> t) {
+ for(Object a: t.iterator().next());
+ }
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T8010659/CompilerCrashWhenMixingBinariesAndSourcesTest.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8010659
+ * @summary Javac Crashes while building OpenJFX
+ * @library /tools/javac/lib
+ * @build ToolBox
+ * @run main CompilerCrashWhenMixingBinariesAndSourcesTest
+ */
+
+public class CompilerCrashWhenMixingBinariesAndSourcesTest {
+ private static final String ASource =
+ "class A {\n" +
+ " void test() {new B(){};}\n" +
+ "}";
+ private static final String BSource =
+ "class B extends C {}";
+ private static final String CSource =
+ "class C extends D {\n" +
+ " String m(int i) {return null;}\n" +
+ "}";
+ private static final String DSource =
+ "class D {\n" +
+ " Object m(int i) {return null;}\n" +
+ "}";
+
+ public static void main (String[] args) throws Exception{
+ ToolBox.JavaToolArgs javacParams = new ToolBox.JavaToolArgs()
+ .setSources(ASource, BSource, CSource, DSource);
+ ToolBox.javac(javacParams);
+
+ ToolBox.rm("A.class");
+ ToolBox.rm("A$1.class");
+ ToolBox.rm("C.class");
+ ToolBox.rm("D.class");
+
+ javacParams = new ToolBox.JavaToolArgs()
+ .setOptions("-cp", ".")
+ .setSources(ASource, CSource, DSource);
+ ToolBox.javac(javacParams);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T8011181/EmptyUTF8ForInnerClassNameTest.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,81 @@
+/*
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8011181
+ * @summary javac, empty UTF8 entry generated for inner class
+ */
+
+import java.io.BufferedInputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import com.sun.tools.javac.util.Assert;
+import com.sun.tools.classfile.ClassFile;
+
+import static com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8;
+import static com.sun.tools.classfile.ConstantPool.CONSTANT_Utf8_info;
+import static com.sun.tools.classfile.ConstantPool.CPInfo;
+
+public class EmptyUTF8ForInnerClassNameTest {
+
+ public static void main(String[] args) throws Exception {
+ new EmptyUTF8ForInnerClassNameTest().run();
+ }
+
+ void run() throws Exception {
+ checkClassFile(Paths.get(System.getProperty("test.classes"),
+ this.getClass().getName() + "$1.class"));
+ checkClassFile(Paths.get(System.getProperty("test.classes"),
+ this.getClass().getName() + "$EnumPlusSwitch.class"));
+ }
+
+ void checkClassFile(final Path path) throws Exception {
+ ClassFile classFile = ClassFile.read(
+ new BufferedInputStream(Files.newInputStream(path)));
+ for (CPInfo cpInfo : classFile.constant_pool.entries()) {
+ if (cpInfo.getTag() == CONSTANT_Utf8) {
+ CONSTANT_Utf8_info utf8Info = (CONSTANT_Utf8_info)cpInfo;
+ Assert.check(utf8Info.value.length() > 0,
+ "UTF8 with length 0 found at class " + classFile.getName());
+ }
+ }
+ }
+
+ static class EnumPlusSwitch {
+ enum E {E1}
+
+ public int m (E e) {
+ switch (e) {
+ case E1:
+ return 0;
+ }
+ return -1;
+ }
+ }
+
+}
--- a/langtools/test/tools/javac/annotations/typeAnnotations/TypeProcOnly.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/TypeProcOnly.java Wed Apr 17 21:50:43 2013 -0700
@@ -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
@@ -32,12 +32,12 @@
import com.sun.source.util.JavacTask;
import com.sun.source.util.TaskEvent;
import com.sun.source.util.TaskListener;
-import com.sun.source.util.TreePath;
import com.sun.tools.javac.main.JavaCompiler;
-import com.sun.tools.javac.main.JavaCompiler.CompileState;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.util.Context;
+import static com.sun.tools.javac.comp.CompileStates.CompileState;
+
/*
* @test
* @summary test that type processors are run when -proc:only is passed.
--- a/langtools/test/tools/javac/annotations/typeAnnotations/packageanno/PackageProcessor.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/packageanno/PackageProcessor.java Wed Apr 17 21:50:43 2013 -0700
@@ -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
@@ -31,12 +31,12 @@
import com.sun.source.util.JavacTask;
import com.sun.source.util.TaskEvent;
import com.sun.source.util.TaskListener;
-import com.sun.source.util.TreePath;
import com.sun.tools.javac.main.JavaCompiler;
-import com.sun.tools.javac.main.JavaCompiler.CompileState;
import com.sun.tools.javac.processing.JavacProcessingEnvironment;
import com.sun.tools.javac.util.Context;
+import static com.sun.tools.javac.comp.CompileStates.CompileState;
+
/*
* @test
* @summary test that package annotations are available to type processors.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/defaultMethods/DefaultMethodFlags.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,111 @@
+/*
+ * 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.
+ *
+ * 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 8011383
+ * @summary Symbol.getModifiers omits ACC_ABSTRACT from interface with default methods
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+import javax.lang.model.element.*;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.TaskEvent;
+import com.sun.source.util.TaskListener;
+import com.sun.tools.javac.util.Assert;
+
+public class DefaultMethodFlags {
+
+ public static void main(String[] args) throws IOException {
+ new DefaultMethodFlags().run(args);
+ }
+
+ void run(String[] args) throws IOException {
+ checkDefaultMethodFlags();
+ }
+
+ void checkDefaultMethodFlags() throws IOException {
+ JavaCompiler c = ToolProvider.getSystemJavaCompiler();
+ StandardJavaFileManager fm = c.getStandardFileManager(null, null, null);
+ Iterable<? extends JavaFileObject> fos =
+ fm.getJavaFileObjectsFromFiles(
+ Arrays.asList(new File(
+ System.getProperty("test.src"),
+ this.getClass().getSimpleName() + ".java")));
+ JavacTask task = (JavacTask) c.getTask(null, fm, null, null, null, fos);
+
+ task.addTaskListener(new TaskListener() {
+
+ @Override
+ public void started(TaskEvent e) {}
+
+ @Override
+ public void finished(TaskEvent e) {
+ if (e.getKind() == TaskEvent.Kind.ANALYZE) {
+ TypeElement te = e.getTypeElement();
+ if (te.getSimpleName().toString().equals("I")) {
+ checkDefaultInterface(te);
+ }
+ }
+ }
+ });
+
+ task.analyze();
+ }
+
+ void checkDefaultInterface(TypeElement te) {
+ System.err.println("Checking " + te.getSimpleName());
+ Assert.check(te.getModifiers().contains(Modifier.ABSTRACT));
+ for (Element e : te.getEnclosedElements()) {
+ if (e.getSimpleName().toString().matches("(\\w)_(default|static|abstract)")) {
+ boolean abstractExpected = false;
+ String methodKind = e.getSimpleName().toString().substring(2);
+ switch (methodKind) {
+ case "default":
+ case "static":
+ break;
+ case "abstract":
+ abstractExpected = true;
+ break;
+ default:
+ Assert.error("Cannot get here!" + methodKind);
+ }
+ Assert.check(e.getModifiers().contains(Modifier.ABSTRACT) == abstractExpected);
+ }
+ }
+ }
+}
+
+interface I {
+ default void m_default() { }
+ static void m_static() { }
+ void m_abstract();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/Intersection03.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ *
+ * 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 8011392
+ * @summary Missing checkcast when casting to intersection type
+ */
+import java.util.*;
+
+public class Intersection03 {
+
+ static int assertionCount = 0;
+
+ static void assertTrue(boolean cond) {
+ assertionCount++;
+ if (!cond) throw new AssertionError();
+ }
+
+ public static void main(String[] args) {
+ try {
+ Runnable r = (List<?> & Runnable)new ArrayList<String>();
+ assertTrue(false);
+ } catch (ClassCastException cce) {
+ assertTrue(true);
+ }
+ assertTrue(assertionCount == 1);
+ }
+}
--- a/langtools/test/tools/javac/lambda/TargetType69.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/lambda/TargetType69.java Wed Apr 17 21:50:43 2013 -0700
@@ -25,11 +25,11 @@
* @test
* @bug 8010303
* @summary Graph inference: missing incorporation step causes spurious inference error
- * @compile TargetType68.java
+ * @compile TargetType69.java
*/
import java.util.*;
-class TargetType68 {
+class TargetType69 {
interface Function<X,Y> {
Y m(X x);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/TargetType70.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,52 @@
+/*
+ * 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.
+ *
+ * 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 8011028
+ * @summary lang/INFR/infr001/infr00101md/infr00101md.java fails to compile after switch to JDK8-b82
+ * @compile TargetType70.java
+ */
+class TargetType70 {
+
+ static class Sup {}
+ static class Sub extends Sup {}
+
+ interface I<T extends GenSup<U>, U> {
+ T m(U o);
+ }
+
+ static class GenSup<T> {
+ GenSup(T f) { }
+ }
+
+ static class GenSub<T> extends GenSup<T> {
+ GenSub(T f) { super(f); }
+ }
+
+ <T extends Sup> void m(I<? extends GenSup<T>, T> o1, T o2) { }
+
+ void test(Sub sub) {
+ m(GenSub::new, sub);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/TargetType71.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ *
+ * 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 8011377
+ * @summary Javac crashes when multiple lambdas are defined in an array
+ * @compile TargetType71.java
+ */
+class TargetType71 {
+ void test() {
+ Runnable[] rs = { () -> { String x = null; }, () -> { String x = null; } };
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/TargetType72.java Wed Apr 17 21:50:43 2013 -0700
@@ -0,0 +1,39 @@
+/*
+ * 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.
+ *
+ * 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 8011376
+ * @summary Spurious checked exception errors in nested method call
+ * @compile TargetType72.java
+ */
+import java.io.IOException;
+import java.util.concurrent.Callable;
+
+class TargetType72 {
+
+ Callable<Number> c = id(id(()->{ if (true) throw new java.io.IOException(); return 0; }));
+
+ <Z> Z id(Z z) { return null; }
+
+}
--- a/langtools/test/tools/javac/scope/7017664/CompoundScopeTest.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/scope/7017664/CompoundScopeTest.java Wed Apr 17 21:50:43 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 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
@@ -147,7 +147,7 @@
Scope createScope(int nelems) {
Scope s = new Scope(symtab.noSymbol);
for (int i = 0 ; i < nelems ; i++) {
- Symbol sym = new TypeSymbol(0, names.fromString("s" + i), null, null);
+ Symbol sym = new TypeVariableSymbol(0, names.fromString("s" + i), null, null);
s.enter(sym);
elems = elems.prepend(sym);
List<Symbol> shadowed = shadowedMap.get(sym.name);
--- a/langtools/test/tools/javac/types/TypeHarness.java Wed Jul 05 18:50:42 2017 +0200
+++ b/langtools/test/tools/javac/types/TypeHarness.java Wed Apr 17 21:50:43 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -309,7 +309,7 @@
}
public TypeVar TypeVariable(Type bound) {
- TypeSymbol tvsym = new TypeSymbol(0, syntheticName(), null, predef.noSymbol);
+ TypeSymbol tvsym = new TypeVariableSymbol(0, syntheticName(), null, predef.noSymbol);
tvsym.type = new TypeVar(tvsym, bound, null);
return (TypeVar)tvsym.type;
}