[FIR] Get rid of processors in FirScope

This commit is contained in:
simon.ogorodnik
2020-01-09 18:47:47 +03:00
committed by Mikhail Glukhikh
parent 224b2acdcc
commit a3ab763f0b
38 changed files with 311 additions and 468 deletions
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.java.enhancement.*
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.jvm.computeJvmDescriptor
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.*
@@ -52,7 +51,7 @@ class JavaClassEnhancementScope(
private val enhancements = mutableMapOf<FirCallableSymbol<*>, FirCallableSymbol<*>>()
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> Unit) {
useSiteMemberScope.processPropertiesByName(name) process@{ original ->
val field = enhancements.getOrPut(original) { enhance(original, name) }
@@ -62,7 +61,7 @@ class JavaClassEnhancementScope(
return super.processPropertiesByName(name, processor)
}
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> ProcessorAction): ProcessorAction {
override fun processFunctionsByName(name: Name, processor: (FirFunctionSymbol<*>) -> Unit) {
useSiteMemberScope.processFunctionsByName(name) process@{ original ->
val function = enhancements.getOrPut(original) { enhance(original, name) }
@@ -72,8 +71,8 @@ class JavaClassEnhancementScope(
return super.processFunctionsByName(name, processor)
}
override fun processClassifiersByName(name: Name, processor: (FirClassifierSymbol<*>) -> ProcessorAction): ProcessorAction {
return useSiteMemberScope.processClassifiersByName(name, processor)
override fun processClassifiersByName(name: Name, processor: (FirClassifierSymbol<*>) -> Unit) {
useSiteMemberScope.processClassifiersByName(name, processor)
}
private fun enhance(
@@ -16,9 +16,6 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
import org.jetbrains.kotlin.fir.resolve.calls.FirSyntheticPropertiesScope
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
import org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.impl.FirAccessorSymbol
@@ -45,13 +42,9 @@ class JavaClassUseSiteMemberScope(
val overrideCandidates = mutableSetOf<FirFunctionSymbol<*>>()
declaredMemberScope.processFunctionsByName(name) {
overrideCandidates += it
NEXT
}
superTypesScope.processFunctionsByName(name) {
it.getOverridden(overrideCandidates)
NEXT
}
}
@@ -90,15 +83,15 @@ class JavaClassUseSiteMemberScope(
propertyName: Name,
getterNames: List<Name>,
setterName: Name?,
processor: (FirCallableSymbol<*>) -> ProcessorAction
): ProcessorAction {
processor: (FirCallableSymbol<*>) -> Unit
): Unit {
val overrideCandidates = mutableSetOf<FirCallableSymbol<*>>()
val klass = symbol.fir
if (!declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
overrideCandidates += variableSymbol
processor(variableSymbol)
}
) return STOP
declaredMemberScope.processPropertiesByName(propertyName) { variableSymbol ->
overrideCandidates += variableSymbol
processor(variableSymbol)
}
if (klass is FirJavaClass) {
for (getterName in getterNames) {
declaredMemberScope.processFunctionsByName(getterName) { functionSymbol ->
@@ -109,12 +102,11 @@ class JavaClassUseSiteMemberScope(
// NB: accessor should not be processed directly unless we find matching property symbol in supertype
overrideCandidates += accessorSymbol
}
NEXT
}
}
}
return superTypesScope.processPropertiesByName(propertyName) {
superTypesScope.processPropertiesByName(propertyName) {
val firCallableMember = it.fir as? FirCallableMemberDeclaration<*>
if (firCallableMember?.isStatic == true) {
processor(it)
@@ -122,7 +114,6 @@ class JavaClassUseSiteMemberScope(
when (val overriddenBy = it.getOverridden(overrideCandidates)) {
null -> processor(it)
is FirAccessorSymbol -> processor(overriddenBy)
else -> NEXT
}
}
}
@@ -153,7 +144,7 @@ class JavaClassUseSiteMemberScope(
)
}
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> ProcessorAction): ProcessorAction {
override fun processPropertiesByName(name: Name, processor: (FirCallableSymbol<*>) -> Unit) {
// Do not generate accessors at all?
if (name.isSpecial) {
return processAccessorFunctionsAndPropertiesByName(name, emptyList(), null, processor)