src/share/classes/com/sun/tools/javac/comp/Infer.java

changeset 716
493ecc8111ba
parent 689
77cc34d5e548
child 753
2536dedd897e
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Infer.java	Wed Oct 13 17:52:29 2010 -0700
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Infer.java	Mon Oct 18 19:14:36 2010 +0100
     1.3 @@ -553,12 +553,24 @@
     1.4              //the enclosing tree E, as follows: if E is a cast, then use the
     1.5              //target type of the cast expression as a return type; if E is an
     1.6              //expression statement, the return type is 'void' - otherwise the
     1.7 -            //return type is simply 'Object'.
     1.8 -            switch (env.outer.tree.getTag()) {
     1.9 +            //return type is simply 'Object'. A correctness check ensures that
    1.10 +            //env.next refers to the lexically enclosing environment in which
    1.11 +            //the polymorphic signature call environment is nested.
    1.12 +
    1.13 +            switch (env.next.tree.getTag()) {
    1.14                  case JCTree.TYPECAST:
    1.15 -                    restype = ((JCTypeCast)env.outer.tree).clazz.type; break;
    1.16 +                    JCTypeCast castTree = (JCTypeCast)env.next.tree;
    1.17 +                    restype = (castTree.expr == env.tree) ?
    1.18 +                        castTree.clazz.type :
    1.19 +                        syms.objectType;
    1.20 +                    break;
    1.21                  case JCTree.EXEC:
    1.22 -                    restype = syms.voidType; break;
    1.23 +                    JCTree.JCExpressionStatement execTree =
    1.24 +                            (JCTree.JCExpressionStatement)env.next.tree;
    1.25 +                    restype = (execTree.expr == env.tree) ?
    1.26 +                        syms.voidType :
    1.27 +                        syms.objectType;
    1.28 +                    break;
    1.29                  default:
    1.30                      restype = syms.objectType;
    1.31              }

mercurial