|
|
|
|
@ -47,27 +47,23 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
@@ -47,27 +47,23 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
|
|
|
|
|
public ScopedWhereUsedScopeAnalyzer(MethodDefinition method, Func<TypeDefinition, IEnumerable<T>> typeAnalysisFunction) |
|
|
|
|
: this(method.DeclaringType, typeAnalysisFunction) |
|
|
|
|
{ |
|
|
|
|
switch (method.Attributes & MethodAttributes.MemberAccessMask) { |
|
|
|
|
case MethodAttributes.Private: |
|
|
|
|
default: |
|
|
|
|
memberAccessibility = Accessibility.Private; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.FamANDAssem: |
|
|
|
|
memberAccessibility = Accessibility.FamilyAndInternal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Family: |
|
|
|
|
memberAccessibility = Accessibility.Family; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Assembly: |
|
|
|
|
memberAccessibility = Accessibility.Internal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.FamORAssem: |
|
|
|
|
memberAccessibility = Accessibility.FamilyOrInternal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Public: |
|
|
|
|
memberAccessibility = Accessibility.Public; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
this.memberAccessibility = GetMethodAccessibility(method); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ScopedWhereUsedScopeAnalyzer(PropertyDefinition property, Func<TypeDefinition, IEnumerable<T>> typeAnalysisFunction) |
|
|
|
|
: this(property.DeclaringType, typeAnalysisFunction) |
|
|
|
|
{ |
|
|
|
|
Accessibility getterAccessibility = (property.GetMethod == null) ? Accessibility.Private : GetMethodAccessibility(property.GetMethod); |
|
|
|
|
Accessibility setterAccessibility = (property.SetMethod == null) ? Accessibility.Private : GetMethodAccessibility(property.SetMethod); |
|
|
|
|
this.memberAccessibility = (Accessibility)Math.Max((int)getterAccessibility, (int)setterAccessibility); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ScopedWhereUsedScopeAnalyzer(EventDefinition eventDef, Func<TypeDefinition, IEnumerable<T>> typeAnalysisFunction) |
|
|
|
|
: this(eventDef.DeclaringType, typeAnalysisFunction) |
|
|
|
|
{ |
|
|
|
|
// we only have to check the accessibility of the the get method
|
|
|
|
|
// [CLS Rule 30: The accessibility of an event and of its accessors shall be identical.]
|
|
|
|
|
this.memberAccessibility = GetMethodAccessibility(eventDef.AddMethod); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public ScopedWhereUsedScopeAnalyzer(FieldDefinition field, Func<TypeDefinition, IEnumerable<T>> typeAnalysisFunction) |
|
|
|
|
@ -96,6 +92,33 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
@@ -96,6 +92,33 @@ namespace ICSharpCode.ILSpy.TreeNodes.Analyzer
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private Accessibility GetMethodAccessibility(MethodDefinition method) |
|
|
|
|
{ |
|
|
|
|
Accessibility accessibility; |
|
|
|
|
switch (method.Attributes & MethodAttributes.MemberAccessMask) { |
|
|
|
|
case MethodAttributes.Private: |
|
|
|
|
default: |
|
|
|
|
accessibility = Accessibility.Private; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.FamANDAssem: |
|
|
|
|
accessibility = Accessibility.FamilyAndInternal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Family: |
|
|
|
|
accessibility = Accessibility.Family; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Assembly: |
|
|
|
|
accessibility = Accessibility.Internal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.FamORAssem: |
|
|
|
|
accessibility = Accessibility.FamilyOrInternal; |
|
|
|
|
break; |
|
|
|
|
case MethodAttributes.Public: |
|
|
|
|
accessibility = Accessibility.Public; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
return accessibility; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public IEnumerable<T> PerformAnalysis(CancellationToken ct) |
|
|
|
|
{ |
|
|
|
|
if (memberAccessibility == Accessibility.Private) { |
|
|
|
|
|