[analysis api] move KtCallableSignature to a separate package

This commit is contained in:
Ilya Kirillov
2022-06-07 18:17:44 +02:00
parent d4c97a3883
commit edb6fc9531
13 changed files with 129 additions and 84 deletions
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
/**
@@ -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
@@ -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 {
@@ -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<String>) {
* 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<out S : KtCallableSymbol> : 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
}
@@ -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<out S : KtFunctionLikeSymbol>(
private val _symbol: S,
private val _returnType: KtType,
private val _receiverType: KtType?,
private val _valueParameters: List<KtVariableLikeSignature<KtValueParameterSymbol>>,
) : KtCallableSignature<S>() {
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<KtVariableLikeSignature<KtValueParameterSymbol>>
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
}
}
@@ -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<String>) {
* 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<out S : KtCallableSymbol> : 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<out S : KtFunctionLikeSymbol>(
private val _symbol: S,
private val _returnType: KtType,
private val _receiverType: KtType?,
private val _valueParameters: List<KtVariableLikeSignature<KtValueParameterSymbol>>,
) : KtCallableSignature<S>() {
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<KtVariableLikeSignature<KtValueParameterSymbol>>
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.