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

changeset 1496
f785dcac17b7
parent 1452
de1ec6fc93fe
child 1510
7873d37f5b37
     1.1 --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Tue Jan 15 13:03:11 2013 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Wed Jan 16 16:27:01 2013 +0000
     1.3 @@ -302,6 +302,7 @@
     1.4              case UNBOUND:           /** Type :: instMethod */
     1.5              case STATIC:            /** Type :: staticMethod */
     1.6              case TOPLEVEL:          /** Top level :: new */
     1.7 +            case ARRAY_CTOR:        /** ArrayType :: new */
     1.8                  init = null;
     1.9                  break;
    1.10  
    1.11 @@ -645,24 +646,33 @@
    1.12           * to the first bridge synthetic parameter
    1.13           */
    1.14          private JCExpression bridgeExpressionNew() {
    1.15 -            JCExpression encl = null;
    1.16 -            switch (tree.kind) {
    1.17 -                case UNBOUND:
    1.18 -                case IMPLICIT_INNER:
    1.19 -                    encl = make.Ident(params.first());
    1.20 +            if (tree.kind == ReferenceKind.ARRAY_CTOR) {
    1.21 +                //create the array creation expression
    1.22 +                JCNewArray newArr = make.NewArray(make.Type(types.elemtype(tree.getQualifierExpression().type)),
    1.23 +                        List.of(make.Ident(params.first())),
    1.24 +                        null);
    1.25 +                newArr.type = tree.getQualifierExpression().type;
    1.26 +                return newArr;
    1.27 +            } else {
    1.28 +                JCExpression encl = null;
    1.29 +                switch (tree.kind) {
    1.30 +                    case UNBOUND:
    1.31 +                    case IMPLICIT_INNER:
    1.32 +                        encl = make.Ident(params.first());
    1.33 +                }
    1.34 +
    1.35 +                //create the instance creation expression
    1.36 +                JCNewClass newClass = make.NewClass(encl,
    1.37 +                        List.<JCExpression>nil(),
    1.38 +                        make.Type(tree.getQualifierExpression().type),
    1.39 +                        convertArgs(tree.sym, args.toList(), tree.varargsElement),
    1.40 +                        null);
    1.41 +                newClass.constructor = tree.sym;
    1.42 +                newClass.constructorType = tree.sym.erasure(types);
    1.43 +                newClass.type = tree.getQualifierExpression().type;
    1.44 +                setVarargsIfNeeded(newClass, tree.varargsElement);
    1.45 +                return newClass;
    1.46              }
    1.47 -
    1.48 -            //create the instance creation expression
    1.49 -            JCNewClass newClass = make.NewClass(encl,
    1.50 -                    List.<JCExpression>nil(),
    1.51 -                    make.Type(tree.getQualifierExpression().type),
    1.52 -                    convertArgs(tree.sym, args.toList(), tree.varargsElement),
    1.53 -                    null);
    1.54 -            newClass.constructor = tree.sym;
    1.55 -            newClass.constructorType = tree.sym.erasure(types);
    1.56 -            newClass.type = tree.getQualifierExpression().type;
    1.57 -            setVarargsIfNeeded(newClass, tree.varargsElement);
    1.58 -            return newClass;
    1.59          }
    1.60  
    1.61          private VarSymbol addParameter(String name, Type p, boolean genArg) {

mercurial