diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt index ec62dfa1ce6..1fb60f89f84 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirStandardOverrideChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.scopes.impl +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor @@ -109,6 +110,8 @@ class FirStandardOverrideChecker(session: FirSession) : FirAbstractOverrideCheck } override fun isOverriddenFunction(overrideCandidate: FirSimpleFunction, baseDeclaration: FirSimpleFunction): Boolean { + if (Visibilities.isPrivate(baseDeclaration.visibility)) return false + if (overrideCandidate.valueParameters.size != baseDeclaration.valueParameters.size) return false val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false @@ -124,6 +127,8 @@ class FirStandardOverrideChecker(session: FirSession) : FirAbstractOverrideCheck overrideCandidate: FirCallableMemberDeclaration<*>, baseDeclaration: FirProperty ): Boolean { + if (Visibilities.isPrivate(baseDeclaration.visibility)) return false + if (overrideCandidate !is FirProperty) return false val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false return isEqualReceiverTypes(overrideCandidate.receiverTypeRef, baseDeclaration.receiverTypeRef, substitutor) diff --git a/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.kt b/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.kt index ed15b56c733..b1c9296ec36 100644 --- a/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.kt +++ b/compiler/testData/asJava/lightClasses/ideRegression/OverridingProtected.kt @@ -10,4 +10,5 @@ class C : A() { } } -// LAZINESS:NoLaziness \ No newline at end of file +// LAZINESS:NoLaziness +// FIR_COMPARISON \ No newline at end of file diff --git a/compiler/testData/codegen/box/properties/privatePropertyInConstructor.kt b/compiler/testData/codegen/box/properties/privatePropertyInConstructor.kt index 9a9e186c8de..dccd29484ce 100644 --- a/compiler/testData/codegen/box/properties/privatePropertyInConstructor.kt +++ b/compiler/testData/codegen/box/properties/privatePropertyInConstructor.kt @@ -1,10 +1,11 @@ -class A( - private val x: String, - private var y: Double +open class A( + private val x: String, + private var y: Double ) { fun foo() { val r = { if (x != "abc") throw AssertionError("$x") + if (y < 0.0) throw AssertionError("$y < 0.0") y = 0.0 if (y != 0.0) throw AssertionError("$y") } @@ -12,7 +13,14 @@ class A( } } +class B( + val x: String, + y: Double +) : A("abc", y) + fun box(): String { A("abc", 3.14).foo() - return "OK" + val b = B("OK", 0.42) + b.foo() + return b.x } diff --git a/compiler/testData/diagnostics/tests/override/AllPrivateFromSuperTypes.fir.kt b/compiler/testData/diagnostics/tests/override/AllPrivateFromSuperTypes.fir.kt index 1d3a12557f7..a4844798bb0 100644 --- a/compiler/testData/diagnostics/tests/override/AllPrivateFromSuperTypes.fir.kt +++ b/compiler/testData/diagnostics/tests/override/AllPrivateFromSuperTypes.fir.kt @@ -10,5 +10,5 @@ open class C { } class Subject : C(), A { - val c = a + val c = a }