From 8a812996dd22914497df5939d89e3b8df1047749 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 22 Jul 2021 20:14:44 +0300 Subject: [PATCH] [Frontend, JS] Not report error in for inheritance suspend function interface ^KT-46204 fixed --- .../js/resolve/diagnostics/JsInheritanceChecker.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsInheritanceChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsInheritanceChecker.kt index ad2b570d20f..927ac3c3af1 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsInheritanceChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsInheritanceChecker.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.js.resolve.diagnostics import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype +import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -36,8 +37,7 @@ object JsInheritanceChecker : DeclarationChecker { isOverridingExternalWithOptionalParams(descriptor) ) { context.trace.report(ErrorsJs.OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS.on(declaration)) - } - else if (descriptor is ClassDescriptor && !descriptor.isEffectivelyExternal()) { + } else if (descriptor is ClassDescriptor && !descriptor.isEffectivelyExternal()) { val fakeOverriddenMethod = findFakeMethodOverridingExternalWithOptionalParams(descriptor) if (fakeOverriddenMethod != null) { context.trace.report(ErrorsJs.OVERRIDING_EXTERNAL_FUN_WITH_OPTIONAL_PARAMS_WITH_FAKE.on(declaration, fakeOverriddenMethod)) @@ -45,7 +45,7 @@ object JsInheritanceChecker : DeclarationChecker { } if (descriptor is ClassDescriptor && - descriptor.defaultType.immediateSupertypes().any { it.isBuiltinFunctionalTypeOrSubtype } + descriptor.defaultType.immediateSupertypes().any { it.isBuiltinFunctionalTypeOrSubtype && !it.isSuspendFunctionTypeOrSubtype } ) { context.trace.report(ErrorsJs.IMPLEMENTING_FUNCTION_INTERFACE.on(declaration as KtClassOrObject)) } @@ -63,8 +63,8 @@ object JsInheritanceChecker : DeclarationChecker { private fun findFakeMethodOverridingExternalWithOptionalParams(cls: ClassDescriptor): FunctionDescriptor? { val members = cls.unsubstitutedMemberScope.getContributedDescriptors(DescriptorKindFilter.CALLABLES) - .mapNotNull { it as? FunctionDescriptor } - .filter { it.containingDeclaration == cls && !it.kind.isReal && it.overriddenDescriptors.size > 1 } + .mapNotNull { it as? FunctionDescriptor } + .filter { it.containingDeclaration == cls && !it.kind.isReal && it.overriddenDescriptors.size > 1 } return members.firstOrNull { isOverridingExternalWithOptionalParams(it) } }