AA: add tests for resolution to built-ins

This commit is contained in:
Jinseong Jeon
2022-09-15 12:29:52 -07:00
committed by Ilya Kirillov
parent c7347cfb48
commit e50da634bc
11 changed files with 47 additions and 10 deletions
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModul
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind; import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode; import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode; import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode;
import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider.AbstractDecompiledPsiDeclarationProviderTest; import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider.AbstractPsiDeclarationProviderTest;
import org.jetbrains.kotlin.test.TestMetadata; import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
@SuppressWarnings("all") @SuppressWarnings("all")
@TestMetadata("analysis/analysis-api/testData/standalone/singleModule") @TestMetadata("analysis/analysis-api/testData/standalone/singleModule")
@TestDataPath("$PROJECT_ROOT") @TestDataPath("$PROJECT_ROOT")
public class FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProviderTestGenerated extends AbstractDecompiledPsiDeclarationProviderTest { public class FirStandaloneNormalAnalysisSourceModulePsiDeclarationProviderTestGenerated extends AbstractPsiDeclarationProviderTest {
@NotNull @NotNull
@Override @Override
public AnalysisApiTestConfigurator getConfigurator() { public AnalysisApiTestConfigurator getConfigurator() {
@@ -58,6 +58,24 @@ public class FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProv
runTest("analysis/analysis-api/testData/standalone/singleModule/capitalize_locale.kt"); runTest("analysis/analysis-api/testData/standalone/singleModule/capitalize_locale.kt");
} }
@Test
@TestMetadata("listIterator.kt")
public void testListIterator() throws Exception {
runTest("analysis/analysis-api/testData/standalone/singleModule/listIterator.kt");
}
@Test
@TestMetadata("mapGetOrDefault.kt")
public void testMapGetOrDefault() throws Exception {
runTest("analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.kt");
}
@Test
@TestMetadata("mapGetOrDefault_nullable.kt")
public void testMapGetOrDefault_nullable() throws Exception {
runTest("analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.kt");
}
@Test @Test
@TestMetadata("multipleFiles.kt") @TestMetadata("multipleFiles.kt")
public void testMultipleFiles() throws Exception { public void testMultipleFiles() throws Exception {
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions import org.jetbrains.kotlin.test.services.assertions
abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisApiBasedSingleModuleTest() { abstract class AbstractPsiDeclarationProviderTest : AbstractAnalysisApiBasedSingleModuleTest() {
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) { override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.firstOrNull { it.name == "main.kt" } ?: ktFiles.first() val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.firstOrNull { it.name == "main.kt" } ?: ktFiles.first()
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile) val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
@@ -34,7 +34,7 @@ abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisAp
val resolvedTo = val resolvedTo =
analyseForTest(element) { analyseForTest(element) {
val symbols = ktReferences.flatMap { it.resolveToSymbols() } val symbols = ktReferences.flatMap { it.resolveToSymbols() }
val psiElements = symbols.mapNotNull { psiForDecompiled(it, element.project) } val psiElements = symbols.mapNotNull { psiForTest(it, element.project) }
psiElements.joinToString(separator = "\n") { TestPsiElementRenderer.render(it) } psiElements.joinToString(separator = "\n") { TestPsiElementRenderer.render(it) }
} }
@@ -50,13 +50,12 @@ abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisAp
mainKtFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance<KtReference>() mainKtFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance<KtReference>()
// Mimic [psiForUast] in FIR UAST // Mimic [psiForUast] in FIR UAST
private fun KtAnalysisSession.psiForDecompiled(symbol: KtSymbol, project: Project): PsiElement? { private fun KtAnalysisSession.psiForTest(symbol: KtSymbol, project: Project): PsiElement? {
return when (symbol.origin) { return when (symbol.origin) {
KtSymbolOrigin.LIBRARY -> { KtSymbolOrigin.LIBRARY -> {
findPsi(symbol, project) findPsi(symbol, project) ?: symbol.psi
} }
// NB: This test is checking declarations from libraries (hence decompiled stub) only else -> symbol.psi
else -> null
} }
} }
@@ -0,0 +1,4 @@
fun foo() {
val li = ArrayList<String>().listIterator()
li.<caret>add("test")
}
@@ -0,0 +1,2 @@
Resolved to:
public abstract fun add(element: T): kotlin.Unit
@@ -0,0 +1,3 @@
fun box(map: MutableMap<String, String>) {
map.get<caret>OrDefault("key", "value")
}
@@ -0,0 +1,2 @@
Resolved to:
@kotlin.SinceKotlin @kotlin.internal.PlatformDependent public open fun getOrDefault(key: K, defaultValue: V): V { /* compiled code */ }
@@ -0,0 +1,5 @@
// WITH_STDLIB
fun box(map: MutableMap<String, String>) {
map.get<caret>OrDefault("key", null)
}
@@ -0,0 +1,2 @@
Resolved to:
PsiMethod:getOrDefault($this$getOrDefault: PsiType:Map<? extends K, ? extends V>, key: PsiType:K, defaultValue: PsiType:V): PsiType:V
@@ -1 +1,2 @@
Resolved to: Resolved to:
internal const val MinId = -1
@@ -1 +1,2 @@
Resolved to: Resolved to:
annotation class MyAnno
@@ -40,7 +40,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSy
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByPsiTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByPsiTest
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByReferenceTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.symbols.AbstractSymbolByReferenceTest
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.types.AbstractAnalysisApiSubstitutorsTest import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.types.AbstractAnalysisApiSubstitutorsTest
import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider.AbstractDecompiledPsiDeclarationProviderTest import org.jetbrains.kotlin.analysis.api.standalone.fir.test.cases.components.psiDeclarationProvider.AbstractPsiDeclarationProviderTest
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
@@ -140,7 +140,7 @@ private fun AnalysisApiTestGroup.generateAnalysisApiNonComponentsTests() {
} }
group("standalone", filter = analysisApiModeIs(AnalysisApiMode.Standalone)) { group("standalone", filter = analysisApiModeIs(AnalysisApiMode.Standalone)) {
test(AbstractDecompiledPsiDeclarationProviderTest::class) { test(AbstractPsiDeclarationProviderTest::class) {
model("singleModule") model("singleModule")
} }
} }