public static string ExtractVariabeName(InvocationExpressionSyntax invocation)
        {
            var variableExtractor = new VariableNameExtractor();

            invocation.Accept(variableExtractor);

            return(variableExtractor.VariableName);
        }
示例#2
0
        public override CasesAndOr VisitInvocationExpression(InvocationExpressionSyntax node)
        {
            var visitor = node.Accept(_RangeVisitor);

            if (visitor?.Root != null)
            {
                return(new CasesAndOr(_CasesExpression,
                                      _ParameterNameExpression, GetParameterName(),
                                      new RangeAnalysis(visitor.Root, visitor.IsError), visitor.IsError));
            }

            return(base.VisitInvocationExpression(node));
        }
示例#3
0
        private const string CachePersistDeletedMethodName  = "PersistDeleted";  // PXCache.PersistDeleted

        public static SaveOperationKind GetSaveOperationKind(IMethodSymbol symbol, InvocationExpressionSyntax syntaxNode,
                                                             SemanticModel semanticModel, PXContext pxContext)
        {
            symbol.ThrowOnNull(nameof(symbol));
            syntaxNode.ThrowOnNull(nameof(syntaxNode));
            semanticModel.ThrowOnNull(nameof(semanticModel));
            pxContext.ThrowOnNull(nameof(pxContext));

            var containingType = symbol.ContainingType?.OriginalDefinition;

            if (containingType != null)
            {
                switch (symbol.Name)
                {
                // PXGraph.Actions.PressSave
                case PressSaveMethodName when containingType.InheritsFromOrEquals(pxContext.PXActionCollection):
                    return(SaveOperationKind.PressSave);

                // PXSave.press
                case PressMethodName when containingType.InheritsFromOrEquals(pxContext.PXAction.Type):
                    var walker = new SavePressWalker(semanticModel, pxContext);

                    syntaxNode.Accept(walker);
                    return(walker.Found ? SaveOperationKind.PressSave : SaveOperationKind.None);

                // PXGraph.Persist
                case GraphPersistMethodName when containingType.IsPXGraph():
                    return(SaveOperationKind.GraphPersist);

                // PXCache.Persist / PXCache.PersistInserted / PXCache.PersistUpdated / PXCache.PersistDeleted
                case CachePersistMethodName:
                case CachePersistInsertedMethodName:
                case CachePersistUpdatedMethodName:
                case CachePersistDeletedMethodName:
                    if (containingType.InheritsFromOrEquals(pxContext.PXCache.Type))
                    {
                        return(SaveOperationKind.CachePersist);
                    }
                    break;
                }
            }

            return(SaveOperationKind.None);
        }
示例#4
0
        public override void VisitInvocationExpression(InvocationExpressionSyntax invocationExpression)
        {
            base.VisitInvocationExpression(invocationExpression);

            var selectExpressions = new Dictionary <string, ExpressionSyntax>();
            var visitor           = new CaptureSelectExpressionsAndNewFieldNamesVisitor(false, new HashSet <string>(), selectExpressions);

            invocationExpression.Accept(visitor);

            var memberAccessExpression = invocationExpression.Expression as MemberAccessExpressionSyntax;

            if (memberAccessExpression == null)
            {
                base.VisitInvocationExpression(invocationExpression);
                return;
            }

            if (memberAccessExpression.Name.Identifier.ValueText == "Where")
            {
                _indexData.HasWhere = true;
            }

            _indexData.SelectExpressions    = selectExpressions;
            _indexData.InvocationExpression = invocationExpression;
            _indexData.FromIdentifier       = (invocationExpression.ArgumentList.Arguments[0].Expression as SimpleLambdaExpressionSyntax)?.Parameter.Identifier.ValueText;

            if (memberAccessExpression.Expression is IdentifierNameSyntax identifierNameSyntax)
            {
                _indexData.Collection = identifierNameSyntax.Identifier.ValueText;
                return;
            }

            if (memberAccessExpression.Expression is MemberAccessExpressionSyntax innerMemberAccessExpression)
            {
                _indexData.Collection = innerMemberAccessExpression.Name.Identifier.ValueText;
            }
        }