Catel.Fody.Weaving.Argument.ArgumentWeaver.EnsureExpressionChecksCache C# (CSharp) Method

EnsureExpressionChecksCache() private method

private EnsureExpressionChecksCache ( ) : void
return void
        private void EnsureExpressionChecksCache()
        {
            lock (CacheLock)
            {
                if (ExpressionChecksToAttributeMappings.Count > 0)
                {
                    return;
                }

                ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNull"] = (m, ix, i) =>
                {
                    return CreateCustomAttribute("Catel.Fody.NotNullAttribute");
                };

                ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNullOrEmpty"] = (m, ix, i) =>
                {
                    return CreateCustomAttribute("Catel.Fody.NotNullOrEmptyAttribute");
                };

                ExpressionChecksToAttributeMappings["Catel.Argument.IsNotNullOrWhitespace"] = (m, ix, i) =>
                {
                    return CreateCustomAttribute("Catel.Fody.NotNullOrWhitespaceAttribute");
                };

                // TODO: Add more

                ExpressionChecksToAttributeMappings["Catel.Argument.IsNotOutOfRange"] = (m, ix, i) =>
                {
                    // Previous operations are Ldc_[Something]
                    var previousInstruction2 = ix.GetPreviousInstruction(i);
                    var previousInstruction1 = ix.GetPreviousInstruction(previousInstruction2);

                    if (!IsOperandSupportedForArgumentChecks(previousInstruction1.Operand))
                    {
                        return null;
                    }

                    return CreateCustomAttribute("Catel.Fody.NotOutOfRangeAttribute", previousInstruction1.Operand, previousInstruction2.Operand);
                };

                ExpressionChecksToAttributeMappings["Catel.Argument.IsMinimal"] = (m, ix, i) =>
                {
                    // Previous operation is Ldc_[Something]
                    var operand = ix.GetPreviousInstruction(i).Operand;
                    if (!IsOperandSupportedForArgumentChecks(operand))
                    {
                        return null;
                    }

                    return CreateCustomAttribute("Catel.Fody.MinimalAttribute", operand);
                };

                ExpressionChecksToAttributeMappings["Catel.Argument.IsMaximum"] = (m, ix, i) =>
                {
                    // Previous operation is Ldc_[Something]
                    var operand = ix.GetPreviousInstruction(i).Operand;
                    if (!IsOperandSupportedForArgumentChecks(operand))
                    {
                        return null;
                    }

                    return CreateCustomAttribute("Catel.Fody.MaximumAttribute", operand);
                };
            }
        }