697
698 }
699 }
700
701 JCBlock trans_block = new LambdaBodyTranslator().translate(block);
702 if (completeNormally && isTarget_Void) {
703 //there's no return statement and the lambda (possibly inferred)
704 //return type is java.lang.Void; emit a synthetic return statement
705 trans_block.stats = trans_block.stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
706 }
707 return trans_block;
708 }
709
710 private JCMethodDecl makeDeserializeMethod(Symbol kSym) {
711 ListBuffer<JCCase> cases = new ListBuffer<>();
712 ListBuffer<JCBreak> breaks = new ListBuffer<>();
713 for (Map.Entry<String, ListBuffer<JCStatement>> entry : kInfo.deserializeCases.entrySet()) {
714 JCBreak br = make.Break(null);
715 breaks.add(br);
716 List<JCStatement> stmts = entry.getValue().append(br).toList();
717 cases.add(make.Case(make.Literal(entry.getKey()), stmts));
718 }
719 JCSwitch sw = make.Switch(deserGetter("getImplMethodName", syms.stringType), cases.toList());
720 for (JCBreak br : breaks) {
721 br.target = sw;
722 }
723 JCBlock body = make.Block(0L, List.of(
724 sw,
725 make.Throw(makeNewClass(
726 syms.illegalArgumentExceptionType,
727 List.of(make.Literal("Invalid lambda deserialization"))))));
728 JCMethodDecl deser = make.MethodDef(make.Modifiers(kInfo.deserMethodSym.flags()),
729 names.deserializeLambda,
730 make.QualIdent(kInfo.deserMethodSym.getReturnType().tsym),
731 List.nil(),
732 List.of(make.VarDef(kInfo.deserParamSym, null)),
733 List.nil(),
734 body,
735 null);
736 deser.sym = kInfo.deserMethodSym;
737 deser.type = kInfo.deserMethodSym.type;
|
697
698 }
699 }
700
701 JCBlock trans_block = new LambdaBodyTranslator().translate(block);
702 if (completeNormally && isTarget_Void) {
703 //there's no return statement and the lambda (possibly inferred)
704 //return type is java.lang.Void; emit a synthetic return statement
705 trans_block.stats = trans_block.stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
706 }
707 return trans_block;
708 }
709
710 private JCMethodDecl makeDeserializeMethod(Symbol kSym) {
711 ListBuffer<JCCase> cases = new ListBuffer<>();
712 ListBuffer<JCBreak> breaks = new ListBuffer<>();
713 for (Map.Entry<String, ListBuffer<JCStatement>> entry : kInfo.deserializeCases.entrySet()) {
714 JCBreak br = make.Break(null);
715 breaks.add(br);
716 List<JCStatement> stmts = entry.getValue().append(br).toList();
717 cases.add(make.Case(JCCase.STATEMENT, List.of(make.Literal(entry.getKey())), stmts, null));
718 }
719 JCSwitch sw = make.Switch(deserGetter("getImplMethodName", syms.stringType), cases.toList());
720 for (JCBreak br : breaks) {
721 br.target = sw;
722 }
723 JCBlock body = make.Block(0L, List.of(
724 sw,
725 make.Throw(makeNewClass(
726 syms.illegalArgumentExceptionType,
727 List.of(make.Literal("Invalid lambda deserialization"))))));
728 JCMethodDecl deser = make.MethodDef(make.Modifiers(kInfo.deserMethodSym.flags()),
729 names.deserializeLambda,
730 make.QualIdent(kInfo.deserMethodSym.getReturnType().tsym),
731 List.nil(),
732 List.of(make.VarDef(kInfo.deserParamSym, null)),
733 List.nil(),
734 body,
735 null);
736 deser.sym = kInfo.deserMethodSym;
737 deser.type = kInfo.deserMethodSym.type;
|