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(");");
}
}