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); }