< prev index next >

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

Print this page

 960                 staticArgs = staticArgs.append(LoadableConstant.Int(bridges.length() - 1));
 961                 for (Symbol s : bridges) {
 962                     Type s_erasure = s.erasure(types);
 963                     if (!types.isSameType(s_erasure, samSym.erasure(types))) {
 964                         staticArgs = staticArgs.append(((MethodType)s.erasure(types)));
 965                     }
 966                 }
 967             }
 968             if (isSerializable) {
 969                 int prevPos = make.pos;
 970                 try {
 971                     make.at(kInfo.clazz);
 972                     addDeserializationCase(refSym, tree.type, samSym, samType,
 973                             tree, staticArgs, indyType);
 974                 } finally {
 975                     make.at(prevPos);
 976                 }
 977             }
 978         }
 979 
 980         return makeIndyCall(tree, syms.lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, samSym.name);








 981     }
 982 
 983     /**
 984      * Generate an indy method call with given name, type and static bootstrap
 985      * arguments types
 986      */
 987     private JCExpression makeIndyCall(DiagnosticPosition pos, Type site, Name bsmName,
 988                                       List<LoadableConstant> staticArgs, MethodType indyType, List<JCExpression> indyArgs,
 989                                       Name methName) {
 990         int prevPos = make.pos;
 991         try {
 992             make.at(pos);
 993             List<Type> bsm_staticArgs = List.of(syms.methodHandleLookupType,
 994                     syms.stringType,
 995                     syms.methodTypeType).appendList(staticArgs.map(types::constantType));
 996 
 997             MethodSymbol bsm = rs.resolveInternalMethod(pos, attrEnv, site,
 998                     bsmName, bsm_staticArgs, List.nil());
 999 
1000             DynamicMethodSymbol dynSym =

 960                 staticArgs = staticArgs.append(LoadableConstant.Int(bridges.length() - 1));
 961                 for (Symbol s : bridges) {
 962                     Type s_erasure = s.erasure(types);
 963                     if (!types.isSameType(s_erasure, samSym.erasure(types))) {
 964                         staticArgs = staticArgs.append(((MethodType)s.erasure(types)));
 965                     }
 966                 }
 967             }
 968             if (isSerializable) {
 969                 int prevPos = make.pos;
 970                 try {
 971                     make.at(kInfo.clazz);
 972                     addDeserializationCase(refSym, tree.type, samSym, samType,
 973                             tree, staticArgs, indyType);
 974                 } finally {
 975                     make.at(prevPos);
 976                 }
 977             }
 978         }
 979 
 980         Name lambdaName = samSym.name;
 981         if (tree.codeReflectionInfo != null) {
 982             lambdaName = lambdaName
 983                     .append(names.fromString("="))
 984                     .append(tree.codeReflectionInfo.codeModel().name);
 985         }
 986         Type lambdaMetafactory = tree.codeReflectionInfo != null ?
 987                 tree.codeReflectionInfo.reflectableLambdaMetafactory() : syms.lambdaMetafactory;
 988         return makeIndyCall(tree, lambdaMetafactory, metafactoryName, staticArgs, indyType, indy_args, lambdaName);
 989     }
 990 
 991     /**
 992      * Generate an indy method call with given name, type and static bootstrap
 993      * arguments types
 994      */
 995     private JCExpression makeIndyCall(DiagnosticPosition pos, Type site, Name bsmName,
 996                                       List<LoadableConstant> staticArgs, MethodType indyType, List<JCExpression> indyArgs,
 997                                       Name methName) {
 998         int prevPos = make.pos;
 999         try {
1000             make.at(pos);
1001             List<Type> bsm_staticArgs = List.of(syms.methodHandleLookupType,
1002                     syms.stringType,
1003                     syms.methodTypeType).appendList(staticArgs.map(types::constantType));
1004 
1005             MethodSymbol bsm = rs.resolveInternalMethod(pos, attrEnv, site,
1006                     bsmName, bsm_staticArgs, List.nil());
1007 
1008             DynamicMethodSymbol dynSym =
< prev index next >