diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModulePsiDeclarationProviderTestGenerated.java similarity index 79% rename from analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProviderTestGenerated.java rename to analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModulePsiDeclarationProviderTestGenerated.java index e8e60ca3cfe..2f9bcaaf229 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleDecompiledPsiDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisSourceModulePsiDeclarationProviderTestGenerated.java @@ -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 { diff --git a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractDecompiledPsiDeclarationProviderTest.kt b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractPsiDeclarationProviderTest.kt similarity index 85% rename from analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractDecompiledPsiDeclarationProviderTest.kt rename to analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractPsiDeclarationProviderTest.kt index 6ba75b3088d..838f1ee630d 100644 --- a/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractDecompiledPsiDeclarationProviderTest.kt +++ b/analysis/analysis-api-standalone/tests/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/components/psiDeclarationProvider/AbstractPsiDeclarationProviderTest.kt @@ -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, 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() // 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 } } diff --git a/analysis/analysis-api/testData/standalone/singleModule/listIterator.kt b/analysis/analysis-api/testData/standalone/singleModule/listIterator.kt new file mode 100644 index 00000000000..74b5770e49b --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/listIterator.kt @@ -0,0 +1,4 @@ +fun foo() { + val li = ArrayList().listIterator() + li.add("test") +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/singleModule/listIterator.txt b/analysis/analysis-api/testData/standalone/singleModule/listIterator.txt new file mode 100644 index 00000000000..e2a46ee8150 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/listIterator.txt @@ -0,0 +1,2 @@ +Resolved to: +public abstract fun add(element: T): kotlin.Unit \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.kt b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.kt new file mode 100644 index 00000000000..6c82f904516 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.kt @@ -0,0 +1,3 @@ +fun box(map: MutableMap) { + map.getOrDefault("key", "value") +} diff --git a/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.txt b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.txt new file mode 100644 index 00000000000..01533e93529 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault.txt @@ -0,0 +1,2 @@ +Resolved to: +@kotlin.SinceKotlin @kotlin.internal.PlatformDependent public open fun getOrDefault(key: K, defaultValue: V): V { /* compiled code */ } \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.kt b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.kt new file mode 100644 index 00000000000..7efd0593f91 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.kt @@ -0,0 +1,5 @@ +// WITH_STDLIB + +fun box(map: MutableMap) { + map.getOrDefault("key", null) +} diff --git a/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.txt b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.txt new file mode 100644 index 00000000000..a5303ec84e2 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/singleModule/mapGetOrDefault_nullable.txt @@ -0,0 +1,2 @@ +Resolved to: +PsiMethod:getOrDefault($this$getOrDefault: PsiType:Map, key: PsiType:K, defaultValue: PsiType:V): PsiType:V diff --git a/analysis/analysis-api/testData/standalone/singleModule/multipleFiles.txt b/analysis/analysis-api/testData/standalone/singleModule/multipleFiles.txt index 5450dae9b91..a16d0160042 100644 --- a/analysis/analysis-api/testData/standalone/singleModule/multipleFiles.txt +++ b/analysis/analysis-api/testData/standalone/singleModule/multipleFiles.txt @@ -1 +1,2 @@ Resolved to: +internal const val MinId = -1 \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/singleModule/singleFile.txt b/analysis/analysis-api/testData/standalone/singleModule/singleFile.txt index 5450dae9b91..b74faa62771 100644 --- a/analysis/analysis-api/testData/standalone/singleModule/singleFile.txt +++ b/analysis/analysis-api/testData/standalone/singleModule/singleFile.txt @@ -1 +1,2 @@ Resolved to: +annotation class MyAnno \ No newline at end of file diff --git a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt index 43721a0d104..4d74ba4751d 100644 --- a/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt +++ b/generators/analysis-api-generator/tests/org/jetbrains/kotlin/generators/tests/analysis/api/analysisApi.kt @@ -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") } }