protected override DiagnosticInfo ResolveInfo() { if (_possiblyNullableTypeSymbol.IsNullableType()) { return(_possiblyNullableTypeSymbol.TypeSymbol.OriginalDefinition.GetUseSiteDiagnostic()); } else if (_possiblyNullableTypeSymbol.TypeSymbol.IsTypeParameterDisallowingAnnotation()) { return(new CSDiagnosticInfo(ErrorCode.ERR_NullableUnconstrainedTypeParameter)); } return(null); }
private void AddNullableAnnotations(TypeSymbolWithAnnotations typeOpt) { if (typeOpt.IsNull) { return; } if (format.MiscellaneousOptions.IncludesOption(SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier) && !typeOpt.IsNullableType() && typeOpt.IsAnnotated) { AddPunctuation(SyntaxKind.QuestionToken); } else if (format.CompilerInternalOptions.IncludesOption(SymbolDisplayCompilerInternalOptions.IncludeNonNullableTypeModifier) && !typeOpt.IsValueType && typeOpt.IsNullable == false) { AddPunctuation(SyntaxKind.ExclamationToken); } }
private void AddNullableAnnotations(TypeSymbolWithAnnotations typeOpt) { if (typeOpt.IsNull) { return; } if (format.MiscellaneousOptions.IncludesOption(SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier) && !typeOpt.IsNullableType() && !typeOpt.IsValueType && (typeOpt.NullableAnnotation == NullableAnnotation.Annotated || (typeOpt.NullableAnnotation == NullableAnnotation.Nullable && !typeOpt.TypeSymbol.IsUnconstrainedTypeParameter()))) { AddPunctuation(SyntaxKind.QuestionToken); } else if (format.CompilerInternalOptions.IncludesOption(SymbolDisplayCompilerInternalOptions.IncludeNonNullableTypeModifier) && !typeOpt.IsValueType && typeOpt.NullableAnnotation.IsAnyNotNullable() && !typeOpt.TypeSymbol.IsUnconstrainedTypeParameter()) { AddPunctuation(SyntaxKind.ExclamationToken); } }
private bool ShouldAddNullableAnnotation(TypeSymbolWithAnnotations typeOpt) { if (!typeOpt.HasType) { return(false); } else if (format.MiscellaneousOptions.IncludesOption(SymbolDisplayMiscellaneousOptions.IncludeNullableReferenceTypeModifier) && !typeOpt.IsNullableType() && !typeOpt.IsValueType && typeOpt.NullableAnnotation.IsAnnotated()) { return(true); } else if (format.CompilerInternalOptions.IncludesOption(SymbolDisplayCompilerInternalOptions.IncludeNonNullableTypeModifier) && !typeOpt.IsValueType && typeOpt.NullableAnnotation.IsNotAnnotated() && !typeOpt.TypeSymbol.IsTypeParameterDisallowingAnnotation()) { return(true); } return(false); }