From a0dd0b616a9b02336de442d522742188786bd98d Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Fri, 15 Nov 2019 00:07:11 -0300 Subject: [PATCH] csharp: Suppress CA2000 in native wrappers. Summary: These methods may instantiate `IDisposable` classes like `Array`, `Iterator` to pass to user-overriden C# methods. As we can't guarantee the user stored the object or not, we can't call Dispose directly on them. Ref T8423 Depends on D10670 Reviewers: brunobelo, felipealmeida, YOhoho Reviewed By: brunobelo Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8423 Differential Revision: https://phab.enlightenment.org/D10671 --- src/bin/eolian_mono/eolian/mono/function_definition.hh | 3 ++- src/bin/eolian_mono/eolian_mono.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh b/src/bin/eolian_mono/eolian/mono/function_definition.hh index 51bb17c3a1..cded973d23 100644 --- a/src/bin/eolian_mono/eolian/mono/function_definition.hh +++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh @@ -123,7 +123,8 @@ struct native_function_definition_generator self = ""; if(!as_generator - (indent << "private static " + (indent << "[SuppressMessage(\"Microsoft.Reliability\", \"CA2000:DisposeObjectsBeforeLosingScope\", Justification = \"The instantiated objects can be stored in the called Managed API method.\")]\n" + << indent << "private static " << eolian_mono::marshall_type(true) << " " << string << "(System.IntPtr obj, System.IntPtr pd" diff --git a/src/bin/eolian_mono/eolian_mono.cc b/src/bin/eolian_mono/eolian_mono.cc index fd40e9982d..62eed11b2a 100644 --- a/src/bin/eolian_mono/eolian_mono.cc +++ b/src/bin/eolian_mono/eolian_mono.cc @@ -171,7 +171,8 @@ run(options_type const& opts) "using System.Collections.Generic;\n" "using System.Linq;\n" "using System.Threading;\n" - "using System.ComponentModel;\n") + "using System.ComponentModel;\n" + "using System.Diagnostics.CodeAnalysis;\n") .generate(iterator, efl::eolian::grammar::attributes::unused, efl::eolian::grammar::context_null())) { throw std::runtime_error("Failed to generate file preamble");