[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:
committed by
Space Team
parent
04b9faf9e6
commit
c963eadb44
+8
-2
@@ -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() }
|
||||
|
||||
|
||||
+5
-1
@@ -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 {
|
||||
|
||||
+40
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user