--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Fri Jul 12 13:11:12 2013 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java Wed Jul 17 14:04:01 2013 +0100
@@ -358,7 +358,8 @@
* @param thrown The method's thrown exceptions.
* @param env The method's (local) environment.
*/
- Type signature(List<JCTypeParameter> typarams,
+ Type signature(MethodSymbol msym,
+ List<JCTypeParameter> typarams,
List<JCVariableDecl> params,
JCTree res,
JCVariableDecl recvparam,
@@ -392,8 +393,12 @@
ListBuffer<Type> thrownbuf = new ListBuffer<Type>();
for (List<JCExpression> l = thrown; l.nonEmpty(); l = l.tail) {
Type exc = attr.attribType(l.head, env);
- if (!exc.hasTag(TYPEVAR))
+ if (!exc.hasTag(TYPEVAR)) {
exc = chk.checkClassType(l.head.pos(), exc);
+ } else if (exc.tsym.owner == msym) {
+ //mark inference variables in 'throws' clause
+ exc.tsym.flags_field |= THROWS;
+ }
thrownbuf.append(exc);
}
MethodType mtype = new MethodType(argbuf.toList(),
@@ -557,7 +562,7 @@
chk.setDeferredLintHandler(deferredLintHandler.setPos(tree.pos()));
try {
// Compute the method type
- m.type = signature(tree.typarams, tree.params,
+ m.type = signature(m, tree.typarams, tree.params,
tree.restype, tree.recvparam,
tree.thrown,
localEnv);