# Call Analyzer
This processing layer analyzes method instructions for calls to other methods and emits attributes based on that.
For this processor, 9 new attributes are injected:
```cs
using System;
namespace Cpp2ILInjected.CallAnalysis;
///
/// This method's instructions have been deduplicated by the compiler, and it shares its address with other methods.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class DeduplicatedMethodAttribute : Attribute
{
}
///
/// This method has no instructions to analyze and is not abstract nor an interface declaration.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class CallAnalysisNotSupportedAttribute : Attribute
{
}
///
/// This method is called from the method specified.
///
///
/// This attribute is not emitted if there are a large amount of callers.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class CalledByAttribute : Attribute
{
public object Type;
public string Member;
public object[] MemberTypeParameters;
public object[] MemberParameters;
public object ReturnType;
}
///
/// This method calls the method specified.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class CallsAttribute : Attribute
{
public object Type;
public string Member;
public object[] MemberTypeParameters;
public object[] MemberParameters;
public object ReturnType;
}
///
/// The number of direct calls to this method.
///
///
/// This attribute is similar in form and function to the one generated by Unhollower.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class CallerCountAttribute : Attribute
{
public int Count;
}
///
/// This method calls at least one deduplicated method.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class CallsDeduplicatedMethodsAttribute : Attribute
{
public int Count;
}
///
/// This method calls at least one unknown method.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class CallsUnknownMethodsAttribute : Attribute
{
public int Count;
}
///
/// This method contains at least one instruction that is invalid.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class ContainsInvalidInstructionsAttribute : Attribute
{
}
///
/// This method contains at least one instruction that is not implemented.
///
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public sealed class ContainsUnimplementedInstructionsAttribute : Attribute
{
}
```