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 =
|