[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.resolve.providers.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.processDirectlyOverriddenFunctions
|
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.scopes.unsubstitutedScope
|
||||||
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
|
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.Fir2IrClassSymbol
|
||||||
@@ -313,6 +314,30 @@ internal fun FirSimpleFunction.generateOverriddenFunctionSymbols(
|
|||||||
return overriddenSet.toList()
|
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(
|
internal fun IrClass.findMatchingOverriddenSymbolsFromSupertypes(
|
||||||
irBuiltIns: IrBuiltIns,
|
irBuiltIns: IrBuiltIns,
|
||||||
target: IrDeclaration,
|
target: IrDeclaration,
|
||||||
|
|||||||
+3
-19
@@ -264,25 +264,9 @@ internal class ClassMemberGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (containingClass != null) {
|
if (containingClass != null) {
|
||||||
val scope = containingClass.unsubstitutedScope(session, scopeSession)
|
this.overriddenSymbols = property.generateOverriddenAccessorSymbols(
|
||||||
scope.processPropertiesByName(property.name) {}
|
containingClass, isGetter, session, scopeSession, declarationStorage
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user