[FIR2IR] Don't create setter symbol for f/o if the original setter is invisible

```
abstract class Base
    var x: Int
        private set
}

class Derived : Base()
```

Without this change, FIR2IR created a symbol for setter of f/o Derived.x,
  but IR f/o generator doesn't create a setter in f/o, as this setter is
  invisible in Derived

^KT-64742
This commit is contained in:
Dmitriy Novozhilov
2024-01-11 15:38:35 +02:00
committed by Space Team
parent f36ed93472
commit 29a1acffa3
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
import org.jetbrains.kotlin.fir.analysis.checkers.isVisibleInClass
import org.jetbrains.kotlin.fir.backend.generators.isExternalParent
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
@@ -626,10 +627,15 @@ class Fir2IrDeclarationStorage(
val getterSymbol = IrFunctionFakeOverrideSymbol(originalSymbols.getterSymbol, containingClassSymbol, getterSignature)
val setterSymbol = runIf(property.isVar) {
val setterSignature = runIf(signature != null) {
signatureComposer.composeAccessorSignature(property, isSetter = true, fakeOverrideOwnerLookupTag)
val setterIsVisible = property.setter?.let { setter ->
fakeOverrideOwnerLookupTag?.toFirRegularClass(session)?.let { containingClass -> setter.isVisibleInClass(containingClass) }
} ?: true
runIf(setterIsVisible) {
val setterSignature = runIf(signature != null) {
signatureComposer.composeAccessorSignature(property, isSetter = true, fakeOverrideOwnerLookupTag)
}
IrFunctionFakeOverrideSymbol(originalSymbols.setterSymbol!!, containingClassSymbol, setterSignature)
}
IrFunctionFakeOverrideSymbol(originalSymbols.setterSymbol!!, containingClassSymbol, setterSignature)
}
return PropertySymbols(propertySymbol, getterSymbol, setterSymbol, backingFieldSymbol = null)
}