[Analysis API] introduce KtDestructuringDeclarationSymbol to represent a destructuring declaration
Mainly needed to avoid "Cannot build symbol for KtDestructuringDeclaration" from `KtSymbolProvider.getSymbol` on `KtDestructuringDeclaration`.
This commit is contained in:
committed by
Space Team
parent
1b0034b6e7
commit
8ad5a48b98
+4
@@ -149,4 +149,8 @@ internal class KtFe10SymbolProvider(
|
||||
override fun getDestructuringDeclarationEntrySymbol(psi: KtDestructuringDeclarationEntry): KtLocalVariableSymbol {
|
||||
return KtFe10PsiLocalVariableSymbol(psi, analysisContext)
|
||||
}
|
||||
|
||||
override fun getDestructuringDeclarationSymbol(psi: KtDestructuringDeclaration): KtDestructuringDeclarationSymbol {
|
||||
return KtFe10PsiDestructuringDeclarationSymbol(psi, analysisSession)
|
||||
}
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* 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.descriptors.symbols.psiBased
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
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.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.utils.cached
|
||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtDestructuringDeclarationSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtLocalVariableSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
internal class KtFe10PsiDestructuringDeclarationSymbol(
|
||||
override val psi: KtDestructuringDeclaration,
|
||||
private val analysisSession: KtFe10AnalysisSession,
|
||||
) : KtDestructuringDeclarationSymbol(), KtFe10PsiSymbol<KtDestructuringDeclaration, CallableDescriptor> {
|
||||
override val descriptor: CallableDescriptor? get() = null
|
||||
|
||||
override val annotationsObject: Annotations by cached {
|
||||
val bindingContext = analysisContext.analyze(psi, AnalysisMode.PARTIAL)
|
||||
Annotations.create(
|
||||
psi.annotationEntries.mapNotNull { entry ->
|
||||
bindingContext[BindingContext.ANNOTATION, entry]
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override val analysisContext: Fe10AnalysisContext get() = analysisSession.analysisContext
|
||||
|
||||
override val entries: List<KtLocalVariableSymbol>
|
||||
get() = withValidityAssertion {
|
||||
psi.entries.map { entry ->
|
||||
with(analysisSession) { entry.getDestructuringDeclarationEntrySymbol() }
|
||||
}
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
override fun createPointer(): KtSymbolPointer<KtDestructuringDeclarationSymbol> {
|
||||
KtPsiBasedSymbolPointer.createForSymbolFromSource<KtDestructuringDeclarationSymbol>(this)?.let { return it }
|
||||
throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(SpecialNames.DESTRUCT.asString())
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
return other is KtFe10PsiDestructuringDeclarationSymbol && other.psi == this.psi
|
||||
}
|
||||
|
||||
override fun hashCode(): Int = psi.hashCode()
|
||||
}
|
||||
+12
@@ -323,6 +323,18 @@ public class Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated extends
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("destructuringDeclaration.kt")
|
||||
public void testDestructuringDeclaration() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/destructuringDeclaration.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("destructuringDeclarationInLambda.kt")
|
||||
public void testDestructuringDeclarationInLambda() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/destructuringDeclarationInLambda.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("destructuringDeclarationParameterInLambda.kt")
|
||||
public void testDestructuringDeclarationParameterInLambda() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user