Generate synthetic method for @JvmDefault properties in DefaultImpls
This commit is contained in:
@@ -181,7 +181,7 @@ public class FunctionCodegen {
|
||||
OwnerKind contextKind = methodContext.getContextKind();
|
||||
DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
|
||||
if (isInterface(containingDeclaration) &&
|
||||
!processInterfaceMethod(functionDescriptor, contextKind, false, state.getJvmDefaultMode())) {
|
||||
!processInterfaceMethod(functionDescriptor, contextKind, false, false, state.getJvmDefaultMode())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1149,7 +1149,7 @@ public class FunctionCodegen {
|
||||
DeclarationDescriptor contextClass = owner.getContextDescriptor().getContainingDeclaration();
|
||||
|
||||
if (isInterface(contextClass) &&
|
||||
!processInterfaceMethod(functionDescriptor, kind, true, state.getJvmDefaultMode())) {
|
||||
!processInterfaceMethod(functionDescriptor, kind, true, false, state.getJvmDefaultMode())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1579,7 +1579,8 @@ public class FunctionCodegen {
|
||||
public static boolean processInterfaceMethod(
|
||||
@NotNull CallableMemberDescriptor memberDescriptor,
|
||||
@NotNull OwnerKind kind,
|
||||
boolean isDefaultOrSynthetic,
|
||||
boolean isDefault,
|
||||
boolean isSynthetic,
|
||||
JvmDefaultMode mode
|
||||
) {
|
||||
DeclarationDescriptor containingDeclaration = memberDescriptor.getContainingDeclaration();
|
||||
@@ -1587,11 +1588,12 @@ public class FunctionCodegen {
|
||||
containingDeclaration;
|
||||
|
||||
if (hasJvmDefaultAnnotation(memberDescriptor)) {
|
||||
return kind != OwnerKind.DEFAULT_IMPLS || mode.isCompatibility();
|
||||
return (kind != OwnerKind.DEFAULT_IMPLS && !isSynthetic) ||
|
||||
(kind == OwnerKind.DEFAULT_IMPLS && (isSynthetic || mode.isCompatibility()));
|
||||
} else {
|
||||
switch (kind) {
|
||||
case DEFAULT_IMPLS: return true;
|
||||
case IMPLEMENTATION: return !Visibilities.isPrivate(memberDescriptor.getVisibility()) && !isDefaultOrSynthetic;
|
||||
case IMPLEMENTATION: return !Visibilities.isPrivate(memberDescriptor.getVisibility()) && !isDefault && !isSynthetic;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -353,7 +353,7 @@ public class PropertyCodegen {
|
||||
if (annotations.getAllAnnotations().isEmpty()) return;
|
||||
|
||||
DeclarationDescriptor contextDescriptor = context.getContextDescriptor();
|
||||
if (!isInterface(contextDescriptor) || processInterfaceMethod(descriptor, kind, true, state.getJvmDefaultMode())) {
|
||||
if (!isInterface(contextDescriptor) || processInterfaceMethod(descriptor, kind, false, true, state.getJvmDefaultMode())) {
|
||||
memberCodegen.generateSyntheticAnnotationsMethod(
|
||||
descriptor, getSyntheticMethodSignature(descriptor), annotations, AnnotationUseSiteTarget.PROPERTY
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user