Browse Source

Fixed MethodOverrides analyzer.

pull/112/head
Artur Zgodziski 15 years ago
parent
commit
2c70fb087c
  1. 18
      ICSharpCode.Decompiler/Ast/TypesHierarchyHelpers.cs
  2. 2
      ILSpy/TreeNodes/Analyzer/AnalyzedMethodTreeNode.cs
  3. 5
      ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs

18
ICSharpCode.Decompiler/Ast/TypesHierarchyHelpers.cs

@ -109,7 +109,7 @@ namespace ICSharpCode.Decompiler.Ast @@ -109,7 +109,7 @@ namespace ICSharpCode.Decompiler.Ast
if (mCandidate.HasOverrides)
return false;
if (candidate.Resolve(mCandidate.ReturnType) != method.Resolve(mMethod.ReturnType))
if (!IsSameType(candidate.Resolve(mCandidate.ReturnType), method.Resolve(mMethod.ReturnType)))
return false;
if (mCandidate.HasGenericParameters || mMethod.HasGenericParameters) {
@ -140,7 +140,7 @@ namespace ICSharpCode.Decompiler.Ast @@ -140,7 +140,7 @@ namespace ICSharpCode.Decompiler.Ast
if ((mCandidate.GetMethod ?? mCandidate.SetMethod).HasOverrides)
return false;
if (candidate.Resolve(mCandidate.PropertyType) != property.Resolve(mProperty.PropertyType))
if (!IsSameType(candidate.Resolve(mCandidate.PropertyType), property.Resolve(mProperty.PropertyType)))
return false;
if (mCandidate.HasParameters || mProperty.HasParameters) {
@ -160,7 +160,17 @@ namespace ICSharpCode.Decompiler.Ast @@ -160,7 +160,17 @@ namespace ICSharpCode.Decompiler.Ast
{
var baseParam = baseParameterType.Resolve(baseParameterType.Item.ParameterType);
var param = parameterType.Resolve(parameterType.Item.ParameterType);
return baseParam == param;
return IsSameType(baseParam, param);
}
private static bool IsSameType(TypeReference tr1, TypeReference tr2)
{
if (tr1 == tr2)
return true;
if (tr1.Name == tr2.Name && tr1.FullName == tr2.FullName)
return true;
return false;
}
private static IEnumerable<GenericContext<TypeDefinition>> BaseTypes(TypeDefinition type)
@ -230,6 +240,8 @@ namespace ICSharpCode.Decompiler.Ast @@ -230,6 +240,8 @@ namespace ICSharpCode.Decompiler.Ast
var resolvedElementType = Resolve(arrayType.ElementType);
if (resolvedElementType == null)
return null;
if (resolvedElementType == arrayType.ElementType)
return arrayType;
var newArrayType = new ArrayType(resolvedElementType, arrayType.Rank);
for (int dimension = 0; dimension < arrayType.Rank; dimension++)
newArrayType.Dimensions[dimension] = arrayType.Dimensions[dimension];

2
ILSpy/TreeNodes/Analyzer/AnalyzedMethodTreeNode.cs

@ -55,7 +55,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -55,7 +55,7 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
if (analyzedMethod.HasBody)
this.Children.Add(new AnalyzedMethodUsesNode(analyzedMethod));
this.Children.Add(new AnalyzedMethodUsedByTreeNode(analyzedMethod));
if (analyzedMethod.IsVirtual && !analyzedMethod.IsFinal && !analyzedMethod.DeclaringType.IsInterface) // interfaces are temporarly disabled
if (AnalyzerMethodOverridesTreeNode.CanShowAnalyzer(analyzedMethod))
this.Children.Add(new AnalyzerMethodOverridesTreeNode(analyzedMethod));
}

5
ILSpy/TreeNodes/Analyzer/AnalyzerMethodOverridesTreeNode.cs

@ -88,5 +88,10 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer @@ -88,5 +88,10 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
}
}
}
public static bool CanShowAnalyzer(MethodDefinition method)
{
return method.IsVirtual && !method.IsFinal && !method.DeclaringType.IsSealed && !method.DeclaringType.IsInterface; // interfaces are temporarly disabled
}
}
}

Loading…
Cancel
Save