[Analysis API FIR] Initialize properties of KtCallableSignature lazily
This commit is contained in:
committed by
teamcity
parent
2eab9fc00f
commit
2cc3b542fd
+4
-6
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.analysis.api.calls.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.signatures.KtFe10FunctionLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.signatures.KtFe10VariableLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10ReceiverParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
|
||||
@@ -59,10 +61,6 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.TypeUtils
|
||||
import org.jetbrains.kotlin.types.UnwrappedType
|
||||
import org.jetbrains.kotlin.types.asSimpleType
|
||||
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.contains
|
||||
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.isTypeVariable
|
||||
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.typeConstructor
|
||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||
@@ -567,8 +565,8 @@ internal class KtFe10CallResolver(
|
||||
resultingDescriptor.extensionReceiverParameter?.returnType?.toKtType(analysisContext)
|
||||
}
|
||||
return when (symbol) {
|
||||
is KtVariableLikeSymbol -> KtVariableLikeSignature(symbol, ktReturnType, receiverType)
|
||||
is KtFunctionLikeSymbol -> KtFunctionLikeSignature(
|
||||
is KtVariableLikeSymbol -> KtFe10VariableLikeSignature(symbol, ktReturnType, receiverType)
|
||||
is KtFunctionLikeSymbol -> KtFe10FunctionLikeSignature(
|
||||
symbol,
|
||||
ktReturnType,
|
||||
receiverType,
|
||||
|
||||
+17
-2
@@ -7,8 +7,23 @@ package org.jetbrains.kotlin.analysis.api.descriptors.components
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.components.AbstractKtSignatureSubstitutorImpl
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.signatures.KtFe10FunctionLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.signatures.KtFe10VariableLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.components.AbstractKtSignatureSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.receiverType
|
||||
|
||||
internal class KtFe10SignatureSubstitutor(
|
||||
override val analysisSession: KtFe10AnalysisSession
|
||||
) : AbstractKtSignatureSubstitutorImpl(), Fe10KtAnalysisSessionComponent
|
||||
) : AbstractKtSignatureSubstitutor(), Fe10KtAnalysisSessionComponent {
|
||||
override fun <S : KtFunctionLikeSymbol> asSignature(symbol: S): KtFunctionLikeSignature<S> {
|
||||
return KtFe10FunctionLikeSignature(symbol, symbol.returnType, symbol.receiverType, symbol.valueParameters.map { asSignature(it) })
|
||||
}
|
||||
|
||||
override fun <S : KtVariableLikeSymbol> asSignature(symbol: S): KtVariableLikeSignature<S> {
|
||||
return KtFe10VariableLikeSignature(symbol, symbol.returnType, symbol.receiverType)
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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.descriptors.signatures
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.signatures.KtFunctionLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
|
||||
internal class KtFe10FunctionLikeSignature<out S : KtFunctionLikeSymbol>(
|
||||
private val _symbol: S,
|
||||
private val _returnType: KtType,
|
||||
private val _receiverType: KtType?,
|
||||
private val _valueParameters: List<KtVariableLikeSignature<KtValueParameterSymbol>>,
|
||||
) : KtFunctionLikeSignature<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 }
|
||||
override val valueParameters: List<KtVariableLikeSignature<KtValueParameterSymbol>>
|
||||
get() = withValidityAssertion { _valueParameters }
|
||||
|
||||
override fun substitute(substitutor: KtSubstitutor): KtFunctionLikeSignature<S> = withValidityAssertion {
|
||||
KtFe10FunctionLikeSignature(
|
||||
symbol,
|
||||
substitutor.substitute(returnType),
|
||||
receiverType?.let { substitutor.substitute(it) },
|
||||
valueParameters.map { valueParameter ->
|
||||
KtFe10VariableLikeSignature<KtValueParameterSymbol>(
|
||||
valueParameter.symbol,
|
||||
substitutor.substitute(valueParameter.returnType),
|
||||
valueParameter.receiverType?.let { substitutor.substitute(it) }
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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.descriptors.signatures
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.signatures.KtVariableLikeSignature
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtVariableLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
|
||||
internal class KtFe10VariableLikeSignature<out S : KtVariableLikeSymbol>(
|
||||
private val _symbol: S,
|
||||
private val _returnType: KtType,
|
||||
private val _receiverType: KtType?,
|
||||
) : KtVariableLikeSignature<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 }
|
||||
|
||||
override fun substitute(substitutor: KtSubstitutor): KtVariableLikeSignature<S> = withValidityAssertion {
|
||||
KtFe10VariableLikeSignature(
|
||||
symbol,
|
||||
substitutor.substitute(returnType),
|
||||
receiverType?.let { substitutor.substitute(it) },
|
||||
)
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as KtVariableLikeSignature<*>
|
||||
|
||||
if (symbol != other.symbol) return false
|
||||
if (returnType != other.returnType) return false
|
||||
if (receiverType != other.receiverType) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
var result = symbol.hashCode()
|
||||
result = 31 * result + returnType.hashCode()
|
||||
result = 31 * result + (receiverType?.hashCode() ?: 0)
|
||||
return result
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user