[FIR] Refactoring: Introduce base implementations for delegating scopes
- The implementations of some FIR scopes contain a significant amount of delegation to some original scope. This pollutes the implementation of such scopes and makes them harder to read. `FirDelegatingContainingNamesAwareScope` and `FirDelegatingTypeScope` can be used as base classes which delegate by default.
This commit is contained in:
committed by
Space Team
parent
3c73331821
commit
f64cc184f4
+3
-19
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.java.symbols.FirJavaOverriddenSyntheticPropertySymbol
|
||||
import org.jetbrains.kotlin.fir.nullableModuleData
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
@@ -21,23 +20,20 @@ import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.declarations.resolvePhase
|
||||
import org.jetbrains.kotlin.fir.scopes.FirDelegatingTypeScope
|
||||
|
||||
class JavaAnnotationSyntheticPropertiesScope(
|
||||
private val session: FirSession,
|
||||
owner: FirRegularClassSymbol,
|
||||
private val delegateScope: JavaClassMembersEnhancementScope
|
||||
) : FirTypeScope() {
|
||||
) : FirDelegatingTypeScope(delegateScope) {
|
||||
private val classId: ClassId = owner.classId
|
||||
private val names: Set<Name> = owner.fir.declarations.mapNotNullTo(mutableSetOf()) { (it as? FirSimpleFunction)?.name }
|
||||
private val syntheticPropertiesCache = mutableMapOf<FirNamedFunctionSymbol, FirVariableSymbol<*>>()
|
||||
|
||||
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
|
||||
delegateScope.processDeclaredConstructors(processor)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
if (name in names) return
|
||||
delegateScope.processFunctionsByName(name, processor)
|
||||
super.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
override fun processPropertiesByName(name: Name, processor: (FirVariableSymbol<*>) -> Unit) {
|
||||
@@ -63,10 +59,6 @@ class JavaAnnotationSyntheticPropertiesScope(
|
||||
}
|
||||
}
|
||||
|
||||
override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) {
|
||||
delegateScope.processClassifiersByNameWithSubstitution(name, processor)
|
||||
}
|
||||
|
||||
override fun processDirectOverriddenFunctionsWithBaseScope(
|
||||
functionSymbol: FirNamedFunctionSymbol,
|
||||
processor: (FirNamedFunctionSymbol, FirTypeScope) -> ProcessorAction
|
||||
@@ -81,14 +73,6 @@ class JavaAnnotationSyntheticPropertiesScope(
|
||||
return ProcessorAction.NONE
|
||||
}
|
||||
|
||||
override fun getCallableNames(): Set<Name> {
|
||||
return delegateScope.getCallableNames()
|
||||
}
|
||||
|
||||
override fun getClassifierNames(): Set<Name> {
|
||||
return delegateScope.getClassifierNames()
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "Java annotation synthetic properties scope for $classId"
|
||||
}
|
||||
|
||||
+2
-22
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.initialSignatureAttr
|
||||
import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.scopes.FirDelegatingTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirTypeScope
|
||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenMembers
|
||||
@@ -23,7 +23,7 @@ class JavaClassMembersEnhancementScope(
|
||||
session: FirSession,
|
||||
private val owner: FirRegularClassSymbol,
|
||||
private val useSiteMemberScope: JavaClassUseSiteMemberScope,
|
||||
) : FirTypeScope() {
|
||||
) : FirDelegatingTypeScope(useSiteMemberScope) {
|
||||
private val enhancedToOriginalFunctions = mutableMapOf<FirNamedFunctionSymbol, FirNamedFunctionSymbol>()
|
||||
private val enhancedToOriginalProperties = mutableMapOf<FirPropertySymbol, FirPropertySymbol>()
|
||||
|
||||
@@ -40,8 +40,6 @@ class JavaClassMembersEnhancementScope(
|
||||
|
||||
processor(enhancedPropertySymbol)
|
||||
}
|
||||
|
||||
return super.processPropertiesByName(name, processor)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
@@ -55,8 +53,6 @@ class JavaClassMembersEnhancementScope(
|
||||
processor(enhancedFunctionSymbol)
|
||||
}
|
||||
}
|
||||
|
||||
return super.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
private fun FirCallableDeclaration.overriddenMembers(): List<FirCallableDeclaration> {
|
||||
@@ -67,10 +63,6 @@ class JavaClassMembersEnhancementScope(
|
||||
}.map { it.fir }
|
||||
}
|
||||
|
||||
override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) {
|
||||
useSiteMemberScope.processClassifiersByNameWithSubstitution(name, processor)
|
||||
}
|
||||
|
||||
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
|
||||
useSiteMemberScope.processDeclaredConstructors process@{ original ->
|
||||
val function = signatureEnhancement.enhancedFunction(original, name = null)
|
||||
@@ -109,18 +101,6 @@ class JavaClassMembersEnhancementScope(
|
||||
return useSiteMemberScope.processDirectOverriddenCallables(original, processor)
|
||||
}
|
||||
|
||||
override fun getCallableNames(): Set<Name> {
|
||||
return useSiteMemberScope.getCallableNames()
|
||||
}
|
||||
|
||||
override fun getClassifierNames(): Set<Name> {
|
||||
return useSiteMemberScope.getClassifierNames()
|
||||
}
|
||||
|
||||
override fun mayContainName(name: Name): Boolean {
|
||||
return useSiteMemberScope.mayContainName(name)
|
||||
}
|
||||
|
||||
override fun toString(): String {
|
||||
return "Java enhancement scope for ${owner.classId}"
|
||||
}
|
||||
|
||||
+2
-24
@@ -7,8 +7,7 @@ package org.jetbrains.kotlin.fir.java.scopes
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.java.enhancement.FirSignatureEnhancement
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirDelegatingContainingNamesAwareScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -16,7 +15,7 @@ class JavaClassStaticEnhancementScope(
|
||||
session: FirSession,
|
||||
owner: FirRegularClassSymbol,
|
||||
private val useSiteStaticScope: JavaClassStaticUseSiteScope,
|
||||
) : FirContainingNamesAwareScope() {
|
||||
) : FirDelegatingContainingNamesAwareScope(useSiteStaticScope) {
|
||||
private val signatureEnhancement = FirSignatureEnhancement(owner.fir, session) {
|
||||
emptyList()
|
||||
}
|
||||
@@ -25,8 +24,6 @@ class JavaClassStaticEnhancementScope(
|
||||
useSiteStaticScope.processPropertiesByName(name) process@{ original ->
|
||||
processor(signatureEnhancement.enhancedProperty(original, name))
|
||||
}
|
||||
|
||||
return super.processPropertiesByName(name, processor)
|
||||
}
|
||||
|
||||
override fun processFunctionsByName(name: Name, processor: (FirNamedFunctionSymbol) -> Unit) {
|
||||
@@ -36,12 +33,6 @@ class JavaClassStaticEnhancementScope(
|
||||
processor(enhancedFunction)
|
||||
}
|
||||
}
|
||||
|
||||
return super.processFunctionsByName(name, processor)
|
||||
}
|
||||
|
||||
override fun processClassifiersByNameWithSubstitution(name: Name, processor: (FirClassifierSymbol<*>, ConeSubstitutor) -> Unit) {
|
||||
useSiteStaticScope.processClassifiersByNameWithSubstitution(name, processor)
|
||||
}
|
||||
|
||||
override fun processDeclaredConstructors(processor: (FirConstructorSymbol) -> Unit) {
|
||||
@@ -50,17 +41,4 @@ class JavaClassStaticEnhancementScope(
|
||||
processor(function as FirConstructorSymbol)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getCallableNames(): Set<Name> {
|
||||
return useSiteStaticScope.getCallableNames()
|
||||
}
|
||||
|
||||
override fun getClassifierNames(): Set<Name> {
|
||||
return useSiteStaticScope.getClassifierNames()
|
||||
}
|
||||
|
||||
|
||||
override fun mayContainName(name: Name): Boolean {
|
||||
return useSiteStaticScope.mayContainName(name)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user