From 468efc77dd7d938c69259c7898aca7dae63748e7 Mon Sep 17 00:00:00 2001 From: "eugene.levenetc" Date: Fri, 23 Feb 2024 18:02:08 +0100 Subject: [PATCH] [ObjCExport] Add failing member function signature order test KT-66066 --- .../kotlin/objcexport/translationOrder.kt | 8 ++++- .../tests/ObjCExportHeaderGeneratorTest.kt | 9 ++++++ .../!memberFunctionSignatureOrder.h | 31 +++++++++++++++++++ .../memberFunctionSignatureOrder/Foo.kt | 4 +++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/!memberFunctionSignatureOrder.h create mode 100644 native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/Foo.kt diff --git a/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translationOrder.kt b/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translationOrder.kt index f023dd87684..f19030274ef 100644 --- a/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translationOrder.kt +++ b/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translationOrder.kt @@ -19,7 +19,13 @@ internal val StableFunctionOrder: Comparator { it.isConstructor }, { it.name }, { it.valueParameters.size }, - // TODO NOW! { KonanManglerDesc.run { it.signatureString(false) } } + /** + * Signature order should be added + * + * See KT-66066 + * [org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportTranslatorKt.makeMethodsOrderStable] + * { KonanManglerDesc.run { it.signatureString(false) } } + */ ) internal val StableClassifierOrder: Comparator = diff --git a/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportHeaderGeneratorTest.kt b/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportHeaderGeneratorTest.kt index 38776b525fa..48c0247b3db 100644 --- a/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportHeaderGeneratorTest.kt +++ b/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportHeaderGeneratorTest.kt @@ -312,6 +312,15 @@ class ObjCExportHeaderGeneratorTest(private val generator: HeaderGenerator) { doTest(headersTestDataDir.resolve("vararg")) } + /** + * KT-66066 + */ + @Test + @TodoAnalysisApi + fun `test - member function signature order`() { + doTest(headersTestDataDir.resolve("memberFunctionSignatureOrder")) + } + private fun doTest(root: File, configuration: Configuration = Configuration()) { if (!root.isDirectory) fail("Expected ${root.absolutePath} to be directory") val generatedHeaders = generator.generateHeaders(root, configuration).toString() diff --git a/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/!memberFunctionSignatureOrder.h b/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/!memberFunctionSignatureOrder.h new file mode 100644 index 00000000000..163b3cee978 --- /dev/null +++ b/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/!memberFunctionSignatureOrder.h @@ -0,0 +1,31 @@ +#import +#import +#import +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunknown-warning-option" +#pragma clang diagnostic ignored "-Wincompatible-property-type" +#pragma clang diagnostic ignored "-Wnullability" + +#pragma push_macro("_Nullable_result") +#if !__has_feature(nullability_nullable_result) +#undef _Nullable_result +#define _Nullable_result _Nullable +#endif + +__attribute__((objc_subclassing_restricted)) +@interface Foo : Base +- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer)); ++ (instancetype)new __attribute__((availability(swift, unavailable, message="use object initializers instead"))); +- (void)fooA:(NSString *)a b:(int32_t)b __attribute__((swift_name("foo(a:b:)"))); +- (void)fooB:(NSString *)b a:(NSString *)a __attribute__((swift_name("foo(b:a:)"))); +@end + +#pragma pop_macro("_Nullable_result") +#pragma clang diagnostic pop +NS_ASSUME_NONNULL_END diff --git a/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/Foo.kt b/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/Foo.kt new file mode 100644 index 00000000000..8173d6b4af5 --- /dev/null +++ b/native/objcexport-header-generator/testData/headers/memberFunctionSignatureOrder/Foo.kt @@ -0,0 +1,4 @@ +class Foo { + fun foo(b: String, a: String) = Unit + fun foo(a: String, b: Int) = Unit +} \ No newline at end of file