private NullabilityAttributeSymbols ScanInReferences([NotNull] Compilation compilation,
            CancellationToken cancellationToken)
        {
            foreach (MetadataReference reference in compilation.References)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var externalAssemblySymbol = compilation.GetAssemblyOrModuleSymbol(reference) as IAssemblySymbol;
                if (externalAssemblySymbol != null)
                {
                    var visitor = new NullabilityAttributesVisitor();
                    visitor.Visit(externalAssemblySymbol.GlobalNamespace);

                    if (visitor.NotNullAttributeSymbol != null && visitor.CanBeNullAttributeSymbol != null &&
                        visitor.ItemNotNullAttributeSymbol != null && visitor.ItemCanBeNullAttributeSymbol != null)
                    {
                        return new NullabilityAttributeSymbols(visitor.NotNullAttributeSymbol,
                            visitor.CanBeNullAttributeSymbol, visitor.ItemNotNullAttributeSymbol,
                            visitor.ItemCanBeNullAttributeSymbol);
                    }
                }
            }

            return null;
        }
示例#2
0
        private NullabilityAttributeSymbols ScanInReferences([NotNull] Compilation compilation,
                                                             CancellationToken cancellationToken)
        {
            foreach (MetadataReference reference in compilation.References)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var externalAssemblySymbol = compilation.GetAssemblyOrModuleSymbol(reference) as IAssemblySymbol;
                if (externalAssemblySymbol != null)
                {
                    var visitor = new NullabilityAttributesVisitor();
                    visitor.Visit(externalAssemblySymbol.GlobalNamespace);

                    if (visitor.NotNullAttributeSymbol != null && visitor.CanBeNullAttributeSymbol != null &&
                        visitor.ItemNotNullAttributeSymbol != null && visitor.ItemCanBeNullAttributeSymbol != null)
                    {
                        return(new NullabilityAttributeSymbols(visitor.NotNullAttributeSymbol,
                                                               visitor.CanBeNullAttributeSymbol, visitor.ItemNotNullAttributeSymbol,
                                                               visitor.ItemCanBeNullAttributeSymbol));
                    }
                }
            }

            return(null);
        }