[FIR] Get rid of FirTypedDeclaration

`FirTypedDeclaration` has only one inheritor (`FirCallableDeclaration`),
  so there is no much sense to keep this class
This commit is contained in:
Dmitriy Novozhilov
2022-03-29 12:26:42 +04:00
committed by teamcity
parent ae0ce57b2c
commit 5a3b397552
24 changed files with 35 additions and 124 deletions
@@ -5,14 +5,14 @@
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
abstract class ReturnTypeCalculator {
abstract fun tryCalculateReturnTypeOrNull(declaration: FirTypedDeclaration): FirResolvedTypeRef?
abstract fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef?
fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef {
fun tryCalculateReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef {
return tryCalculateReturnTypeOrNull(declaration)!!
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.render
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
object ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator() {
override fun tryCalculateReturnTypeOrNull(declaration: FirTypedDeclaration): FirResolvedTypeRef? {
override fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
val returnTypeRef = declaration.returnTypeRef
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
if (declaration.origin.fromSupertypes) {
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.scopes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationAttributes
import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataKey
import org.jetbrains.kotlin.fir.declarations.FirDeclarationDataRegistry
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
@@ -16,16 +16,16 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
abstract class FakeOverrideTypeCalculator {
abstract fun computeReturnType(declaration: FirTypedDeclaration): FirTypeRef?
abstract fun computeReturnType(declaration: FirCallableDeclaration): FirTypeRef?
object DoNothing : FakeOverrideTypeCalculator() {
override fun computeReturnType(declaration: FirTypedDeclaration): FirTypeRef {
override fun computeReturnType(declaration: FirCallableDeclaration): FirTypeRef {
return declaration.returnTypeRef
}
}
object Forced : FakeOverrideTypeCalculator() {
override fun computeReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef? {
override fun computeReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
val fakeOverrideSubstitution = declaration.attributes.fakeOverrideSubstitution
?: return declaration.returnTypeRef as? FirResolvedTypeRef
synchronized(fakeOverrideSubstitution) {
@@ -33,7 +33,7 @@ abstract class FakeOverrideTypeCalculator {
return declaration.returnTypeRef as FirResolvedTypeRef
}
val (substitutor, baseSymbol) = fakeOverrideSubstitution
val baseDeclaration = baseSymbol.fir as FirTypedDeclaration
val baseDeclaration = baseSymbol.fir as FirCallableDeclaration
val baseReturnType = computeReturnType(baseDeclaration)?.type ?: return null
declaration.attributes.fakeOverrideSubstitution = null
val coneType = substitutor.substituteOrSelf(baseReturnType)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.scopes.impl
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.isIntersectionOverride
import org.jetbrains.kotlin.fir.isSubstitutionOverride
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
@@ -74,8 +73,7 @@ class FirScopeWithFakeOverrideTypeCalculator(
return delegate.getClassifierNames()
}
private fun updateReturnType(declaration: FirTypedDeclaration) {
if (declaration !is FirCallableDeclaration) return
private fun updateReturnType(declaration: FirCallableDeclaration) {
if (declaration.isSubstitutionOverride || declaration.isIntersectionOverride) {
fakeOverrideTypeCalculator.computeReturnType(declaration)
}
@@ -563,8 +563,8 @@ fun ConeKotlinType.isSubtypeOf(superType: ConeKotlinType, session: FirSession):
this, superType,
)
fun FirTypedDeclaration.isSubtypeOf(
other: FirTypedDeclaration,
fun FirCallableDeclaration.isSubtypeOf(
other: FirCallableDeclaration,
typeCheckerContext: TypeCheckerState
): Boolean {
return AbstractTypeChecker.isSubtypeOf(