Code cleanup: get rid of FirPosition

This commit is contained in:
Mikhail Glukhikh
2019-10-22 16:05:42 +03:00
parent 374c3b4561
commit bb60a8f334
16 changed files with 21 additions and 56 deletions
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.resolve
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.service
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -16,8 +15,8 @@ import org.jetbrains.kotlin.fir.types.FirUserTypeRef
interface FirTypeResolver {
fun resolveType(typeRef: FirTypeRef, scope: FirScope, position: FirPosition): ConeKotlinType
fun resolveToSymbol(typeRef: FirTypeRef, scope: FirScope, position: FirPosition): FirClassifierSymbol<*>?
fun resolveType(typeRef: FirTypeRef, scope: FirScope): ConeKotlinType
fun resolveToSymbol(typeRef: FirTypeRef, scope: FirScope): FirClassifierSymbol<*>?
companion object {
fun getInstance(session: FirSession): FirTypeResolver = session.service()
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.impl.FirAbstractImportingScope
@@ -132,7 +131,7 @@ class MemberScopeTowerLevel(
this.processFunctionsByName(name, symbol.cast())
}
TowerScopeLevel.Token.Objects -> processMembers(processor, explicitExtensionReceiver) { symbol ->
this.processClassifiersByName(name, FirPosition.OTHER, symbol.cast())
this.processClassifiersByName(name, symbol.cast())
}
}
}
@@ -198,7 +197,7 @@ class ScopeTowerLevel(
ProcessorAction.NEXT
}
}
TowerScopeLevel.Token.Objects -> scope.processClassifiersByName(name, FirPosition.OTHER) {
TowerScopeLevel.Token.Objects -> scope.processClassifiersByName(name) {
processor.consumeCandidate(
it as T, dispatchReceiverValue = null,
implicitExtensionReceiverValue = null
@@ -246,7 +245,7 @@ class QualifiedReceiverTowerLevel(
}
return when (token) {
TowerScopeLevel.Token.Objects -> scope.processClassifiersByName(name, FirPosition.OTHER) {
TowerScopeLevel.Token.Objects -> scope.processClassifiersByName(name) {
@Suppress("UNCHECKED_CAST")
processor.consumeCandidate(it as T, null, null)
}
@@ -307,7 +306,7 @@ private fun FirScope.processFunctionsAndConstructorsByName(
private fun FirScope.getFirstClassifierOrNull(name: Name): FirClassifierSymbol<*>? {
var result: FirClassifierSymbol<*>? = null
processClassifiersByName(name, FirPosition.OTHER) {
processClassifiersByName(name) {
result = it
ProcessorAction.STOP
}
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
@@ -39,8 +38,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
override fun resolveToSymbol(
typeRef: FirTypeRef,
scope: FirScope,
position: FirPosition
scope: FirScope
): FirClassifierSymbol<*>? {
return when (typeRef) {
is FirResolvedTypeRef -> typeRef.coneTypeSafe<ConeLookupTagBasedType>()?.lookupTag?.let(symbolProvider::getSymbolByLookupTag)
@@ -49,7 +47,7 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
val qualifierResolver = FirQualifierResolver.getInstance(session)
var resolvedSymbol: FirClassifierSymbol<*>? = null
scope.processClassifiersByName(typeRef.qualifier.first().name, position) { symbol ->
scope.processClassifiersByName(typeRef.qualifier.first().name) { symbol ->
resolvedSymbol = when (symbol) {
is FirClassLikeSymbol<*> -> {
if (typeRef.qualifier.size == 1) {
@@ -97,13 +95,12 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
override fun resolveType(
typeRef: FirTypeRef,
scope: FirScope,
position: FirPosition
scope: FirScope
): ConeKotlinType {
return when (typeRef) {
is FirResolvedTypeRef -> typeRef.type
is FirUserTypeRef -> {
resolveUserType(typeRef, resolveToSymbol(typeRef, scope, position), scope)
resolveUserType(typeRef, resolveToSymbol(typeRef, scope), scope)
}
is FirErrorTypeRef -> {
ConeKotlinErrorType(typeRef.reason)
@@ -112,10 +109,10 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver {
createFunctionalType(typeRef)
}
is FirImplicitBuiltinTypeRef -> {
resolveToSymbol(typeRef, scope, position)!!.constructType(emptyList(), isNullable = false)
resolveToSymbol(typeRef, scope)!!.constructType(emptyList(), isNullable = false)
}
is FirDelegatedTypeRef -> {
resolveType(typeRef.typeRef, scope, position)
resolveType(typeRef.typeRef, scope)
}
is FirDynamicTypeRef -> {
ConeKotlinErrorType("Not supported: ${typeRef::class.simpleName}")
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirResolvedFunctionTypeRefImpl
@@ -18,13 +17,12 @@ import org.jetbrains.kotlin.fir.visitors.compose
class FirSpecificTypeResolverTransformer(
private val towerScope: FirScope,
private val position: FirPosition,
override val session: FirSession
) : FirAbstractTreeTransformer(phase = FirResolvePhase.SUPER_TYPES) {
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
val typeResolver = FirTypeResolver.getInstance(session)
typeRef.transformChildren(FirSpecificTypeResolverTransformer(towerScope, FirPosition.OTHER, session), null)
return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope, position))
typeRef.transformChildren(FirSpecificTypeResolverTransformer(towerScope, session), null)
return transformType(typeRef, typeResolver.resolveType(typeRef, towerScope))
}
override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
@@ -32,7 +30,7 @@ class FirSpecificTypeResolverTransformer(
functionTypeRef.transformChildren(this, data)
return FirResolvedFunctionTypeRefImpl(
functionTypeRef.psi,
typeResolver.resolveType(functionTypeRef, towerScope, position),
typeResolver.resolveType(functionTypeRef, towerScope),
functionTypeRef.isMarkedNullable,
functionTypeRef.receiverTypeRef,
functionTypeRef.returnTypeRef
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
@@ -113,7 +112,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe
regularClass.addTypeParametersScope()
val transformer = FirSpecificTypeResolverTransformer(towerScope, FirPosition.SUPER_TYPE_OR_EXPANSION, session)
val transformer = FirSpecificTypeResolverTransformer(towerScope, session)
val resolvedTypesRefs = regularClass.superTypeRefs.map {
transformer.transformTypeRef(it, data).single
}
@@ -144,7 +143,7 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe
return withScopeCleanup {
typeAlias.addTypeParametersScope()
val transformer = FirSpecificTypeResolverTransformer(towerScope, FirPosition.SUPER_TYPE_OR_EXPANSION, session)
val transformer = FirSpecificTypeResolverTransformer(towerScope, session)
val resolvedTypesRef = transformer.transformTypeRef(typeAlias.expandedTypeRef, data).single
val resultingTypeRef = resolveLoops(typeAlias, classId, listOf(resolvedTypesRef)).firstOrNull()
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
import org.jetbrains.kotlin.fir.types.*
@@ -78,7 +77,7 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
}
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
return FirSpecificTypeResolverTransformer(towerScope, FirPosition.OTHER, session).transformTypeRef(typeRef, data)
return FirSpecificTypeResolverTransformer(towerScope, session).transformTypeRef(typeRef, data)
}
override fun transformValueParameter(valueParameter: FirValueParameter, data: Nothing?): CompositeTransformResult<FirStatement> {
@@ -14,7 +14,6 @@ abstract class FirTypeParameterScope : FirScope() {
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
val matchedTypeParameters = typeParameters[name] ?: return ProcessorAction.NEXT
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -39,9 +38,8 @@ abstract class AbstractFirUseSiteScope(
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
return declaredMemberScope.processClassifiersByName(name, position, processor)
return declaredMemberScope.processClassifiersByName(name, processor)
}
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -26,7 +25,6 @@ abstract class FirAbstractSimpleImportingScope(
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
val imports = simpleImports[name] ?: return ProcessorAction.NONE
@@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -28,7 +27,6 @@ abstract class FirAbstractStarImportingScope(
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
if (starImports.isEmpty() || name in absentClassifierNames) {
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.resolve.memberScopeProvider
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
@@ -113,7 +112,6 @@ class FirClassDeclaredMemberScope(klass: FirRegularClass) : FirScope() {
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction = nestedClassifierScope.processClassifiersByName(name, position, processor)
): ProcessorAction = nestedClassifierScope.processClassifiersByName(name, processor)
}
@@ -5,9 +5,7 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.FirTypeParameterScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.NEXT
import org.jetbrains.kotlin.fir.scopes.ProcessorAction.STOP
@@ -22,13 +20,11 @@ class FirCompositeScope(
) : FirScope() {
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
val scopes = if (reversedPriority) scopes.asReversed() else scopes
for (scope in scopes) {
if (!position.allowTypeParameters && scope is FirTypeParameterScope) continue
if (!scope.processClassifiersByName(name, position, processor)) {
if (!scope.processClassifiersByName(name, processor)) {
return STOP
}
}
@@ -6,9 +6,7 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol
@@ -24,7 +22,6 @@ class FirLazyNestedClassifierScope(
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
val child = classId.createNestedClassId(name)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
@@ -27,7 +26,6 @@ class FirNestedClassifierScope(val klass: FirRegularClass) : FirScope() {
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
val matchedClass = classIndex[name] ?: return ProcessorAction.NONE
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.scopes.FirPosition
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -28,7 +27,6 @@ class FirSelfImportingScope(val fqName: FqName, val session: FirSession) : FirSc
override fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction {
if (name.asString().isEmpty()) return ProcessorAction.NONE
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.name.Name
abstract class FirScope {
open fun processClassifiersByName(
name: Name,
position: FirPosition,
processor: (FirClassifierSymbol<*>) -> ProcessorAction
): ProcessorAction = NEXT
@@ -30,11 +29,6 @@ abstract class FirScope {
): ProcessorAction = NEXT
}
enum class FirPosition(val allowTypeParameters: Boolean = true) {
SUPER_TYPE_OR_EXPANSION(allowTypeParameters = false),
OTHER
}
enum class ProcessorAction {
STOP,
NEXT,