KMP: Put "prohbit expect/actual different annotations" under the flag

^KT-61668 Fixed

Review: https://jetbrains.team/p/kt/reviews/12062/timeline
This commit is contained in:
Nikita Bobko
2023-09-07 14:04:22 +02:00
committed by Space Team
parent 3a0c4d1087
commit 6868c95263
7 changed files with 54 additions and 8 deletions
@@ -78,7 +78,7 @@ class ExpectedActualDeclarationChecker(
declaration,
descriptor,
checkActualModifier,
context.trace,
context,
moduleVisibilityFilter = { it in allDependsOnModules }
)
}
@@ -294,9 +294,10 @@ class ExpectedActualDeclarationChecker(
reportOn: KtNamedDeclaration,
descriptor: MemberDescriptor,
checkActualModifier: Boolean,
trace: BindingTrace,
context: DeclarationCheckerContext,
moduleVisibilityFilter: ModuleFilter
) {
val trace = context.trace
val compatibility = ExpectedActualResolver
.findExpectedForActual(descriptor, moduleVisibilityFilter, shouldCheckAbsenceOfDefaultParamsInActual = true)
?: return
@@ -381,7 +382,7 @@ class ExpectedActualDeclarationChecker(
val expectSingleCandidate = (compatibility[Compatible] ?: compatibility.values.singleOrNull())?.singleOrNull()
if (expectSingleCandidate != null) {
checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias(expectSingleCandidate, reportOn, trace)
checkAnnotationsMatch(expectSingleCandidate, descriptor, reportOn, trace)
checkAnnotationsMatch(expectSingleCandidate, descriptor, reportOn, context)
}
}
@@ -488,12 +489,13 @@ class ExpectedActualDeclarationChecker(
expectDescriptor: MemberDescriptor,
actualDescriptor: MemberDescriptor,
reportOn: KtNamedDeclaration,
trace: BindingTrace
context: DeclarationCheckerContext
) {
val context = ClassicExpectActualMatchingContext(actualDescriptor.module)
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiplatformRestrictions)) return
val matchingContext = ClassicExpectActualMatchingContext(actualDescriptor.module)
val incompatibility =
AbstractExpectActualAnnotationMatchChecker.areAnnotationsCompatible(expectDescriptor, actualDescriptor, context) ?: return
trace.report(
AbstractExpectActualAnnotationMatchChecker.areAnnotationsCompatible(expectDescriptor, actualDescriptor, matchingContext) ?: return
context.trace.report(
Errors.ACTUAL_ANNOTATIONS_NOT_MATCH_EXPECT.on(
reportOn,
incompatibility.expectSymbol as DeclarationDescriptor,