Browse Source

Add GetNamespaceByFullName and use it to speed up AssignVariableNames.CollectAllLowerCaseTypeNames

pull/2754/head
Siegfried Pammer 3 years ago
parent
commit
619d2af9b2
  1. 6
      ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs
  2. 16
      ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs

6
ICSharpCode.Decompiler/IL/Transforms/AssignVariableNames.cs

@ -165,11 +165,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -165,11 +165,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms
static IEnumerable<string> CollectAllLowerCaseTypeNames(ITypeDefinition type)
{
foreach (var item in type.ParentModule.TopLevelTypeDefinitions)
var ns = type.ParentModule.Compilation.GetNamespaceByFullName(type.Namespace);
foreach (var item in ns.Types)
{
if (item.Namespace != type.Namespace)
continue;
if (IsLowerCase(item.Name))
yield return item.Name;
}

16
ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs

@ -748,5 +748,21 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -748,5 +748,21 @@ namespace ICSharpCode.Decompiler.TypeSystem
return new ParameterizedType(td, td.TypeArguments);
}
}
public static INamespace GetNamespaceByFullName(this ICompilation compilation, string name)
{
if (string.IsNullOrEmpty(name))
return compilation.RootNamespace;
var parts = name.Split('.');
var ns = compilation.RootNamespace;
foreach (var part in parts)
{
var child = ns.GetChildNamespace(part);
if (child == null)
return null;
ns = child;
}
return ns;
}
}
}

Loading…
Cancel
Save