Skip to content

Commit d24f074

Browse files
committed
[build] Enable string operations globalization code analyzers.
1 parent 3e6a623 commit d24f074

File tree

44 files changed

+104
-93
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+104
-93
lines changed

.editorconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,9 @@ dotnet_diagnostic.CA1200.severity = none # Avoid using cref tags with a prefix
332332
dotnet_diagnostic.CA1303.severity = none # Do not pass literals as localized parameters
333333
dotnet_diagnostic.CA1304.severity = none # Specify CultureInfo
334334
dotnet_diagnostic.CA1305.severity = none # Specify IFormatProvider
335-
dotnet_diagnostic.CA1307.severity = none # Specify StringComparison
335+
#dotnet_diagnostic.CA1307.severity = none # Specify StringComparison - Controlled via Directory.Build.props
336336
dotnet_diagnostic.CA1308.severity = none # Normalize strings to uppercase
337-
dotnet_diagnostic.CA1309.severity = none # Use ordinal stringcomparison
337+
#dotnet_diagnostic.CA1309.severity = none # Use ordinal stringcomparison - Controlled via Directory.Build.props
338338
dotnet_diagnostic.CA1401.severity = none # P/Invokes should not be visible
339339
dotnet_diagnostic.CA1417.severity = none # Do not use 'OutAttribute' on string parameters for P/Invokes
340340
dotnet_diagnostic.CA1501.severity = none # Avoid excessive inheritance

Directory.Build.props

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,15 @@
8585
<_RunJNIEnvGen Condition=" '$(JIBuildingForNetCoreApp)' != 'True' ">$(Runtime) "$(_JNIEnvGenPath)"</_RunJNIEnvGen>
8686
</PropertyGroup>
8787

88+
<!-- The net6.0 versions of these are stricter and require overloads not available in .NET Framework, so start with just .NET Framework -->
89+
<PropertyGroup Condition=" '$(TargetFramework)' != 'net6.0' ">
90+
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
91+
<WarningsAsErrors>$(WarningsAsErrors);CA1307;CA1309;CA1310</WarningsAsErrors>
92+
</PropertyGroup>
93+
<PropertyGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
94+
<NoWarn>$(NoWarn);CA1307;CA1309;CA1310</NoWarn>
95+
</PropertyGroup>
96+
8897
<!-- Add Roslyn analyzers NuGet to all projects -->
8998
<ItemGroup Condition=" '$(DisableRoslynAnalyzers)' != 'True' ">
9099
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="3.3.0">

