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.AnalysisSessionMode;
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.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
@SuppressWarnings("all")
@TestMetadata("analysis/analysis-api/testData/standalone/singleModule")
@TestDataPath("$PROJECT_ROOT")
public class FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProviderTestGenerated extends AbstractDecompiledPsiDeclarationProviderTest {
public class FirStandaloneNormalAnalysisSourceModulePsiDeclarationProviderTestGenerated extends AbstractPsiDeclarationProviderTest {
@NotNull
@Override
public AnalysisApiTestConfigurator getConfigurator() {
@@ -58,6 +58,24 @@ public class FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProv
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
@TestMetadata("multipleFiles.kt")
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.assertions
abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisApiBasedSingleModuleTest() {
abstract class AbstractPsiDeclarationProviderTest : AbstractAnalysisApiBasedSingleModuleTest() {
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
val mainKtFile = ktFiles.singleOrNull() ?: ktFiles.firstOrNull { it.name == "main.kt" } ?: ktFiles.first()
val caretPosition = testServices.expressionMarkerProvider.getCaretPosition(mainKtFile)
@@ -34,7 +34,7 @@ abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisAp
val resolvedTo =
analyseForTest(element) {
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) }
}
@@ -50,13 +50,12 @@ abstract class AbstractDecompiledPsiDeclarationProviderTest : AbstractAnalysisAp
mainKtFile.findReferenceAt(caretPosition)?.unwrapMultiReferences().orEmpty().filterIsInstance<KtReference>()
// 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) {
KtSymbolOrigin.LIBRARY -> {
findPsi(symbol, project)
findPsi(symbol, project) ?: symbol.psi
}
// NB: This test is checking declarations from libraries (hence decompiled stub) only
else -> null
else -> symbol.psi
}
}
@@ -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:
internal const val MinId = -1
@@ -1 +1,2 @@
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.AbstractSymbolByReferenceTest
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.AnalysisSessionMode
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
@@ -140,7 +140,7 @@ private fun AnalysisApiTestGroup.generateAnalysisApiNonComponentsTests() {
}
group("standalone", filter = analysisApiModeIs(AnalysisApiMode.Standalone)) {
test(AbstractDecompiledPsiDeclarationProviderTest::class) {
test(AbstractPsiDeclarationProviderTest::class) {
model("singleModule")
}
}