From 7e65f125cc79075e75956d81b40caa759a17b752 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Wed, 7 Feb 2024 13:24:16 -0800 Subject: [PATCH] Reproduce wrong binary resolution to fun w/ value class ^KT-65653 --- ...lePsiDeclarationProviderTestGenerated.java | 12 +++++ .../binary/propertyWithValueClass.kt | 40 +++++++++++++++ .../binary/propertyWithValueClass.txt | 2 + .../binary/topLevelFunctionWithValueClass.kt | 51 +++++++++++++++++++ .../binary/topLevelFunctionWithValueClass.txt | 2 + 5 files changed, 107 insertions(+) create mode 100644 analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.kt create mode 100644 analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.txt create mode 100644 analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.kt create mode 100644 analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.txt diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisLibraryBinaryModulePsiDeclarationProviderTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisLibraryBinaryModulePsiDeclarationProviderTestGenerated.java index c65d85aa64f..158f1aa7aea 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisLibraryBinaryModulePsiDeclarationProviderTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/psiDeclarationProvider/FirStandaloneNormalAnalysisLibraryBinaryModulePsiDeclarationProviderTestGenerated.java @@ -111,4 +111,16 @@ public class FirStandaloneNormalAnalysisLibraryBinaryModulePsiDeclarationProvide public void testPropertiesInOuterClass() throws Exception { runTest("analysis/analysis-api/testData/standalone/binary/propertiesInOuterClass.kt"); } + + @Test + @TestMetadata("propertyWithValueClass.kt") + public void testPropertyWithValueClass() throws Exception { + runTest("analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.kt"); + } + + @Test + @TestMetadata("topLevelFunctionWithValueClass.kt") + public void testTopLevelFunctionWithValueClass() throws Exception { + runTest("analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.kt"); + } } diff --git a/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.kt b/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.kt new file mode 100644 index 00000000000..dea7f2dab52 --- /dev/null +++ b/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.kt @@ -0,0 +1,40 @@ +// MODULE: lib + +// FILE: some/graphics/Color.kt + +package some.graphics + +@JvmInline +value class Color(val value: Int) { + companion object { + val Blue = Color(42) + } +} + +// FILE: some/unit/ColorProvider.kt + +package some.unit + +import some.graphics.Color + +var changingColor: Color? = null + +class ColorProvider { + val color: Color + get() = changingColor ?: Color.Blue + + @Deprecated(message = "For binary compatibility") //, level = DeprecationLevel.HIDDEN) + @get:JvmName("getColor") + val deprecatedColor: Color? + get() = changingColor +} + +// MODULE: app(lib) +// MODULE_KIND: Source +// FILE: main.kt + +import some.unit.ColorProvider + +fun test() { + val color = ColorProvider().color +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.txt b/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.txt new file mode 100644 index 00000000000..c562d298e8d --- /dev/null +++ b/analysis/analysis-api/testData/standalone/binary/propertyWithValueClass.txt @@ -0,0 +1,2 @@ +Resolved to: +PsiMethod:getColor(): PsiType:Color \ No newline at end of file diff --git a/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.kt b/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.kt new file mode 100644 index 00000000000..dd60db2386a --- /dev/null +++ b/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.kt @@ -0,0 +1,51 @@ +// MODULE: lib + +// FILE: some/graphics/Color.kt + +package some.graphics + +@JvmInline +value class Color(val value: Int) { + companion object { + val Blue = Color(42) + } +} + +// FILE: some/unit/ColorProvider.kt + +package some.unit + +import some.graphics.Color + +interface Context + +interface ColorProvider { + fun getColor(context: Context): Color +} + +fun ColorProvider(color: Color): ColorProvider { + return FixedColorProvider(color) +} + +fun ColorProvider(resId: Int): ColorProvider { + return ResourceColorProvider(resId) +} + +data class FixedColorProvider(val color: Color) : ColorProvider { + override fun getColor(context: Context) = color +} + +data class ResourceColorProvider(val resId: Int) : ColorProvider { + override fun getColor(context: Context): Color = Color(resId) +} + +// MODULE: app(lib) +// MODULE_KIND: Source +// FILE: main.kt + +import some.graphics.Color +import some.unit.ColorProvider + +fun test() { + val color = ColorProvider(color = Color.Blue) +} diff --git a/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.txt b/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.txt new file mode 100644 index 00000000000..74f073427fc --- /dev/null +++ b/analysis/analysis-api/testData/standalone/binary/topLevelFunctionWithValueClass.txt @@ -0,0 +1,2 @@ +Resolved to: +PsiMethod:ColorProvider(resId: PsiType:int): PsiType:ColorProvider