public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { bool skip = (node.Parent.Kind == SyntaxKind.PageField) && (((PageFieldSyntax)node.Parent).Name == node); if (!skip) { IOperation operation = this.SemanticModel.GetOperation(node); if (operation != null) { IOperation operationInstance = this.GetOperationInstance(operation); if ((operationInstance != null) && (operationInstance.Syntax != null)) { //part of with? if ((operationInstance.Syntax.Parent != null) && (operationInstance.Syntax.Parent.Kind == SyntaxKind.WithStatement)) { return(SyntaxFactory.MemberAccessExpression( (CodeExpressionSyntax)operationInstance.Syntax.WithoutTrivia(), node.WithoutTrivia()).WithTriviaFrom(node)); } //global variable reference? else if ((operationInstance.Kind == OperationKind.GlobalReferenceExpression) && (node.Parent.Kind != SyntaxKind.MemberAccessExpression)) { IGlobalReferenceExpression globalRef = (IGlobalReferenceExpression)operationInstance; string name = globalRef.GlobalVariable.Name.ToString(); return(SyntaxFactory.MemberAccessExpression( SyntaxFactory.IdentifierName(name), node.WithoutTrivia()).WithTriviaFrom(node)); } } } } return(base.VisitIdentifierName(node)); }
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { bool skip = (node.Parent.Kind.ConvertToLocalType() == ConvertedSyntaxKind.PageField) && (((PageFieldSyntax)node.Parent).Name == node); //check if it is field access parameter that should not have record variable name at the fromt //i.e. Rec.Setrange(FieldName, ...); if (node.Parent.Kind == SyntaxKind.ArgumentList) { //get parameter index ArgumentListSyntax argumentList = (ArgumentListSyntax)node.Parent; if (argumentList.Arguments.Contains(node)) { int parameterIndex = argumentList.Arguments.IndexOf(node); IOperation methodOperation = this.SemanticModel.GetOperation(argumentList.Parent); if ((methodOperation != null) && (methodOperation.Kind == OperationKind.InvocationExpression)) { IInvocationExpression invocationExpression = methodOperation as IInvocationExpression; if ((invocationExpression.TargetMethod != null) && (invocationExpression.TargetMethod.Parameters.Length > parameterIndex)) { IParameterSymbol parameter = invocationExpression.TargetMethod.Parameters[parameterIndex]; if (parameter.MemberMustBeOnSame) { skip = true; } } } } } if (!skip) { IOperation operation = this.SemanticModel.GetOperation(node); if (operation != null) { IOperation operationInstance = this.GetOperationInstance(operation); if ((operationInstance != null) && (operationInstance.Syntax != null)) { //part of with? if ((operationInstance.Syntax.Parent != null) && (operationInstance.Syntax.Parent.Kind.ConvertToLocalType() == ConvertedSyntaxKind.WithStatement)) { return(SyntaxFactory.MemberAccessExpression( (CodeExpressionSyntax)operationInstance.Syntax.WithoutTrivia(), node.WithoutTrivia()).WithTriviaFrom(node)); } //global variable reference? else if ((operationInstance.Kind.ConvertToLocalType() == ConvertedOperationKind.GlobalReferenceExpression) && (node.Parent.Kind.ConvertToLocalType() != ConvertedSyntaxKind.MemberAccessExpression)) { IGlobalReferenceExpression globalRef = (IGlobalReferenceExpression)operationInstance; string name = globalRef.GlobalVariable.Name.ToString(); return(SyntaxFactory.MemberAccessExpression( SyntaxFactory.IdentifierName(name), node.WithoutTrivia()).WithTriviaFrom(node)); } } } } return(base.VisitIdentifierName(node)); }