private void CreateEmbeddedAttributesIfNeeded(DiagnosticBag diagnostics) { EmbeddableAttributes needsAttributes = GetNeedsGeneratedAttributes(); if (ShouldEmitNullablePublicOnlyAttribute() && Compilation.CheckIfAttributeShouldBeEmbedded(EmbeddableAttributes.NullablePublicOnlyAttribute, diagnostics, Location.None)) { needsAttributes |= EmbeddableAttributes.NullablePublicOnlyAttribute; } else if (needsAttributes == 0) { return; } var createParameterlessEmbeddedAttributeSymbol = new Func <string, NamespaceSymbol, DiagnosticBag, SynthesizedEmbeddedAttributeSymbol>(CreateParameterlessEmbeddedAttributeSymbol); CreateAttributeIfNeeded( ref _lazyEmbeddedAttribute, diagnostics, AttributeDescription.CodeAnalysisEmbeddedAttribute, createParameterlessEmbeddedAttributeSymbol); if ((needsAttributes & EmbeddableAttributes.IsReadOnlyAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyIsReadOnlyAttribute, diagnostics, AttributeDescription.IsReadOnlyAttribute, createParameterlessEmbeddedAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.IsByRefLikeAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyIsByRefLikeAttribute, diagnostics, AttributeDescription.IsByRefLikeAttribute, createParameterlessEmbeddedAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.IsUnmanagedAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyIsUnmanagedAttribute, diagnostics, AttributeDescription.IsUnmanagedAttribute, createParameterlessEmbeddedAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.NullableAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyNullableAttribute, diagnostics, AttributeDescription.NullableAttribute, CreateNullableAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.NullableContextAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyNullableContextAttribute, diagnostics, AttributeDescription.NullableContextAttribute, CreateNullableContextAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.NullablePublicOnlyAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyNullablePublicOnlyAttribute, diagnostics, AttributeDescription.NullablePublicOnlyAttribute, CreateNullablePublicOnlyAttributeSymbol); } if ((needsAttributes & EmbeddableAttributes.NativeIntegerAttribute) != 0) { CreateAttributeIfNeeded( ref _lazyNativeIntegerAttribute, diagnostics, AttributeDescription.NativeIntegerAttribute, CreateNativeIntegerAttributeSymbol); } }
private void CreateEmbeddedAttributesIfNeeded(DiagnosticBag diagnostics) { EmbeddableAttributes needsAttributes = GetNeedsGeneratedAttributes(); if (ShouldEmitNullablePublicOnlyAttribute() && Compilation.CheckIfAttributeShouldBeEmbedded(EmbeddableAttributes.NullablePublicOnlyAttribute, diagnostics, Location.None)) { needsAttributes |= EmbeddableAttributes.NullablePublicOnlyAttribute; } else if (needsAttributes == 0) { return; } CreateEmbeddedAttributeIfNeeded( ref _lazyEmbeddedAttribute, diagnostics, AttributeDescription.CodeAnalysisEmbeddedAttribute); if ((needsAttributes & EmbeddableAttributes.IsReadOnlyAttribute) != 0) { CreateEmbeddedAttributeIfNeeded( ref _lazyIsReadOnlyAttribute, diagnostics, AttributeDescription.IsReadOnlyAttribute); } if ((needsAttributes & EmbeddableAttributes.IsByRefLikeAttribute) != 0) { CreateEmbeddedAttributeIfNeeded( ref _lazyIsByRefLikeAttribute, diagnostics, AttributeDescription.IsByRefLikeAttribute); } if ((needsAttributes & EmbeddableAttributes.IsUnmanagedAttribute) != 0) { CreateEmbeddedAttributeIfNeeded( ref _lazyIsUnmanagedAttribute, diagnostics, AttributeDescription.IsUnmanagedAttribute); } if ((needsAttributes & EmbeddableAttributes.NullableAttribute) != 0) { CreateEmbeddedNullableAttributeIfNeeded( ref _lazyNullableAttribute, diagnostics); } if ((needsAttributes & EmbeddableAttributes.NullableContextAttribute) != 0) { CreateEmbeddedNullableContextAttributeIfNeeded( ref _lazyNullableContextAttribute, diagnostics); } if ((needsAttributes & EmbeddableAttributes.NullablePublicOnlyAttribute) != 0) { CreateEmbeddedNullablePublicOnlyAttributeIfNeeded( ref _lazyNullablePublicOnlyAttribute, diagnostics); } }