Пример #1
0
        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);
            }
        }
Пример #4
0
        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);
        }