public RecursiveMethodInfo(MethodDeclarationSyntax methodSyntax, IMethodSymbol methodSymbol, SemanticModel methodModel, SafeRecursionCodeGenProps codeGenProps)
 {
     MethodSyntax = methodSyntax;
     MethodSymbol = methodSymbol;
     MethodModel  = methodModel;
     CodeGenProps = codeGenProps;
 }
Example #2
0
        internal static SafeRecursionCodeGenProps ParseFromAttribute(GeneratorExecutionContext context, MethodDeclarationSyntax methodSyntax, AttributeData attributeData)
        {
            var props = new SafeRecursionCodeGenProps();

            foreach (var(name, value) in attributeData.NamedArguments)
            {
                switch (name)
                {
                case nameof(GenerateSafeRecursionAttribute.AccessLevel):
                    props.AccessLevel = (AccessLevel)value.Value;
                    break;

                case nameof(GenerateSafeRecursionAttribute.GeneratedMethodName):
                    props.GeneratedMethodName = (string)value.Value;
                    break;

                case nameof(GenerateSafeRecursionAttribute.ExtensionMethod):
                    props.ExtensionMethod = (ExtensionMethod)value.Value;
                    break;

                case nameof(GenerateSafeRecursionAttribute.MutualRecursionId):
                    props.MutualRecursionId = (string)value.Value;
                    break;

                case nameof(GenerateSafeRecursionAttribute.ExposeAsEntryPoint):
                    props.ExposeAsEntryPoint = (bool)value.Value;
                    break;

                default:
                    context.LogInternalError(methodSyntax.GetLocation(), $"Unexpected GenerateSafeRecursionAttribute property '{name}' = '{value.Value}'");
                    break;
                }
            }

            return(props);
        }