Make anonymous classes for callable references synthetic
#KT-28453 Fixed
This commit is contained in:
@@ -435,6 +435,11 @@ public class AsmUtil {
|
||||
return InlineUtil.isInlineOrContainingInline(descriptor.getContainingDeclaration()) ? ACC_PUBLIC : NO_FLAG_PACKAGE_PRIVATE;
|
||||
}
|
||||
|
||||
public static int getSyntheticAccessFlagForLambdaClass(@NotNull ClassDescriptor descriptor) {
|
||||
return descriptor instanceof SyntheticClassDescriptorForLambda &&
|
||||
((SyntheticClassDescriptorForLambda) descriptor).isCallableReference() ? ACC_SYNTHETIC : 0;
|
||||
}
|
||||
|
||||
public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) {
|
||||
int visibility =
|
||||
innerClass instanceof SyntheticClassDescriptorForLambda
|
||||
@@ -443,6 +448,7 @@ public class AsmUtil {
|
||||
? ACC_PUBLIC
|
||||
: getVisibilityAccessFlag(innerClass);
|
||||
return visibility |
|
||||
getSyntheticAccessFlagForLambdaClass(innerClass) |
|
||||
innerAccessFlagsForModalityAndKind(innerClass) |
|
||||
(innerClass.isInner() ? 0 : ACC_STATIC);
|
||||
}
|
||||
|
||||
@@ -142,13 +142,14 @@ public class ClosureCodegen extends MemberCodegen<KtElement> {
|
||||
sw.writeInterfaceEnd();
|
||||
}
|
||||
|
||||
v.defineClass(element,
|
||||
state.getClassFileVersion(),
|
||||
ACC_FINAL | ACC_SUPER | visibilityFlag,
|
||||
asmType.getInternalName(),
|
||||
sw.makeJavaGenericSignature(),
|
||||
superClassAsmType.getInternalName(),
|
||||
superInterfaceAsmTypes
|
||||
v.defineClass(
|
||||
element,
|
||||
state.getClassFileVersion(),
|
||||
ACC_FINAL | ACC_SUPER | visibilityFlag | getSyntheticAccessFlagForLambdaClass(classDescriptor),
|
||||
asmType.getInternalName(),
|
||||
sw.makeJavaGenericSignature(),
|
||||
superClassAsmType.getInternalName(),
|
||||
superInterfaceAsmTypes
|
||||
);
|
||||
|
||||
initDefaultSourceMappingIfNeeded(context, this, state);
|
||||
|
||||
@@ -92,7 +92,9 @@ class PropertyReferenceCodegen(
|
||||
v.defineClass(
|
||||
element,
|
||||
state.classFileVersion,
|
||||
ACC_FINAL or ACC_SUPER or AsmUtil.getVisibilityAccessFlagForClass(classDescriptor),
|
||||
ACC_FINAL or ACC_SUPER or
|
||||
AsmUtil.getVisibilityAccessFlagForClass(classDescriptor) or
|
||||
AsmUtil.getSyntheticAccessFlagForLambdaClass(classDescriptor),
|
||||
asmType.internalName,
|
||||
null,
|
||||
superAsmType.internalName,
|
||||
|
||||
Reference in New Issue
Block a user