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); }
private INode ChangeInvocationName(string newName, INode node) { RenameIdentifierVisitor v = new RenameIdentifierVisitor("NewMethod", newName, StringComparer.InvariantCulture); node.AcceptVisitor(v, null); return(node); }
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); }
/// <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); }
public object TrackedVisit(INode node, object data) { BeginNode(node); object ret = node.AcceptVisitor(callVisitor, data); EndNode(node); return ret; }
public static bool Matches(this INode left, INode right) { AstComparisonVisitor cv = new AstComparisonVisitor(); left.AcceptVisitor(cv, right); return(cv.Match); }
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); }
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); }
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); }
public static int CountNodes(this INode ast) { var visitor = new NodeCountingVisitor(); ast.AcceptVisitor(visitor, null); return(visitor.NodeCount); }
protected void ReplaceCurrentNode(INode oldNode, INode[] newNodes, object data) { ReplaceCurrentNode(oldNode, newNodes); INode currentReplacedExpression = GetCurrentReplacedNode(newNodes); currentReplacedExpression.AcceptVisitor(this, data); }
public static string ToText(INode node) { var output = new CSharpOutputVisitor(); node.AcceptVisitor(output, null); return output.Text; }
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); }
public void Run(INode typeDeclaration) { typeDeclaration.AcceptVisitor(this, null); foreach (VariableDeclaration decl in fields) { decl.Name = prefix + decl.Name; } }
public static string ToText(INode node) { var output = new CSharpOutputVisitor(); node.AcceptVisitor(output, null); return(output.Text); }
public object TrackedVisit(INode node, object data) { BeginNode(node); object ret = node.AcceptVisitor(callVisitor, data); EndNode(node); return(ret); }
public static string GenerateCode(this INode node, SupportedLanguage language = SupportedLanguage.CSharp) { var output = NRefactoryUtility.CreateOutputVisitor(language); node.AcceptVisitor(output, null); return(output.Text); }
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; }
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); }
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); }
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); }
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); }
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; }
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."); }
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)); } }
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); }
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); }
/// <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; }
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 (); }
void EmitBlockOrIndentedLine (INode node) { bool block = node is BlockStatement; if (!block) { NewLine (); Indent (); } else { Write (" "); } node.AcceptVisitor (this, null); if (!block) Outdent (); }
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; }
public void Substitute(INode expression, IList args) { expression.AcceptVisitor(this, args); }
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; }
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); }