Browse Source

fix NRE and false positives in HidesBaseMember

pull/728/head
Siegfried Pammer 9 years ago
parent
commit
39c1bbcfaf
  1. 6
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

6
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -399,9 +399,9 @@ namespace ICSharpCode.Decompiler.CSharp
IMemberDefinition GetDefinitionFromAnnotation(EntityDeclaration member) IMemberDefinition GetDefinitionFromAnnotation(EntityDeclaration member)
{ {
if (member is TypeDeclaration) { if (member is TypeDeclaration) {
return (IMemberDefinition)typeSystem.GetCecil(member.Annotation<TypeResolveResult>().Type.GetDefinition()); return (IMemberDefinition)typeSystem.GetCecil(member.Annotation<TypeResolveResult>()?.Type.GetDefinition());
} else { } else {
return (IMemberDefinition)typeSystem.GetCecil(member.Annotation<MemberResolveResult>().Member.MemberDefinition); return (IMemberDefinition)typeSystem.GetCecil(member.Annotation<MemberResolveResult>()?.Member.MemberDefinition);
} }
} }
@ -454,7 +454,9 @@ namespace ICSharpCode.Decompiler.CSharp
static bool AnyIsHiddenBy<T>(IEnumerable<T> members, IMemberDefinition derived, Predicate<T> condition = null) static bool AnyIsHiddenBy<T>(IEnumerable<T> members, IMemberDefinition derived, Predicate<T> condition = null)
where T : IMemberDefinition where T : IMemberDefinition
{ {
int numberOfGenericParameters = (derived as IGenericParameterProvider)?.GenericParameters.Count ?? 0;
return members.Any(m => m.Name == derived.Name return members.Any(m => m.Name == derived.Name
&& ((m as IGenericParameterProvider)?.GenericParameters.Count ?? 0) == numberOfGenericParameters
&& (condition == null || condition(m)) && (condition == null || condition(m))
&& TypesHierarchyHelpers.IsVisibleFromDerived(m, derived.DeclaringType)); && TypesHierarchyHelpers.IsVisibleFromDerived(m, derived.DeclaringType));
} }

Loading…
Cancel
Save