[FIR] Use proper ReturnTypeCalculator inside FakeOverrideTypeCalculator
This commit is contained in:
committed by
teamcity
parent
6e2402620f
commit
b79f5a445f
+3
@@ -6,10 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.transformers
|
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
|
|
||||||
abstract class ReturnTypeCalculator {
|
abstract class ReturnTypeCalculator {
|
||||||
|
abstract val fakeOverrideTypeCalculator: FakeOverrideTypeCalculator
|
||||||
|
|
||||||
abstract fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef?
|
abstract fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef?
|
||||||
|
|
||||||
fun tryCalculateReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef {
|
fun tryCalculateReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef {
|
||||||
|
|||||||
+3
@@ -14,6 +14,9 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
|||||||
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||||
|
|
||||||
object ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator() {
|
object ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator() {
|
||||||
|
override val fakeOverrideTypeCalculator: FakeOverrideTypeCalculator
|
||||||
|
get() = FakeOverrideTypeCalculator.Forced
|
||||||
|
|
||||||
override fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
|
override fun tryCalculateReturnTypeOrNull(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
|
||||||
val returnTypeRef = declaration.returnTypeRef
|
val returnTypeRef = declaration.returnTypeRef
|
||||||
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
||||||
|
|||||||
+11
-2
@@ -24,10 +24,10 @@ abstract class FakeOverrideTypeCalculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object Forced : FakeOverrideTypeCalculator() {
|
abstract class AbstractFakeOverrideTypeCalculator : FakeOverrideTypeCalculator() {
|
||||||
override fun computeReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
|
override fun computeReturnType(declaration: FirCallableDeclaration): FirResolvedTypeRef? {
|
||||||
val fakeOverrideSubstitution = declaration.attributes.fakeOverrideSubstitution
|
val fakeOverrideSubstitution = declaration.attributes.fakeOverrideSubstitution
|
||||||
?: return declaration.returnTypeRef as? FirResolvedTypeRef
|
?: return declaration.getResolvedTypeRef()
|
||||||
synchronized(fakeOverrideSubstitution) {
|
synchronized(fakeOverrideSubstitution) {
|
||||||
if (declaration.attributes.fakeOverrideSubstitution == null) {
|
if (declaration.attributes.fakeOverrideSubstitution == null) {
|
||||||
return declaration.returnTypeRef as FirResolvedTypeRef
|
return declaration.returnTypeRef as FirResolvedTypeRef
|
||||||
@@ -42,6 +42,15 @@ abstract class FakeOverrideTypeCalculator {
|
|||||||
return returnType
|
return returnType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected abstract fun FirCallableDeclaration.getResolvedTypeRef(): FirResolvedTypeRef?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
object Forced : AbstractFakeOverrideTypeCalculator() {
|
||||||
|
override fun FirCallableDeclaration.getResolvedTypeRef(): FirResolvedTypeRef? {
|
||||||
|
return returnTypeRef as? FirResolvedTypeRef
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveP
|
|||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.TransformImplicitType
|
import org.jetbrains.kotlin.fir.resolve.transformers.TransformImplicitType
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.contracts.runContractResolveForLocalClass
|
import org.jetbrains.kotlin.fir.resolve.transformers.contracts.runContractResolveForLocalClass
|
||||||
|
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
|
||||||
import org.jetbrains.kotlin.fir.scopes.fakeOverrideSubstitution
|
import org.jetbrains.kotlin.fir.scopes.fakeOverrideSubstitution
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
@@ -205,6 +206,7 @@ private class ReturnTypeCalculatorWithJump(
|
|||||||
outerBodyResolveContext: BodyResolveContext?
|
outerBodyResolveContext: BodyResolveContext?
|
||||||
) -> FirDesignatedBodyResolveTransformerForReturnTypeCalculator = ::FirDesignatedBodyResolveTransformerForReturnTypeCalculator,
|
) -> FirDesignatedBodyResolveTransformerForReturnTypeCalculator = ::FirDesignatedBodyResolveTransformerForReturnTypeCalculator,
|
||||||
) : ReturnTypeCalculator() {
|
) : ReturnTypeCalculator() {
|
||||||
|
override val fakeOverrideTypeCalculator: FakeOverrideTypeCalculator = FakeOverrideTypeCalculatorWithJump()
|
||||||
|
|
||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
var outerBodyResolveContext: BodyResolveContext? = null
|
var outerBodyResolveContext: BodyResolveContext? = null
|
||||||
@@ -307,6 +309,12 @@ private class ReturnTypeCalculatorWithJump(
|
|||||||
}
|
}
|
||||||
return newReturnTypeRef
|
return newReturnTypeRef
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private inner class FakeOverrideTypeCalculatorWithJump : FakeOverrideTypeCalculator.AbstractFakeOverrideTypeCalculator() {
|
||||||
|
override fun FirCallableDeclaration.getResolvedTypeRef(): FirResolvedTypeRef? {
|
||||||
|
return this@ReturnTypeCalculatorWithJump.computeReturnTypeRef(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
|
open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
|
||||||
|
|||||||
Reference in New Issue
Block a user