From 548226570e6f80de54f565a5a6b9cf33bf1c2c4b Mon Sep 17 00:00:00 2001 From: jnm2 Date: Fri, 10 Apr 2020 11:48:54 -0400 Subject: [PATCH] Declare internal source attributes in consuming projects --- .../IDisposableAnalyzers.csproj | 5 +++- .../build/IDisposableAnalyzers.targets | 13 +++++++++ .../build/OwnershipAttributes.cs | 28 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 IDisposableAnalyzers/build/IDisposableAnalyzers.targets create mode 100644 IDisposableAnalyzers/build/OwnershipAttributes.cs diff --git a/IDisposableAnalyzers/IDisposableAnalyzers.csproj b/IDisposableAnalyzers/IDisposableAnalyzers.csproj index da3b57d0..a4563bd7 100644 --- a/IDisposableAnalyzers/IDisposableAnalyzers.csproj +++ b/IDisposableAnalyzers/IDisposableAnalyzers.csproj @@ -66,7 +66,10 @@ - + + + + diff --git a/IDisposableAnalyzers/build/IDisposableAnalyzers.targets b/IDisposableAnalyzers/build/IDisposableAnalyzers.targets new file mode 100644 index 00000000..7e3dafe8 --- /dev/null +++ b/IDisposableAnalyzers/build/IDisposableAnalyzers.targets @@ -0,0 +1,13 @@ + + + + $(MSBuildThisFileDirectory)OwnershipAttributes$(DefaultLanguageSourceExtension) + + true + + + + + + + diff --git a/IDisposableAnalyzers/build/OwnershipAttributes.cs b/IDisposableAnalyzers/build/OwnershipAttributes.cs new file mode 100644 index 00000000..21372e42 --- /dev/null +++ b/IDisposableAnalyzers/build/OwnershipAttributes.cs @@ -0,0 +1,28 @@ +namespace IDisposableAnalyzers +{ + using System; + + /// + /// The return value must be disposed by the caller. + /// + [AttributeUsage(AttributeTargets.ReturnValue | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] + internal sealed class GivesOwnershipAttribute : Attribute + { + } + + /// + /// The return value must not be disposed by the caller. + /// + [AttributeUsage(AttributeTargets.ReturnValue | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] + internal sealed class KeepsOwnershipAttribute : Attribute + { + } + + /// + /// The ownership of instance is transferred and the receiver is responsible for disposing. + /// + [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] + internal sealed class TakesOwnershipAttribute : Attribute + { + } +}