Browse Source

Fix XmlDocKeyProvider.cs for multi-dimensional array types and for overloaded conversion operators.

pull/260/head
Daniel Grunwald 14 years ago
parent
commit
9c682a4a9b
  1. 23
      ILSpy/XmlDoc/XmlDocKeyProvider.cs

23
ILSpy/XmlDoc/XmlDocKeyProvider.cs

@ -50,6 +50,7 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -50,6 +50,7 @@ namespace ICSharpCode.ILSpy.XmlDoc
b.Append('.');
b.Append(member.Name.Replace('.', '#'));
IList<ParameterDefinition> parameters;
TypeReference explicitReturnType = null;
if (member is PropertyDefinition) {
parameters = ((PropertyDefinition)member).Parameters;
} else if (member is MethodReference) {
@ -59,6 +60,9 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -59,6 +60,9 @@ namespace ICSharpCode.ILSpy.XmlDoc
b.Append(mr.GenericParameters.Count);
}
parameters = mr.Parameters;
if (mr.Name == "op_Implicit" || mr.Name == "op_Explicit") {
explicitReturnType = mr.ReturnType;
}
} else {
parameters = null;
}
@ -70,6 +74,10 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -70,6 +74,10 @@ namespace ICSharpCode.ILSpy.XmlDoc
}
b.Append(')');
}
if (explicitReturnType != null) {
b.Append('~');
AppendTypeName(b, explicitReturnType);
}
}
return b.ToString();
}
@ -101,8 +109,15 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -101,8 +109,15 @@ namespace ICSharpCode.ILSpy.XmlDoc
ArrayType arrayType = type as ArrayType;
if (arrayType != null) {
b.Append('[');
for (int i = 1; i < arrayType.Dimensions.Count; i++) {
b.Append(',');
for (int i = 0; i < arrayType.Dimensions.Count; i++) {
if (i > 0)
b.Append(',');
ArrayDimension ad = arrayType.Dimensions[i];
if (ad.IsSized) {
b.Append(ad.LowerBound);
b.Append(':');
b.Append(ad.UpperBound);
}
}
b.Append(']');
}
@ -112,7 +127,7 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -112,7 +127,7 @@ namespace ICSharpCode.ILSpy.XmlDoc
}
PointerType ptrType = type as PointerType;
if (ptrType != null) {
b.Append('*'); // TODO: is this correct?
b.Append('*');
}
} else {
GenericParameter gp = type as GenericParameter;
@ -183,7 +198,7 @@ namespace ICSharpCode.ILSpy.XmlDoc @@ -183,7 +198,7 @@ namespace ICSharpCode.ILSpy.XmlDoc
Debug.WriteLine(memberKey);
if (memberKey == key)
return member;
if (shortName == member.Name)
if (shortName == member.Name.Replace('.', '#'))
shortNameMatch = member;
}
// if there's no match by ID string (key), return the match by name.

Loading…
Cancel
Save