@@ -1405,18 +1405,19 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1405
1405
def genInvokeDynamicLambda (ctor : Symbol , lambdaTarget : Symbol , environmentSize : Int , functionalInterface : Symbol ): BType = {
1406
1406
debuglog(s " Using invokedynamic rather than `new ${ctor.owner}` " )
1407
1407
val generatedType = classBTypeFromSymbol(functionalInterface)
1408
+ val isInterface = lambdaTarget.owner.isInterface
1408
1409
val invokeStyle =
1409
1410
if (lambdaTarget.isStaticMember) asm.Opcodes .H_INVOKESTATIC
1410
1411
else if (lambdaTarget.isPrivate || lambdaTarget.isClassConstructor) asm.Opcodes .H_INVOKESPECIAL
1411
- else if (lambdaTarget.owner. isInterface) asm.Opcodes .H_INVOKEINTERFACE
1412
+ else if (isInterface) asm.Opcodes .H_INVOKEINTERFACE
1412
1413
else asm.Opcodes .H_INVOKEVIRTUAL
1413
1414
1414
1415
val targetHandle =
1415
1416
new asm.Handle (invokeStyle,
1416
1417
classBTypeFromSymbol(lambdaTarget.owner).internalName,
1417
1418
lambdaTarget.name.mangledString,
1418
1419
asmMethodType(lambdaTarget).descriptor,
1419
- invokeStyle == asm. Opcodes . H_INVOKEINTERFACE )
1420
+ isInterface )
1420
1421
1421
1422
val (a,b) = lambdaTarget.info.paramTypes.splitAt(environmentSize)
1422
1423
var (capturedParamsTypes, lambdaParamTypes) = if (int.doLabmdasFollowJVMMetafactoryOrder) (a,b) else (b,a)
@@ -1447,6 +1448,6 @@ trait BCodeBodyBuilder extends BCodeSkelBuilder {
1447
1448
new asm.Handle (asm.Opcodes .H_INVOKESTATIC ,
1448
1449
int.LambdaMetaFactory .javaBinaryName, int.MetafactoryName ,
1449
1450
" (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;" ,
1450
- false )
1451
+ int. LambdaMetaFactory .isInterface )
1451
1452
1452
1453
}
0 commit comments