Make inline class wrapper constructor synthetic

This commit is contained in:
Dmitry Petrov
2018-08-31 10:36:26 +03:00
parent 85826d304e
commit 203fd6a5d6
9 changed files with 27 additions and 7 deletions
@@ -255,13 +255,22 @@ public class AsmUtil {
flags |= ACC_ABSTRACT;
}
if (KotlinTypeMapper.isAccessor(functionDescriptor) || hasJvmSyntheticAnnotation(functionDescriptor)) {
if (KotlinTypeMapper.isAccessor(functionDescriptor) ||
hasJvmSyntheticAnnotation(functionDescriptor) ||
isInlineClassWrapperConstructor(functionDescriptor, kind)
) {
flags |= ACC_SYNTHETIC;
}
return flags;
}
private static boolean isInlineClassWrapperConstructor(@NotNull FunctionDescriptor functionDescriptor, @NotNull OwnerKind kind) {
if (!(functionDescriptor instanceof ConstructorDescriptor)) return false;
ClassDescriptor classDescriptor = ((ConstructorDescriptor) functionDescriptor).getConstructedClass();
return classDescriptor.isInline() && kind == OwnerKind.IMPLEMENTATION;
}
public static int getCommonCallableFlags(FunctionDescriptor functionDescriptor, @NotNull GenerationState state) {
int flags = getVisibilityAccessFlag(functionDescriptor);
flags |= getVarargsFlag(functionDescriptor);