< prev index next >

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

Print this page
rev 51258 : imported patch switch


 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;


< prev index next >