[K/N] KT-53069: Guard against recursive generic type argument constraints during objc export

Merge-request: KT-MR-7872
Merged-by: Gleb Lukianets <Gleb.Lukianets@jetbrains.com>
This commit is contained in:
Gleb Lukianets
2022-12-08 14:03:45 +00:00
committed by Space Team
parent 96e1ba045c
commit a3e396e7e4
8 changed files with 173 additions and 46 deletions
@@ -1462,6 +1462,20 @@ __attribute__((swift_name("OverrideMethodsOfAnyKt")))
+ (BOOL)testObj:(id)obj other:(id)other swift:(BOOL)swift error:(NSError * _Nullable * _Nullable)error __attribute__((swift_name("test(obj:other:swift:)")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecList")))
@interface KtRecList<T> : KtBase
- (instancetype)initWithValue:(NSArray<id> *)value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) NSArray<id> *value __attribute__((swift_name("value")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecFunc")))
@interface KtRecFunc<T> : KtBase
- (instancetype)initWithValue:(id (^)(void))value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) id (^value)(void) __attribute__((swift_name("value")));
@end
__attribute__((swift_name("RefinedClassA")))
@interface KtRefinedClassA : KtBase
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer));
@@ -1397,6 +1397,20 @@ __attribute__((swift_name("OverrideMethodsOfAnyKt")))
+ (BOOL)testObj:(id)obj other:(id)other swift:(BOOL)swift error:(NSError * _Nullable * _Nullable)error __attribute__((swift_name("test(obj:other:swift:)")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecList")))
@interface KtRecList<T> : KtBase
- (instancetype)initWithValue:(NSArray<id> *)value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) NSArray<id> *value __attribute__((swift_name("value")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecFunc")))
@interface KtRecFunc<T> : KtBase
- (instancetype)initWithValue:(id (^)(void))value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) id (^value)(void) __attribute__((swift_name("value")));
@end
__attribute__((swift_name("RefinedClassA")))
@interface KtRefinedClassA : KtBase
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer));
@@ -1397,6 +1397,20 @@ __attribute__((swift_name("OverrideMethodsOfAnyKt")))
+ (BOOL)testObj:(id)obj other:(id)other swift:(BOOL)swift error:(NSError * _Nullable * _Nullable)error __attribute__((swift_name("test(obj:other:swift:)")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecList")))
@interface KtRecList : KtBase
- (instancetype)initWithValue:(NSArray<id> *)value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) NSArray<id> *value __attribute__((swift_name("value")));
@end
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("RecFunc")))
@interface KtRecFunc : KtBase
- (instancetype)initWithValue:(id (^)(void))value __attribute__((swift_name("init(value:)"))) __attribute__((objc_designated_initializer));
@property (readonly) id (^value)(void) __attribute__((swift_name("value")));
@end
__attribute__((swift_name("RefinedClassA")))
@interface KtRefinedClassA : KtBase
- (instancetype)init __attribute__((swift_name("init()"))) __attribute__((objc_designated_initializer));
@@ -0,0 +1,10 @@
/*
* Copyright 2010-2022 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 recursiveGenericArguments
class RecList<T: List<T>>(val value: T)
class RecFunc<T : () -> T>(val value: T)
@@ -0,0 +1,17 @@
import Kt
#if !NO_GENERICS
private func testRecursiveGenericArguments() throws {
try assertTrue(type(of: RecList<NSArray>(value: []).value) == [Any].self)
}
#endif
class RecursiveGenericArgumentsTests : SimpleTestProvider {
override init() {
super.init()
#if !NO_GENERICS
test("TestRecursiveGenericArguments", testRecursiveGenericArguments)
#endif
}
}