はじめに
Rider(ReShaper
)は、利用されていないメソッド等に対してはコメントを表示してくれます。(自身で警告にしたりと設定可能)
ただリフレクションや外部ライブラリから利用されるので、検出の対象外にしてほしいケースが多々あります。そんな場合に活用できるのは今回紹介するUsedImplicitly
になります。
概要
[UsedImplicitly]
を用いることで、ReShaper
にこのメソッドは利用されると認識させることができ、検出の対象外にしてくれます。
www.nuget.org
マークされたシンボルが暗黙的に (リフレクション経由、外部ライブラリなどで) 使用されることを示します。そのため、このシンボルは使用箇所チェックインスペクションによって無視されます。
ImplicitUseKindFlags および ImplicitUseTargetFlags を使用して、この属性の適用方法を構成できます。
https://pleiades.io/help/rider/Reference__Code_Annotation_Attributes.html#UsedImplicitlyAttribute
[UsedImplicitly] public static void SomeMethod() { }
内部実装
[AttributeUsage(AttributeTargets.All)] [Conditional("JETBRAINS_ANNOTATIONS")] public sealed class UsedImplicitlyAttribute : Attribute { public UsedImplicitlyAttribute() : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags) : this(useKindFlags, ImplicitUseTargetFlags.Default) { } public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags) : this(ImplicitUseKindFlags.Default, targetFlags) { } public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) { UseKindFlags = useKindFlags; TargetFlags = targetFlags; } public ImplicitUseKindFlags UseKindFlags { get; } public ImplicitUseTargetFlags TargetFlags { get; } public string Reason { get; set; } }
あとがき
ちゃんとチェックしてないのですが、別に[UsedImplicitly]
を付与したとしてもコードストリッピングされなくなるわけではないはずです。(あくまでReshaperでの警告を抑制してくれる)
そこは注意してください。