665 this.tree = tree;
666 }
667
668 JCExpression lambda() {
669 int prevPos = make.pos;
670 try {
671 make.at(tree);
672
673 //body generation - this can be either a method call or a
674 //new instance creation expression, depending on the member reference kind
675 VarSymbol rcvr = addParametersReturnReceiver();
676 JCExpression expr = (tree.getMode() == ReferenceMode.INVOKE)
677 ? expressionInvoke(rcvr)
678 : expressionNew();
679
680 JCLambda slam = make.Lambda(params.toList(), expr);
681 slam.target = tree.target;
682 slam.owner = tree.owner;
683 slam.type = tree.type;
684 slam.pos = tree.pos;
685 slam.wasMethodReference = true;
686 if (receiverExpression != null) {
687 // use a let expression so that the receiver expression is evaluated eagerly
688 return make.at(tree.pos).LetExpr(
689 make.VarDef(rcvr, receiverExpression), slam).setType(tree.type);
690 } else {
691 return slam;
692 }
693 } finally {
694 make.at(prevPos);
695 }
696 }
697
698 /**
699 * Generate the parameter list for the converted member reference.
700 *
701 * @return The receiver variable symbol, if any
702 */
703 VarSymbol addParametersReturnReceiver() {
704 List<Type> descPTypes = tree.getDescriptorType(types).getParameterTypes();
|
665 this.tree = tree;
666 }
667
668 JCExpression lambda() {
669 int prevPos = make.pos;
670 try {
671 make.at(tree);
672
673 //body generation - this can be either a method call or a
674 //new instance creation expression, depending on the member reference kind
675 VarSymbol rcvr = addParametersReturnReceiver();
676 JCExpression expr = (tree.getMode() == ReferenceMode.INVOKE)
677 ? expressionInvoke(rcvr)
678 : expressionNew();
679
680 JCLambda slam = make.Lambda(params.toList(), expr);
681 slam.target = tree.target;
682 slam.owner = tree.owner;
683 slam.type = tree.type;
684 slam.pos = tree.pos;
685 slam.codeModel = tree.codeModel;
686 slam.wasMethodReference = true;
687 if (receiverExpression != null) {
688 // use a let expression so that the receiver expression is evaluated eagerly
689 return make.at(tree.pos).LetExpr(
690 make.VarDef(rcvr, receiverExpression), slam).setType(tree.type);
691 } else {
692 return slam;
693 }
694 } finally {
695 make.at(prevPos);
696 }
697 }
698
699 /**
700 * Generate the parameter list for the converted member reference.
701 *
702 * @return The receiver variable symbol, if any
703 */
704 VarSymbol addParametersReturnReceiver() {
705 List<Type> descPTypes = tree.getDescriptorType(types).getParameterTypes();
|