AA: add tests for resolution to built-ins
This commit is contained in:
committed by
Ilya Kirillov
parent
c7347cfb48
commit
e50da634bc
+20
-2
@@ -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 {
|
||||||
+5
-6
@@ -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 */ }
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
// WITH_STDLIB
|
||||||
|
|
||||||
|
fun box(map: MutableMap<String, String>) {
|
||||||
|
map.get<caret>OrDefault("key", null)
|
||||||
|
}
|
||||||
+2
@@ -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
|
||||||
+2
-2
@@ -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")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user