Extract part of utility FIR transformers into TransformUtils
This commit is contained in:
+5
-72
@@ -696,7 +696,7 @@ open class FirBodyResolveTransformer(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
qualifiedAccess.transformChildren(ReplaceInArguments, replacements.toMap())
|
qualifiedAccess.transformChildren(MapArguments, replacements.toMap())
|
||||||
|
|
||||||
|
|
||||||
if (completionMode == KotlinConstraintSystemCompleter.ConstraintSystemCompletionMode.FULL) {
|
if (completionMode == KotlinConstraintSystemCompleter.ConstraintSystemCompletionMode.FULL) {
|
||||||
@@ -1132,23 +1132,9 @@ private fun inferenceComponents(session: FirSession, jump: ReturnTypeCalculatorW
|
|||||||
|
|
||||||
class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: ScopeSession) : ReturnTypeCalculator {
|
class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: ScopeSession) : ReturnTypeCalculator {
|
||||||
|
|
||||||
|
|
||||||
val storeType = object : FirTransformer<FirTypeRef>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: FirTypeRef): CompositeTransformResult<E> {
|
|
||||||
return element.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformImplicitTypeRef(
|
|
||||||
implicitTypeRef: FirImplicitTypeRef,
|
|
||||||
data: FirTypeRef
|
|
||||||
): CompositeTransformResult<FirTypeRef> {
|
|
||||||
return data.compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun cycleErrorType(declaration: FirTypedDeclaration): FirResolvedTypeRef? {
|
private fun cycleErrorType(declaration: FirTypedDeclaration): FirResolvedTypeRef? {
|
||||||
if (declaration.returnTypeRef is FirComputingImplicitTypeRef) {
|
if (declaration.returnTypeRef is FirComputingImplicitTypeRef) {
|
||||||
declaration.transformReturnTypeRef(storeType, FirErrorTypeRefImpl(session, null, "cycle"))
|
declaration.transformReturnTypeRef(TransformImplicitType, FirErrorTypeRefImpl(session, null, "cycle"))
|
||||||
return declaration.returnTypeRef as FirResolvedTypeRef
|
return declaration.returnTypeRef as FirResolvedTypeRef
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
@@ -1158,7 +1144,7 @@ class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: Sc
|
|||||||
|
|
||||||
if (declaration is FirValueParameter && declaration.returnTypeRef is FirImplicitTypeRef) {
|
if (declaration is FirValueParameter && declaration.returnTypeRef is FirImplicitTypeRef) {
|
||||||
// TODO?
|
// TODO?
|
||||||
declaration.transformReturnTypeRef(storeType, FirErrorTypeRefImpl(session, null, "Unsupported: implicit VP type"))
|
declaration.transformReturnTypeRef(TransformImplicitType, FirErrorTypeRefImpl(session, null, "Unsupported: implicit VP type"))
|
||||||
}
|
}
|
||||||
val returnTypeRef = declaration.returnTypeRef
|
val returnTypeRef = declaration.returnTypeRef
|
||||||
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
|
||||||
@@ -1183,11 +1169,11 @@ class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: Sc
|
|||||||
"I don't know what todo"
|
"I don't know what todo"
|
||||||
)
|
)
|
||||||
|
|
||||||
declaration.transformReturnTypeRef(storeType, FirComputingImplicitTypeRef)
|
declaration.transformReturnTypeRef(TransformImplicitType, FirComputingImplicitTypeRef)
|
||||||
|
|
||||||
val transformer = FirDesignatedBodyResolveTransformer(
|
val transformer = FirDesignatedBodyResolveTransformer(
|
||||||
(listOf(file) + outerClasses.filterNotNull().asReversed() + listOf(declaration)).iterator(),
|
(listOf(file) + outerClasses.filterNotNull().asReversed() + listOf(declaration)).iterator(),
|
||||||
file.session,
|
file.fileSession,
|
||||||
scopeSession
|
scopeSession
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1262,57 +1248,4 @@ interface ReturnTypeCalculator {
|
|||||||
fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef
|
fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef
|
||||||
}
|
}
|
||||||
|
|
||||||
private object StoreNameReference : FirTransformer<FirNamedReference>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: FirNamedReference): CompositeTransformResult<E> {
|
|
||||||
return element.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformNamedReference(
|
|
||||||
namedReference: FirNamedReference,
|
|
||||||
data: FirNamedReference
|
|
||||||
): CompositeTransformResult<FirNamedReference> {
|
|
||||||
return data.compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal object StoreType : FirTransformer<FirTypeRef>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: FirTypeRef): CompositeTransformResult<E> {
|
|
||||||
return element.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformTypeRef(typeRef: FirTypeRef, data: FirTypeRef): CompositeTransformResult<FirTypeRef> {
|
|
||||||
return data.compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal object StoreExplicitReceiver : FirTransformer<FirExpression>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: FirExpression): CompositeTransformResult<E> {
|
|
||||||
return element.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformExpression(expression: FirExpression, data: FirExpression): CompositeTransformResult<FirStatement> {
|
|
||||||
return data.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private object ReplaceInArguments : FirTransformer<Map<FirElement, FirElement>>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: Map<FirElement, FirElement>): CompositeTransformResult<E> {
|
|
||||||
return ((data[element] ?: element) as E).compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformFunctionCall(
|
|
||||||
functionCall: FirFunctionCall,
|
|
||||||
data: Map<FirElement, FirElement>
|
|
||||||
): CompositeTransformResult<FirStatement> {
|
|
||||||
return (functionCall.transformChildren(this, data) as FirStatement).compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformWrappedArgumentExpression(
|
|
||||||
wrappedArgumentExpression: FirWrappedArgumentExpression,
|
|
||||||
data: Map<FirElement, FirElement>
|
|
||||||
): CompositeTransformResult<FirStatement> {
|
|
||||||
return (wrappedArgumentExpression.transformChildren(this, data) as FirStatement).compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-13
@@ -27,19 +27,6 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
|||||||
import org.jetbrains.kotlin.fir.visitors.compose
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
|
|
||||||
object StoreCalleeReference : FirTransformer<FirResolvedCallableReference>() {
|
|
||||||
override fun <E : FirElement> transformElement(element: E, data: FirResolvedCallableReference): CompositeTransformResult<E> {
|
|
||||||
return element.compose()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun transformResolvedCallableReference(
|
|
||||||
resolvedCallableReference: FirResolvedCallableReference,
|
|
||||||
data: FirResolvedCallableReference
|
|
||||||
): CompositeTransformResult<FirNamedReference> {
|
|
||||||
return data.compose()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FirCallCompleterTransformer(
|
class FirCallCompleterTransformer(
|
||||||
val session: FirSession,
|
val session: FirSession,
|
||||||
private val finalSubstitutor: ConeSubstitutor,
|
private val finalSubstitutor: ConeSubstitutor,
|
||||||
|
|||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.fir.resolve.transformers
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirNamedReference
|
||||||
|
import org.jetbrains.kotlin.fir.FirResolvedCallableReference
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||||
|
import org.jetbrains.kotlin.fir.expressions.FirWrappedArgumentExpression
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||||
|
import org.jetbrains.kotlin.fir.visitors.compose
|
||||||
|
|
||||||
|
internal object MapArguments : FirTransformer<Map<FirElement, FirElement>>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: Map<FirElement, FirElement>): CompositeTransformResult<E> {
|
||||||
|
return ((data[element] ?: element) as E).compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformFunctionCall(
|
||||||
|
functionCall: FirFunctionCall,
|
||||||
|
data: Map<FirElement, FirElement>
|
||||||
|
): CompositeTransformResult<FirStatement> {
|
||||||
|
return (functionCall.transformChildren(this, data) as FirStatement).compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformWrappedArgumentExpression(
|
||||||
|
wrappedArgumentExpression: FirWrappedArgumentExpression,
|
||||||
|
data: Map<FirElement, FirElement>
|
||||||
|
): CompositeTransformResult<FirStatement> {
|
||||||
|
return (wrappedArgumentExpression.transformChildren(this, data) as FirStatement).compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal object StoreType : FirTransformer<FirTypeRef>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: FirTypeRef): CompositeTransformResult<E> {
|
||||||
|
return element.compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformTypeRef(typeRef: FirTypeRef, data: FirTypeRef): CompositeTransformResult<FirTypeRef> {
|
||||||
|
return data.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal object TransformImplicitType : FirTransformer<FirTypeRef>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: FirTypeRef): CompositeTransformResult<E> {
|
||||||
|
return element.compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformImplicitTypeRef(
|
||||||
|
implicitTypeRef: FirImplicitTypeRef,
|
||||||
|
data: FirTypeRef
|
||||||
|
): CompositeTransformResult<FirTypeRef> {
|
||||||
|
return data.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal object StoreNameReference : FirTransformer<FirNamedReference>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: FirNamedReference): CompositeTransformResult<E> {
|
||||||
|
return element.compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformNamedReference(
|
||||||
|
namedReference: FirNamedReference,
|
||||||
|
data: FirNamedReference
|
||||||
|
): CompositeTransformResult<FirNamedReference> {
|
||||||
|
return data.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal object StoreCalleeReference : FirTransformer<FirResolvedCallableReference>() {
|
||||||
|
override fun <E : FirElement> transformElement(element: E, data: FirResolvedCallableReference): CompositeTransformResult<E> {
|
||||||
|
return element.compose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun transformResolvedCallableReference(
|
||||||
|
resolvedCallableReference: FirResolvedCallableReference,
|
||||||
|
data: FirResolvedCallableReference
|
||||||
|
): CompositeTransformResult<FirNamedReference> {
|
||||||
|
return data.compose()
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user