Allow open callable members in expect interfaces
#KT-42094 fixed
This commit is contained in:
committed by
Sebastian Sellmair
parent
bf0156f7c6
commit
06cb64bb51
@@ -772,7 +772,7 @@ class DeclarationsChecker(
|
||||
if (function.hasModifier(KtTokens.PRIVATE_KEYWORD)) {
|
||||
trace.report(PRIVATE_FUNCTION_WITH_NO_BODY.on(function, functionDescriptor))
|
||||
}
|
||||
if (!hasAbstractModifier && function.hasModifier(KtTokens.OPEN_KEYWORD)) {
|
||||
if (!containingDescriptor.isExpect && !hasAbstractModifier && function.hasModifier(KtTokens.OPEN_KEYWORD)) {
|
||||
trace.report(REDUNDANT_OPEN_IN_INTERFACE.on(function))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ public class ModifiersChecker {
|
||||
boolean allowSealed
|
||||
) {
|
||||
KtModifierList modifierList = (modifierListOwner != null) ? modifierListOwner.getModifierList() : null;
|
||||
Modality modality = resolveModalityFromModifiers(modifierList, defaultModality, allowSealed);
|
||||
Modality modality = resolveModalityFromModifiers(containingDescriptor, modifierList, defaultModality, allowSealed);
|
||||
|
||||
if (modifierListOwner != null) {
|
||||
Collection<DeclarationAttributeAltererExtension> extensions =
|
||||
@@ -103,6 +103,7 @@ public class ModifiersChecker {
|
||||
|
||||
@NotNull
|
||||
private static Modality resolveModalityFromModifiers(
|
||||
@Nullable DeclarationDescriptor containingDescriptor,
|
||||
@Nullable KtModifierList modifierList,
|
||||
@NotNull Modality defaultModality,
|
||||
boolean allowSealed
|
||||
@@ -115,6 +116,12 @@ public class ModifiersChecker {
|
||||
return Modality.SEALED;
|
||||
}
|
||||
if (modifierList.hasModifier(OPEN_KEYWORD)) {
|
||||
if (containingDescriptor instanceof ClassDescriptor) {
|
||||
ClassDescriptor classOrInterface = (ClassDescriptor) containingDescriptor;
|
||||
if (classOrInterface.getKind() == ClassKind.INTERFACE && classOrInterface.isExpect()) {
|
||||
return Modality.OPEN;
|
||||
}
|
||||
}
|
||||
if (hasAbstractModifier || defaultModality == Modality.ABSTRACT) {
|
||||
return Modality.ABSTRACT;
|
||||
}
|
||||
@@ -141,7 +148,10 @@ public class ModifiersChecker {
|
||||
return resolveVisibilityFromModifiers(modifierListOwner.getModifierList(), defaultVisibility);
|
||||
}
|
||||
|
||||
public static DescriptorVisibility resolveVisibilityFromModifiers(@Nullable KtModifierList modifierList, @NotNull DescriptorVisibility defaultVisibility) {
|
||||
public static DescriptorVisibility resolveVisibilityFromModifiers(
|
||||
@Nullable KtModifierList modifierList,
|
||||
@NotNull DescriptorVisibility defaultVisibility
|
||||
) {
|
||||
if (modifierList == null) return defaultVisibility;
|
||||
if (modifierList.hasModifier(PRIVATE_KEYWORD)) return DescriptorVisibilities.PRIVATE;
|
||||
if (modifierList.hasModifier(PUBLIC_KEYWORD)) return DescriptorVisibilities.PUBLIC;
|
||||
@@ -226,7 +236,7 @@ public class ModifiersChecker {
|
||||
public void checkModifiersForDestructuringDeclaration(@NotNull KtDestructuringDeclaration multiDeclaration) {
|
||||
annotationChecker.check(multiDeclaration, trace, null);
|
||||
ModifierCheckerCore.INSTANCE.check(multiDeclaration, trace, null, languageVersionSettings);
|
||||
for (KtDestructuringDeclarationEntry multiEntry: multiDeclaration.getEntries()) {
|
||||
for (KtDestructuringDeclarationEntry multiEntry : multiDeclaration.getEntries()) {
|
||||
annotationChecker.check(multiEntry, trace, null);
|
||||
ModifierCheckerCore.INSTANCE.check(multiEntry, trace, null, languageVersionSettings);
|
||||
UnderscoreChecker.INSTANCE.checkNamed(multiEntry, trace, languageVersionSettings, /* allowSingleUnderscore = */ true);
|
||||
|
||||
Reference in New Issue
Block a user