Browse Source

Refactor CSharpLanguage.TypeToString

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
6653487f81
  1. 32
      ILSpy/Languages/CSharpLanguage.cs
  2. 7
      ILSpy/Languages/Language.cs
  3. 12
      ILSpy/SearchStrategies.cs
  4. 2
      ILSpy/TreeNodes/TypeTreeNode.cs

32
ILSpy/Languages/CSharpLanguage.cs

@ -410,9 +410,19 @@ namespace ICSharpCode.ILSpy @@ -410,9 +410,19 @@ namespace ICSharpCode.ILSpy
{
if (type == null)
throw new ArgumentNullException(nameof(type));
if (type is ITypeDefinition definition && definition.TypeParameterCount > 0) {
return TypeToStringInternal(new ParameterizedType(definition, definition.TypeParameters), includeNamespace, false);
}
return TypeToStringInternal(type, includeNamespace, false);
}
string TypeToStringInternal(IType t, bool includeNamespace, bool useBuiltinTypeNames = true)
{
TypeSystemAstBuilder builder = new TypeSystemAstBuilder();
builder.AlwaysUseShortTypeNames = !includeNamespace;
AstType astType = builder.ConvertType(type);
builder.AlwaysUseBuiltinTypeNames = useBuiltinTypeNames;
AstType astType = builder.ConvertType(t);
StringWriter w = new StringWriter();
astType.AcceptVisitor(new CSharpOutputVisitor(w, TypeToStringFormattingOptions));
@ -427,7 +437,7 @@ namespace ICSharpCode.ILSpy @@ -427,7 +437,7 @@ namespace ICSharpCode.ILSpy
string simple = field.Name + " : " + TypeToString(field.Type, includeNamespace);
if (!includeTypeName)
return simple;
return TypeToString(MakeParameterizedType(field.DeclaringTypeDefinition), includeNamespace) + "." + simple;
return TypeToStringInternal(field.DeclaringTypeDefinition, includeNamespace) + "." + simple;
}
public override string PropertyToString(IProperty property, bool includeTypeName, bool includeNamespace, bool? isIndexer = null)
@ -451,7 +461,7 @@ namespace ICSharpCode.ILSpy @@ -451,7 +461,7 @@ namespace ICSharpCode.ILSpy
foreach (var param in parameters) {
if (i > 0)
buffer.Append(", ");
buffer.Append(TypeToString(param.Type, includeNamespace));
buffer.Append(TypeToStringInternal(param.Type, includeNamespace));
i++;
}
@ -460,10 +470,10 @@ namespace ICSharpCode.ILSpy @@ -460,10 +470,10 @@ namespace ICSharpCode.ILSpy
buffer.Append(property.Name);
}
buffer.Append(" : ");
buffer.Append(TypeToString(property.ReturnType, includeNamespace));
buffer.Append(TypeToStringInternal(property.ReturnType, includeNamespace));
if (!includeTypeName)
return buffer.ToString();
return TypeToString(MakeParameterizedType(property.DeclaringTypeDefinition), includeNamespace) + "." + buffer.ToString();
return TypeToString(property.DeclaringTypeDefinition, includeNamespace) + "." + buffer.ToString();
}
public override string MethodToString(IMethod method, bool includeTypeName, bool includeNamespace)
@ -472,10 +482,10 @@ namespace ICSharpCode.ILSpy @@ -472,10 +482,10 @@ namespace ICSharpCode.ILSpy
throw new ArgumentNullException(nameof(method));
string name;
if (method.IsConstructor) {
name = TypeToString(MakeParameterizedType(method.DeclaringTypeDefinition), includeNamespace: includeNamespace);
name = TypeToString(method.DeclaringTypeDefinition, includeNamespace: includeNamespace);
} else {
if (includeTypeName) {
name = TypeToString(MakeParameterizedType(method.DeclaringTypeDefinition), includeNamespace: includeNamespace) + ".";
name = TypeToString(method.DeclaringTypeDefinition, includeNamespace: includeNamespace) + ".";
} else {
name = "";
}
@ -501,13 +511,13 @@ namespace ICSharpCode.ILSpy @@ -501,13 +511,13 @@ namespace ICSharpCode.ILSpy
foreach (var param in parameters) {
if (i > 0)
buffer.Append(", ");
buffer.Append(TypeToString(param.Type, includeNamespace));
buffer.Append(TypeToStringInternal(param.Type, includeNamespace));
i++;
}
buffer.Append(')');
buffer.Append(" : ");
buffer.Append(TypeToString(method.ReturnType, includeNamespace));
buffer.Append(TypeToStringInternal(method.ReturnType, includeNamespace));
return buffer.ToString();
}
@ -517,11 +527,11 @@ namespace ICSharpCode.ILSpy @@ -517,11 +527,11 @@ namespace ICSharpCode.ILSpy
throw new ArgumentNullException(nameof(@event));
var buffer = new System.Text.StringBuilder();
if (includeTypeName) {
buffer.Append(TypeToString(MakeParameterizedType(@event.DeclaringTypeDefinition), includeNamespace) + ".");
buffer.Append(TypeToString(@event.DeclaringTypeDefinition, includeNamespace) + ".");
}
buffer.Append(@event.Name);
buffer.Append(" : ");
buffer.Append(TypeToString(@event.ReturnType, includeNamespace));
buffer.Append(TypeToStringInternal(@event.ReturnType, includeNamespace));
return buffer.ToString();
}

