dotnet / dotnet/macios

[generator] Support for generic classes in our block trampolines

Open
#8,993 0 comments 0 reactions 0 assignees View on GitHub
bug generator iOS
Dominant language
C#
Stars
2.9k
Forks
576
Avg merge
2d 12h
Merged PRs (30d)
123

Description

Binding UIKit brought some generic classes into the mix of our blocks support, see https://github.com/xamarin/xamarin-macios/pull/8992/files#diff-1ca9e8e46629c0f8806cee2c8be4aad3R22727-R22764.

Here is a proposed test case but we can adjust as needed.

```csharp
delegate T HelloGenericDelegate () where T : NSObject;
delegate T HelloGenericDelegate2 (T t1) where T : NSObject;
delegate T1 HelloGenericDelegate3 (T1 t1, T2 t2) where T1 : NSObject where T2 : NSObject;
delegate T1 HelloGenericDelegate4 (T1 t1, T2 t2, [BlockCallback] HelloGenericDelegate2 otherBlock) where T1 : NSObject where T2 : NSObject;

[BaseType(typeof(NSObject))]
interface OneGenericType
where T1 : NSObject
{

}

[BaseType(typeof(NSObject))]
interface Example
where T1 : NSObject
{

[NullAllowed, Export("one", ArgumentSemantic.Copy)]
Func One { get; set; }

[NullAllowed, Export("two", ArgumentSemantic.Copy)]
Action Two { get; set; }

[NullAllowed, Export("three", ArgumentSemantic.Copy)]
Func, OneGenericType> Three { get; set; }

[NullAllowed, Export("four", ArgumentSemantic.Copy)]
HelloGenericDelegate Four { get; set; }

[NullAllowed, Export("five", ArgumentSemantic.Copy)]
HelloGenericDelegate2 Five { get; set; }
}

interface TwoGenericsType
where T1 : NSObject
where T2 : NSObject
{

}

[BaseType(typeof(NSObject))]
interface ExampleTwo
where T1 : NSObject
where T2 : NSObject
{

[NullAllowed, Export("one", ArgumentSemantic.Copy)]
Func One { get; set; }

[NullAllowed, Export("two", ArgumentSemantic.Copy)]
Action Two { get; set; }

[NullAllowed, Export("three", ArgumentSemantic.Copy)]
Func, TwoGenericsType> Three { get; set; }

[NullAllowed, Export("four", ArgumentSemantic.Copy)]
HelloGenericDelegate3 Four { get; set; }

[NullAllowed, Export("five", ArgumentSemantic.Copy)]
HelloGenericDelegate4 Five { get; set; }
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.