build-tools/jnienv-gen/Generator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ public override string[] VerifyParameter (HandleStyle style, string variable)
773773
{
774774
if (managed != "IntPtr")
775775
return new string [0];
776-
var variableName = variable.StartsWith ("@")
776+
var variableName = variable.StartsWith ("@", StringComparison.Ordinal)
777777
? variable.Substring (1)
778778
: variable;
779779
return new[] {
@@ -851,7 +851,7 @@ public override string[] GetMarshalToManagedStatements (HandleStyle style, strin
851851

852852
public override string[] VerifyParameter (HandleStyle style, string variable)
853853
{
854-
var variableName = variable.StartsWith ("@")
854+
var variableName = variable.StartsWith ("@", StringComparison.Ordinal)
855855
? variable.Substring (1)
856856
: variable;
857857
return new[] {
@@ -940,7 +940,7 @@ public override string GetManagedToMarshalExpression (HandleStyle style, string
940940

941941
public override string[] VerifyParameter (HandleStyle style, string variable)
942942
{
943-
var variableName = variable.StartsWith ("@")
943+
var variableName = variable.StartsWith ("@", StringComparison.Ordinal)
944944
? variable.Substring (1)
945945
: variable;
946946
switch (style) {
@@ -1097,7 +1097,7 @@ public override string[] GetMarshalToManagedStatements (HandleStyle style, strin
10971097

10981098
public override string[] VerifyParameter (HandleStyle style, string variable)
10991099
{
1100-
var variableName = variable.StartsWith ("@")
1100+
var variableName = variable.StartsWith ("@", StringComparison.Ordinal)
11011101
? variable.Substring (1)
11021102
: variable;
11031103
switch (style) {

src/Java.Interop.Tools.Generator/Enumification/ConstantsParser.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Collections.Generic;
23
using System.IO;
34
using System.Linq;
@@ -24,7 +25,7 @@ public static List<ConstantEntry> FromEnumMapCsv (TextReader reader)
2425
// Read the enum csv file
2526
while ((s = reader.ReadLine ()) != null) {
2627
// Skip empty lines and comments
27-
if (string.IsNullOrEmpty (s) || s.StartsWith ("//"))
28+
if (string.IsNullOrEmpty (s) || s.StartsWith ("//", StringComparison.Ordinal))
2829
continue;
2930

3031
// Transient mode means remove the original field

src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ public Signature (string name, string signature, string connector, string manage
693693
Name = name;
694694

695695
var jnisig = signature;
696-
int closer = jnisig.IndexOf (")");
696+
int closer = jnisig.IndexOf (')');
697697
string ret = jnisig.Substring (closer + 1);
698698
retval = JavaNativeTypeManager.Parse (ret).Type;
699699
string jniparms = jnisig.Substring (1, closer - 1);

src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/SourceJavadocToXmldocGrammar.HtmlBnfTerms.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ static IEnumerable<XElement> GetParagraphs (ParseTreeNodeList children)
112112
int len = 0;
113113
int n = -1;
114114

115-
if ((n = s.IndexOf (UnixParagraph, i)) >= 0) {
115+
if ((n = s.IndexOf (UnixParagraph, i, StringComparison.Ordinal)) >= 0) {
116116
len = UnixParagraph.Length;
117117
}
118-
else if ((n = s.IndexOf (DosParagraph, i)) >= 0) {
118+
else if ((n = s.IndexOf (DosParagraph, i, StringComparison.Ordinal)) >= 0) {
119119
len = DosParagraph.Length;
120120
}
121121

src/Java.Interop.Tools.TypeNameMappings/Java.Interop.Tools.TypeNameMappings/JavaNativeTypeManager.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public static JniTypeName Parse (string jniType)
5858

5959
public static IEnumerable<JniTypeName> FromSignature (string signature)
6060
{
61-
if (signature.StartsWith ("(")) {
62-
int e = signature.IndexOf (")");
61+
if (signature.StartsWith ("(", StringComparison.Ordinal)) {
62+
int e = signature.IndexOf (')');
6363
signature = signature.Substring (1, e >= 0 ? e-1 : signature.Length-1);
6464
}
6565
int i = 0;
@@ -102,7 +102,7 @@ public static JniTypeName ReturnTypeFromSignature (string signature)
102102
case 'J':
103103
return new JniTypeName { Type = "long", IsKeyword = true };
104104
case 'L': {
105-
var e = signature.IndexOf (";", index);
105+
var e = signature.IndexOf (';', index);
106106
if (e <= 0)
107107
throw new InvalidOperationException ("Missing reference type after 'L' at index " + i + "in: " + signature);
108108
var s = index;

src/Xamarin.Android.Tools.AnnotationSupport/AndroidAnnotationsSupport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ static Stream FixAnnotationXML (Stream s)
6767
// them up before loading with a validating XML parser.
6868
var doc = new HtmlDocument ();
6969
doc.Load (s);
70-
if (doc.DocumentNode.FirstChild.InnerHtml.StartsWith ("<?xml"))
70+
if (doc.DocumentNode.FirstChild.InnerHtml.StartsWith ("<?xml", StringComparison.Ordinal))
7171
doc.DocumentNode.FirstChild.Remove ();
7272

7373
var ms = new MemoryStream ();

src/Xamarin.Android.Tools.Bytecode/ClassPath.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ XAttribute GetPlatform ()
129129

130130
bool IsGeneratedName (string parameterName)
131131
{
132-
return parameterName.StartsWith ("p") && parameterName.Length > 1 && Char.IsDigit (parameterName [1]);
132+
return parameterName.StartsWith ("p", StringComparison.Ordinal) && parameterName.Length > 1 && Char.IsDigit (parameterName [1]);
133133
}
134134

135135
IEnumerable<ClassFile> GetDescendants (ClassFile theClass, IList<ClassFile> classFiles)

src/Xamarin.Android.Tools.Bytecode/Kotlin/KotlinFixups.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ static void FixupExtensionMethod (MethodInfo method)
194194
// like "$this$toByteString", we change it to "obj" to be a bit nicer.
195195
var param = method.GetParameters ();
196196

197-
if (param.Length > 0 && param [0].Name.StartsWith ("$this$")) {
197+
if (param.Length > 0 && param [0].Name.StartsWith ("$this$", StringComparison.Ordinal)) {
198198
Log.Debug ($"Kotlin: Renaming extension parameter {method.DeclaringType?.ThisClass.Name.Value} - {method.Name} - {param [0].Name} -> obj");
199199
param [0].Name = "obj";
200200
}
@@ -288,7 +288,7 @@ static FieldInfo FindJavaFieldProperty (KotlinFile kotlinClass, KotlinProperty p
288288

289289
static MethodInfo FindJavaPropertyGetter (KotlinFile kotlinClass, KotlinProperty property, ClassFile klass)
290290
{
291-
var possible_methods = klass.Methods.Where (method => string.Compare (method.GetMethodNameWithoutSuffix (), $"get{property.Name}", true) == 0 &&
291+
var possible_methods = klass.Methods.Where (method => string.Compare (method.GetMethodNameWithoutSuffix (), $"get{property.Name}", StringComparison.OrdinalIgnoreCase) == 0 &&
292292
method.GetParameters ().Length == 0 &&
293293
TypesMatch (method.ReturnType, property.ReturnType, kotlinClass));
294294

@@ -297,7 +297,7 @@ static MethodInfo FindJavaPropertyGetter (KotlinFile kotlinClass, KotlinProperty
297297

298298
static MethodInfo FindJavaPropertySetter (KotlinFile kotlinClass, KotlinProperty property, ClassFile klass)
299299
{
300-
var possible_methods = klass.Methods.Where (method => string.Compare (method.GetMethodNameWithoutSuffix (), $"set{property.Name}", true) == 0 &&
300+
var possible_methods = klass.Methods.Where (method => string.Compare (method.GetMethodNameWithoutSuffix (), $"set{property.Name}", StringComparison.OrdinalIgnoreCase) == 0 &&
301301
property.ReturnType != null &&
302302
method.GetParameters ().Length == 1 &&
303303
method.ReturnType.BinaryName == "V" &&

0 commit comments

Comments
 (0)