From 9545bbd6b08f38abdf2c9a877b4e0a2145b990d9 Mon Sep 17 00:00:00 2001 From: Giuseppe Lippolis Date: Wed, 7 Sep 2022 15:22:51 +0200 Subject: [PATCH] fix(DevGenerators): Some null annotation --- .../CompositionRoslynGenerator.cs | 7 +++-- .../CompositionGenerator/Extensions.cs | 30 +++++++++---------- .../CompositionGenerator/Generator.Utils.cs | 4 +-- .../CompositionGenerator/Generator.cs | 16 +++++----- src/tools/DevGenerators/DevGenerators.csproj | 1 + .../GetProcAddressInitialization.cs | 11 ++++--- 6 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs b/src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs index 72311b4d18..26bd4796df 100644 --- a/src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs +++ b/src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs @@ -11,8 +11,9 @@ namespace Avalonia.SourceGenerator.CompositionGenerator { var schema = context.AdditionalTextsProvider.Where(static file => file.Path.EndsWith("composition-schema.xml")); - var configs = schema.Select((t, _) => - (GConfig)new XmlSerializer(typeof(GConfig)).Deserialize(new StringReader(t.GetText().ToString()))); + var configs = schema.Select((t, _) => t.GetText()) + .Where(source => source is not null) + .Select((source, _) => (GConfig)new XmlSerializer(typeof(GConfig)).Deserialize(new StringReader(source!.ToString()))); context.RegisterSourceOutput(configs, (spc, config) => { var generator = new Generator(new RoslynCompositionGeneratorSink(spc), config); @@ -20,4 +21,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator }); } } -} \ No newline at end of file +} diff --git a/src/tools/DevGenerators/CompositionGenerator/Extensions.cs b/src/tools/DevGenerators/CompositionGenerator/Extensions.cs index d88e9b4600..f34765ec36 100644 --- a/src/tools/DevGenerators/CompositionGenerator/Extensions.cs +++ b/src/tools/DevGenerators/CompositionGenerator/Extensions.cs @@ -7,49 +7,47 @@ namespace Avalonia.SourceGenerator.CompositionGenerator { public static class Extensions { - public static ClassDeclarationSyntax AddModifiers(this ClassDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static ClassDeclarationSyntax AddModifiers(this ClassDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - public static MethodDeclarationSyntax AddModifiers(this MethodDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static MethodDeclarationSyntax AddModifiers(this MethodDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - public static PropertyDeclarationSyntax AddModifiers(this PropertyDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static PropertyDeclarationSyntax AddModifiers(this PropertyDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - public static ConstructorDeclarationSyntax AddModifiers(this ConstructorDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static ConstructorDeclarationSyntax AddModifiers(this ConstructorDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - public static AccessorDeclarationSyntax AddModifiers(this AccessorDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static AccessorDeclarationSyntax AddModifiers(this AccessorDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - public static EnumDeclarationSyntax AddModifiers(this EnumDeclarationSyntax cl, params SyntaxKind[] modifiers) + public static EnumDeclarationSyntax AddModifiers(this EnumDeclarationSyntax cl, params SyntaxKind[]? modifiers) { - if (modifiers == null) + if (modifiers is null) return cl; return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); } - - public static string WithLowerFirst(this string s) { @@ -58,7 +56,7 @@ namespace Avalonia.SourceGenerator.CompositionGenerator return char.ToLowerInvariant(s[0]) + s.Substring(1); } - public static ExpressionSyntax MemberAccess(params string[] identifiers) + public static ExpressionSyntax MemberAccess(params string[]? identifiers) { if (identifiers == null || identifiers.Length == 0) throw new ArgumentException(); @@ -96,4 +94,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator ? s.Substring(prefix.Length) : s; } -} \ No newline at end of file +} diff --git a/src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs b/src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs index b53c247991..16aa15d95a 100644 --- a/src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs +++ b/src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs @@ -54,7 +54,7 @@ namespace Avalonia.SourceGenerator.CompositionGenerator FieldDeclarationSyntax DeclareField(string type, string name, params SyntaxKind[] modifiers) => DeclareField(type, name, null, modifiers); - FieldDeclarationSyntax DeclareField(string type, string name, EqualsValueClauseSyntax initializer, + FieldDeclarationSyntax DeclareField(string type, string name, EqualsValueClauseSyntax? initializer, params SyntaxKind[] modifiers) => FieldDeclaration( VariableDeclaration(ParseTypeName(type), @@ -63,4 +63,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator .WithSemicolonToken(Semicolon()) .WithModifiers(TokenList(modifiers.Select(x => Token(x)))); } -} \ No newline at end of file +} diff --git a/src/tools/DevGenerators/CompositionGenerator/Generator.cs b/src/tools/DevGenerators/CompositionGenerator/Generator.cs index 18f1d1c1e5..cbcc55ada0 100644 --- a/src/tools/DevGenerators/CompositionGenerator/Generator.cs +++ b/src/tools/DevGenerators/CompositionGenerator/Generator.cs @@ -37,8 +37,8 @@ namespace Avalonia.SourceGenerator.CompositionGenerator - string ServerName(string c) => c != null ? ("Server" + c) : "ServerObject"; - string ChangesName(string c) => c != null ? (c + "Changes") : "ChangeSet"; + string ServerName(string? c) => c != null ? ("Server" + c) : "ServerObject"; + string ChangesName(string? c) => c != null ? (c + "Changes") : "ChangeSet"; string ChangedFieldsTypeName(GClass c) => c.Name + "ChangedFields"; string ChangedFieldsFieldName(GClass c) => "_changedFieldsOf" + c.Name; string PropertyBackingFieldName(GProperty prop) => "_" + prop.Name.WithLowerFirst(); @@ -298,10 +298,10 @@ namespace Avalonia.SourceGenerator.CompositionGenerator if(cl.Implements.Count > 0) foreach (var impl in cl.Implements) { - client = client.WithBaseList(client.BaseList.AddTypes(SimpleBaseType(ParseTypeName(impl.Name)))); + client = client.WithBaseList(client.BaseList?.AddTypes(SimpleBaseType(ParseTypeName(impl.Name)))); if (impl.ServerName != null) server = server.WithBaseList( - server.BaseList.AddTypes(SimpleBaseType(ParseTypeName(impl.ServerName)))); + server.BaseList?.AddTypes(SimpleBaseType(ParseTypeName(impl.ServerName)))); client = client.AddMembers( ParseMemberDeclaration($"{impl.ServerName} {impl.Name}.Server => Server;")); @@ -527,7 +527,7 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>(); body = body.AddStatements( ParseStatement("return base.GetPropertyForAnimation(name);")); var method = ((MethodDeclarationSyntax) ParseMemberDeclaration( - $"public override Avalonia.Rendering.Composition.Expressions.ExpressionVariant GetPropertyForAnimation(string name){{}}")) + $"public override Avalonia.Rendering.Composition.Expressions.ExpressionVariant GetPropertyForAnimation(string name){{}}")!) .WithBody(body); return cl.AddMembers(method); @@ -540,7 +540,7 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>(); body = body.AddStatements( ParseStatement("return base.GetCompositionProperty(name);")); var method = ((MethodDeclarationSyntax)ParseMemberDeclaration( - $"public override CompositionProperty? GetCompositionProperty(string name){{}}")) + $"public override CompositionProperty? GetCompositionProperty(string name){{}}")!) .WithBody(body); return cl.AddMembers(method); @@ -559,11 +559,11 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>(); ); return cl.AddMembers( ((MethodDeclarationSyntax) ParseMemberDeclaration( - "internal override void StartAnimation(string propertyName, CompositionAnimation animation, Avalonia.Rendering.Composition.Expressions.ExpressionVariant? finalValue){}")) + "internal override void StartAnimation(string propertyName, CompositionAnimation animation, Avalonia.Rendering.Composition.Expressions.ExpressionVariant? finalValue){}")!) .WithBody(body)); } } -} \ No newline at end of file +} diff --git a/src/tools/DevGenerators/DevGenerators.csproj b/src/tools/DevGenerators/DevGenerators.csproj index 30da940514..069ff159fc 100644 --- a/src/tools/DevGenerators/DevGenerators.csproj +++ b/src/tools/DevGenerators/DevGenerators.csproj @@ -4,6 +4,7 @@ netstandard2.0 enable false + 10 diff --git a/src/tools/DevGenerators/GetProcAddressInitialization.cs b/src/tools/DevGenerators/GetProcAddressInitialization.cs index c7d03a9b50..aedc13e7f6 100644 --- a/src/tools/DevGenerators/GetProcAddressInitialization.cs +++ b/src/tools/DevGenerators/GetProcAddressInitialization.cs @@ -131,10 +131,13 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator .Append(".GetProcAddress(") .Append("getProcAddress, ") .Append(contextName); - - var syntaxNode = (AttributeSyntax)attr.ApplicationSyntaxReference.GetSyntax(); - foreach (var arg in syntaxNode.ArgumentList.Arguments) - initializeBody.Append(", ").Append(arg.GetText()); + + if (attr.ApplicationSyntaxReference?.GetSyntax() is AttributeSyntax syntaxNode + && syntaxNode.ArgumentList is { }) + { + foreach (var arg in syntaxNode.ArgumentList.Arguments) + initializeBody.Append(", ").Append(arg.GetText()); + } initializeBody.AppendLine(");"); } }