{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
- IncrementalValuesProvider<(TypeDeclarationSyntax TypeSyntax, SemanticModel SemanticModel)> typeDeclarations = context.SyntaxProvider
+ IncrementalValuesProvider<(TypeDeclarationSyntax? TypeSyntax, SemanticModel SemanticModel)> typeDeclarations = context.SyntaxProvider
.ForAttributeWithMetadataName(
SymbolLoader.OptionsValidatorAttribute,
(node, _) => node is TypeDeclarationSyntax,
(context, _) => (TypeSyntax:context.TargetNode as TypeDeclarationSyntax, SemanticModel: context.SemanticModel))
.Where(static m => m.TypeSyntax is not null);
- IncrementalValueProvider<(Compilation, ImmutableArray<(TypeDeclarationSyntax TypeSyntax, SemanticModel SemanticModel)>)> compilationAndTypes =
+ IncrementalValueProvider<(Compilation, ImmutableArray<(TypeDeclarationSyntax? TypeSyntax, SemanticModel SemanticModel)>)> compilationAndTypes =
context.CompilationProvider.Combine(typeDeclarations.Collect());
context.RegisterSourceOutput(compilationAndTypes, static (spc, source) => HandleAnnotatedTypes(source.Item1, source.Item2, spc));
}
- private static void HandleAnnotatedTypes(Compilation compilation, ImmutableArray<(TypeDeclarationSyntax TypeSyntax, SemanticModel SemanticModel)> types, SourceProductionContext context)
+ private static void HandleAnnotatedTypes(Compilation compilation, ImmutableArray<(TypeDeclarationSyntax? TypeSyntax, SemanticModel SemanticModel)> types, SourceProductionContext context)
{
if (!SymbolLoader.TryLoad(compilation, out var symbolHolder))
{
<Project Sdk="Microsoft.NET.Sdk">
+
<PropertyGroup>
- <TargetFramework>netstandard2.0</TargetFramework>
+ <!-- Source generators must target netstandard2.0 which doesn't support nullable reference types. In order
+ to enable the nullable reference type compiler checks, we also target NetCoreAppCurrent. -->
+ <TargetFrameworks>$(NetCoreAppCurrent);netstandard2.0</TargetFrameworks>
<CLSCompliant>false</CLSCompliant>
<EnableDefaultEmbeddedResourceItems>false</EnableDefaultEmbeddedResourceItems>
<UsingToolXliff>true</UsingToolXliff>
<Compile Include="SymbolLoader.cs" />
<Compile Include="TypeDeclarationSyntaxReceiver.cs" />
</ItemGroup>
+
</Project>
continue;
}
- Location lowerLocationInCompilation = _compilation.ContainsSyntaxTree(modelType.GetLocation().SourceTree)
- ? modelType.GetLocation()
+ Location? modelTypeLocation = modelType.GetLocation();
+ Location lowerLocationInCompilation = modelTypeLocation is not null && modelTypeLocation.SourceTree is not null && _compilation.ContainsSyntaxTree(modelTypeLocation.SourceTree)
+ ? modelTypeLocation
: syntax.GetLocation();
var membersToValidate = GetMembersToValidate(modelType, true, lowerLocationInCompilation, validatorType);
parents.Reverse();
results.Add(new ValidatorType(
- validatorType.ContainingNamespace.IsGlobalNamespace ? string.Empty : validatorType.ContainingNamespace.ToString(),
+ validatorType.ContainingNamespace.IsGlobalNamespace ? string.Empty : validatorType.ContainingNamespace.ToString()!,
GetMinimalFQN(validatorType),
GetMinimalFQNWithoutGenerics(validatorType),
keyword,
var membersToValidate = new List<ValidatedMember>();
foreach (var member in members)
{
- Location location = _compilation.ContainsSyntaxTree(member.GetLocation().SourceTree)
- ? member.GetLocation()
+ Location? memberLocation = member.GetLocation();
+ Location location = memberLocation is not null && memberLocation.SourceTree is not null && _compilation.ContainsSyntaxTree(memberLocation.SourceTree)
+ ? memberLocation
: lowerLocationInCompilation;
var memberInfo = GetMemberInfo(member, speculate, location, validatorType);
var validatorTypeName = "__" + mt.Name + "Validator__";
var result = new ValidatorType(
- mt.ContainingNamespace.IsGlobalNamespace ? string.Empty : mt.ContainingNamespace.ToString(),
+ mt.ContainingNamespace.IsGlobalNamespace ? string.Empty : mt.ContainingNamespace.ToString()!,
validatorTypeName,
validatorTypeName,
"class",
if (type.SpecialType == SpecialType.System_String)
{
- return $@"""{EscapeString(value.ToString())}""";
+ return $@"""{EscapeString(value.ToString()!)}""";
}
if (type.SpecialType == SpecialType.System_Char)
{
- return $@"'{EscapeString(value.ToString())}'";
+ return $@"'{EscapeString(value.ToString()!)}'";
}
return $"({type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}){Convert.ToString(value, CultureInfo.InvariantCulture)}";