From e18a2d0a2ed8685339c38db303d99e9967f21fd0 Mon Sep 17 00:00:00 2001 From: Dmitriy Dolovov Date: Wed, 25 Oct 2023 12:26:02 +0200 Subject: [PATCH] [KLIB tool] Add tests for dumping metadata signatures --- .../callables.metadata-signatures.v1.txt | 11 ++ .../callables.metadata-signatures.v2.txt | 11 ++ ...ed_declarations.metadata-signatures.v1.txt | 1 + ...ed_declarations.metadata-signatures.v2.txt | 1 + .../imported_from_cinterop.lib.def | 1 + ...om_cinterop.lib.metadata-signatures.v1.txt | 28 +++ ...om_cinterop.lib.metadata-signatures.v2.txt | 28 +++ ...d_from_cinterop.metadata-signatures.v1.txt | 5 + ...d_from_cinterop.metadata-signatures.v2.txt | 5 + .../klib/dump-signatures/just_cinterop_c.def | 36 ++++ ...just_cinterop_c.metadata-signatures.v1.txt | 31 ++++ ...just_cinterop_c.metadata-signatures.v2.txt | 31 ++++ .../dump-signatures/just_cinterop_objc.def | 24 +++ ...t_cinterop_objc.metadata-signatures.v1.txt | 45 +++++ ...t_cinterop_objc.metadata-signatures.v2.txt | 45 +++++ ...type_parameters.metadata-signatures.v1.txt | 42 +++++ ...type_parameters.metadata-signatures.v2.txt | 42 +++++ .../visibility.metadata-signatures.v1.txt | 172 ++++++++++++++++++ .../visibility.metadata-signatures.v2.txt | 172 ++++++++++++++++++ ...ibDumpMetadataSignaturesTestGenerated.java | 78 ++++++++ ...ibDumpMetadataSignaturesTestGenerated.java | 74 ++++++++ .../generators/tests/GenerateNativeTests.kt | 19 ++ .../blackbox/AbstractNativeCInteropTest.kt | 22 ++- ...> AbstractNativeKlibDumpSignaturesTest.kt} | 111 +++++++---- .../support/util/TestCompilationArtifacts.kt | 10 + 25 files changed, 1004 insertions(+), 41 deletions(-) create mode 100644 native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v2.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v1.txt create mode 100644 native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v2.txt create mode 100644 native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeKlibDumpMetadataSignaturesTestGenerated.java create mode 100644 native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeKlibDumpMetadataSignaturesTestGenerated.java rename native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/{AbstractNativeKlibDumpIrSignaturesTest.kt => AbstractNativeKlibDumpSignaturesTest.kt} (55%) diff --git a/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v1.txt new file mode 100644 index 00000000000..cbac5f5eaf2 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v1.txt @@ -0,0 +1,11 @@ +callables/Foo.|-3340858080906402272[0] +callables/Foo.equals|4638265728071529943[0] +callables/Foo.hashCode|3409210261493131192[0] +callables/Foo.list.|423251439825877230[0] +callables/Foo.list|-8464310926974581514[0] +callables/Foo.toString|-1522858123163872138[0] +callables/Foo|null[0] +callables/funWith1Parameter|-2692397571002661707[0] +callables/funWith2Parameters|253442693142123504[0] +callables/funWithLocalMembers|-2046106097692888239[0] +callables/funWithoutParameters|-1655691975229201033[0] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v2.txt new file mode 100644 index 00000000000..0a96ba5782e --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/callables.metadata-signatures.v2.txt @@ -0,0 +1,11 @@ +callables/Foo.|(kotlin.collections.List<*>){}[0] +callables/Foo.equals|equals(kotlin.Any?){}[0] +callables/Foo.hashCode|hashCode(){}[0] +callables/Foo.list.|(){}[0] +callables/Foo.list|{}list[0] +callables/Foo.toString|toString(){}[0] +callables/Foo|null[0] +callables/funWith1Parameter|funWith1Parameter(kotlin.collections.Map<*,*>){}[0] +callables/funWith2Parameters|funWith2Parameters(kotlin.Pair<*,*>;callables.Foo){}[0] +callables/funWithLocalMembers|funWithLocalMembers(){}[0] +callables/funWithoutParameters|funWithoutParameters(){}[0] diff --git a/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v1.txt new file mode 100644 index 00000000000..401707331b9 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v1.txt @@ -0,0 +1 @@ +imported/test|6620506149988718649[0] diff --git a/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v2.txt new file mode 100644 index 00000000000..4701cca8e1e --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_declarations.metadata-signatures.v2.txt @@ -0,0 +1 @@ +imported/test|test(){}[0] diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def index e9f668a602e..250133593c4 100644 --- a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def +++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def @@ -1,3 +1,4 @@ +## FIR_IDENTICAL language = Objective-C package = imported_from_cinterop.lib --- diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v1.txt new file mode 100644 index 00000000000..8f825615481 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v1.txt @@ -0,0 +1,28 @@ +imported_from_cinterop.lib/Base.|2170982204859394228[100] +imported_from_cinterop.lib/Base.Companion.|-5645683436151566731[100] +imported_from_cinterop.lib/Base.Companion.equals|-2081205089284609834[100] +imported_from_cinterop.lib/Base.Companion.hashCode|3409210261493131192[100] +imported_from_cinterop.lib/Base.Companion.toString|-1522858123163872138[100] +imported_from_cinterop.lib/Base.Companion|null[100] +imported_from_cinterop.lib/Base.equals|-2081205089284609834[100] +imported_from_cinterop.lib/Base.hashCode|3409210261493131192[100] +imported_from_cinterop.lib/Base.init|-3274032692079634155[100] +imported_from_cinterop.lib/Base.nonOverriddenFunction|3505898422087519936[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty.|2758692278606108838[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty.|-2229258798912660779[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty|-355772021403371063[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty|-9006076905898583858[100] +imported_from_cinterop.lib/Base.overriddenFunction|-6472102329825707726[100] +imported_from_cinterop.lib/Base.overriddenProperty.|7022302077100732862[100] +imported_from_cinterop.lib/Base.overriddenProperty.|-4304223391766217362[100] +imported_from_cinterop.lib/Base.overriddenProperty|-1390063372067425061[100] +imported_from_cinterop.lib/Base.overriddenProperty|-7224960608403565684[100] +imported_from_cinterop.lib/Base.setNonOverriddenProperty|-5242067576658008142[100] +imported_from_cinterop.lib/Base.setOverriddenProperty|-8479216322956180924[100] +imported_from_cinterop.lib/Base.toString|-1522858123163872138[100] +imported_from_cinterop.lib/BaseMeta.|-5645683436151566731[100] +imported_from_cinterop.lib/BaseMeta.equals|-2081205089284609834[100] +imported_from_cinterop.lib/BaseMeta.hashCode|3409210261493131192[100] +imported_from_cinterop.lib/BaseMeta.toString|-1522858123163872138[100] +imported_from_cinterop.lib/BaseMeta|null[100] +imported_from_cinterop.lib/Base|null[100] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v2.txt new file mode 100644 index 00000000000..f7dc62928e5 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.metadata-signatures.v2.txt @@ -0,0 +1,28 @@ +imported_from_cinterop.lib/Base.|objc:init#Constructor[100] +imported_from_cinterop.lib/Base.Companion.|(){}[100] +imported_from_cinterop.lib/Base.Companion.equals|equals(other:kotlin.Any?){}[100] +imported_from_cinterop.lib/Base.Companion.hashCode|hashCode(){}[100] +imported_from_cinterop.lib/Base.Companion.toString|toString(){}[100] +imported_from_cinterop.lib/Base.Companion|null[100] +imported_from_cinterop.lib/Base.equals|equals(other:kotlin.Any?){}[100] +imported_from_cinterop.lib/Base.hashCode|hashCode(){}[100] +imported_from_cinterop.lib/Base.init|objc:init[100] +imported_from_cinterop.lib/Base.nonOverriddenFunction|objc:nonOverriddenFunction[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty.|objc:nonOverriddenProperty#Accessor[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty.|objc:setNonOverriddenProperty:#Accessor[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty|objc:nonOverriddenProperty[100] +imported_from_cinterop.lib/Base.nonOverriddenProperty|{}nonOverriddenProperty[100] +imported_from_cinterop.lib/Base.overriddenFunction|objc:overriddenFunction[100] +imported_from_cinterop.lib/Base.overriddenProperty.|objc:overriddenProperty#Accessor[100] +imported_from_cinterop.lib/Base.overriddenProperty.|objc:setOverriddenProperty:#Accessor[100] +imported_from_cinterop.lib/Base.overriddenProperty|objc:overriddenProperty[100] +imported_from_cinterop.lib/Base.overriddenProperty|{}overriddenProperty[100] +imported_from_cinterop.lib/Base.setNonOverriddenProperty|objc:setNonOverriddenProperty:[100] +imported_from_cinterop.lib/Base.setOverriddenProperty|objc:setOverriddenProperty:[100] +imported_from_cinterop.lib/Base.toString|toString(){}[100] +imported_from_cinterop.lib/BaseMeta.|(){}[100] +imported_from_cinterop.lib/BaseMeta.equals|equals(other:kotlin.Any?){}[100] +imported_from_cinterop.lib/BaseMeta.hashCode|hashCode(){}[100] +imported_from_cinterop.lib/BaseMeta.toString|toString(){}[100] +imported_from_cinterop.lib/BaseMeta|null[100] +imported_from_cinterop.lib/Base|null[100] diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v1.txt new file mode 100644 index 00000000000..7356d473ce0 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v1.txt @@ -0,0 +1,5 @@ +imported_from_cinterop.main/Derived.|-5645683436151566731[0] +imported_from_cinterop.main/Derived.overriddenFunction|6590605551359912218[0] +imported_from_cinterop.main/Derived.overriddenProperty|2151635420542149228[0] +imported_from_cinterop.main/Derived.setOverriddenProperty|8045446846177614528[0] +imported_from_cinterop.main/Derived|null[0] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v2.txt new file mode 100644 index 00000000000..2e7549fa431 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.metadata-signatures.v2.txt @@ -0,0 +1,5 @@ +imported_from_cinterop.main/Derived.|(){}[0] +imported_from_cinterop.main/Derived.overriddenFunction|overriddenFunction(){}[0] +imported_from_cinterop.main/Derived.overriddenProperty|overriddenProperty(){}[0] +imported_from_cinterop.main/Derived.setOverriddenProperty|setOverriddenProperty(kotlin.Int){}[0] +imported_from_cinterop.main/Derived|null[0] diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def new file mode 100644 index 00000000000..5f59205065a --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def @@ -0,0 +1,36 @@ +## FIR_IDENTICAL +language = C +package = just_cinterop_c +--- +typedef struct my_struct { + int i; + long l; +} my_struct_t; + +static short do_short(short x) { + return x; +} + +static int do_int(int x) { + return x; +} + +static long do_long(long x) { + return x; +} + +static long long do_long_long(long long x) { + return x; +} + +static void* do_void_ptr(void* x) { + return x; +} + +static my_struct_t do_my_struct_t(my_struct_t x) { + return x; +} + +static my_struct_t* do_my_struct_t_ptr(my_struct_t* x) { + return x; +} diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v1.txt new file mode 100644 index 00000000000..cee5a6d80b0 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v1.txt @@ -0,0 +1,31 @@ +just_cinterop_c/do_int|1434322103267605694[100] +just_cinterop_c/do_long_long|5431512018338225197[100] +just_cinterop_c/do_long|3843623137338116199[100] +just_cinterop_c/do_my_struct_t_ptr|-1042971359980028537[100] +just_cinterop_c/do_my_struct_t|-3313067324655591103[100] +just_cinterop_c/do_short|3714564778502624739[100] +just_cinterop_c/do_void_ptr|6411325604211317372[100] +just_cinterop_c/my_struct.|-4957092806283426321[100] +just_cinterop_c/my_struct.Companion.|-5645683436151566731[100] +just_cinterop_c/my_struct.Companion.align.|-456947334100421402[100] +just_cinterop_c/my_struct.Companion.align|6718308020076535624[100] +just_cinterop_c/my_struct.Companion.equals|4638265728071529943[100] +just_cinterop_c/my_struct.Companion.hashCode|3409210261493131192[100] +just_cinterop_c/my_struct.Companion.size.|-8255337774232345969[100] +just_cinterop_c/my_struct.Companion.size|-6253659984320132064[100] +just_cinterop_c/my_struct.Companion.toString|-1522858123163872138[100] +just_cinterop_c/my_struct.Companion|null[100] +just_cinterop_c/my_struct.equals|4638265728071529943[100] +just_cinterop_c/my_struct.hashCode|3409210261493131192[100] +just_cinterop_c/my_struct.i.|6945482638966853621[100] +just_cinterop_c/my_struct.i.|1223530399758590178[100] +just_cinterop_c/my_struct.i|5014384761142332495[100] +just_cinterop_c/my_struct.l.|3795442967620585[100] +just_cinterop_c/my_struct.l.|-5446416953361928077[100] +just_cinterop_c/my_struct.l|3307215303229595169[100] +just_cinterop_c/my_struct.rawPtr.|7179665485603104315[100] +just_cinterop_c/my_struct.rawPtr.|-5421930354690237067[100] +just_cinterop_c/my_struct.rawPtr|-9029326424296896258[100] +just_cinterop_c/my_struct.toString|-1522858123163872138[100] +just_cinterop_c/my_struct_t|null[100] +just_cinterop_c/my_struct|null[100] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v2.txt new file mode 100644 index 00000000000..2383a18f314 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_c.metadata-signatures.v2.txt @@ -0,0 +1,31 @@ +just_cinterop_c/do_int|do_int(kotlin.Int){}[100] +just_cinterop_c/do_long_long|do_long_long(kotlin.Long){}[100] +just_cinterop_c/do_long|do_long(kotlin.Long){}[100] +just_cinterop_c/do_my_struct_t_ptr|do_my_struct_t_ptr(kotlinx.cinterop.CValuesRef?){}[100] +just_cinterop_c/do_my_struct_t|do_my_struct_t(kotlinx.cinterop.CValue){}[100] +just_cinterop_c/do_short|do_short(kotlin.Short){}[100] +just_cinterop_c/do_void_ptr|do_void_ptr(kotlinx.cinterop.CValuesRef<*>?){}[100] +just_cinterop_c/my_struct.|(kotlin.native.internal.NativePtr){}[100] +just_cinterop_c/my_struct.Companion.|(){}[100] +just_cinterop_c/my_struct.Companion.align.|(){}[100] +just_cinterop_c/my_struct.Companion.align|{}align[100] +just_cinterop_c/my_struct.Companion.equals|equals(kotlin.Any?){}[100] +just_cinterop_c/my_struct.Companion.hashCode|hashCode(){}[100] +just_cinterop_c/my_struct.Companion.size.|(){}[100] +just_cinterop_c/my_struct.Companion.size|{}size[100] +just_cinterop_c/my_struct.Companion.toString|toString(){}[100] +just_cinterop_c/my_struct.Companion|null[100] +just_cinterop_c/my_struct.equals|equals(kotlin.Any?){}[100] +just_cinterop_c/my_struct.hashCode|hashCode(){}[100] +just_cinterop_c/my_struct.i.|(){}[100] +just_cinterop_c/my_struct.i.|(kotlin.Int){}[100] +just_cinterop_c/my_struct.i|{}i[100] +just_cinterop_c/my_struct.l.|(){}[100] +just_cinterop_c/my_struct.l.|(kotlin.Long){}[100] +just_cinterop_c/my_struct.l|{}l[100] +just_cinterop_c/my_struct.rawPtr.|(){}[100] +just_cinterop_c/my_struct.rawPtr.|(kotlin.native.internal.NativePtr){}[100] +just_cinterop_c/my_struct.rawPtr|{}rawPtr[100] +just_cinterop_c/my_struct.toString|toString(){}[100] +just_cinterop_c/my_struct_t|null[100] +just_cinterop_c/my_struct|null[100] diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def new file mode 100644 index 00000000000..5140202e52b --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def @@ -0,0 +1,24 @@ +## FIR_IDENTICAL +language = Objective-C +package = just_cinterop_c +--- +@protocol Foo +- (void) publicFunction; +@property int publicProperty; +@end + +@interface Bar { + @public + int publicProperty; + + @protected + int protectedProperty; + + @private + int privateProperty; +} +- (void) publicFunction; +@property int publicProperty; +@property int protectedProperty; +@property int privateProperty; +@end diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v1.txt new file mode 100644 index 00000000000..2d164d365fb --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v1.txt @@ -0,0 +1,45 @@ +just_cinterop_c/Bar.|-5645683436151566731[100] +just_cinterop_c/Bar.Companion.|-5645683436151566731[100] +just_cinterop_c/Bar.Companion.equals|-2081205089284609834[100] +just_cinterop_c/Bar.Companion.hashCode|3409210261493131192[100] +just_cinterop_c/Bar.Companion.toString|-1522858123163872138[100] +just_cinterop_c/Bar.Companion|null[100] +just_cinterop_c/Bar.equals|-2081205089284609834[100] +just_cinterop_c/Bar.hashCode|3409210261493131192[100] +just_cinterop_c/Bar.privateProperty.|-8267707224930489207[100] +just_cinterop_c/Bar.privateProperty.|4621602037959244694[100] +just_cinterop_c/Bar.privateProperty|-6462212042400280683[100] +just_cinterop_c/Bar.privateProperty|-8922468655287376401[100] +just_cinterop_c/Bar.protectedProperty.|-4758722322588334716[100] +just_cinterop_c/Bar.protectedProperty.|-6174815812875651902[100] +just_cinterop_c/Bar.protectedProperty|-8562300429588433762[100] +just_cinterop_c/Bar.protectedProperty|4139119745764260407[100] +just_cinterop_c/Bar.publicFunction|-3377919256695556180[100] +just_cinterop_c/Bar.publicProperty.|7531894259382220380[100] +just_cinterop_c/Bar.publicProperty.|7557405302477777370[100] +just_cinterop_c/Bar.publicProperty|-2583100363181944236[100] +just_cinterop_c/Bar.publicProperty|-4143202904126433310[100] +just_cinterop_c/Bar.setPrivateProperty|759191494056251076[100] +just_cinterop_c/Bar.setProtectedProperty|4624425239648765525[100] +just_cinterop_c/Bar.setPublicProperty|-3886657688182583568[100] +just_cinterop_c/Bar.toString|-1522858123163872138[100] +just_cinterop_c/BarMeta.|-5645683436151566731[100] +just_cinterop_c/BarMeta.equals|-2081205089284609834[100] +just_cinterop_c/BarMeta.hashCode|3409210261493131192[100] +just_cinterop_c/BarMeta.toString|-1522858123163872138[100] +just_cinterop_c/BarMeta|null[100] +just_cinterop_c/Bar|null[100] +just_cinterop_c/FooProtocol.equals|-2081205089284609834[100] +just_cinterop_c/FooProtocol.hashCode|3409210261493131192[100] +just_cinterop_c/FooProtocol.publicFunction|-3377919256695556180[100] +just_cinterop_c/FooProtocol.publicProperty.|7531894259382220380[100] +just_cinterop_c/FooProtocol.publicProperty.|7557405302477777370[100] +just_cinterop_c/FooProtocol.publicProperty|-2583100363181944236[100] +just_cinterop_c/FooProtocol.publicProperty|-4143202904126433310[100] +just_cinterop_c/FooProtocol.setPublicProperty|-3886657688182583568[100] +just_cinterop_c/FooProtocol.toString|-1522858123163872138[100] +just_cinterop_c/FooProtocolMeta.equals|-2081205089284609834[100] +just_cinterop_c/FooProtocolMeta.hashCode|3409210261493131192[100] +just_cinterop_c/FooProtocolMeta.toString|-1522858123163872138[100] +just_cinterop_c/FooProtocolMeta|null[100] +just_cinterop_c/FooProtocol|null[100] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v2.txt new file mode 100644 index 00000000000..0d0ecc224bc --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.metadata-signatures.v2.txt @@ -0,0 +1,45 @@ +just_cinterop_c/Bar.|(){}[100] +just_cinterop_c/Bar.Companion.|(){}[100] +just_cinterop_c/Bar.Companion.equals|equals(other:kotlin.Any?){}[100] +just_cinterop_c/Bar.Companion.hashCode|hashCode(){}[100] +just_cinterop_c/Bar.Companion.toString|toString(){}[100] +just_cinterop_c/Bar.Companion|null[100] +just_cinterop_c/Bar.equals|equals(other:kotlin.Any?){}[100] +just_cinterop_c/Bar.hashCode|hashCode(){}[100] +just_cinterop_c/Bar.privateProperty.|objc:privateProperty#Accessor[100] +just_cinterop_c/Bar.privateProperty.|objc:setPrivateProperty:#Accessor[100] +just_cinterop_c/Bar.privateProperty|objc:privateProperty[100] +just_cinterop_c/Bar.privateProperty|{}privateProperty[100] +just_cinterop_c/Bar.protectedProperty.|objc:protectedProperty#Accessor[100] +just_cinterop_c/Bar.protectedProperty.|objc:setProtectedProperty:#Accessor[100] +just_cinterop_c/Bar.protectedProperty|objc:protectedProperty[100] +just_cinterop_c/Bar.protectedProperty|{}protectedProperty[100] +just_cinterop_c/Bar.publicFunction|objc:publicFunction[100] +just_cinterop_c/Bar.publicProperty.|objc:publicProperty#Accessor[100] +just_cinterop_c/Bar.publicProperty.|objc:setPublicProperty:#Accessor[100] +just_cinterop_c/Bar.publicProperty|objc:publicProperty[100] +just_cinterop_c/Bar.publicProperty|{}publicProperty[100] +just_cinterop_c/Bar.setPrivateProperty|objc:setPrivateProperty:[100] +just_cinterop_c/Bar.setProtectedProperty|objc:setProtectedProperty:[100] +just_cinterop_c/Bar.setPublicProperty|objc:setPublicProperty:[100] +just_cinterop_c/Bar.toString|toString(){}[100] +just_cinterop_c/BarMeta.|(){}[100] +just_cinterop_c/BarMeta.equals|equals(other:kotlin.Any?){}[100] +just_cinterop_c/BarMeta.hashCode|hashCode(){}[100] +just_cinterop_c/BarMeta.toString|toString(){}[100] +just_cinterop_c/BarMeta|null[100] +just_cinterop_c/Bar|null[100] +just_cinterop_c/FooProtocol.equals|equals(other:kotlin.Any?){}[100] +just_cinterop_c/FooProtocol.hashCode|hashCode(){}[100] +just_cinterop_c/FooProtocol.publicFunction|objc:publicFunction[100] +just_cinterop_c/FooProtocol.publicProperty.|objc:publicProperty#Accessor[100] +just_cinterop_c/FooProtocol.publicProperty.|objc:setPublicProperty:#Accessor[100] +just_cinterop_c/FooProtocol.publicProperty|objc:publicProperty[100] +just_cinterop_c/FooProtocol.publicProperty|{}publicProperty[100] +just_cinterop_c/FooProtocol.setPublicProperty|objc:setPublicProperty:[100] +just_cinterop_c/FooProtocol.toString|toString(){}[100] +just_cinterop_c/FooProtocolMeta.equals|equals(other:kotlin.Any?){}[100] +just_cinterop_c/FooProtocolMeta.hashCode|hashCode(){}[100] +just_cinterop_c/FooProtocolMeta.toString|toString(){}[100] +just_cinterop_c/FooProtocolMeta|null[100] +just_cinterop_c/FooProtocol|null[100] diff --git a/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v1.txt new file mode 100644 index 00000000000..6a1331ecd57 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v1.txt @@ -0,0 +1,42 @@ +type_parameters/Class.|-8731461708390519279[0] +type_parameters/Class.Inner.|1783188413903974791[0] +type_parameters/Class.Inner.equals|4638265728071529943[0] +type_parameters/Class.Inner.hashCode|3409210261493131192[0] +type_parameters/Class.Inner.p2.|3135798795606784082[0] +type_parameters/Class.Inner.p2|1837305664617486052[0] +type_parameters/Class.Inner.q2.|1581299660970715646[0] +type_parameters/Class.Inner.q2|-1627953700386837072[0] +type_parameters/Class.Inner.toString|-1522858123163872138[0] +type_parameters/Class.Inner|null[0] +type_parameters/Class.Nested.|-8731461708390519279[0] +type_parameters/Class.Nested.equals|4638265728071529943[0] +type_parameters/Class.Nested.hashCode|3409210261493131192[0] +type_parameters/Class.Nested.q1.|-2187816410000771818[0] +type_parameters/Class.Nested.q1|-1786398010950985798[0] +type_parameters/Class.Nested.toString|-1522858123163872138[0] +type_parameters/Class.Nested|null[0] +type_parameters/Class.equals|4638265728071529943[0] +type_parameters/Class.hashCode|3409210261493131192[0] +type_parameters/Class.p1.|419663188770843259[0] +type_parameters/Class.p1|7711764890799440087[0] +type_parameters/Class.toString|-1522858123163872138[0] +type_parameters/Class|null[0] +type_parameters/FinalClass.|-8731461708390519279[0] +type_parameters/FinalClass.equals|4638265728071529943[0] +type_parameters/FinalClass.hashCode|3409210261493131192[0] +type_parameters/FinalClass.p1.|419663188770843259[0] +type_parameters/FinalClass.p1|7711764890799440087[0] +type_parameters/FinalClass.p2.|3135798795606784082[0] +type_parameters/FinalClass.p2|1837305664617486052[0] +type_parameters/FinalClass.toString|-1522858123163872138[0] +type_parameters/FinalClass|null[0] +type_parameters/OpenClass.|-6137285739236751325[0] +type_parameters/OpenClass.equals|4638265728071529943[0] +type_parameters/OpenClass.hashCode|3409210261493131192[0] +type_parameters/OpenClass.p1.|419663188770843259[0] +type_parameters/OpenClass.p1|7711764890799440087[0] +type_parameters/OpenClass.toString|-1522858123163872138[0] +type_parameters/OpenClass|null[0] +type_parameters/function|-4296911800141380254[0] +type_parameters/property.|-6424239601896786367[0] +type_parameters/property|4472899887396146803[0] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v2.txt new file mode 100644 index 00000000000..48b4c509912 --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/type_parameters.metadata-signatures.v2.txt @@ -0,0 +1,42 @@ +type_parameters/Class.|(1:0){}[0] +type_parameters/Class.Inner.|(2:1;1:0){}[0] +type_parameters/Class.Inner.equals|equals(kotlin.Any?){}[0] +type_parameters/Class.Inner.hashCode|hashCode(){}[0] +type_parameters/Class.Inner.p2.|(){}[0] +type_parameters/Class.Inner.p2|{}p2[0] +type_parameters/Class.Inner.q2.|(){}[0] +type_parameters/Class.Inner.q2|{}q2[0] +type_parameters/Class.Inner.toString|toString(){}[0] +type_parameters/Class.Inner|null[0] +type_parameters/Class.Nested.|(1:0){}[0] +type_parameters/Class.Nested.equals|equals(kotlin.Any?){}[0] +type_parameters/Class.Nested.hashCode|hashCode(){}[0] +type_parameters/Class.Nested.q1.|(){}[0] +type_parameters/Class.Nested.q1|{}q1[0] +type_parameters/Class.Nested.toString|toString(){}[0] +type_parameters/Class.Nested|null[0] +type_parameters/Class.equals|equals(kotlin.Any?){}[0] +type_parameters/Class.hashCode|hashCode(){}[0] +type_parameters/Class.p1.|(){}[0] +type_parameters/Class.p1|{}p1[0] +type_parameters/Class.toString|toString(){}[0] +type_parameters/Class|null[0] +type_parameters/FinalClass.|(1:0){}[0] +type_parameters/FinalClass.equals|equals(kotlin.Any?){}[0] +type_parameters/FinalClass.hashCode|hashCode(){}[0] +type_parameters/FinalClass.p1.|(){}[0] +type_parameters/FinalClass.p1|{}p1[0] +type_parameters/FinalClass.p2.|(){}[0] +type_parameters/FinalClass.p2|{}p2[0] +type_parameters/FinalClass.toString|toString(){}[0] +type_parameters/FinalClass|null[0] +type_parameters/OpenClass.|(1:0?){}[0] +type_parameters/OpenClass.equals|equals(kotlin.Any?){}[0] +type_parameters/OpenClass.hashCode|hashCode(){}[0] +type_parameters/OpenClass.p1.|(){}[0] +type_parameters/OpenClass.p1|{}p1[0] +type_parameters/OpenClass.toString|toString(){}[0] +type_parameters/OpenClass|null[0] +type_parameters/function|function(0:0){0§;1§>;2§>}[0] +type_parameters/property.|@0:0(){0§}[0] +type_parameters/property|@0:0{0§}property[0] diff --git a/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v1.txt b/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v1.txt new file mode 100644 index 00000000000..ac23fbefc5b --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v1.txt @@ -0,0 +1,172 @@ +visibility/InternalClass.|1280618353163213788[0] +visibility/InternalClass.NestedClass.|-5645683436151566731[0] +visibility/InternalClass.NestedClass.equals|4638265728071529943[0] +visibility/InternalClass.NestedClass.hashCode|3409210261493131192[0] +visibility/InternalClass.NestedClass.toString|-1522858123163872138[0] +visibility/InternalClass.NestedClass|null[0] +visibility/InternalClass.equals|4638265728071529943[0] +visibility/InternalClass.function|-3322893411126713785[0] +visibility/InternalClass.hashCode|3409210261493131192[0] +visibility/InternalClass.property.|4838831487146901942[0] +visibility/InternalClass.property|4634558160746314112[0] +visibility/InternalClass.toString|-1522858123163872138[0] +visibility/InternalClass|null[0] +visibility/InternalPAClass.|1280618353163213788[0] +visibility/InternalPAClass.NestedClass.|-5645683436151566731[0] +visibility/InternalPAClass.NestedClass.equals|4638265728071529943[0] +visibility/InternalPAClass.NestedClass.hashCode|3409210261493131192[0] +visibility/InternalPAClass.NestedClass.toString|-1522858123163872138[0] +visibility/InternalPAClass.NestedClass|null[0] +visibility/InternalPAClass.equals|4638265728071529943[0] +visibility/InternalPAClass.function|-3322893411126713785[0] +visibility/InternalPAClass.hashCode|3409210261493131192[0] +visibility/InternalPAClass.property.|4838831487146901942[0] +visibility/InternalPAClass.property|4634558160746314112[0] +visibility/InternalPAClass.toString|-1522858123163872138[0] +visibility/InternalPAClassInternalMembers.|1280618353163213788[0] +visibility/InternalPAClassInternalMembers.NestedClass.|-5645683436151566731[0] +visibility/InternalPAClassInternalMembers.NestedClass.equals|4638265728071529943[0] +visibility/InternalPAClassInternalMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/InternalPAClassInternalMembers.NestedClass.toString|-1522858123163872138[0] +visibility/InternalPAClassInternalMembers.NestedClass|null[0] +visibility/InternalPAClassInternalMembers.equals|4638265728071529943[0] +visibility/InternalPAClassInternalMembers.function|-3322893411126713785[0] +visibility/InternalPAClassInternalMembers.hashCode|3409210261493131192[0] +visibility/InternalPAClassInternalMembers.property.|4838831487146901942[0] +visibility/InternalPAClassInternalMembers.property|4634558160746314112[0] +visibility/InternalPAClassInternalMembers.toString|-1522858123163872138[0] +visibility/InternalPAClassInternalMembers|null[0] +visibility/InternalPAClassInternalPAMembers.|1280618353163213788[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.|-5645683436151566731[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.equals|4638265728071529943[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.toString|-1522858123163872138[0] +visibility/InternalPAClassInternalPAMembers.NestedClass|null[0] +visibility/InternalPAClassInternalPAMembers.equals|4638265728071529943[0] +visibility/InternalPAClassInternalPAMembers.function|-3322893411126713785[0] +visibility/InternalPAClassInternalPAMembers.hashCode|3409210261493131192[0] +visibility/InternalPAClassInternalPAMembers.property.|4838831487146901942[0] +visibility/InternalPAClassInternalPAMembers.property|4634558160746314112[0] +visibility/InternalPAClassInternalPAMembers.toString|-1522858123163872138[0] +visibility/InternalPAClassInternalPAMembers|null[0] +visibility/InternalPAClass|null[0] +visibility/InternalTypeAlias|null[0] +visibility/PublicAbstractClassProtectedMembers.|1280618353163213788[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass|null[0] +visibility/PublicAbstractClassProtectedMembers.equals|4638265728071529943[0] +visibility/PublicAbstractClassProtectedMembers.function|-3322893411126713785[0] +visibility/PublicAbstractClassProtectedMembers.hashCode|3409210261493131192[0] +visibility/PublicAbstractClassProtectedMembers.property.|4838831487146901942[0] +visibility/PublicAbstractClassProtectedMembers.property|4634558160746314112[0] +visibility/PublicAbstractClassProtectedMembers.toString|-1522858123163872138[0] +visibility/PublicAbstractClassProtectedMembers|null[0] +visibility/PublicClass.|1280618353163213788[0] +visibility/PublicClass.NestedClass.|-5645683436151566731[0] +visibility/PublicClass.NestedClass.equals|4638265728071529943[0] +visibility/PublicClass.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicClass.NestedClass.toString|-1522858123163872138[0] +visibility/PublicClass.NestedClass|null[0] +visibility/PublicClass.equals|4638265728071529943[0] +visibility/PublicClass.function|-3322893411126713785[0] +visibility/PublicClass.hashCode|3409210261493131192[0] +visibility/PublicClass.property.|4838831487146901942[0] +visibility/PublicClass.property|4634558160746314112[0] +visibility/PublicClass.toString|-1522858123163872138[0] +visibility/PublicClassInternalMembers.|1280618353163213788[0] +visibility/PublicClassInternalMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicClassInternalMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicClassInternalMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicClassInternalMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicClassInternalMembers.NestedClass|null[0] +visibility/PublicClassInternalMembers.equals|4638265728071529943[0] +visibility/PublicClassInternalMembers.function|-3322893411126713785[0] +visibility/PublicClassInternalMembers.hashCode|3409210261493131192[0] +visibility/PublicClassInternalMembers.property.|4838831487146901942[0] +visibility/PublicClassInternalMembers.property|4634558160746314112[0] +visibility/PublicClassInternalMembers.toString|-1522858123163872138[0] +visibility/PublicClassInternalMembers|null[0] +visibility/PublicClassInternalPAMembers.|1280618353163213788[0] +visibility/PublicClassInternalPAMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicClassInternalPAMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicClassInternalPAMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicClassInternalPAMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicClassInternalPAMembers.NestedClass|null[0] +visibility/PublicClassInternalPAMembers.equals|4638265728071529943[0] +visibility/PublicClassInternalPAMembers.function|-3322893411126713785[0] +visibility/PublicClassInternalPAMembers.hashCode|3409210261493131192[0] +visibility/PublicClassInternalPAMembers.property.|4838831487146901942[0] +visibility/PublicClassInternalPAMembers.property|4634558160746314112[0] +visibility/PublicClassInternalPAMembers.toString|-1522858123163872138[0] +visibility/PublicClassInternalPAMembers|null[0] +visibility/PublicClassPrivateMembers.|1280618353163213788[0] +visibility/PublicClassPrivateMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicClassPrivateMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicClassPrivateMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicClassPrivateMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicClassPrivateMembers.NestedClass|null[0] +visibility/PublicClassPrivateMembers.equals|4638265728071529943[0] +visibility/PublicClassPrivateMembers.function|-3322893411126713785[0] +visibility/PublicClassPrivateMembers.hashCode|3409210261493131192[0] +visibility/PublicClassPrivateMembers.property.|4838831487146901942[0] +visibility/PublicClassPrivateMembers.property|4634558160746314112[0] +visibility/PublicClassPrivateMembers.toString|-1522858123163872138[0] +visibility/PublicClassPrivateMembers|null[0] +visibility/PublicClassProtectedMembers.|1280618353163213788[0] +visibility/PublicClassProtectedMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicClassProtectedMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicClassProtectedMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicClassProtectedMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicClassProtectedMembers.NestedClass|null[0] +visibility/PublicClassProtectedMembers.equals|4638265728071529943[0] +visibility/PublicClassProtectedMembers.function|-3322893411126713785[0] +visibility/PublicClassProtectedMembers.hashCode|3409210261493131192[0] +visibility/PublicClassProtectedMembers.property.|4838831487146901942[0] +visibility/PublicClassProtectedMembers.property|4634558160746314112[0] +visibility/PublicClassProtectedMembers.toString|-1522858123163872138[0] +visibility/PublicClassProtectedMembers|null[0] +visibility/PublicClass|null[0] +visibility/PublicOpenClassProtectedMembers.|1280618353163213788[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.|-5645683436151566731[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.equals|4638265728071529943[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.hashCode|3409210261493131192[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.toString|-1522858123163872138[0] +visibility/PublicOpenClassProtectedMembers.NestedClass|null[0] +visibility/PublicOpenClassProtectedMembers.equals|4638265728071529943[0] +visibility/PublicOpenClassProtectedMembers.function|-3322893411126713785[0] +visibility/PublicOpenClassProtectedMembers.hashCode|3409210261493131192[0] +visibility/PublicOpenClassProtectedMembers.property.|4838831487146901942[0] +visibility/PublicOpenClassProtectedMembers.property|4634558160746314112[0] +visibility/PublicOpenClassProtectedMembers.toString|-1522858123163872138[0] +visibility/PublicOpenClassProtectedMembers|null[0] +visibility/PublicTypeAlias|null[0] +visibility/internalFun|1659039888467355008[0] +visibility/internalPAFun|6209200454159161588[0] +visibility/internalPAVal.|-2220884681594955448[0] +visibility/internalPAVal|-6296713716360945427[0] +visibility/internalPAVarInternalSetter.|-2165138686967166236[0] +visibility/internalPAVarInternalSetter.|4268094736790597293[0] +visibility/internalPAVarInternalSetter|8606185858874286601[0] +visibility/internalPAVarPrivateSetter.|7858377503331561427[0] +visibility/internalPAVarPrivateSetter.|-4897624577562128851[0] +visibility/internalPAVarPrivateSetter|5404459463495216914[0] +visibility/internalVal.|893019050309271437[0] +visibility/internalVal|-5707689433692618866[0] +visibility/internalVar.|-6573080696143133343[0] +visibility/internalVar.|-3057928575244553927[0] +visibility/internalVar|5445389237960049491[0] +visibility/publicFun|-6665644650067461598[0] +visibility/publicVal.|1629535235632860507[0] +visibility/publicVal|7143563926198876043[0] +visibility/publicVarInternalSetter.|-5725447636241167149[0] +visibility/publicVarInternalSetter.|6315993282168943718[0] +visibility/publicVarInternalSetter|-2855768891968336973[0] +visibility/publicVarPrivateSetter.|4875313296516845411[0] +visibility/publicVarPrivateSetter.|-6379763180019906827[0] +visibility/publicVarPrivateSetter|8666989530943431000[0] +visibility/publicVarPublicSetter.|3106038528912026803[0] +visibility/publicVarPublicSetter.|7158661382309278782[0] +visibility/publicVarPublicSetter|2172609198358158808[0] \ No newline at end of file diff --git a/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v2.txt b/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v2.txt new file mode 100644 index 00000000000..5d5a8e98f9f --- /dev/null +++ b/native/native.tests/testData/klib/dump-signatures/visibility.metadata-signatures.v2.txt @@ -0,0 +1,172 @@ +visibility/InternalClass.|(kotlin.String){}[0] +visibility/InternalClass.NestedClass.|(){}[0] +visibility/InternalClass.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalClass.NestedClass.hashCode|hashCode(){}[0] +visibility/InternalClass.NestedClass.toString|toString(){}[0] +visibility/InternalClass.NestedClass|null[0] +visibility/InternalClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalClass.function|function(){}[0] +visibility/InternalClass.hashCode|hashCode(){}[0] +visibility/InternalClass.property.|(){}[0] +visibility/InternalClass.property|{}property[0] +visibility/InternalClass.toString|toString(){}[0] +visibility/InternalClass|null[0] +visibility/InternalPAClass.|(kotlin.String){}[0] +visibility/InternalPAClass.NestedClass.|(){}[0] +visibility/InternalPAClass.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClass.NestedClass.hashCode|hashCode(){}[0] +visibility/InternalPAClass.NestedClass.toString|toString(){}[0] +visibility/InternalPAClass.NestedClass|null[0] +visibility/InternalPAClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClass.function|function(){}[0] +visibility/InternalPAClass.hashCode|hashCode(){}[0] +visibility/InternalPAClass.property.|(){}[0] +visibility/InternalPAClass.property|{}property[0] +visibility/InternalPAClass.toString|toString(){}[0] +visibility/InternalPAClassInternalMembers.|(kotlin.String){}[0] +visibility/InternalPAClassInternalMembers.NestedClass.|(){}[0] +visibility/InternalPAClassInternalMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClassInternalMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/InternalPAClassInternalMembers.NestedClass.toString|toString(){}[0] +visibility/InternalPAClassInternalMembers.NestedClass|null[0] +visibility/InternalPAClassInternalMembers.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClassInternalMembers.function|function(){}[0] +visibility/InternalPAClassInternalMembers.hashCode|hashCode(){}[0] +visibility/InternalPAClassInternalMembers.property.|(){}[0] +visibility/InternalPAClassInternalMembers.property|{}property[0] +visibility/InternalPAClassInternalMembers.toString|toString(){}[0] +visibility/InternalPAClassInternalMembers|null[0] +visibility/InternalPAClassInternalPAMembers.|(kotlin.String){}[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.|(){}[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/InternalPAClassInternalPAMembers.NestedClass.toString|toString(){}[0] +visibility/InternalPAClassInternalPAMembers.NestedClass|null[0] +visibility/InternalPAClassInternalPAMembers.equals|equals(kotlin.Any?){}[0] +visibility/InternalPAClassInternalPAMembers.function|function(){}[0] +visibility/InternalPAClassInternalPAMembers.hashCode|hashCode(){}[0] +visibility/InternalPAClassInternalPAMembers.property.|(){}[0] +visibility/InternalPAClassInternalPAMembers.property|{}property[0] +visibility/InternalPAClassInternalPAMembers.toString|toString(){}[0] +visibility/InternalPAClassInternalPAMembers|null[0] +visibility/InternalPAClass|null[0] +visibility/InternalTypeAlias|null[0] +visibility/PublicAbstractClassProtectedMembers.|(kotlin.String){}[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.|(){}[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass.toString|toString(){}[0] +visibility/PublicAbstractClassProtectedMembers.NestedClass|null[0] +visibility/PublicAbstractClassProtectedMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicAbstractClassProtectedMembers.function|function(){}[0] +visibility/PublicAbstractClassProtectedMembers.hashCode|hashCode(){}[0] +visibility/PublicAbstractClassProtectedMembers.property.|(){}[0] +visibility/PublicAbstractClassProtectedMembers.property|{}property[0] +visibility/PublicAbstractClassProtectedMembers.toString|toString(){}[0] +visibility/PublicAbstractClassProtectedMembers|null[0] +visibility/PublicClass.|(kotlin.String){}[0] +visibility/PublicClass.NestedClass.|(){}[0] +visibility/PublicClass.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClass.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicClass.NestedClass.toString|toString(){}[0] +visibility/PublicClass.NestedClass|null[0] +visibility/PublicClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClass.function|function(){}[0] +visibility/PublicClass.hashCode|hashCode(){}[0] +visibility/PublicClass.property.|(){}[0] +visibility/PublicClass.property|{}property[0] +visibility/PublicClass.toString|toString(){}[0] +visibility/PublicClassInternalMembers.|(kotlin.String){}[0] +visibility/PublicClassInternalMembers.NestedClass.|(){}[0] +visibility/PublicClassInternalMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassInternalMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicClassInternalMembers.NestedClass.toString|toString(){}[0] +visibility/PublicClassInternalMembers.NestedClass|null[0] +visibility/PublicClassInternalMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassInternalMembers.function|function(){}[0] +visibility/PublicClassInternalMembers.hashCode|hashCode(){}[0] +visibility/PublicClassInternalMembers.property.|(){}[0] +visibility/PublicClassInternalMembers.property|{}property[0] +visibility/PublicClassInternalMembers.toString|toString(){}[0] +visibility/PublicClassInternalMembers|null[0] +visibility/PublicClassInternalPAMembers.|(kotlin.String){}[0] +visibility/PublicClassInternalPAMembers.NestedClass.|(){}[0] +visibility/PublicClassInternalPAMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassInternalPAMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicClassInternalPAMembers.NestedClass.toString|toString(){}[0] +visibility/PublicClassInternalPAMembers.NestedClass|null[0] +visibility/PublicClassInternalPAMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassInternalPAMembers.function|function(){}[0] +visibility/PublicClassInternalPAMembers.hashCode|hashCode(){}[0] +visibility/PublicClassInternalPAMembers.property.|(){}[0] +visibility/PublicClassInternalPAMembers.property|{}property[0] +visibility/PublicClassInternalPAMembers.toString|toString(){}[0] +visibility/PublicClassInternalPAMembers|null[0] +visibility/PublicClassPrivateMembers.|(kotlin.String){}[0] +visibility/PublicClassPrivateMembers.NestedClass.|(){}[0] +visibility/PublicClassPrivateMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassPrivateMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicClassPrivateMembers.NestedClass.toString|toString(){}[0] +visibility/PublicClassPrivateMembers.NestedClass|null[0] +visibility/PublicClassPrivateMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassPrivateMembers.function|function(){}[0] +visibility/PublicClassPrivateMembers.hashCode|hashCode(){}[0] +visibility/PublicClassPrivateMembers.property.|(){}[0] +visibility/PublicClassPrivateMembers.property|{}property[0] +visibility/PublicClassPrivateMembers.toString|toString(){}[0] +visibility/PublicClassPrivateMembers|null[0] +visibility/PublicClassProtectedMembers.|(kotlin.String){}[0] +visibility/PublicClassProtectedMembers.NestedClass.|(){}[0] +visibility/PublicClassProtectedMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassProtectedMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicClassProtectedMembers.NestedClass.toString|toString(){}[0] +visibility/PublicClassProtectedMembers.NestedClass|null[0] +visibility/PublicClassProtectedMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicClassProtectedMembers.function|function(){}[0] +visibility/PublicClassProtectedMembers.hashCode|hashCode(){}[0] +visibility/PublicClassProtectedMembers.property.|(){}[0] +visibility/PublicClassProtectedMembers.property|{}property[0] +visibility/PublicClassProtectedMembers.toString|toString(){}[0] +visibility/PublicClassProtectedMembers|null[0] +visibility/PublicClass|null[0] +visibility/PublicOpenClassProtectedMembers.|(kotlin.String){}[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.|(){}[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.equals|equals(kotlin.Any?){}[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.hashCode|hashCode(){}[0] +visibility/PublicOpenClassProtectedMembers.NestedClass.toString|toString(){}[0] +visibility/PublicOpenClassProtectedMembers.NestedClass|null[0] +visibility/PublicOpenClassProtectedMembers.equals|equals(kotlin.Any?){}[0] +visibility/PublicOpenClassProtectedMembers.function|function(){}[0] +visibility/PublicOpenClassProtectedMembers.hashCode|hashCode(){}[0] +visibility/PublicOpenClassProtectedMembers.property.|(){}[0] +visibility/PublicOpenClassProtectedMembers.property|{}property[0] +visibility/PublicOpenClassProtectedMembers.toString|toString(){}[0] +visibility/PublicOpenClassProtectedMembers|null[0] +visibility/PublicTypeAlias|null[0] +visibility/internalFun|internalFun(){}[0] +visibility/internalPAFun|internalPAFun(){}[0] +visibility/internalPAVal.|(){}[0] +visibility/internalPAVal|{}internalPAVal[0] +visibility/internalPAVarInternalSetter.|(){}[0] +visibility/internalPAVarInternalSetter.|(kotlin.String){}[0] +visibility/internalPAVarInternalSetter|{}internalPAVarInternalSetter[0] +visibility/internalPAVarPrivateSetter.|(){}[0] +visibility/internalPAVarPrivateSetter.|(kotlin.String){}[0] +visibility/internalPAVarPrivateSetter|{}internalPAVarPrivateSetter[0] +visibility/internalVal.|(){}[0] +visibility/internalVal|{}internalVal[0] +visibility/internalVar.|(){}[0] +visibility/internalVar.|(kotlin.String){}[0] +visibility/internalVar|{}internalVar[0] +visibility/publicFun|publicFun(){}[0] +visibility/publicVal.|(){}[0] +visibility/publicVal|{}publicVal[0] +visibility/publicVarInternalSetter.|(){}[0] +visibility/publicVarInternalSetter.|(kotlin.String){}[0] +visibility/publicVarInternalSetter|{}publicVarInternalSetter[0] +visibility/publicVarPrivateSetter.|(){}[0] +visibility/publicVarPrivateSetter.|(kotlin.String){}[0] +visibility/publicVarPrivateSetter|{}publicVarPrivateSetter[0] +visibility/publicVarPublicSetter.|(){}[0] +visibility/publicVarPublicSetter.|(kotlin.String){}[0] +visibility/publicVarPublicSetter|{}publicVarPublicSetter[0] diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeKlibDumpMetadataSignaturesTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeKlibDumpMetadataSignaturesTestGenerated.java new file mode 100644 index 00000000000..ff56f8c5f73 --- /dev/null +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/FirNativeKlibDumpMetadataSignaturesTestGenerated.java @@ -0,0 +1,78 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.konan.test.blackbox; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.junit.jupiter.api.Tag; +import org.jetbrains.kotlin.konan.test.blackbox.support.group.FirPipeline; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateNativeTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("native/native.tests/testData/klib/dump-signatures") +@TestDataPath("$PROJECT_ROOT") +@Tag("frontend-fir") +@FirPipeline() +public class FirNativeKlibDumpMetadataSignaturesTestGenerated extends AbstractNativeKlibDumpMetadataSignaturesTest { + @Test + public void testAllFilesPresentInDump_signatures() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/dump-signatures"), Pattern.compile("^([^_](.+)).(kt|def)$"), null, true); + } + + @Test + @TestMetadata("callables.kt") + public void testCallables() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/callables.kt"); + } + + @Test + @TestMetadata("imported_declarations.kt") + public void testImported_declarations() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_declarations.kt"); + } + + @Test + @TestMetadata("imported_from_cinterop.kt") + public void testImported_from_cinterop() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.kt"); + } + + @Test + @TestMetadata("imported_from_cinterop.lib.def") + public void testImported_from_cinterop_lib() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def"); + } + + @Test + @TestMetadata("just_cinterop_c.def") + public void testJust_cinterop_c() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def"); + } + + @Test + @TestMetadata("just_cinterop_objc.def") + public void testJust_cinterop_objc() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def"); + } + + @Test + @TestMetadata("type_parameters.kt") + public void testType_parameters() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/type_parameters.kt"); + } + + @Test + @TestMetadata("visibility.kt") + public void testVisibility() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/visibility.kt"); + } +} diff --git a/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeKlibDumpMetadataSignaturesTestGenerated.java b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeKlibDumpMetadataSignaturesTestGenerated.java new file mode 100644 index 00000000000..728e9dd6a31 --- /dev/null +++ b/native/native.tests/tests-gen/org/jetbrains/kotlin/konan/test/blackbox/NativeKlibDumpMetadataSignaturesTestGenerated.java @@ -0,0 +1,74 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.konan.test.blackbox; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.GenerateNativeTestsKt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("native/native.tests/testData/klib/dump-signatures") +@TestDataPath("$PROJECT_ROOT") +public class NativeKlibDumpMetadataSignaturesTestGenerated extends AbstractNativeKlibDumpMetadataSignaturesTest { + @Test + public void testAllFilesPresentInDump_signatures() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/native.tests/testData/klib/dump-signatures"), Pattern.compile("^([^_](.+)).(kt|def)$"), null, true); + } + + @Test + @TestMetadata("callables.kt") + public void testCallables() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/callables.kt"); + } + + @Test + @TestMetadata("imported_declarations.kt") + public void testImported_declarations() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_declarations.kt"); + } + + @Test + @TestMetadata("imported_from_cinterop.kt") + public void testImported_from_cinterop() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.kt"); + } + + @Test + @TestMetadata("imported_from_cinterop.lib.def") + public void testImported_from_cinterop_lib() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/imported_from_cinterop.lib.def"); + } + + @Test + @TestMetadata("just_cinterop_c.def") + public void testJust_cinterop_c() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/just_cinterop_c.def"); + } + + @Test + @TestMetadata("just_cinterop_objc.def") + public void testJust_cinterop_objc() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/just_cinterop_objc.def"); + } + + @Test + @TestMetadata("type_parameters.kt") + public void testType_parameters() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/type_parameters.kt"); + } + + @Test + @TestMetadata("visibility.kt") + public void testVisibility() throws Exception { + runTest("native/native.tests/testData/klib/dump-signatures/visibility.kt"); + } +} diff --git a/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt b/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt index fdfd0e195cc..8ea7180af9f 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/generators/tests/GenerateNativeTests.kt @@ -259,6 +259,25 @@ fun main() { } } + // Dump KLIB metadata signatures tests + testGroup("native/native.tests/tests-gen", "native/native.tests/testData") { + testClass( + suiteTestClassName = "NativeKlibDumpMetadataSignaturesTestGenerated", + ) { + model("klib/dump-signatures", pattern = "^([^_](.+)).(kt|def)$", recursive = true) + } + } + testGroup("native/native.tests/tests-gen", "native/native.tests/testData") { + testClass( + suiteTestClassName = "FirNativeKlibDumpMetadataSignaturesTestGenerated", + annotations = listOf( + *frontendFir() + ) + ) { + model("klib/dump-signatures", pattern = "^([^_](.+)).(kt|def)$", recursive = true) + } + } + // LLDB integration tests. testGroup("native/native.tests/tests-gen", "native/native.tests/testData") { testClass( diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropTest.kt index f6692039fc4..4d61ece10ab 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeCInteropTest.kt @@ -78,8 +78,8 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() { val includeFolder = testDataDir.resolve("include") val defFile = testPathFull.resolve(defFileName) val defContents = defFile.readText().split("\n").map { it.trim() } - val defHasObjC = defContents.any { it.endsWith("Objective-C") } - Assumptions.assumeFalse(defHasObjC && !targets.testTarget.family.isAppleFamily) + + muteCInteropTestIfNecessary(defFile, targets.testTarget) val defHasHeaders = defContents.any { it.startsWith("headers") } Assumptions.assumeFalse(fmodules && defHasHeaders) @@ -156,3 +156,21 @@ abstract class AbstractNativeCInteropTest : AbstractNativeCInteropBaseTest() { return testPathFull.resolve("contents.gold.${goldenFilePart}.txt") } } + +internal fun muteCInteropTestIfNecessary(defFile: File, target: KonanTarget) { + if (target.family.isAppleFamily) return + + defFile.readLines().forEach { line -> + if (line.startsWith("---")) return + + val parts = line.split('=') + if (parts.size == 2 + && parts[0].trim().equals("language", ignoreCase = true) + && parts[1].trim().equals("Objective-C", ignoreCase = true) + ) { + Assumptions.abort("C-interop tests with Objective-C are not supported at non-Apple targets, def file: $defFile") + } + } +} +//Assumptions.assumeFalse(defHasObjC && !targets.testTarget.family.isAppleFamily) + diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpIrSignaturesTest.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpSignaturesTest.kt similarity index 55% rename from native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpIrSignaturesTest.kt rename to native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpSignaturesTest.kt index 69fe26edd56..c46d223e611 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpIrSignaturesTest.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/AbstractNativeKlibDumpSignaturesTest.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.konan.test.blackbox import com.intellij.testFramework.TestDataFile import org.jetbrains.kotlin.konan.test.blackbox.support.* -import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationArtifact +import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationArtifact.KLIB import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationDependency import org.jetbrains.kotlin.konan.test.blackbox.support.compilation.TestCompilationResult.Companion.assertSuccess import org.jetbrains.kotlin.konan.test.blackbox.support.runner.TestRunChecks @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.konan.test.blackbox.support.settings.PipelineType import org.jetbrains.kotlin.konan.test.blackbox.support.settings.Timeouts import org.jetbrains.kotlin.konan.test.blackbox.support.util.getAbsoluteFile import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpIrSignatures +import org.jetbrains.kotlin.konan.test.blackbox.support.util.dumpMetadataSignatures import org.jetbrains.kotlin.library.KotlinIrSignatureVersion import org.jetbrains.kotlin.test.services.JUnit5Assertions.assertEqualsToFile import org.jetbrains.kotlin.test.utils.withExtension @@ -24,59 +25,37 @@ import org.junit.jupiter.api.Tag import java.io.File @Tag("klib") -abstract class AbstractNativeKlibDumpIrSignaturesTest : AbstractNativeSimpleTest() { +abstract class AbstractNativeKlibDumpSignaturesTest : AbstractNativeSimpleTest() { protected fun runTest(@TestDataFile testDataPath: String) { val testDataFile = getAbsoluteFile(testDataPath) muteTestIfNecessary(testDataFile) - val dependencies: List> = buildList { - this += compileRegularDependencies(testDataFile) - this += compileInteropDependencies(testDataFile) - } - - val library = compileSingleFileToLibrary(testDataFile, dependencies) + val library = buildLibrary(testDataFile) val testPathNoExtension = testDataFile.canonicalPath.substringBeforeLast(".") - val firSpecificExt = - if (testRunSettings.get() == PipelineType.K2 && !firIdentical(testDataFile)) - ".fir" - else "" + val firSpecificExt = if (testRunSettings.get() == PipelineType.K2 && !firIdentical(testDataFile)) ".fir" else "" KotlinIrSignatureVersion.CURRENTLY_SUPPORTED_VERSIONS.forEach { signatureVersion -> - val expectedContents = File("$testPathNoExtension$firSpecificExt.ir-signatures.v${signatureVersion.number}.txt") + val expectedContents = File("$testPathNoExtension$firSpecificExt.$suffix.v${signatureVersion.number}.txt") assertSignaturesMatchExpected(library, expectedContents, signatureVersion) } - } + internal abstract val suffix: String + internal abstract fun buildLibrary(testDataFile: File): KLIB + internal abstract fun dumpSignatures(library: KLIB, signatureVersion: KotlinIrSignatureVersion): String + private fun assertSignaturesMatchExpected( - library: TestCompilationArtifact.KLIB, + library: KLIB, expectedContents: File, - signatureVersion: KotlinIrSignatureVersion + signatureVersion: KotlinIrSignatureVersion, ) { - val kotlinNativeClassLoader = testRunSettings.get() - val dumpedSignatures = library.dumpIrSignatures(kotlinNativeClassLoader.classLoader, signatureVersion) + val dumpedSignatures = dumpSignatures(library, signatureVersion) assertEqualsToFile(expectedContents, dumpedSignatures) } - private fun compileInteropDependencies(testDataFile: File): List> { - val defFile = testDataFile.withExtension(".lib.def") - if (!defFile.exists()) return emptyList() - - assertTrue(defFile.isFile) { "Def file does not exist: $defFile" } - - return listOf( - cinteropToLibrary( - targets = targets, - defFile = defFile, - outputDir = buildDir, - freeCompilerArgs = TestCompilerArgs.EMPTY - ).assertSuccess().resultingArtifact.asLibraryDependency() - ) - } - - private fun compileRegularDependencies(testDataFile: File): List> { + internal fun compileRegularDependencies(testDataFile: File): List> { val mainSourceFileName = testDataFile.name return testDataFile.parentFile.listFiles().orEmpty().mapNotNull { dependencyTestDataFile -> @@ -87,14 +66,23 @@ abstract class AbstractNativeKlibDumpIrSignaturesTest : AbstractNativeSimpleTest if (dependencyName.isBlank()) return@mapNotNull null val dependencySourceFile = dependencyTestDataFile.copyTo(buildDir.resolve("$dependencyName.kt")) - compileSingleFileToLibrary(dependencySourceFile, emptyList()).asLibraryDependency() + compileSingleKotlinFileToLibrary(dependencySourceFile, emptyList()).asLibraryDependency() } } - private fun compileSingleFileToLibrary( + internal fun compileCInteropDependencies(testDataFile: File): List> { + val defFile = testDataFile.withExtension(".lib.def") + if (!defFile.exists()) return emptyList() + + assertTrue(defFile.isFile) { "Def file does not exist: $defFile" } + + return listOf(compileDefFileToLibrary(defFile).asLibraryDependency()) + } + + internal fun compileSingleKotlinFileToLibrary( sourceFile: File, - dependencies: List>, - ): TestCompilationArtifact.KLIB { + dependencies: List>, + ): KLIB { val moduleName: String = sourceFile.nameWithoutExtension val module = TestModule.Exclusive(moduleName, emptySet(), emptySet(), emptySet()) module.files += TestFile.createCommitted(sourceFile, module) @@ -113,4 +101,49 @@ abstract class AbstractNativeKlibDumpIrSignaturesTest : AbstractNativeSimpleTest return compileToLibrary(testCase, *dependencies.toTypedArray()).assertSuccess().resultingArtifact } + + internal fun compileDefFileToLibrary(defFile: File): KLIB { + muteCInteropTestIfNecessary(defFile, targets.testTarget) + + return cinteropToLibrary( + targets = targets, + defFile = defFile, + outputDir = buildDir, + freeCompilerArgs = TestCompilerArgs.EMPTY + ).assertSuccess().resultingArtifact + } +} + +abstract class AbstractNativeKlibDumpIrSignaturesTest : AbstractNativeKlibDumpSignaturesTest() { + override val suffix get() = "ir-signatures" + + override fun buildLibrary(testDataFile: File) = compileSingleKotlinFileToLibrary( + sourceFile = testDataFile, + dependencies = compileRegularDependencies(testDataFile) + compileCInteropDependencies(testDataFile) + ) + + override fun dumpSignatures(library: KLIB, signatureVersion: KotlinIrSignatureVersion) = + library.dumpIrSignatures( + testRunSettings.get().classLoader, + signatureVersion + ) +} + +abstract class AbstractNativeKlibDumpMetadataSignaturesTest : AbstractNativeKlibDumpSignaturesTest() { + override val suffix get() = "metadata-signatures" + + override fun buildLibrary(testDataFile: File) = when (testDataFile.extension) { + "kt" -> compileSingleKotlinFileToLibrary( + sourceFile = testDataFile, + dependencies = compileRegularDependencies(testDataFile) + compileCInteropDependencies(testDataFile) + ) + "def" -> compileDefFileToLibrary(testDataFile) + else -> error("Unexpected test data file: $testDataFile") + } + + override fun dumpSignatures(library: KLIB, signatureVersion: KotlinIrSignatureVersion) = + library.dumpMetadataSignatures( + testRunSettings.get().classLoader, + signatureVersion + ).lineSequence().filter(String::isNotBlank).sorted().joinToString("\n", postfix = "\n") } diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/TestCompilationArtifacts.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/TestCompilationArtifacts.kt index e8ff349adb4..7ad143a34e5 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/TestCompilationArtifacts.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/util/TestCompilationArtifacts.kt @@ -44,6 +44,16 @@ internal fun TestCompilationArtifact.KLIB.dumpIr( /* signatureVersion= */ signatureVersion?.let { getSignatureVersionForIsolatedClassLoader(kotlinNativeClassLoader, signatureVersion) } ) +internal fun TestCompilationArtifact.KLIB.dumpMetadataSignatures( + kotlinNativeClassLoader: ClassLoader, + signatureVersion: KotlinIrSignatureVersion, +): String = invokeKlibTool( + kotlinNativeClassLoader = kotlinNativeClassLoader, + klibFile = klibFile, + functionName = "dumpMetadataSignatures", + /* signatureVersion= */ getSignatureVersionForIsolatedClassLoader(kotlinNativeClassLoader, signatureVersion) +) + internal fun TestCompilationArtifact.KLIB.dumpIrSignatures( kotlinNativeClassLoader: ClassLoader, signatureVersion: KotlinIrSignatureVersion,