forked from enlightenment/efl
csharp: CA1307 Add CultureInfo to generated code.
Summary: For the struct fields with strings when implementing `GetHashCode`. Ref T8405 Reviewers: brunobelo, felipealmeida, YOhoho Reviewed By: brunobelo Subscribers: cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8405 Differential Revision: https://phab.enlightenment.org/D10696
This commit is contained in:
parent
6772a78d02
commit
0c9ddb0f34
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright 2019 by its authors. See AUTHORS.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef CULTURE_INFO_GENERATOR_HH
|
||||
#define CULTURE_INFO_GENERATOR_HH
|
||||
|
||||
#include "grammar/generator.hpp"
|
||||
#include "grammar/klass_def.hpp"
|
||||
|
||||
namespace eolian_mono {
|
||||
|
||||
namespace attributes = efl::eolian::grammar::attributes;
|
||||
|
||||
// Some methods on string require a culture info parameter due to warning CA1307
|
||||
struct culture_info_generator
|
||||
{
|
||||
template<typename OutputIterator, typename Context>
|
||||
bool generate(OutputIterator sink, attributes::struct_field_def const& field, Context const& context) const
|
||||
{
|
||||
std::string managed_name;
|
||||
|
||||
if (!as_generator(type).generate(std::back_inserter(managed_name), field.type, context))
|
||||
return false;
|
||||
|
||||
if (managed_name == "System.String")
|
||||
if (!as_generator(lit("StringComparison.Ordinal")).generate(sink, attributes::unused, context))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
} const culture_info {};
|
||||
|
||||
}
|
||||
|
||||
namespace efl { namespace eolian { namespace grammar {
|
||||
|
||||
template <>
|
||||
struct is_eager_generator< ::eolian_mono::culture_info_generator> : std::true_type {};
|
||||
template <>
|
||||
struct is_generator< ::eolian_mono::culture_info_generator> : std::true_type {};
|
||||
|
||||
namespace type_traits {
|
||||
template <>
|
||||
struct attributes_needed< ::eolian_mono::culture_info_generator> : std::integral_constant<int, 1> {};
|
||||
}
|
||||
|
||||
} } }
|
||||
|
||||
#endif // CULTURE_INFO_GENERATOR_HH
|
|
@ -29,6 +29,7 @@
|
|||
#include "documentation.hh"
|
||||
#include "struct_fields.hh"
|
||||
#include "blacklist.hh"
|
||||
#include "culture_info.hh"
|
||||
|
||||
namespace eolian_mono {
|
||||
|
||||
|
@ -485,7 +486,6 @@ struct struct_definition_generator
|
|||
indent << scope_tab << "/// <summary>Get a hash code for this item.\n"
|
||||
<< since_line
|
||||
<< indent << scope_tab << "/// </summary>\n"
|
||||
<< "#pragma warning disable CA1307\n"
|
||||
<< indent << scope_tab << "public override int GetHashCode()\n"
|
||||
<< indent << scope_tab << "{\n"
|
||||
).generate(sink, attributes::unused, context))
|
||||
|
@ -500,7 +500,7 @@ struct struct_definition_generator
|
|||
// return hash
|
||||
if (!as_generator(
|
||||
indent << scope_tab << scope_tab << "int hash = 17;\n"
|
||||
<< *(indent << scope_tab << scope_tab << "hash = hash * 23 + " << name_helpers::struct_field_name << ".GetHashCode();\n")
|
||||
<< *(grammar::attribute_reorder<-1, -1>(indent << scope_tab << scope_tab << "hash = hash * 23 + " << name_helpers::struct_field_name << ".GetHashCode(" << culture_info << ");\n"))
|
||||
<< indent << scope_tab << scope_tab << "return hash;\n"
|
||||
).generate(sink, struct_.fields, context))
|
||||
return false;
|
||||
|
@ -516,7 +516,6 @@ struct struct_definition_generator
|
|||
|
||||
if (!as_generator(
|
||||
indent << scope_tab << "}\n"
|
||||
<< "#pragma warning restore CA1307\n\n"
|
||||
).generate(sink, attributes::unused, context))
|
||||
return false;
|
||||
|
||||
|
|
Loading…
Reference in New Issue