public override ImmutableArray <CSharpAttributeData> GetAttributes() { if (_lazyCustomAttributes.IsDefault) { var containingPEModuleSymbol = _containingType.ContainingPEModule; // Could this possibly be an extension method? bool alreadySet = _packedFlags.IsExtensionMethodIsPopulated; bool checkForExtension = alreadySet ? _packedFlags.IsExtensionMethod : this.MethodKind == MethodKind.Ordinary && IsValidExtensionMethodSignature() && _containingType.MightContainExtensionMethods; bool isExtensionMethod = false; if (checkForExtension) { containingPEModuleSymbol.LoadCustomAttributesFilterExtensions(_handle, ref _lazyCustomAttributes, out isExtensionMethod); } else { containingPEModuleSymbol.LoadCustomAttributes(_handle, ref _lazyCustomAttributes); } if (!alreadySet) { _packedFlags.InitializeIsExtensionMethod(isExtensionMethod); } } return(_lazyCustomAttributes); }
public override ImmutableArray <CSharpAttributeData> GetAttributes() { if (!_packedFlags.IsCustomAttributesPopulated) { // Compute the value var attributeData = default(ImmutableArray <CSharpAttributeData>); var containingPEModuleSymbol = _containingType.ContainingPEModule; // Could this possibly be an extension method? bool alreadySet = _packedFlags.IsExtensionMethodIsPopulated; bool checkForExtension = alreadySet ? _packedFlags.IsExtensionMethod : this.MethodKind == MethodKind.Ordinary && IsValidExtensionMethodSignature() && _containingType.MightContainExtensionMethods; bool isExtensionMethod = false; if (checkForExtension) { containingPEModuleSymbol.LoadCustomAttributesFilterExtensions(_handle, ref attributeData, out isExtensionMethod); } else { containingPEModuleSymbol.LoadCustomAttributes(_handle, ref attributeData); } if (!alreadySet) { _packedFlags.InitializeIsExtensionMethod(isExtensionMethod); } // Store the result in uncommon fields only if it's not empty. Debug.Assert(!attributeData.IsDefault); if (!attributeData.IsEmpty) { attributeData = InterlockedOperations.Initialize(ref AccessUncommonFields()._lazyCustomAttributes, attributeData); } _packedFlags.SetIsCustomAttributesPopulated(); return(attributeData); } // Retrieve cached or inferred value. var uncommonFields = _uncommonFields; if (uncommonFields == null) { return(ImmutableArray <CSharpAttributeData> .Empty); } else { var attributeData = uncommonFields._lazyCustomAttributes; return(attributeData.IsDefault ? InterlockedOperations.Initialize(ref uncommonFields._lazyCustomAttributes, ImmutableArray <CSharpAttributeData> .Empty) : attributeData); } }