Browse Source

fix: multi-dimensional arrays sometimes working

fix: use of tabs in samples C# file

TODO: multi-dimensional arrays not always with overloaded methods - is there a bug in the navigateTo implementation?
pull/697/head
yoyobbi 9 years ago
parent
commit
e3a3a7ec33
  1. 34
      ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs
  2. 7
      ILSpy.AddIn/Samples/ILSpyAddInSamples.cs

34
ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs

@ -109,7 +109,6 @@ namespace ICSharpCode.ILSpy.AddIn @@ -109,7 +109,6 @@ namespace ICSharpCode.ILSpy.AddIn
b.Append(')');
}
if (explicitReturnType != null) {
// TODO: test explicit return types
b.Append('~');
AppendTypeName(b, explicitReturnType.AsFullName, true, false);
}
@ -177,12 +176,11 @@ namespace ICSharpCode.ILSpy.AddIn @@ -177,12 +176,11 @@ namespace ICSharpCode.ILSpy.AddIn
{
EnvDTE80.CodeTypeRef2 parameterTypeRef = (EnvDTE80.CodeTypeRef2)parameter.Type;
string parameterTypeString = parameterTypeRef.AsFullName;
if (parameterTypeRef.TypeKind == EnvDTE.vsCMTypeRef.vsCMTypeRefArray) {
parameterTypeString = parameterTypeRef.ElementType.AsFullName;
}
int substringStart = 0;
for (int i = 0; i < parameterTypeString.Length; ++i) {
switch (parameterTypeString[i]) {
char ch = parameterTypeString[i];
switch (ch) {
case '<':
AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
substringStart = i + 1;
@ -193,42 +191,30 @@ namespace ICSharpCode.ILSpy.AddIn @@ -193,42 +191,30 @@ namespace ICSharpCode.ILSpy.AddIn
substringStart = i + 1;
b.Append('}');
break;
case '[':
case ']':
case ',':
AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters);
substringStart = i + 1;
// Skip space after comma if present.
if (parameterTypeString[substringStart] == ' ') {
if ((substringStart < parameterTypeString.Length) && (parameterTypeString[substringStart] == ' ')) {
++substringStart;
}
b.Append(',');
b.Append(ch);
break;
}
}
AppendParameterTypeSubstring(b, parameterTypeString, substringStart, parameterTypeString.Length, genericTypeParameters, genericMethodParameters);
if (parameterTypeRef.TypeKind == EnvDTE.vsCMTypeRef.vsCMTypeRefArray) {
b.Append('[');
for (int i = 0; i < parameterTypeRef.Rank; i++) {
if (i > 0)
b.Append(',');
// TODO: how to get array bounds from EnvDTE code model?
//ArrayDimension ad = arrayType.Dimensions[i];
//if (ad.IsSized) {
// b.Append(ad.LowerBound);
// b.Append(':');
// b.Append(ad.UpperBound);
//}
}
b.Append(']');
}
// Append ref / out indicator if needed.
// Note there is no need to append a '*' for pointers, as this is included in the full name of the type.
if ((parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindRef) ||
(parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindOut)) {
b.Append('@');
}
// Note there is no need to append a '*' for pointers, as this is included in the full name of the type.
// Multi-dimensional and nested arrays are also captured in the full name of the type.
}
private static void AppendParameterTypeSubstring(StringBuilder b, string parameterTypeString, int substringStart, int substringStop, string[] genericTypeParameters, string[] genericMethodParameters)

7
ILSpy.AddIn/Samples/ILSpyAddInSamples.cs

@ -336,7 +336,12 @@ namespace ILSpy.AddIn.Tests @@ -336,7 +336,12 @@ namespace ILSpy.AddIn.Tests
{
}
// NOT! M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod([],[])
// NOT? M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(System.Int32[,],System.Int32[,])
public void ArrayMethod(int[,] x, int[,] y)
{
}
// M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(`0[][],System.Int32[][])
public void ArrayMethod(T1[][] x, int[][] y)
{
}

Loading…
Cancel
Save