Browse Source

Fix bugs in TypeUsedByAnalyzer, MethodUsedByAnalyzer and others.

pull/1213/head
Siegfried Pammer 7 years ago
parent
commit
3b1ad6a69c
  1. 2
      ILSpy/Analyzers/Builtin/FieldAccessAnalyzer.cs
  2. 2
      ILSpy/Analyzers/Builtin/MethodUsedByAnalyzer.cs
  3. 2
      ILSpy/Analyzers/Builtin/MethodUsesAnalyzer.cs
  4. 6
      ILSpy/Analyzers/Builtin/MethodVirtualUsedByAnalyzer.cs
  5. 2
      ILSpy/Analyzers/Builtin/TypeInstantiatedByAnalyzer.cs
  6. 8
      ILSpy/Analyzers/Builtin/TypeUsedByAnalyzer.cs

2
ILSpy/Analyzers/Builtin/FieldAccessAnalyzer.cs

@ -115,6 +115,8 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
bool IsUsedInMethod(IField analyzedField, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context) bool IsUsedInMethod(IField analyzedField, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
{ {
if (method.MetadataToken.IsNil)
return false;
var module = method.ParentModule.PEFile; var module = method.ParentModule.PEFile;
foreach (var part in mappingInfo.GetMethodParts((MethodDefinitionHandle)method.MetadataToken)) { foreach (var part in mappingInfo.GetMethodParts((MethodDefinitionHandle)method.MetadataToken)) {
var md = module.Metadata.GetMethodDefinition(part); var md = module.Metadata.GetMethodDefinition(part);

2
ILSpy/Analyzers/Builtin/MethodUsedByAnalyzer.cs

@ -82,6 +82,8 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
bool IsUsedInMethod(IMethod analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context) bool IsUsedInMethod(IMethod analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
{ {
if (method.MetadataToken.IsNil)
return false;
var module = method.ParentModule.PEFile; var module = method.ParentModule.PEFile;
var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken); var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken);
if (!md.HasBody()) return false; if (!md.HasBody()) return false;

2
ILSpy/Analyzers/Builtin/MethodUsesAnalyzer.cs

@ -38,7 +38,7 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
{ {
public string Text => "Uses"; public string Text => "Uses";
public bool Show(ISymbol symbol) => symbol is IMethod; public bool Show(ISymbol symbol) => symbol is IMethod method && !method.IsVirtual;
public IEnumerable<ISymbol> Analyze(ISymbol symbol, AnalyzerContext context) public IEnumerable<ISymbol> Analyze(ISymbol symbol, AnalyzerContext context)
{ {

6
ILSpy/Analyzers/Builtin/MethodVirtualUsedByAnalyzer.cs

@ -38,9 +38,7 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
public string Text => "Used By"; public string Text => "Used By";
public bool Show(IMethod entity) => entity.IsVirtual; public bool Show(ISymbol symbol) => symbol is IMethod method && method.IsVirtual;
public bool Show(ISymbol symbol) => symbol is IMethod method && !method.IsVirtual;
public IEnumerable<ISymbol> Analyze(ISymbol analyzedSymbol, AnalyzerContext context) public IEnumerable<ISymbol> Analyze(ISymbol analyzedSymbol, AnalyzerContext context)
{ {
@ -85,6 +83,8 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
bool IsUsedInMethod(IMethod analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context) bool IsUsedInMethod(IMethod analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
{ {
if (method.MetadataToken.IsNil)
return false;
var module = method.ParentModule.PEFile; var module = method.ParentModule.PEFile;
var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken); var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken);
if (!md.HasBody()) return false; if (!md.HasBody()) return false;

2
ILSpy/Analyzers/Builtin/TypeInstantiatedByAnalyzer.cs

@ -83,6 +83,8 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
bool IsUsedInMethod(ITypeDefinition analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context) bool IsUsedInMethod(ITypeDefinition analyzedEntity, IMethod method, CodeMappingInfo mappingInfo, AnalyzerContext context)
{ {
if (method.MetadataToken.IsNil)
return false;
var module = method.ParentModule.PEFile; var module = method.ParentModule.PEFile;
var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken); var md = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)method.MetadataToken);
if (!md.HasBody()) return false; if (!md.HasBody()) return false;

8
ILSpy/Analyzers/Builtin/TypeUsedByAnalyzer.cs

@ -72,6 +72,7 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
void VisitMember(TypeDefinitionUsedVisitor visitor, IMember member, AnalyzerContext context, bool scanBodies = false) void VisitMember(TypeDefinitionUsedVisitor visitor, IMember member, AnalyzerContext context, bool scanBodies = false)
{ {
member.DeclaringType.AcceptVisitor(visitor);
switch (member) { switch (member) {
case IField field: case IField field:
field.ReturnType.AcceptVisitor(visitor); field.ReturnType.AcceptVisitor(visitor);
@ -183,12 +184,7 @@ namespace ICSharpCode.ILSpy.Analyzers.Builtin
} }
} }
bool CanBeReference(ILOpCode opCode) public bool Show(ISymbol symbol) => symbol is ITypeDefinition entity;
{
return opCode == ILOpCode.Newobj || opCode == ILOpCode.Initobj;
}
public bool Show(ISymbol symbol) => symbol is ITypeDefinition entity && !entity.IsAbstract && !entity.IsStatic;
} }
class TypeDefinitionUsedVisitor : TypeVisitor class TypeDefinitionUsedVisitor : TypeVisitor

Loading…
Cancel
Save