public RecursiveMethodInfo(MethodDeclarationSyntax methodSyntax, IMethodSymbol methodSymbol, SemanticModel methodModel, SafeRecursionCodeGenProps codeGenProps) { MethodSyntax = methodSyntax; MethodSymbol = methodSymbol; MethodModel = methodModel; CodeGenProps = codeGenProps; }
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); }