public AttributeUsageInfo(AttributeTargets validTargets, bool allowMultiple, bool inherited) { // NOTE: VB allows AttributeUsageAttribute with no valid target, i.e. <AttributeUsageAttribute(0)>, and doesn't generate any diagnostics. // We use PackedAttributeUsage.Initialized field to differentiate between uninitialized AttributeUsageInfo and initialized AttributeUsageInfo with no valid targets. _flags = (PackedAttributeUsage)validTargets | PackedAttributeUsage.Initialized; if (allowMultiple) { _flags |= PackedAttributeUsage.AllowMultiple; } if (inherited) { _flags |= PackedAttributeUsage.Inherited; } }
internal AttributeUsageInfo(AttributeTargets validTargets, bool allowMultiple, bool inherited) { // NOTE: VB allows AttributeUsageAttribute with no valid target, i.e. <AttributeUsageAttribute(0)>, and doesn't generate any diagnostics. // We use use PackedAttributeUsage.Initialized field to differentiate between uninitialized AttributeUsageInfo and initialized AttributeUsageInfo with no valid targets. flags = (PackedAttributeUsage)validTargets | PackedAttributeUsage.Initialized; if (allowMultiple) { flags |= PackedAttributeUsage.AllowMultiple; } if (inherited) { flags |= PackedAttributeUsage.Inherited; } }