< prev index next >

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

Print this page

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








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

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