void VB2CS(string input, string expectedOutput)
        {
            SnippetParser parser = new SnippetParser(SupportedLanguage.VBNet);
            INode         node   = parser.Parse(input);

            // parser.Errors.ErrorOutput contains syntax errors, if any
            Assert.IsNotNull(node);
            Assert.AreEqual("", parser.Errors.ErrorOutput);
            // parser.Specials is the list of comments, preprocessor directives etc.
            PreprocessingDirective.VBToCSharp(parser.Specials);
            // Convert VB.NET constructs to C#:
            node.AcceptVisitor(new VBNetConstructsConvertVisitor(), null);
            node.AcceptVisitor(new ToCSharpConvertVisitor(), null);

            CSharpOutputVisitor output = new CSharpOutputVisitor();

            using (SpecialNodesInserter.Install(parser.Specials, output))
            {
                node.AcceptVisitor(output, null);
            }
            // output.Errors.ErrorOutput contains conversion errors/warnings, if any
            // output.Text contains the converted code
            Assert.AreEqual("", output.Errors.ErrorOutput);
            Assert.AreEqual(expectedOutput, output.Text);
        }
Ejemplo n.º 2
0
        private INode ChangeInvocationName(string newName, INode node)
        {
            RenameIdentifierVisitor v = new RenameIdentifierVisitor("NewMethod", newName, StringComparer.InvariantCulture);

            node.AcceptVisitor(v, null);
            return(node);
        }
