From edb6fc9531a0a4004e9e504f46cffbb534541e8a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 7 Jun 2022 18:17:44 +0200 Subject: [PATCH] [analysis api] move KtCallableSignature to a separate package --- .../components/KtFe10CallResolver.kt | 3 + .../analysis/api/fir/KtSymbolByFirBuilder.kt | 3 + .../api/fir/components/KtFirCallResolver.kt | 3 + .../fir/scopes/KtFirDelegatingTypeScope.kt | 2 +- .../analysis/api/fir/scopes/firScopeUtils.kt | 2 +- .../AbstractKtSignatureSubsitutorImpl.kt | 3 + .../impl/base/scopes/KtCompositeTypeScope.kt | 1 + .../kotlin/analysis/api/calls/KtCall.kt | 3 + .../api/components/KtSignatureSubsitutor.kt | 3 + .../kotlin/analysis/api/scopes/KtTypeScope.kt | 2 +- .../api/signatures/KtCallableSignature.kt | 42 +++++++++ .../api/signatures/KtFunctionLikeSignature.kt | 61 +++++++++++++ .../KtVariableLikeSignature.kt} | 85 +------------------ 13 files changed, 129 insertions(+), 84 deletions(-) create mode 100644 analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtCallableSignature.kt create mode 100644 analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtFunctionLikeSignature.kt rename analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/{symbols/KtCallableSignature.kt => signatures/KtVariableLikeSignature.kt} (62%) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt index b85fd6636de..1f34b663697 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt @@ -22,6 +22,9 @@ import org.jetbrains.kotlin.analysis.api.impl.barebone.parentOfType import org.jetbrains.kotlin.analysis.api.impl.base.components.AbstractKtCallResolver import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticWithParameters1 diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt index b2946a45bf9..3383caae645 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtSymbolByFirBuilder.kt @@ -13,6 +13,9 @@ import org.jetbrains.kotlin.analysis.api.* import org.jetbrains.kotlin.analysis.api.fir.symbols.* import org.jetbrains.kotlin.analysis.api.fir.types.* import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor import org.jetbrains.kotlin.analysis.api.types.KtType diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index f9a6c4b782c..743a6cbc3cf 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -17,6 +17,9 @@ import org.jetbrains.kotlin.analysis.api.fir.symbols.KtFirFunctionSymbol import org.jetbrains.kotlin.analysis.api.impl.barebone.parentOfType import org.jetbrains.kotlin.analysis.api.impl.base.components.AbstractKtCallResolver import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirDelegatingTypeScope.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirDelegatingTypeScope.kt index bb046481e97..e20296998fe 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirDelegatingTypeScope.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/KtFirDelegatingTypeScope.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter import org.jetbrains.kotlin.analysis.api.scopes.KtTypeScope import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.name.Name diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt index 51150895215..7981cffc936 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/scopes/firScopeUtils.kt @@ -4,7 +4,7 @@ import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature import org.jetbrains.kotlin.fir.isSubstitutionOverride import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.processClassifiersByName diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtSignatureSubsitutorImpl.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtSignatureSubsitutorImpl.kt index c9d63c73e15..1d57b62ad65 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtSignatureSubsitutorImpl.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtSignatureSubsitutorImpl.kt @@ -6,6 +6,9 @@ package org.jetbrains.kotlin.analysis.api.impl.base.components import org.jetbrains.kotlin.analysis.api.components.KtSignatureSubsitutor +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/scopes/KtCompositeTypeScope.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/scopes/KtCompositeTypeScope.kt index b1ab0b48635..3778ce8f7ee 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/scopes/KtCompositeTypeScope.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/scopes/KtCompositeTypeScope.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.scopes.KtScopeNameFilter import org.jetbrains.kotlin.analysis.api.scopes.KtTypeScope +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.name.Name diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/calls/KtCall.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/calls/KtCall.kt index 6169f3c4c44..72968673464 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/calls/KtCall.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/calls/KtCall.kt @@ -12,6 +12,9 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.psi.KtExpression /** diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSignatureSubsitutor.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSignatureSubsitutor.kt index 7bbe9f3f3db..f7356e6c3b2 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSignatureSubsitutor.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtSignatureSubsitutor.kt @@ -6,6 +6,9 @@ package org.jetbrains.kotlin.analysis.api.components import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/scopes/KtTypeScope.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/scopes/KtTypeScope.kt index 131b67b5c20..28e3c3aa794 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/scopes/KtTypeScope.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/scopes/KtTypeScope.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.analysis.api.scopes import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtClassifierSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtConstructorSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSignature +import org.jetbrains.kotlin.analysis.api.signatures.KtCallableSignature public interface KtTypeScope : KtScopeLike { diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtCallableSignature.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtCallableSignature.kt new file mode 100644 index 00000000000..0e994e82a91 --- /dev/null +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtCallableSignature.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2022 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.analysis.api.signatures + +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner +import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol +import org.jetbrains.kotlin.analysis.api.types.KtType + +/** + * A signature for a callable symbol. Comparing to a `KtCallableSymbol`, a signature can carry use-site type information. For example + * ``` + * fun test(l: List) { + * l.get(1) // The symbol `get` has type `(Int) -> T` where is the type parameter declared in `List`. On the other hand, a KtSignature + * // carries instantiated type information `(Int) -> String`. + * } + * ``` + * + * Equality of [KtCallableSignature] is derived from its content. + */ +public sealed class KtCallableSignature : KtLifetimeOwner { + /** + * The original symbol for this signature. + */ + public abstract val symbol: S + + /** + * The use-site-substituted return type. + */ + public abstract val returnType: KtType + + /** + * The use-site-substituted extension receiver type. + */ + public abstract val receiverType: KtType? + + abstract override fun equals(other: Any?): Boolean + abstract override fun hashCode(): Int +} + diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtFunctionLikeSignature.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtFunctionLikeSignature.kt new file mode 100644 index 00000000000..e59ddd66ef3 --- /dev/null +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtFunctionLikeSignature.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2010-2022 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.analysis.api.signatures + + +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion +import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol +import org.jetbrains.kotlin.analysis.api.types.KtType + +/** + * A signature of a function-like symbol. + */ +public class KtFunctionLikeSignature( + private val _symbol: S, + private val _returnType: KtType, + private val _receiverType: KtType?, + private val _valueParameters: List>, +) : KtCallableSignature() { + override val token: KtLifetimeToken + get() = _symbol.token + override val symbol: S + get() = withValidityAssertion { _symbol } + override val returnType: KtType + get() = withValidityAssertion { _returnType } + override val receiverType: KtType? + get() = withValidityAssertion { _receiverType } + + /** + * The use-site-substituted value parameters. + */ + public val valueParameters: List> + get() = withValidityAssertion { _valueParameters } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as KtFunctionLikeSignature<*> + + if (_symbol != other._symbol) return false + if (_returnType != other._returnType) return false + if (_receiverType != other._receiverType) return false + if (_valueParameters != other._valueParameters) return false + + return true + } + + override fun hashCode(): Int { + var result = _symbol.hashCode() + result = 31 * result + _returnType.hashCode() + result = 31 * result + (_receiverType?.hashCode() ?: 0) + result = 31 * result + _valueParameters.hashCode() + return result + } +} + diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtCallableSignature.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtVariableLikeSignature.kt similarity index 62% rename from analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtCallableSignature.kt rename to analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtVariableLikeSignature.kt index 98c5965169b..94b16272cd5 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/KtCallableSignature.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/signatures/KtVariableLikeSignature.kt @@ -1,99 +1,22 @@ /* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2022 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.analysis.api.symbols +package org.jetbrains.kotlin.analysis.api.signatures -import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue import org.jetbrains.kotlin.analysis.api.annotations.annotationsByClassId import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken -import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion +import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol +import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.utils.addToStdlib.runIf -/** - * A signature for a callable symbol. Comparing to a `KtCallableSymbol`, a signature can carry use-site type information. For example - * ``` - * fun test(l: List) { - * l.get(1) // The symbol `get` has type `(Int) -> T` where is the type parameter declared in `List`. On the other hand, a KtSignature - * // carries instantiated type information `(Int) -> String`. - * } - * ``` - * - * Equality of [KtCallableSignature] is derived from its content. - */ -public sealed class KtCallableSignature : KtLifetimeOwner { - /** - * The original symbol for this signature. - */ - public abstract val symbol: S - - /** - * The use-site-substituted return type. - */ - public abstract val returnType: KtType - - /** - * The use-site-substituted extension receiver type. - */ - public abstract val receiverType: KtType? - - abstract override fun equals(other: Any?): Boolean - abstract override fun hashCode(): Int -} - -/** - * A signature of a function-like symbol. - */ -public class KtFunctionLikeSignature( - private val _symbol: S, - private val _returnType: KtType, - private val _receiverType: KtType?, - private val _valueParameters: List>, -) : KtCallableSignature() { - override val token: KtLifetimeToken - get() = _symbol.token - override val symbol: S - get() = withValidityAssertion { _symbol } - override val returnType: KtType - get() = withValidityAssertion { _returnType } - override val receiverType: KtType? - get() = withValidityAssertion { _receiverType } - - /** - * The use-site-substituted value parameters. - */ - public val valueParameters: List> - get() = withValidityAssertion { _valueParameters } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (javaClass != other?.javaClass) return false - - other as KtFunctionLikeSignature<*> - - if (_symbol != other._symbol) return false - if (_returnType != other._returnType) return false - if (_receiverType != other._receiverType) return false - if (_valueParameters != other._valueParameters) return false - - return true - } - - override fun hashCode(): Int { - var result = _symbol.hashCode() - result = 31 * result + _returnType.hashCode() - result = 31 * result + (_receiverType?.hashCode() ?: 0) - result = 31 * result + _valueParameters.hashCode() - return result - } -} /** * A signature of a variable-like symbol.