InitializeOnLoadMethod should tag only static and parameterless methods
InitializeOnLoadMethodAttribute initializes an editor static method when Unity loads; RuntimeInitializeOnLoadMethodAttribute does the same after the game has loaded. Both can only tag static parameterless methods.
How to fix
Make the matched methods static and parameterless.
CQLinq source
This rule is written in CQLinq, C# LINQ over the NDepend code model. It ships with every new NDepend project: you can read it, adapt it, or use it as a starting point for your own custom rules.
// <Name>InitializeOnLoadMethod should tag only static and parameterless methods</Name>
// <Id>ND3206:InitializeOnLoadMethodShouldTagOnlyStaticAndParameterlessMethods</Id>
warnif count > 0
from m in Application.Methods where
(m.HasAttribute ("UnityEditor.InitializeOnLoadMethodAttribute".AllowNoMatch()) ||
m.HasAttribute ("UnityEditor.RuntimeInitializeOnLoadMethodAttribute".AllowNoMatch())) &&
(m.NbParameters > 0 || !m.IsStatic)
select new {
m,
Debt = 3.ToMinutes().ToDebt(),
Severity = Severity.Medium
}
//<Expl>
// The *{0}* is tagged with *InitializeOnLoadMethodAttribute*
// that should only tag static and parameterless methods.
//</Expl>
//<Desc>
// *InitializeOnLoadMethodAttribute* initializes an editor static method
// when Unity loads; *RuntimeInitializeOnLoadMethodAttribute* does the same
// after the game has loaded. Both can only tag static parameterless
// methods.
//</Desc>
//<HowToFix>
// Make the matched methods static and parameterless.
//</HowToFix>
Open in the interactive Rules Explorer · All default rules
API Usage / Unity: all 9 items
- Classes tagged with InitializeOnLoad should have a static constructor ND3200
- Avoid using non-generic GetComponent ND3201
- Avoid empty Unity message ND3202
- Avoid using Time.fixedDeltaTime with Update ND3203
- Use CreateInstance to create a scriptable object ND3204
- The SerializeField attribute is redundant on public fields ND3205
- InitializeOnLoadMethod should tag only static and parameterless methods ND3206
- Prefer using SetPixels32() over SetPixels() ND3207
- Don't use System.Reflection in performance critical messages ND3208