[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:
committed by
Space Team
parent
f36ed93472
commit
29a1acffa3
+9
-3
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user