-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add generic type transpilation (#164)
* implement generic type transpilation * extract `GenericTypeParameterMapper` to its own file * fix wrong type name in exception message * add another test for inheritance of a concrete generic type with the same name * apply PR feedback/comments
- Loading branch information
1 parent
de3e3e1
commit 082cc01
Showing
7 changed files
with
457 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
using System; | ||
using Microsoft.CodeAnalysis; | ||
|
||
namespace Tapper; | ||
|
||
internal class GenericTypeParameterMapper : ITypeMapper | ||
{ | ||
public ITypeSymbol Assign { get; } = default!; | ||
|
||
public string MapTo(ITypeSymbol typeSymbol, ITranspilationOptions options) | ||
{ | ||
if (typeSymbol is not ITypeParameterSymbol typeParameterSymbol) | ||
throw new InvalidOperationException($"{nameof(GenericTypeParameterMapper)} does not support {typeSymbol.ToDisplayString()}."); | ||
|
||
return typeParameterSymbol.Name; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
using Space1; | ||
using Tapper; | ||
|
||
namespace Tapper.Test.SourceTypes | ||
{ | ||
|
||
[TranspilationSource] | ||
public class GenericClass1<T> | ||
{ | ||
public required string StringProperty { get; set; } | ||
public required T GenericProperty { get; set; } | ||
} | ||
|
||
[TranspilationSource] | ||
public class NestedGenericClass<T1, T2> | ||
{ | ||
public required string StringProperty { get; set; } | ||
public required T1 GenericProperty { get; set; } | ||
public required GenericClass1<T1> GenericClass1Property { get; set; } | ||
public required GenericClass2<T1, T2> GenericClass2Property { get; set; } | ||
} | ||
|
||
[TranspilationSource] | ||
public class DeeplyNestedGenericClass<A, B, C> | ||
{ | ||
public required string StringProperty { get; set; } | ||
public required A GenericPropertyA { get; set; } | ||
public required B GenericPropertyB { get; set; } | ||
public required GenericClass1<A> GenericClass1Property { get; set; } | ||
public required GenericClass2<B, C> GenericClass2Property { get; set; } | ||
public required NestedGenericClass<string, B> NestedGenericClassProperty { get; set; } | ||
} | ||
|
||
[TranspilationSource] | ||
public class InheritedGenericClass2<T1, T2> : GenericClass1<T1> | ||
{ | ||
public required T2 GenericPropertyT2 { get; set; } | ||
} | ||
|
||
|
||
[TranspilationSource] | ||
public class InheritedConcreteGenericClass : GenericClass2<bool, int> | ||
{ | ||
} | ||
|
||
[TranspilationSource] | ||
public class InheritedGenericClassWithTheSameName<T> | ||
{ | ||
public required T GenericProperty { get; set; } | ||
} | ||
[TranspilationSource] | ||
public class InheritedGenericClassWithTheSameName : InheritedGenericClassWithTheSameName<string> | ||
{ | ||
} | ||
} | ||
namespace Space1 | ||
{ | ||
|
||
[TranspilationSource] | ||
public class GenericClass2<T1, T2> | ||
{ | ||
public required string StringProperty { get; set; } | ||
public required T1 GenericProperty1 { get; set; } | ||
public required T2 GenericProperty2 { get; set; } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.