7
ILSpy/Languages/Language.cs

@ -243,13 +243,6 @@ namespace ICSharpCode.ILSpy @@ -243,13 +243,6 @@ namespace ICSharpCode.ILSpy
}
}
public static IType MakeParameterizedType(ITypeDefinition type)
{
if (type.TypeParameterCount == 0)
return type;
return new ParameterizedType(type, type.TypeParameters);
}
/// <summary>
/// Used for WPF keyboard navigation.
/// </summary>

12
ILSpy/SearchStrategies.cs

@ -163,7 +163,7 @@ namespace ICSharpCode.ILSpy @@ -163,7 +163,7 @@ namespace ICSharpCode.ILSpy
{
switch (member) {
case ITypeDefinition t:
return language.TypeToString(Language.MakeParameterizedType(t), includeNamespace: fullName);
return language.TypeToString(t, includeNamespace: fullName);
case IField f:
return language.FieldToString(f, fullName, fullName);
case IProperty p:
@ -193,7 +193,7 @@ namespace ICSharpCode.ILSpy @@ -193,7 +193,7 @@ namespace ICSharpCode.ILSpy
Image = image(item),
Name = GetLanguageSpecificName(language, item),
LocationImage = TypeTreeNode.GetIcon(type),
Location = language.TypeToString(Language.MakeParameterizedType(type), includeNamespace: true)
Location = language.TypeToString(type, includeNamespace: true)
});
}
}
@ -497,7 +497,7 @@ namespace ICSharpCode.ILSpy @@ -497,7 +497,7 @@ namespace ICSharpCode.ILSpy
public override void Search(ITypeDefinition type, Language language, Action<SearchResult> addResult)
{
if (MatchName(type, language)) {
string name = language.TypeToString(Language.MakeParameterizedType(type), includeNamespace: false);
string name = language.TypeToString(type, includeNamespace: false);
var declaringType = type.DeclaringTypeDefinition;
addResult(new SearchResult {
Member = type,
@ -505,7 +505,7 @@ namespace ICSharpCode.ILSpy @@ -505,7 +505,7 @@ namespace ICSharpCode.ILSpy
Image = TypeTreeNode.GetIcon(type),
Name = name,
LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace,
Location = declaringType != null ? language.TypeToString(Language.MakeParameterizedType(declaringType), includeNamespace: true) : type.Namespace
Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : type.Namespace
});
}
@ -526,7 +526,7 @@ namespace ICSharpCode.ILSpy @@ -526,7 +526,7 @@ namespace ICSharpCode.ILSpy
{
if (MatchName(type, language))
{
string name = language.TypeToString(Language.MakeParameterizedType(type), includeNamespace: false);
string name = language.TypeToString(type, includeNamespace: false);
var declaringType = type.DeclaringTypeDefinition;
addResult(new SearchResult {
Member = type,
@ -534,7 +534,7 @@ namespace ICSharpCode.ILSpy @@ -534,7 +534,7 @@ namespace ICSharpCode.ILSpy
Fitness = CalculateFitness(type),
Name = name,
LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace,
Location = declaringType != null ? language.TypeToString(Language.MakeParameterizedType(declaringType), includeNamespace: true) : type.Namespace
Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : type.Namespace
});
}

2
ILSpy/TreeNodes/TypeTreeNode.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -40,7 +40,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public AssemblyTreeNode ParentAssemblyNode { get; }
public override object Text => this.Language.TypeToString(Language.MakeParameterizedType(TypeDefinition), includeNamespace: false)
public override object Text => this.Language.TypeToString(TypeDefinition, includeNamespace: false)
+ TypeDefinition.MetadataToken.ToSuffixString();
public override bool IsPublicAPI {

Loading…
Cancel
Save