コード例 #1
0
        public IStmt Translate(InvocationExpressionSyntax expression, SemanticModel semanticModel, CSharpSyntaxVisitor <IStmt> visitor)
        {
            var symbol = semanticModel.GetSymbolInfo(expression).Symbol;

            if (symbol == null || !SymbolHelper.IsAssignableFrom(symbol, "Stack"))
            {
                return(null);
            }
            var arguments       = expression.ArgumentList.Arguments;
            var exactSignatures = new Dictionary <string, string>
            {
                { "Push", "push" },
                { "Pop", "pop" },
            };

            if (exactSignatures.ContainsKey(symbol.Name))
            {
                var javaMethod = exactSignatures[symbol.Name];
                return(new CallExpr
                {
                    Expression = new MemberAccessExpr
                    {
                        ObjectExpr = visitor.Visit(ExtensionPointHelper.TryGetMemberOwner(expression.Expression)),
                        MemberExpr = new IdentifierExpr {
                            Identifier = javaMethod
                        }
                    },
                    Arguments = arguments.Select(visitor.Visit).ToArray()
                });
            }
            return(null);
        }
コード例 #2
0
        public IStmt Translate(MemberAccessExpressionSyntax expression, SemanticModel semanticModel, CSharpSyntaxVisitor <IStmt> visitor)
        {
            var symbol = GetStringSymbol(semanticModel, expression);

            if (symbol == null)
            {
                return(null);
            }
            var memberToMethodMappings = new Dictionary <string, string>
            {
                { "Length", "length" }
            };

            if (memberToMethodMappings.ContainsKey(symbol.Name))
            {
                var targetMethod = memberToMethodMappings[symbol.Name];
                return(new CallExpr
                {
                    Expression = new MemberAccessExpr
                    {
                        ObjectExpr = visitor.Visit(ExtensionPointHelper.TryGetMemberOwner(expression)),
                        MemberExpr = new IdentifierExpr {
                            Identifier = targetMethod
                        }
                    },
                    Arguments = new IStmt[0]
                });
            }
            return(null);
        }
コード例 #3
0
        public IStmt Translate(InvocationExpressionSyntax expression, SemanticModel semanticModel, CSharpSyntaxVisitor <IStmt> visitor)
        {
            var symbol = ModelExtensions.GetSymbolInfo(semanticModel, expression).Symbol;

            if (symbol == null)
            {
                return(null);
            }
            if (symbol.Name == "ToString")
            {
                return(new CallExpr
                {
                    Expression = new MemberAccessExpr
                    {
                        ObjectExpr = new IdentifierExpr {
                            Identifier = "String"
                        },
                        MemberExpr = new IdentifierExpr {
                            Identifier = "valueOf"
                        }
                    },
                    Arguments = new [] { visitor.Visit(ExtensionPointHelper.TryGetMemberOwner(expression.Expression)) }
                });
            }
            return(null);
        }
コード例 #4
0
        public IStmt Translate(InvocationExpressionSyntax expression, SemanticModel semanticModel, CSharpSyntaxVisitor <IStmt> visitor)
        {
            var symbol = GetStringSymbol(semanticModel, expression);

            if (symbol == null)
            {
                return(null);
            }
            var arguments       = expression.ArgumentList.Arguments;
            var exactSignatures = new Dictionary <string, string>
            {
                { "ToLower", "toLowerCase" },
                { "ToUpper", "toUpperCase" },
                { "EndsWith", "endsWith" },
                { "StartsWith", "startsWith" },
                { "IndexOf", "indexOf" },
                { "Substring", "substring" },
                { "Contains", "contains" }
            };

            if (exactSignatures.ContainsKey(symbol.Name))
            {
                var javaMethod = exactSignatures[symbol.Name];
                return(new CallExpr
                {
                    Expression = new MemberAccessExpr
                    {
                        ObjectExpr = visitor.Visit(ExtensionPointHelper.TryGetMemberOwner(expression.Expression)),
                        MemberExpr = new IdentifierExpr {
                            Identifier = javaMethod
                        }
                    },
                    Arguments = arguments.Select(visitor.Visit).ToArray()
                });
            }
            if (symbol.Name == "IsNullOrEmpty") //string.IsNullOrEmpty(s) => s.isEmpty()
            {
                return(new CallExpr
                {
                    Expression = new MemberAccessExpr
                    {
                        ObjectExpr = visitor.Visit(arguments.First()),
                        MemberExpr = new IdentifierExpr {
                            Identifier = "isEmpty"
                        }
                    },
                    Arguments = new IStmt[0]
                });
            }
            return(null);
        }