< prev index next >

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

Print this page

 871                 staticArgs = staticArgs.append(LoadableConstant.Int(bridges.length() - 1));
 872                 for (Symbol s : bridges) {
 873                     Type s_erasure = s.erasure(types);
 874                     if (!types.isSameType(s_erasure, samSym.erasure(types))) {
 875                         staticArgs = staticArgs.append(((MethodType)s.erasure(types)));
 876                     }
 877                 }
 878             }
 879             if (isSerializable) {
 880                 int prevPos = make.pos;
 881                 try {
 882                     make.at(kInfo.clazz);
 883                     addDeserializationCase(refSym, tree.type, samSym,
 884                             tree, staticArgs, indyType);
 885                 } finally {
 886                     make.at(prevPos);
 887                 }
 888             }
 889         }
 890 
 891         return makeIndyCall(tree, syms.lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, samSym.name);








 892     }
 893 
 894     /**
 895      * Generate an indy method call with given name, type and static bootstrap
 896      * arguments types
 897      */
 898     private JCExpression makeIndyCall(DiagnosticPosition pos, Type site, Name bsmName,
 899                                       List<LoadableConstant> staticArgs, MethodType indyType, List<JCExpression> indyArgs,
 900                                       Name methName) {
 901         int prevPos = make.pos;
 902         try {
 903             make.at(pos);
 904             List<Type> bsm_staticArgs = List.of(syms.methodHandleLookupType,
 905                     syms.stringType,
 906                     syms.methodTypeType).appendList(staticArgs.map(types::constantType));
 907 
 908             MethodSymbol bsm = rs.resolveInternalMethod(pos, attrEnv, site,
 909                     bsmName, bsm_staticArgs, List.nil());
 910 
 911             DynamicMethodSymbol dynSym =

 871                 staticArgs = staticArgs.append(LoadableConstant.Int(bridges.length() - 1));
 872                 for (Symbol s : bridges) {
 873                     Type s_erasure = s.erasure(types);
 874                     if (!types.isSameType(s_erasure, samSym.erasure(types))) {
 875                         staticArgs = staticArgs.append(((MethodType)s.erasure(types)));
 876                     }
 877                 }
 878             }
 879             if (isSerializable) {
 880                 int prevPos = make.pos;
 881                 try {
 882                     make.at(kInfo.clazz);
 883                     addDeserializationCase(refSym, tree.type, samSym,
 884                             tree, staticArgs, indyType);
 885                 } finally {
 886                     make.at(prevPos);
 887                 }
 888             }
 889         }
 890 
 891         Name lambdaName = samSym.name;
 892         if (tree.codeReflectionInfo != null) {
 893             lambdaName = lambdaName
 894                     .append(names.fromString("="))
 895                     .append(tree.codeReflectionInfo.codeModel().name);
 896         }
 897         Type lambdaMetafactory = tree.codeReflectionInfo != null ?
 898                 tree.codeReflectionInfo.reflectableLambdaMetafactory() : syms.lambdaMetafactory;
 899         return makeIndyCall(tree, lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, lambdaName);
 900     }
 901 
 902     /**
 903      * Generate an indy method call with given name, type and static bootstrap
 904      * arguments types
 905      */
 906     private JCExpression makeIndyCall(DiagnosticPosition pos, Type site, Name bsmName,
 907                                       List<LoadableConstant> staticArgs, MethodType indyType, List<JCExpression> indyArgs,
 908                                       Name methName) {
 909         int prevPos = make.pos;
 910         try {
 911             make.at(pos);
 912             List<Type> bsm_staticArgs = List.of(syms.methodHandleLookupType,
 913                     syms.stringType,
 914                     syms.methodTypeType).appendList(staticArgs.map(types::constantType));
 915 
 916             MethodSymbol bsm = rs.resolveInternalMethod(pos, attrEnv, site,
 917                     bsmName, bsm_staticArgs, List.nil());
 918 
 919             DynamicMethodSymbol dynSym =
< prev index next >