[FIR2IR] Extract generateOverriddenAccessorSymbols
This commit is contained in:
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.processDirectlyOverriddenFunctions
|
||||
import org.jetbrains.kotlin.fir.scopes.processDirectlyOverriddenProperties
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
||||
@@ -313,6 +314,30 @@ internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(
|
||||
return overriddenSet.toList()
|
||||
}
|
||||
|
||||
internal fun FirProperty.generateOverriddenAccessorSymbols(
|
||||
containingClass: FirClass<*>,
|
||||
isGetter: Boolean,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession,
|
||||
declarationStorage: Fir2IrDeclarationStorage
|
||||
): List<IrSimpleFunctionSymbol> {
|
||||
val scope = containingClass.unsubstitutedScope(session, scopeSession)
|
||||
scope.processPropertiesByName(name) {}
|
||||
val overriddenSet = mutableSetOf<IrSimpleFunctionSymbol>()
|
||||
scope.processDirectlyOverriddenProperties(symbol) {
|
||||
if (it.fir.visibility == Visibilities.PRIVATE) {
|
||||
return@processDirectlyOverriddenProperties ProcessorAction.NEXT
|
||||
}
|
||||
val overriddenProperty = declarationStorage.getIrPropertyOrFieldSymbol(it.unwrapSubstitutionOverrides()) as IrPropertySymbol
|
||||
val overriddenAccessor = if (isGetter) overriddenProperty.owner.getter?.symbol else overriddenProperty.owner.setter?.symbol
|
||||
if (overriddenAccessor != null) {
|
||||
overriddenSet += overriddenAccessor
|
||||
}
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
return overriddenSet.toList()
|
||||
}
|
||||
|
||||
internal fun IrClass.findMatchingOverriddenSymbolsFromSupertypes(
|
||||
irBuiltIns: IrBuiltIns,
|
||||
target: IrDeclaration,
|
||||
|
||||
+3
-19
@@ -264,25 +264,9 @@ internal class ClassMemberGenerator(
|
||||
}
|
||||
}
|
||||
if (containingClass != null) {
|
||||
val scope = containingClass.unsubstitutedScope(session, scopeSession)
|
||||
scope.processPropertiesByName(property.name) {}
|
||||
val overriddenSet = mutableSetOf<IrSimpleFunctionSymbol>()
|
||||
scope.processDirectlyOverriddenProperties(property.symbol) {
|
||||
if (it.fir.visibility == Visibilities.PRIVATE) {
|
||||
return@processDirectlyOverriddenProperties ProcessorAction.NEXT
|
||||
}
|
||||
val overridden = declarationStorage.getIrPropertyOrFieldSymbol(it.unwrapSubstitutionOverrides())
|
||||
if (overridden is IrPropertySymbol) {
|
||||
val accessorSymbol =
|
||||
if (isGetter) overridden.owner.getter?.symbol
|
||||
else overridden.owner.setter?.symbol
|
||||
if (accessorSymbol != null) {
|
||||
overriddenSet += accessorSymbol
|
||||
}
|
||||
}
|
||||
ProcessorAction.NEXT
|
||||
}
|
||||
this.overriddenSymbols = overriddenSet.toList()
|
||||
this.overriddenSymbols = property.generateOverriddenAccessorSymbols(
|
||||
containingClass, isGetter, session, scopeSession, declarationStorage
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user