Skip to content

Commit 02a21ad

Browse files
authored
fix issue with genereic list resolution for existing types (#3072)
1 parent 77e8a05 commit 02a21ad

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/AutoRest.CSharp/Common/Utilities/NamedTypeSymbolExtensions.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33

44
using System;
55
using System.Linq;
6-
using System.Reflection;
7-
using System.Runtime.Serialization;
86
using AutoRest.CSharp.Generation.Types;
97
using Microsoft.CodeAnalysis;
108

@@ -21,9 +19,22 @@ public static CSharpType GetCSharpType(this INamedTypeSymbol symbol)
2119
return GetCSharpType((INamedTypeSymbol)symbol.TypeArguments[0]).WithNullable(true);
2220
}
2321

22+
return GetFrameworkType(symbol);
23+
}
24+
25+
private static Type GetFrameworkType(INamedTypeSymbol symbol)
26+
{
2427
var symbolName = symbol.ToDisplayString(FullyQualifiedNameFormat);
2528
var assemblyName = symbol.ContainingAssembly.Name;
26-
return Type.GetType(symbolName) ?? Type.GetType($"{symbolName}, {assemblyName}") ?? throw new InvalidOperationException($"Type '{symbolName}' can't be found in assembly '{assemblyName}'.");
29+
if (symbol.TypeArguments.Length > 0)
30+
{
31+
symbolName += $"`{symbol.TypeArguments.Length}";
32+
}
33+
34+
var type = Type.GetType(symbolName) ?? Type.GetType($"{symbolName}, {assemblyName}") ?? throw new InvalidOperationException($"Type '{symbolName}' can't be found in assembly '{assemblyName}'.");
35+
return symbol.TypeArguments.Length > 0
36+
? type.MakeGenericType(symbol.TypeArguments.Cast<INamedTypeSymbol>().Select(GetFrameworkType).ToArray())
37+
: type;
2738
}
2839
}
2940
}

0 commit comments

Comments
 (0)