|
|
|
@ -17,6 +17,7 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -17,6 +17,7 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
static readonly Decompiler.TypeSystem.GenericContext genericContext = default; |
|
|
|
|
|
|
|
|
|
readonly HashSet<string> namespaces; |
|
|
|
|
readonly HashSet<IType> visitedTypes = new HashSet<IType>(); |
|
|
|
|
|
|
|
|
|
public RequiredNamespaceCollector(HashSet<string> namespaces) |
|
|
|
|
{ |
|
|
|
@ -141,13 +142,15 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -141,13 +142,15 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
|
|
|
|
|
void CollectNamespacesForTypeReference(IType type) |
|
|
|
|
{ |
|
|
|
|
if (!visitedTypes.Add(type)) |
|
|
|
|
return; |
|
|
|
|
switch (type) { |
|
|
|
|
case ParameterizedType parameterizedType: |
|
|
|
|
namespaces.Add(parameterizedType.Namespace); |
|
|
|
|
CollectNamespacesForTypeReference(parameterizedType.GenericType); |
|
|
|
|
foreach (var arg in parameterizedType.TypeArguments) |
|
|
|
|
CollectNamespacesForTypeReference(arg); |
|
|
|
|
break; |
|
|
|
|
return; // no need to collect base types again
|
|
|
|
|
case TypeWithElementType typeWithElementType: |
|
|
|
|
CollectNamespacesForTypeReference(typeWithElementType.ElementType); |
|
|
|
|
break; |
|
|
|
|