[Analysis API] add info about context receivers to the Analysis API
This commit is contained in:
+5
@@ -5,8 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescMemberSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktHasStableParameterNames
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
@@ -39,6 +41,9 @@ internal class KtFe10DescAnonymousFunctionSymbol(
|
||||
override val receiverType: KtType?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
|
||||
|
||||
override fun createPointer(): KtSymbolPointer<KtAnonymousFunctionSymbol> = withValidityAssertion {
|
||||
return KtPsiBasedSymbolPointer.createForSymbolFromSource(this) ?: KtFe10NeverRestoringSymbolPointer()
|
||||
}
|
||||
|
||||
+4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescFunctionLikeSymbolPointer
|
||||
@@ -75,6 +76,9 @@ internal class KtFe10DescFunctionSymbol private constructor(
|
||||
override val receiverType: KtType?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { descriptor.isExtension }
|
||||
|
||||
|
||||
+4
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
@@ -92,6 +93,9 @@ internal class KtFe10DescKotlinPropertySymbol(
|
||||
override val receiverType: KtType?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
|
||||
|
||||
override val typeParameters: List<KtTypeParameterSymbol>
|
||||
get() = withValidityAssertion { descriptor.typeParameters.map { it.toKtTypeParameter(analysisContext) } }
|
||||
|
||||
|
||||
+4
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescNamedClassOrObjectSymbolSymbol
|
||||
@@ -54,6 +55,9 @@ internal class KtFe10DescNamedClassOrObjectSymbol(
|
||||
}
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
|
||||
|
||||
@OptIn(KtAnalysisApiInternals::class)
|
||||
override val classKind: KtClassKind
|
||||
get() = withValidityAssertion {
|
||||
|
||||
+4
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10DescSamConstructorSymbolPointer
|
||||
@@ -48,6 +49,9 @@ internal class KtFe10DescSamConstructorSymbol(
|
||||
override val receiverType: KtType?
|
||||
get() = withValidityAssertion { descriptor.extensionReceiverParameter?.type?.toKtType(analysisContext) }
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor.createContextReceivers(analysisContext) }
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { descriptor.isExtension }
|
||||
|
||||
|
||||
+30
-1
@@ -3,11 +3,14 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:OptIn(KtAnalysisApiInternals::class)
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.*
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.KtFe10PackageSymbol
|
||||
@@ -15,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.types.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.KtFe10Renderer
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.KtContextReceiverImpl
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
@@ -43,6 +47,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyAnnotationDescriptor
|
||||
import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor
|
||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ImplicitContextReceiver
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
|
||||
@@ -263,7 +268,8 @@ internal fun KotlinType.toKtType(analysisContext: Fe10AnalysisContext): KtType {
|
||||
is FunctionClassDescriptor -> KtFe10FunctionalType(unwrappedType, typeDeclaration, analysisContext)
|
||||
is ClassDescriptor -> KtFe10UsualClassType(unwrappedType, typeDeclaration, analysisContext)
|
||||
else -> {
|
||||
val errorType = ErrorUtils.createErrorType(ErrorTypeKind.UNRESOLVED_CLASS_TYPE, typeConstructor, typeDeclaration.toString())
|
||||
val errorType =
|
||||
ErrorUtils.createErrorType(ErrorTypeKind.UNRESOLVED_CLASS_TYPE, typeConstructor, typeDeclaration.toString())
|
||||
KtFe10ClassErrorType(errorType, analysisContext)
|
||||
}
|
||||
}
|
||||
@@ -563,3 +569,26 @@ internal fun AnnotationDescriptor.getKtNamedAnnotationArguments() =
|
||||
allValueArguments.map { (name, value) ->
|
||||
KtNamedAnnotationValue(name, value.toKtAnnotationValue())
|
||||
}
|
||||
|
||||
|
||||
internal fun CallableDescriptor.createContextReceivers(
|
||||
analysisContext: Fe10AnalysisContext
|
||||
): List<KtContextReceiver> {
|
||||
return contextReceiverParameters.map { createContextReceiver(it, analysisContext) }
|
||||
}
|
||||
internal fun ClassDescriptor.createContextReceivers(
|
||||
analysisContext: Fe10AnalysisContext
|
||||
): List<KtContextReceiver> {
|
||||
return contextReceivers.map { createContextReceiver(it, analysisContext) }
|
||||
}
|
||||
|
||||
private fun createContextReceiver(
|
||||
contextReceiver: ReceiverParameterDescriptor,
|
||||
analysisContext: Fe10AnalysisContext
|
||||
): KtContextReceiverImpl {
|
||||
return KtContextReceiverImpl(
|
||||
contextReceiver.value.type.toKtType(analysisContext),
|
||||
(contextReceiver.value as ImplicitContextReceiver).customLabelName,
|
||||
analysisContext.token
|
||||
)
|
||||
}
|
||||
|
||||
+5
@@ -5,9 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
@@ -55,6 +57,9 @@ internal class KtFe10PsiAnonymousFunctionSymbol(
|
||||
return extensionReceiverParameter.type.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor?.createContextReceivers(analysisContext) ?: emptyList() }
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { psi.isExtensionDeclaration() }
|
||||
|
||||
|
||||
+5
@@ -5,8 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
@@ -89,6 +91,9 @@ internal class KtFe10PsiFunctionSymbol(
|
||||
return extensionReceiverParameter.type.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor?.createContextReceivers(analysisContext) ?: emptyList() }
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { psi.isExtensionDeclaration() }
|
||||
|
||||
|
||||
+5
@@ -6,8 +6,10 @@
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createKtInitializerValue
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
@@ -116,6 +118,9 @@ internal class KtFe10PsiKotlinPropertySymbol(
|
||||
}
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor?.createContextReceivers(analysisContext) ?: emptyList() }
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { psi.isExtensionDeclaration() }
|
||||
|
||||
|
||||
+6
@@ -5,8 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.KtFe10DescValueParameterSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.createContextReceivers
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtType
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.pointers.KtFe10NeverRestoringSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
@@ -57,6 +59,10 @@ internal class KtFe10PsiLiteralAnonymousFunctionSymbol(
|
||||
extensionReceiverParameter.type.toKtType(analysisContext)
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor?.createContextReceivers(analysisContext) ?: emptyList() }
|
||||
|
||||
|
||||
override val isExtension: Boolean
|
||||
get() = withValidityAssertion { psi.isExtensionDeclaration() }
|
||||
|
||||
|
||||
+6
@@ -6,8 +6,10 @@
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.*
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getSupertypesWithAny
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktModality
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.ktVisibility
|
||||
@@ -67,6 +69,10 @@ internal class KtFe10PsiNamedClassOrObjectSymbol(
|
||||
KtFe10PsiNamedClassOrObjectSymbol(companionObject, analysisContext)
|
||||
}
|
||||
|
||||
override val contextReceivers: List<KtContextReceiver>
|
||||
get() = withValidityAssertion { descriptor?.createContextReceivers(analysisContext) ?: emptyList() }
|
||||
|
||||
|
||||
@OptIn(KtAnalysisApiInternals::class)
|
||||
override val classKind: KtClassKind
|
||||
get() = withValidityAssertion {
|
||||
|
||||
+28
@@ -243,4 +243,32 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends A
|
||||
public void testVarargFunctions() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/varargFunctions.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ContextReceivers {
|
||||
@Test
|
||||
public void testAllFilesPresentInContextReceivers() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("contextReceiversOnClass.kt")
|
||||
public void testContextReceiversOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("contextReceiversOnFunction.kt")
|
||||
public void testContextReceiversOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("contextReceiversOnProperty.kt")
|
||||
public void testContextReceiversOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/symbolByPsi/contextReceivers/contextReceiversOnProperty.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user