public static ValueWalker Create(SyntaxToken value, SyntaxNode expression) { ValueWalker walker; if (!Cache.TryDequeue(out walker)) { walker = new ValueWalker(); } walker.UsesValue = false; walker.value = value; if (expression != null) { walker.Visit(expression); } return(walker); }
private static bool IsAttachedSetMethod(MethodDeclarationSyntax method, SemanticModel semanticModel, CancellationToken cancellationToken, out IFieldSymbol setField) { setField = null; if (method == null || method.ParameterList.Parameters.Count != 2 || !method.ReturnType.IsVoid() || !method.Modifiers.Any(SyntaxKind.StaticKeyword)) { return(false); } using (var walker = ClrSetterWalker.Create(semanticModel, cancellationToken, method)) { if (!walker.IsSuccess) { return(false); } var memberAccess = (walker.SetValue?.Expression ?? walker.SetCurrentValue?.Expression) as MemberAccessExpressionSyntax; var member = memberAccess?.Expression as IdentifierNameSyntax; if (memberAccess == null || member == null || !memberAccess.IsKind(SyntaxKind.SimpleMemberAccessExpression)) { return(false); } if (method.ParameterList.Parameters[0].Identifier.ValueText != member.Identifier.ValueText) { return(false); } using (var valueWalker = ValueWalker.Create(method.ParameterList.Parameters[1].Identifier, memberAccess.Parent)) { if (!valueWalker.UsesValue) { return(false); } } return(walker.Property.TryGetSymbol(semanticModel, cancellationToken, out setField)); } }