Ejemplo n.º 3
0
        bool DoCaseCompletion(ITextEditor editor)
        {
            ITextEditorCaret   caret = editor.Caret;
            NRefactoryResolver r     = new NRefactoryResolver(LanguageProperties.CSharp);

            if (r.Initialize(ParserService.GetParseInformation(editor.FileName), caret.Line, caret.Column))
            {
                INode currentMember = r.ParseCurrentMember(editor.Document.Text);
                if (currentMember != null)
                {
                    CaseCompletionSwitchFinder ccsf = new CaseCompletionSwitchFinder(caret.Line, caret.Column);
                    currentMember.AcceptVisitor(ccsf, null);
                    if (ccsf.bestStatement != null)
                    {
                        r.RunLookupTableVisitor(currentMember);
                        ResolveResult rr = r.ResolveInternal(ccsf.bestStatement.SwitchExpression, ExpressionContext.Default);
                        if (rr != null && rr.ResolvedType != null)
                        {
                            return(ProvideContextCompletion(editor, rr.ResolvedType, ' '));
                        }
                    }
                }
            }
            return(false);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Finds TypeDeclarations in AST tree.
        /// </summary>
        public static ReadOnlyCollection <TypeDeclaration> FindTypeDeclarations(this INode astTree)
        {
            var findVisitor = new FindTypeDeclarationsVisitor();

            astTree.AcceptVisitor(findVisitor, null);
            return(findVisitor.Declarations);
        }
Ejemplo n.º 5
0
		public object TrackedVisit(INode node, object data)
		{
			BeginNode(node);
			object ret = node.AcceptVisitor(callVisitor, data);
			EndNode(node);
			return ret;
		}
Ejemplo n.º 6
0
        public static bool Matches(this INode left, INode right)
        {
            AstComparisonVisitor cv = new AstComparisonVisitor();

            left.AcceptVisitor(cv, right);
            return(cv.Match);
        }
Ejemplo n.º 7
0
        private bool StatementUsesExpr(INode node, IdentifierExpression ie)
        {
            FindReferenceVisitor visitor = new FindReferenceVisitor(true, ie.Identifier, node.StartLocation, node.EndLocation);

            node.AcceptVisitor(visitor, null);
            return(visitor.Identifiers.Count > 0);
        }
Ejemplo n.º 8
0
        public static List <INode> GetExtractableChildren(INode node)
        {
            var v = new GetImmediateChildrenVisitor();

            node.AcceptVisitor(v, null);
            return(v.Children);
        }
        public static List <INode> getAstPath(this INode node, int line, int column)
        {
            var findLocation = new FindLocationInAst(line, column);

            node.AcceptVisitor(findLocation, null);
            return(findLocation.Matches);
        }
Ejemplo n.º 10
0
        public override object VisitBlockStatement(BlockStatement blockStatement, object data)
        {
            blocks.Push(blockStatement);
            List <INode> statements = new List <INode> ();

            curStatementList.Push(statements);
            for (int i = 0; i < blockStatement.Children.Count; i++)
            {
                INode o = blockStatement.Children[i];
                Debug.Assert(o != null);
                nodeStack.Push(o);
                o.AcceptVisitor(this, data);
                o = nodeStack.Pop();
                if (o == null)
                {
                }
                else
                {
                    statements.Add(o);
                }
            }
            blockStatement.Children = statements;
            blocks.Pop();
            return(null);
        }
Ejemplo n.º 11
0
        public static int CountNodes(this INode ast)
        {
            var visitor = new NodeCountingVisitor();

            ast.AcceptVisitor(visitor, null);
            return(visitor.NodeCount);
        }
Ejemplo n.º 12
0
        protected void ReplaceCurrentNode(INode oldNode, INode[] newNodes, object data)
        {
            ReplaceCurrentNode(oldNode, newNodes);
            INode currentReplacedExpression = GetCurrentReplacedNode(newNodes);

            currentReplacedExpression.AcceptVisitor(this, data);
        }
Ejemplo n.º 13
0
		public static string ToText(INode node)
		{
			var output = new CSharpOutputVisitor();
			node.AcceptVisitor(output, null);

			return output.Text;
		}
Ejemplo n.º 14
0
        public static TypeDeclaration FindClass(this INode expected_ast, string methodName)
        {
            IndexableClassFinderVisitor v1 = new IndexableClassFinderVisitor();

            expected_ast.AcceptVisitor(v1, null);
            return(v1.Classes[methodName]);
        }
 string CreateCode(INode node, IOutputAstVisitor outputVisitor)
 {
     using (SpecialNodesInserter.Install(specials, outputVisitor)) {
         node.AcceptVisitor(outputVisitor, null);
     }
     return(outputVisitor.Text);
 }
Ejemplo n.º 16
0
		public void Run(INode typeDeclaration)
		{
			typeDeclaration.AcceptVisitor(this, null);
			foreach (VariableDeclaration decl in fields) {
				decl.Name = prefix + decl.Name;
			}
		}
Ejemplo n.º 17
0
        public static string ToText(INode node)
        {
            var output = new CSharpOutputVisitor();

            node.AcceptVisitor(output, null);

            return(output.Text);
        }
Ejemplo n.º 18
0
        public object TrackedVisit(INode node, object data)
        {
            BeginNode(node);
            object ret = node.AcceptVisitor(callVisitor, data);

            EndNode(node);
            return(ret);
        }
Ejemplo n.º 19
0
 public void Run(INode typeDeclaration)
 {
     typeDeclaration.AcceptVisitor(this, null);
     foreach (VariableDeclaration decl in fields)
     {
         decl.Name = prefix + decl.Name;
     }
 }
Ejemplo n.º 20
0
        public static string GenerateCode(this INode node, SupportedLanguage language = SupportedLanguage.CSharp)
        {
            var output = NRefactoryUtility.CreateOutputVisitor(language);

            node.AcceptVisitor(output, null);

            return(output.Text);
        }
Ejemplo n.º 21
0
        protected internal string GetCode(INode node)
        {
            CSharpOutputVisitor outputVisitor = new CSharpOutputVisitor();
            PrettyPrintOptions  options       = (PrettyPrintOptions)outputVisitor.Options;

            options.SpacesAfterComma = false;
            node.AcceptVisitor(outputVisitor, null);
            return(outputVisitor.Text);
        }
		public string OutputNode (ProjectDom dom, INode node, string indent)
		{
			CSharpOutputVisitor outputVisitor = new CSharpOutputVisitor ();
			CSharpFormatter.SetFormatOptions (outputVisitor, dom != null && dom.Project != null ? dom.Project.Policies : null);
			int col = CSharpFormatter.GetColumn (indent, 0, 4);
			outputVisitor.OutputFormatter.IndentationLevel = System.Math.Max (0, col / 4);
			node.AcceptVisitor (outputVisitor, null);
			return outputVisitor.Text;
		}
Ejemplo n.º 23
0
        public static INode FindInnermostNodeContainingSelection(INode node, Location start, Location end)
        {
            if (node == null)
            {
                return(null);
            }
            var findInnermostVisitor = new FindInnermostNodeByRangeVisitor(start, end);

            node.AcceptVisitor(findInnermostVisitor, null);
            return(findInnermostVisitor.InnermostNode);
        }
Ejemplo n.º 24
0
        static INode FindInnermostNode(INode node, Location position)
        {
            if (node == null)
            {
                return(null);
            }
            var findInnermostVisitor = new FindInnermostNodeByRangeVisitor(position);

            node.AcceptVisitor(findInnermostVisitor, null);
            return(findInnermostVisitor.InnermostNode);
        }
        public static List <INode> iNodes(this INode iNode)
        {
            if (iNode == null)
            {
                return(null);
            }
            var allINodes = new GetAllINodes();

            iNode.AcceptVisitor(allINodes, null);
            return(allINodes.AllNodes);
        }
        public string OutputNode(ProjectDom dom, INode node, string indent)
        {
            CSharpOutputVisitor outputVisitor = new CSharpOutputVisitor();

            CSharpFormatter.SetFormatOptions(outputVisitor, dom != null && dom.Project != null ? dom.Project.Policies : null);
            int col = CSharpFormatter.GetColumn(indent, 0, 4);

            outputVisitor.OutputFormatter.IndentationLevel = System.Math.Max(0, col / 4);
            node.AcceptVisitor(outputVisitor, null);
            return(outputVisitor.Text);
        }
Ejemplo n.º 27
0
		protected override string GenerateCode(INode unit, bool installSpecials)
		{
			CSharpOutputVisitor visitor = new CSharpOutputVisitor();
			
			if (installSpecials) {
				SpecialNodesInserter.Install(this.specialsList, visitor);
			}
			
			unit.AcceptVisitor(visitor, null);
			return visitor.Text;
		}
        public static string PrettyPrint(this INode code)
        {
            if (code == null)
            {
                return(string.Empty);
            }
            VBNetOutputVisitor csOutVisitor = new VBNetOutputVisitor();

            code.AcceptVisitor(csOutVisitor, null);
            return(csOutVisitor.Text);
        }
Ejemplo n.º 29
0
        private static string GenerateCode(INode unit /*, bool installSpecials*/)
        {
            CSharpOutputVisitor visitor = new CSharpOutputVisitor();

            //			if (installSpecials)
            //			{
            //				SpecialNodesInserter.Install(this.specialsList, visitor);
            //			}

            unit.AcceptVisitor(visitor, null);
            return(visitor.Text);
        }
        protected override string GenerateCode(INode unit, bool installSpecials)
        {
            CSharpOutputVisitor visitor = new CSharpOutputVisitor();

            if (installSpecials)
            {
                SpecialNodesInserter.Install(this.specialsList, visitor);
            }

            unit.AcceptVisitor(visitor, null);
            return(visitor.Text);
        }
Ejemplo n.º 31
0
        private static string GenerateCode(INode unit/*, bool installSpecials*/)
        {
            CSharpOutputVisitor visitor = new CSharpOutputVisitor();

            //			if (installSpecials)
            //			{
            //				SpecialNodesInserter.Install(this.specialsList, visitor);
            //			}

            unit.AcceptVisitor(visitor, null);
            return visitor.Text;
        }
Ejemplo n.º 32
0
        public static MethodDeclaration FindMethod(this INode expected_ast, string methodName)
        {
            IndexableMethodFinderVisitor v1 = new IndexableMethodFinderVisitor();

            expected_ast.AcceptVisitor(v1, null);
            if (v1.Methods.ContainsKey(methodName))
            {
                return(v1.Methods[methodName]);
            }

            throw new ApplicationException("Method '" + methodName + "' was not found.");
        }
Ejemplo n.º 33
0
 public static string csharpCode(this INode iNode)
 {
     try
     {
         var outputVisitor = new CSharpOutputVisitor();
         iNode.AcceptVisitor(outputVisitor, null);
         return(outputVisitor.Text);
     }
     catch (Exception ex)
     {
         ex.log("in CSharpSourceCode_ExtensionMethods.csharpCode");
         return("error creating source code for iNode. Error message was: ".format(ex.Message));
     }
 }
Ejemplo n.º 34
0
        public string GetString(INode domVisitable, OutputSettings settings)
        {
            if (domVisitable == null)
            {
                return(nullString);
            }
            string result = (string)domVisitable.AcceptVisitor(OutputVisitor, settings);

            if (settings is OutputSettings)
            {
                ((OutputSettings)settings).PostProcess(domVisitable, ref result);
            }
            return(result);
        }
Ejemplo n.º 35
0
        public virtual bool AcceptChildren(AstComparisonVisitor visitor, object data)
        {
            AbstractNode d = (AbstractNode)data;

            for (int i = 0; i < children.Count; i++)
            {
                INode child = Children[i];
                if (child == null)
                {
                    return(false);
                }
                if (!child.AcceptVisitor(visitor, d.Children[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 36
0
        /// <returns> Returned value or null for statements </returns>
        public static Value Evaluate(string code, SupportedLanguage language, StackFrame context)
        {
            SnippetParser parser  = new SnippetParser(language);
            INode         astRoot = parser.Parse(code);

            if (parser.SnippetType == SnippetType.Expression ||
                parser.SnippetType == SnippetType.Statements)
            {
                if (parser.Errors.Count > 0)
                {
                    throw new GetValueException(parser.Errors.ErrorOutput);
                }
                try {
                    EvaluateAstVisitor visitor = new EvaluateAstVisitor(context);

                    return(astRoot.AcceptVisitor(visitor, null) as Value);
                } catch (NotImplementedException e) {
                    throw new GetValueException("Language feature not implemented: " + e.Message);
                }
            }
            throw new GetValueException("Code must be expression or statement");
        }
 private bool StatementUsesExpr(INode node, IdentifierExpression ie)
 {
     FindReferenceVisitor visitor = new FindReferenceVisitor(true, ie.Identifier, node.StartLocation, node.EndLocation);
     node.AcceptVisitor(visitor, null);
     return visitor.Identifiers.Count > 0;
 }
Ejemplo n.º 38
0
 void EmitLambda (List<ParameterDeclarationExpression> parameters, INode body, INode context, Mono.Collections.Generic.Collection<ParameterDefinition> paramdefinitions)
 {
     PushLocals ();
     if (paramdefinitions == null) {
         AddLocals (parameters);
     } else {
         for (var i = 0; i < paramdefinitions.Count; i++) {
             ParameterDefinition p = paramdefinitions[i];
             //Console.WriteLine ("AddLocal: {0}: {1}", parameters[i].ParameterName, p.ParameterType);
             Locals.Add (parameters[i].ParameterName, p.ParameterType);
         }
     }
     
     bool block = body is BlockStatement;
     
     Write ("");
     var savedPos = Output.Length;
     var savedThisCount = ThisRefCountInMethods;
     
     Write ("function");
     EmitMethodParameters (parameters, context);
     Write (" ");
     if (!block) {
         Write ("{ ");
     }
     if (body.Parent is LambdaExpression && !block)
         Write ("return ");
     body.AcceptVisitor (this, null);
     if (!block) {
         Write (" }");
     }
     
     //if (ThisRefCountInMethods > savedThisCount) {
         //Output.Insert(savedPos, RUNTIME_HELPER_NAME + ".bind(this)(");
         Write (".bind(this)");
     //}
     
     PopLocals ();
 }
Ejemplo n.º 39
0
 void EmitBlockOrIndentedLine (INode node)
 {
     bool block = node is BlockStatement;
     if (!block) {
         NewLine ();
         Indent ();
     } else {
         Write (" ");
     }
     node.AcceptVisitor (this, null);
     if (!block)
         Outdent ();
 }
Ejemplo n.º 40
0
 private INode ChangeInvocationName(string newName, INode node)
 {
     RenameIdentifierVisitor v = new RenameIdentifierVisitor("NewMethod", newName, StringComparer.InvariantCulture);
     node.AcceptVisitor(v, null);
     return node;
 }
 public static List<INode> GetExtractableChildren(INode node)
 {
     var v = new GetImmediateChildrenVisitor();
     node.AcceptVisitor(v, null);
     return v.Children;
 }
Ejemplo n.º 42
0
 public void Substitute(INode expression, IList args)
 {
     expression.AcceptVisitor(this, args);
 }
Ejemplo n.º 43
0
		TypedValue Evaluate(INode expression, bool permRef, object data = null)
		{
			// Try to get the value from cache
			// (the cache is cleared when the process is resumed)
			TypedValue val;
			if (context.Process.ExpressionsCache.TryGetValue(expression, out val)) {
				if (val == null || !val.Value.IsInvalid)
					return val;
			}
			
			System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
			watch.Start();
			try {
				val = (TypedValue)expression.AcceptVisitor(this, data);
				if (val != null && permRef)
					val = new TypedValue(val.Value.GetPermanentReference(), val.Type);
			} catch (GetValueException e) {
				e.Expression = expression;
				throw;
			} catch (NotImplementedException e) {
				throw new GetValueException(expression, "Language feature not implemented: " + e.Message);
			} finally {
				watch.Stop();
				context.Process.TraceMessage("Evaluated: {0} in {1} ms total", expression.PrettyPrint(), watch.ElapsedMilliseconds);
			}
			
			if (val != null && val.Value.IsInvalid)
				throw new DebuggerException("Expression \"" + expression.PrettyPrint() + "\" is invalid right after evaluation");
			
			// Add the result to cache
			context.Process.ExpressionsCache[expression] = val;
			
			return val;
		}
		public string GetString (INode domVisitable, OutputSettings settings)
		{
			if (domVisitable == null)
				return nullString;
			string result = (string)domVisitable.AcceptVisitor (OutputVisitor, settings);
			if (settings is OutputSettings) 
				((OutputSettings)settings).PostProcess (domVisitable, ref result);
			return result;
		}
Ejemplo n.º 45
0
		string CreateCode(INode node, IOutputAstVisitor outputVisitor)
		{
			using (SpecialNodesInserter.Install(specials, outputVisitor)) {
				node.AcceptVisitor(outputVisitor, null);
			}
			return outputVisitor.Text;
		}
		static void RenameVariable(INode method, string from, ref int index)
		{
			index += 1;
			method.AcceptVisitor(new RenameLocalVariableVisitor(from, from + "__" + index, StringComparer.Ordinal), null);
		}