Ejemplo n.º 1
0
        private static FlowAnalysisAnnotations DecodeFlowAnalysisAttributes(PEModule module, ParameterHandle handle)
        {
            FlowAnalysisAnnotations annotations = FlowAnalysisAnnotations.None;

            if (module.HasAttribute(handle, AttributeDescription.AllowNullAttribute))
            {
                annotations |= FlowAnalysisAnnotations.AllowNull;
            }
            if (module.HasAttribute(handle, AttributeDescription.DisallowNullAttribute))
            {
                annotations |= FlowAnalysisAnnotations.DisallowNull;
            }
            if (module.HasAttribute(handle, AttributeDescription.MaybeNullAttribute))
            {
                annotations |= FlowAnalysisAnnotations.MaybeNull;
            }
            else if (module.HasMaybeNullWhenOrNotNullWhenAttribute(handle, AttributeDescription.MaybeNullWhenAttribute, out bool when))
            {
                annotations |= (when ? FlowAnalysisAnnotations.MaybeNullWhenTrue : FlowAnalysisAnnotations.MaybeNullWhenFalse);
            }
            if (module.HasAttribute(handle, AttributeDescription.NotNullAttribute))
            {
                annotations |= FlowAnalysisAnnotations.NotNull;
            }
            else if (module.HasMaybeNullWhenOrNotNullWhenAttribute(handle, AttributeDescription.NotNullWhenAttribute, out bool when))
            {
                annotations |= (when ? FlowAnalysisAnnotations.NotNullWhenTrue : FlowAnalysisAnnotations.NotNullWhenFalse);
            }
            if (module.HasAttribute(handle, AttributeDescription.AssertsTrueAttribute))
            {
                annotations |= FlowAnalysisAnnotations.AssertsTrue;
            }
            if (module.HasAttribute(handle, AttributeDescription.AssertsFalseAttribute))
            {
                annotations |= FlowAnalysisAnnotations.AssertsFalse;
            }
            return(annotations);
        }