[Analysis API FIR] fix KtSymbol creation for _ destructuring parameter

We need to have a corresponding declaration in the FIR tree,
so we can create a symbol for it

^KT-60904 fixed
^KT-60904 fixed
This commit is contained in:
Ilya Kirillov
2023-08-15 18:52:46 +02:00
committed by Space Team
parent 04b9faf9e6
commit c963eadb44
36 changed files with 431 additions and 11 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased
import com.intellij.extapi.psi.StubBasedPsiElementBase
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisFacade.AnalysisMode
@@ -23,6 +24,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.KtVariableDeclaration
import org.jetbrains.kotlin.resolve.BindingContext
@@ -36,8 +38,12 @@ internal class KtFe10PsiLocalVariableSymbol(
}
override val name: Name
get() = withValidityAssertion { psi.nameAsSafeName }
get() = withValidityAssertion {
when {
psi.nameIdentifier?.text == "_" -> SpecialNames.UNDERSCORE_FOR_UNUSED_VAR
else -> psi.nameAsSafeName
}
}
override val returnType: KtType
get() = withValidityAssertion { descriptor?.type?.toKtType(analysisContext) ?: createErrorType() }
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.VariableDescriptor
import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.resolve.BindingContext
@@ -68,7 +69,10 @@ internal class KtFe10PsiValueParameterSymbol(
}
override val name: Name
get() = withValidityAssertion { psi.nameAsSafeName }
get() = withValidityAssertion {
if (psi.destructuringDeclaration != null) SpecialNames.DESTRUCT
else psi.nameAsSafeName
}
context(KtAnalysisSession)
override fun createPointer(): KtSymbolPointer<KtValueParameterSymbol> = withValidityAssertion {
@@ -314,6 +314,46 @@ public class Fe10IdeNormalAnalysisSourceModuleSingleSymbolByPsiGenerated extends
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring")
@TestDataPath("$PROJECT_ROOT")
public class Destructuring {
@Test
public void testAllFilesPresentInDestructuring() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring"), Pattern.compile("^(.+)\\.kt$"), null, true);
}
@Test
@TestMetadata("destructuringDeclarationParameterInLambda.kt")
public void testDestructuringDeclarationParameterInLambda() throws Exception {
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/destructuringDeclarationParameterInLambda.kt");
}
@Test
@TestMetadata("entryInDestructuringDeclaration.kt")
public void testEntryInDestructuringDeclaration() throws Exception {
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclaration.kt");
}
@Test
@TestMetadata("entryInDestructuringDeclarationParameterInLambda.kt")
public void testEntryInDestructuringDeclarationParameterInLambda() throws Exception {
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryInDestructuringDeclarationParameterInLambda.kt");
}
@Test
@TestMetadata("entryUnderscoreInDestructuringDeclaration.kt")
public void testEntryUnderscoreInDestructuringDeclaration() throws Exception {
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclaration.kt");
}
@Test
@TestMetadata("entryUnderscoreInDestructuringDeclarationParameterInLambda.kt")
public void testEntryUnderscoreInDestructuringDeclarationParameterInLambda() throws Exception {
runTest("analysis/analysis-api/testData/symbols/singleSymbolByPsi/destructuring/entryUnderscoreInDestructuringDeclarationParameterInLambda.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/symbols/singleSymbolByPsi/errors")
@TestDataPath("$PROJECT_ROOT")