Browse Source

fix(DevGenerators): Some null annotation

pull/8906/head
Giuseppe Lippolis 4 years ago
parent
commit
9545bbd6b0
  1. 7
      src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs
  2. 30
      src/tools/DevGenerators/CompositionGenerator/Extensions.cs
  3. 4
      src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs
  4. 16
      src/tools/DevGenerators/CompositionGenerator/Generator.cs
  5. 1
      src/tools/DevGenerators/DevGenerators.csproj
  6. 11
      src/tools/DevGenerators/GetProcAddressInitialization.cs

7
src/tools/DevGenerators/CompositionGenerator/CompositionRoslynGenerator.cs

@ -11,8 +11,9 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
{ {
var schema = var schema =
context.AdditionalTextsProvider.Where(static file => file.Path.EndsWith("composition-schema.xml")); context.AdditionalTextsProvider.Where(static file => file.Path.EndsWith("composition-schema.xml"));
var configs = schema.Select((t, _) => var configs = schema.Select((t, _) => t.GetText())
(GConfig)new XmlSerializer(typeof(GConfig)).Deserialize(new StringReader(t.GetText().ToString()))); .Where(source => source is not null)
.Select((source, _) => (GConfig)new XmlSerializer(typeof(GConfig)).Deserialize(new StringReader(source!.ToString())));
context.RegisterSourceOutput(configs, (spc, config) => context.RegisterSourceOutput(configs, (spc, config) =>
{ {
var generator = new Generator(new RoslynCompositionGeneratorSink(spc), config); var generator = new Generator(new RoslynCompositionGeneratorSink(spc), config);
@ -20,4 +21,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
}); });
} }
} }
} }

30
src/tools/DevGenerators/CompositionGenerator/Extensions.cs

@ -7,49 +7,47 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
{ {
public static class Extensions 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); 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;
return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray()); return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
} }
public static string WithLowerFirst(this string s) public static string WithLowerFirst(this string s)
{ {
@ -58,7 +56,7 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
return char.ToLowerInvariant(s[0]) + s.Substring(1); 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) if (identifiers == null || identifiers.Length == 0)
throw new ArgumentException(); throw new ArgumentException();
@ -96,4 +94,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
? s.Substring(prefix.Length) ? s.Substring(prefix.Length)
: s; : s;
} }
} }

4
src/tools/DevGenerators/CompositionGenerator/Generator.Utils.cs

@ -54,7 +54,7 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
FieldDeclarationSyntax DeclareField(string type, string name, params SyntaxKind[] modifiers) => FieldDeclarationSyntax DeclareField(string type, string name, params SyntaxKind[] modifiers) =>
DeclareField(type, name, null, 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) => params SyntaxKind[] modifiers) =>
FieldDeclaration( FieldDeclaration(
VariableDeclaration(ParseTypeName(type), VariableDeclaration(ParseTypeName(type),
@ -63,4 +63,4 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
.WithSemicolonToken(Semicolon()) .WithSemicolonToken(Semicolon())
.WithModifiers(TokenList(modifiers.Select(x => Token(x)))); .WithModifiers(TokenList(modifiers.Select(x => Token(x))));
} }
} }

16
src/tools/DevGenerators/CompositionGenerator/Generator.cs

@ -37,8 +37,8 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
string ServerName(string c) => c != null ? ("Server" + c) : "ServerObject"; string ServerName(string? c) => c != null ? ("Server" + c) : "ServerObject";
string ChangesName(string c) => c != null ? (c + "Changes") : "ChangeSet"; string ChangesName(string? c) => c != null ? (c + "Changes") : "ChangeSet";
string ChangedFieldsTypeName(GClass c) => c.Name + "ChangedFields"; string ChangedFieldsTypeName(GClass c) => c.Name + "ChangedFields";
string ChangedFieldsFieldName(GClass c) => "_changedFieldsOf" + c.Name; string ChangedFieldsFieldName(GClass c) => "_changedFieldsOf" + c.Name;
string PropertyBackingFieldName(GProperty prop) => "_" + prop.Name.WithLowerFirst(); string PropertyBackingFieldName(GProperty prop) => "_" + prop.Name.WithLowerFirst();
@ -298,10 +298,10 @@ namespace Avalonia.SourceGenerator.CompositionGenerator
if(cl.Implements.Count > 0) if(cl.Implements.Count > 0)
foreach (var impl in cl.Implements) 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) if (impl.ServerName != null)
server = server.WithBaseList( server = server.WithBaseList(
server.BaseList.AddTypes(SimpleBaseType(ParseTypeName(impl.ServerName)))); server.BaseList?.AddTypes(SimpleBaseType(ParseTypeName(impl.ServerName))));
client = client.AddMembers( client = client.AddMembers(
ParseMemberDeclaration($"{impl.ServerName} {impl.Name}.Server => Server;")); ParseMemberDeclaration($"{impl.ServerName} {impl.Name}.Server => Server;"));
@ -527,7 +527,7 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>();
body = body.AddStatements( body = body.AddStatements(
ParseStatement("return base.GetPropertyForAnimation(name);")); ParseStatement("return base.GetPropertyForAnimation(name);"));
var method = ((MethodDeclarationSyntax) ParseMemberDeclaration( 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); .WithBody(body);
return cl.AddMembers(method); return cl.AddMembers(method);
@ -540,7 +540,7 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>();
body = body.AddStatements( body = body.AddStatements(
ParseStatement("return base.GetCompositionProperty(name);")); ParseStatement("return base.GetCompositionProperty(name);"));
var method = ((MethodDeclarationSyntax)ParseMemberDeclaration( var method = ((MethodDeclarationSyntax)ParseMemberDeclaration(
$"public override CompositionProperty? GetCompositionProperty(string name){{}}")) $"public override CompositionProperty? GetCompositionProperty(string name){{}}")!)
.WithBody(body); .WithBody(body);
return cl.AddMembers(method); return cl.AddMembers(method);
@ -559,11 +559,11 @@ var changed = reader.Read<{ChangedFieldsTypeName(cl)}>();
); );
return cl.AddMembers( return cl.AddMembers(
((MethodDeclarationSyntax) ParseMemberDeclaration( ((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)); .WithBody(body));
} }
} }
} }

1
src/tools/DevGenerators/DevGenerators.csproj

@ -4,6 +4,7 @@
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<IsPackable>false</IsPackable> <IsPackable>false</IsPackable>
<LangVersion>10</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

11
src/tools/DevGenerators/GetProcAddressInitialization.cs

@ -131,10 +131,13 @@ public class GetProcAddressInitializationGenerator : IIncrementalGenerator
.Append(".GetProcAddress(") .Append(".GetProcAddress(")
.Append("getProcAddress, ") .Append("getProcAddress, ")
.Append(contextName); .Append(contextName);
var syntaxNode = (AttributeSyntax)attr.ApplicationSyntaxReference.GetSyntax(); if (attr.ApplicationSyntaxReference?.GetSyntax() is AttributeSyntax syntaxNode
foreach (var arg in syntaxNode.ArgumentList.Arguments) && syntaxNode.ArgumentList is { })
initializeBody.Append(", ").Append(arg.GetText()); {
foreach (var arg in syntaxNode.ArgumentList.Arguments)
initializeBody.Append(", ").Append(arg.GetText());
}
initializeBody.AppendLine(");"); initializeBody.AppendLine(");");
} }
} }

Loading…
Cancel
Save