From 1cb18a73db77e33505beacac7da8389da2c75540 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Mon, 27 Jan 2020 15:46:10 +0300 Subject: [PATCH] FIR: Get rid of old FirImplicitTypeBodyResolveTransformerAdapter --- .../resolve/transformers/ResolvePhaseUtils.kt | 1 - .../transformers/ReturnTypeCalculator.kt | 79 ++----------------- .../body/resolve/FirBodyResolveTransformer.kt | 4 +- .../FirBodyResolveTransformerAdapters.kt | 23 +----- .../FirDeclarationsResolveTransformer.kt | 12 --- .../scopes/impl/FirClassSubstitutionScope.kt | 4 +- .../types/impl/FirComputingImplicitTypeRef.kt | 31 -------- .../generator/ImplementationConfigurator.kt | 5 -- 8 files changed, 13 insertions(+), 146 deletions(-) delete mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt index bdf9efb171c..e7c9f01aab7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ResolvePhaseUtils.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase.* import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformerAdapter -import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitTypeBodyResolveTransformerAdapter import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitTypeBodyResolveTransformerAdapter2 import org.jetbrains.kotlin.fir.visitors.FirTransformer diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt index e87e5e45495..ba8c359387f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/ReturnTypeCalculator.kt @@ -5,92 +5,29 @@ package org.jetbrains.kotlin.fir.resolve.transformers -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.declarations.FirCallableMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration -import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.fir.resolve.ResolutionMode -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.firProvider -import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDesignatedBodyResolveTransformer -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirComputingImplicitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl interface ReturnTypeCalculator { fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef } -class ReturnTypeCalculatorWithJump(val session: FirSession, val scopeSession: ScopeSession) : - ReturnTypeCalculator { - - private fun cycleErrorType(declaration: FirTypedDeclaration): FirResolvedTypeRef? { - if (declaration.returnTypeRef is FirComputingImplicitTypeRef) { - declaration.transformReturnTypeRef( - TransformImplicitType, - FirErrorTypeRefImpl(null, FirSimpleDiagnostic("cycle", DiagnosticKind.RecursionInImplicitTypes)) - ) - return declaration.returnTypeRef as FirResolvedTypeRef - } - return null - } +class ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator { override fun tryCalculateReturnType(declaration: FirTypedDeclaration): FirResolvedTypeRef { - - if (declaration is FirValueParameter && declaration.returnTypeRef is FirImplicitTypeRef) { - // TODO? - declaration.transformReturnTypeRef( - TransformImplicitType, - FirErrorTypeRefImpl( - null, - FirSimpleDiagnostic("Unsupported: implicit VP type") - ) - ) - } val returnTypeRef = declaration.returnTypeRef if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef - cycleErrorType(declaration)?.let { return it } - require(declaration is FirCallableMemberDeclaration<*>) { "${declaration::class}: ${declaration.render()}" } - - val symbol = declaration.symbol as FirCallableSymbol<*> - val id = symbol.callableId - - val provider = session.firProvider - - val file = provider.getFirCallableContainerFile(symbol) - - val outerClasses = generateSequence(id.classId) { classId -> - classId.outerClassId - }.mapTo(mutableListOf()) { provider.getFirClassifierByFqName(it) } - - if (file == null || outerClasses.any { it == null }) { - return FirErrorTypeRefImpl(null, FirSimpleDiagnostic("Cannot calculate return type (local class/object?)", DiagnosticKind.InferenceError)) - } - - declaration.transformReturnTypeRef( - TransformImplicitType, - FirComputingImplicitTypeRef + return FirErrorTypeRefImpl( + null, + FirSimpleDiagnostic( + "Cannot calculate return type during full-body resolution (local class/object?): ${declaration.render()}", + DiagnosticKind.InferenceError + ) ) - - val transformer = FirDesignatedBodyResolveTransformer( - (listOf(file) + outerClasses.filterNotNull().asReversed() + listOf(declaration)).iterator(), - file.session, - scopeSession - ) - - file.transform(transformer, ResolutionMode.ContextDependent) - - - val newReturnTypeRef = declaration.returnTypeRef - cycleErrorType(declaration)?.let { return it } - require(newReturnTypeRef is FirResolvedTypeRef) { declaration.render() } - return newReturnTypeRef } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index 5ed4ae9f416..70532ba2f81 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator -import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump +import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve import org.jetbrains.kotlin.fir.scopes.addImportingScopes import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef @@ -29,7 +29,7 @@ open class FirBodyResolveTransformer( phase: FirResolvePhase, override var implicitTypeOnly: Boolean, scopeSession: ScopeSession, - val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession) + val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve() ) : FirAbstractBodyResolveTransformer(phase) { private var packageFqName = FqName.ROOT diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformerAdapters.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformerAdapters.kt index 42d7e390b2a..055346d9b95 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformerAdapters.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformerAdapters.kt @@ -43,27 +43,6 @@ class FirDesignatedBodyResolveTransformer( } } - -@Deprecated("It is temp", level = DeprecationLevel.WARNING, replaceWith = ReplaceWith("TODO(\"что-то нормальное\")")) -class FirImplicitTypeBodyResolveTransformerAdapter : FirTransformer() { - private val scopeSession = ScopeSession() - - override fun transformElement(element: E, data: Nothing?): CompositeTransformResult { - return element.compose() - } - - override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { - val transformer = FirBodyResolveTransformer( - file.session, - phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, - implicitTypeOnly = true, - scopeSession = scopeSession - ) - return file.transform(transformer, ResolutionMode.ContextIndependent) - } -} - - @Deprecated("It is temp", level = DeprecationLevel.WARNING, replaceWith = ReplaceWith("TODO(\"что-то нормальное\")")) class FirBodyResolveTransformerAdapter : FirTransformer() { private val scopeSession = ScopeSession() @@ -81,4 +60,4 @@ class FirBodyResolveTransformerAdapter : FirTransformer() { ) return file.transform(transformer, ResolutionMode.ContextIndependent) } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index f41d9225393..f606a65293e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.* -import org.jetbrains.kotlin.fir.resolve.calls.extractLambdaInfoFromFunctionalType import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.* import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer.Companion.resolveStatus @@ -25,7 +24,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope import org.jetbrains.kotlin.fir.scopes.impl.FirMemberTypeParameterScope import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.fir.types.impl.FirComputingImplicitTypeRef import org.jetbrains.kotlin.fir.types.impl.FirErrorTypeRefImpl import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult @@ -92,9 +90,6 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) return@withScopeCleanup property.compose() } dataFlowAnalyzer.enterProperty(property) - if (returnTypeRef is FirImplicitTypeRef) { - property.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) - } withFullBodyResolve { withScopeCleanup(localScopes) { localScopes.addIfNotNull(primaryConstructorParametersScope) @@ -167,9 +162,6 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) transformFunction(accessor, withExpectedType(enhancedTypeRef)) } val returnTypeRef = accessor.returnTypeRef - if (returnTypeRef is FirImplicitTypeRef && enhancedTypeRef !is FirResolvedTypeRef) { - accessor.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) - } val expectedReturnTypeRef = if (enhancedTypeRef is FirResolvedTypeRef && returnTypeRef !is FirResolvedTypeRef) { enhancedTypeRef } else { @@ -318,10 +310,6 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) } withFullBodyResolve { - if (returnTypeRef is FirImplicitTypeRef) { - simpleFunction.transformReturnTypeRef(StoreType, FirComputingImplicitTypeRef) - } - val receiverTypeRef = simpleFunction.receiverTypeRef if (receiverTypeRef != null) { withLabelAndReceiverType(simpleFunction.name, simpleFunction, receiverTypeRef.coneTypeUnsafe()) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index 88996193354..8214d2d4cf3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.substitution.ChainedSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator -import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorWithJump +import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeKotlinType @@ -82,7 +82,7 @@ class FirClassSubstitutionScope( } private val typeCalculator = - (scopeSession.returnTypeCalculator as ReturnTypeCalculator?) ?: ReturnTypeCalculatorWithJump(session, scopeSession) + (scopeSession.returnTypeCalculator as ReturnTypeCalculator?) ?: ReturnTypeCalculatorForFullBodyResolve() private fun ConeKotlinType.substitute(): ConeKotlinType? { return substitutor.substituteOrNull(this) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt deleted file mode 100644 index 06e51b9a10e..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/types/impl/FirComputingImplicitTypeRef.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2020 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.types.impl - -import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement -import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef -import org.jetbrains.kotlin.fir.visitors.* - -/* - * This file was generated automatically - * DO NOT MODIFY IT MANUALLY - */ - -object FirComputingImplicitTypeRef : FirImplicitTypeRef(), FirAbstractAnnotatedElement { - override val source: FirSourceElement? get() = null - override val annotations: MutableList = mutableListOf() - - override fun acceptChildren(visitor: FirVisitor, data: D) { - annotations.forEach { it.accept(visitor, data) } - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirComputingImplicitTypeRef { - annotations.transformInplace(transformer, data) - return this - } -} diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index d46dbc72d96..ea40382b7ff 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -514,11 +514,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() defaultEmptyList("annotations") } - impl(implicitTypeRef, "FirComputingImplicitTypeRef") { - kind = Object - defaultNull("source", withGetter = true) - } - impl(reference, "FirStubReference") { default("source") { value = "null"