JVM_IR KT-46160 don't use LambdaMetafactory for mutifile class members

This commit is contained in:
Dmitry Petrov
2021-04-19 16:11:39 +03:00
committed by TeamCityServer
parent 1dfc3c0520
commit 46d5e974df
6 changed files with 59 additions and 0 deletions
@@ -78,6 +78,14 @@ internal class LambdaMetafactoryArgumentsBuilder(
return null
}
val implFunParent = implFun.parent
if (implFunParent is IrClass && implFunParent.origin == IrDeclarationOrigin.JVM_MULTIFILE_CLASS) {
// LambdaMetafactory treats multifile class part members as non-accessible,
// even if the member is referenced via facade,
// because corresponding part class is non-accessible
return null
}
// Can't use JDK LambdaMetafactory for annotated lambdas.
// JDK LambdaMetafactory doesn't copy annotations from implementation method to an instance method in a
// corresponding synthetic class, which doesn't look like a binary compatible change.