diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compilerFacility/FirIdeNormalAnalysisSourceModuleFirPluginPrototypeMultiModuleCompilerFacilityTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compilerFacility/FirIdeNormalAnalysisSourceModuleFirPluginPrototypeMultiModuleCompilerFacilityTestGenerated.java index 4c85b73964d..30a21cd570c 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compilerFacility/FirIdeNormalAnalysisSourceModuleFirPluginPrototypeMultiModuleCompilerFacilityTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/compilerFacility/FirIdeNormalAnalysisSourceModuleFirPluginPrototypeMultiModuleCompilerFacilityTestGenerated.java @@ -56,4 +56,10 @@ public class FirIdeNormalAnalysisSourceModuleFirPluginPrototypeMultiModuleCompil public void testComposableFunctionMultiModules2() { runTest("analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableFunctionMultiModules2.kt"); } + + @Test + @TestMetadata("composableInlineFunctionExpressionParameter.kt") + public void testComposableInlineFunctionExpressionParameter() { + runTest("analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.kt"); + } } diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.ir.txt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.ir.txt new file mode 100644 index 00000000000..c7dd491ee42 --- /dev/null +++ b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.ir.txt @@ -0,0 +1,15 @@ +MODULE_FRAGMENT + FILE fqName: fileName:main.kt + FUN name:AuthorAndReadTime visibility:public modality:FINAL <> (b:p2.B) returnType:kotlin.Unit + VALUE_PARAMETER name:b index:0 type:p2.B + BLOCK_BODY + CALL 'public final fun Row (a: p2.A, content: @[MyComposable] @[ExtensionFunctionType] kotlin.Function1): kotlin.Unit [inline] declared in p3' type=kotlin.Unit origin=null + a: CONSTRUCTOR_CALL 'public constructor () [primary] declared in p2.A' type=p2.A origin=null + content: FUN_EXPR type=@[ExtensionFunctionType] kotlin.Function1 origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> ($receiver:p3.RowScope) returnType:kotlin.Unit + annotations: + MyComposable + $receiver: VALUE_PARAMETER name:$this$Row type:p3.RowScope + BLOCK_BODY + CALL 'public final fun callB (): kotlin.Unit declared in p2.B' type=kotlin.Unit origin=null + $this: GET_VAR 'b: p2.B declared in .AuthorAndReadTime' type=p2.B origin=null diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.kt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.kt new file mode 100644 index 00000000000..495ed7b9c4e --- /dev/null +++ b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.kt @@ -0,0 +1,40 @@ +// WITH_FIR_TEST_COMPILER_PLUGIN +// DUMP_IR + +// MODULE: lib +// MODULE_KIND: LibraryBinary +// FILE: p2/foo.kt +package p2 + +class A { + fun callA() {} +} + +class B { + fun callB() {} +} +// MODULE: lib2(lib) +// MODULE_KIND: LibraryBinary +// FILE: p3/bar.kt +package p3 + +import org.jetbrains.kotlin.fir.plugin.MyComposable +import p2.A + +interface RowScope + +inline fun Row(a: A, content: @MyComposable RowScope.() -> Unit) { + a.callA() +} +// MODULE: main(lib, lib2) +// FILE: main.kt +import org.jetbrains.kotlin.fir.plugin.MyComposable +import p2.A +import p2.B +import p3.Row + +fun AuthorAndReadTime(b: B) { + Row(A()) { + b.callB() + } +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.txt b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.txt new file mode 100644 index 00000000000..6835cafc792 --- /dev/null +++ b/analysis/analysis-api/testData/components/compilerFacility/firPluginPrototypeMultiModule/composableInlineFunctionExpressionParameter.txt @@ -0,0 +1,4 @@ +public final class MainKt { + // source: 'main.kt' + public final static method AuthorAndReadTime(p0: p2.B): void +} diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt index d3753ad70fa..d093edeea90 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/StubBasedFirTypeDeserializer.kt @@ -231,7 +231,11 @@ internal class StubBasedFirTypeDeserializer( constructor, arguments, isNullable = isNullable, - if (typeElement is KtFunctionType && typeElement.receiver != null) ConeAttributes.WithExtensionFunctionType else attributes + if (typeElement is KtFunctionType && typeElement.receiver != null) { + ConeAttributes.WithExtensionFunctionType.add(attributes) + } else { + attributes + } ) }