@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
27
27
import org.jetbrains.kotlin.descriptors.*
28
28
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DELEGATION
29
29
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE
30
+ import org.jetbrains.kotlin.descriptors.DescriptorVisibilityUtils.useSpecialRulesForPrivateSealedConstructors
30
31
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory2
31
32
import org.jetbrains.kotlin.diagnostics.DiagnosticFactoryWithPsiElement
32
33
import org.jetbrains.kotlin.diagnostics.Errors.*
@@ -41,7 +42,6 @@ import org.jetbrains.kotlin.resolve.calls.util.isOrOverridesSynthesized
41
42
import org.jetbrains.kotlin.types.*
42
43
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
43
44
import org.jetbrains.kotlin.types.checker.NewKotlinTypeCheckerImpl
44
- import org.jetbrains.kotlin.types.TypeRefinement
45
45
import org.jetbrains.kotlin.utils.addToStdlib.assertedCast
46
46
import java.util.*
47
47
@@ -366,7 +366,7 @@ class OverrideResolver(
366
366
override fun nothingToOverride (overriding : CallableMemberDescriptor ) {
367
367
trace.report(NOTHING_TO_OVERRIDE .on(member, declared))
368
368
}
369
- }
369
+ }, languageVersionSettings
370
370
)
371
371
} else if (! overriddenDescriptors.isEmpty() && ! overridesBackwardCompatibilityHelper.overrideCanBeOmitted(declared)) {
372
372
val overridden = overriddenDescriptors.first()
@@ -854,7 +854,8 @@ class OverrideResolver(
854
854
private fun checkOverridesForMemberMarkedOverride (
855
855
declared : CallableMemberDescriptor ,
856
856
kotlinTypeRefiner : KotlinTypeRefiner ,
857
- reportError : CheckOverrideReportForDeclaredMemberStrategy
857
+ reportError : CheckOverrideReportForDeclaredMemberStrategy ,
858
+ languageVersionSettings : LanguageVersionSettings
858
859
) {
859
860
val overriddenDescriptors = declared.overriddenDescriptors
860
861
@@ -868,7 +869,7 @@ class OverrideResolver(
868
869
869
870
val invisibleOverriddenDescriptor =
870
871
findInvisibleOverriddenDescriptor(
871
- declared, declaringClass, kotlinTypeRefiner
872
+ declared, declaringClass, kotlinTypeRefiner, languageVersionSettings
872
873
)
873
874
if (invisibleOverriddenDescriptor != null ) {
874
875
reportError.cannotOverrideInvisibleMember(declared, invisibleOverriddenDescriptor)
@@ -953,7 +954,8 @@ class OverrideResolver(
953
954
private fun findInvisibleOverriddenDescriptor (
954
955
declared : CallableMemberDescriptor ,
955
956
declaringClass : ClassDescriptor ,
956
- kotlinTypeRefiner : KotlinTypeRefiner
957
+ kotlinTypeRefiner : KotlinTypeRefiner ,
958
+ languageVersionSettings : LanguageVersionSettings
957
959
): CallableMemberDescriptor ? {
958
960
@OptIn(TypeRefinement ::class )
959
961
for (supertype in kotlinTypeRefiner.refineSupertypes(declaringClass)) {
@@ -962,7 +964,7 @@ class OverrideResolver(
962
964
all.addAll(supertype.memberScope.getContributedVariables(declared.name, NoLookupLocation .WHEN_CHECK_OVERRIDES ))
963
965
for (fromSuper in all) {
964
966
if (OverridingUtil .DEFAULT .isOverridableBy(fromSuper, declared, null ).result == OVERRIDABLE ) {
965
- if (OverridingUtil .isVisibleForOverride(declared, fromSuper)) {
967
+ if (OverridingUtil .isVisibleForOverride(declared, fromSuper, languageVersionSettings.useSpecialRulesForPrivateSealedConstructors )) {
966
968
throw IllegalStateException (
967
969
" Descriptor " + fromSuper + " is overridable by " + declared +
968
970
" and visible but does not appear in its getOverriddenDescriptors()"
0 commit comments