public static void DisplayTree(AstNode node, int level) { for (int i = 0; i < level; i++) Console.Write(" "); Console.WriteLine(node.ToString()); foreach (AstNode child in node.ChildNodes) DisplayTree(child, level + 1); }
public void BeginVisit(AstNode node) { for (int i = 0; i < indentation; i++) { Console.Write ("\t"); } Console.WriteLine (node.ToString ()); indentation++; }
private void AddExpressionToUniqueList(AstNode astNode) { if (!this.UniqueNodes.ContainsKey(astNode.ToString())) this.UniqueNodes.Add(astNode.ToString(), new AstNodeCount(astNode)); else { this.UniqueNodes[astNode.ToString()].Count += 1; this.UniqueNodes[astNode.ToString()].AstNodes.Add(astNode); } }
static IEnumerable<PossibleNamespace> GetPossibleNamespaces (Document doc, AstNode node, ResolveResult resolveResult, DocumentLocation location) { var unit = doc.ParsedDocument.GetAst<SyntaxTree> (); if (unit == null) yield break; var project = doc.Project; if (project == null) yield break; int tc = GetTypeParameterCount (node); var attribute = unit.GetNodeAt<ICSharpCode.NRefactory.CSharp.Attribute> (location); bool isInsideAttributeType = attribute != null && attribute.Type.Contains (location); var compilations = new List<Tuple<ICompilation, MonoDevelop.Projects.ProjectReference>> (); compilations.Add (Tuple.Create (doc.Compilation, (MonoDevelop.Projects.ProjectReference)null)); var referencedItems = IdeApp.Workspace != null ? project.GetReferencedItems (IdeApp.Workspace.ActiveConfiguration).ToList () : (IEnumerable<SolutionItem>) new SolutionItem[0]; var solution = project != null ? project.ParentSolution : null; if (solution != null) { foreach (var curProject in solution.GetAllProjects ()) { if (curProject == project || referencedItems.Contains (curProject)) continue; var otherRefes = IdeApp.Workspace != null ? curProject.GetReferencedItems (IdeApp.Workspace.ActiveConfiguration).ToList () : (IEnumerable<SolutionItem>) new SolutionItem[0]; if (otherRefes.Contains (project)) continue; var comp = TypeSystemService.GetCompilation (curProject); if (comp == null) continue; compilations.Add (Tuple.Create (comp, new MonoDevelop.Projects.ProjectReference (curProject))); } } var netProject = project as DotNetProject; if (netProject == null) yield break; FrameworkLookup frameworkLookup; if (!TypeSystemService.TryGetFrameworkLookup (netProject, out frameworkLookup)) frameworkLookup = null; if (frameworkLookup != null && resolveResult is UnknownMemberResolveResult) { var umResult = (UnknownMemberResolveResult)resolveResult; try { foreach (var r in frameworkLookup.GetExtensionMethodLookups (umResult)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName (r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) continue; if (CanBeReferenced (doc.Project, systemAssembly)) compilations.Add (Tuple.Create (TypeSystemService.GetCompilation (systemAssembly, doc.Compilation), new MonoDevelop.Projects.ProjectReference (systemAssembly))); } } catch (Exception e) { if (!TypeSystemService.RecreateFrameworkLookup (netProject)) LoggingService.LogError (string.Format ("Error while looking up extension method {0}", umResult.MemberName), e); } } bool foundIdentifier = false; var lookup = new MemberLookup (null, doc.Compilation.MainAssembly); foreach (var comp in compilations) { var compilation = comp.Item1; var requiredReference = comp.Item2; if (resolveResult is AmbiguousTypeResolveResult) { if (compilation != doc.Compilation) continue; var aResult = resolveResult as AmbiguousTypeResolveResult; var file = doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile; var scope = file.GetUsingScope (location).Resolve (compilation); while (scope != null) { foreach (var u in scope.Usings) { foreach (var typeDefinition in u.Types) { if (typeDefinition.Name == aResult.Type.Name && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible (typeDefinition, false)) { yield return new PossibleNamespace (typeDefinition.Namespace, true, requiredReference); } } } scope = scope.Parent; } } var allTypes = compilation == doc.Compilation ? compilation.GetAllTypeDefinitions () : compilation.MainAssembly.GetAllTypeDefinitions (); if (resolveResult is UnknownIdentifierResolveResult) { var uiResult = resolveResult as UnknownIdentifierResolveResult; string possibleAttributeName = isInsideAttributeType ? uiResult.Identifier + "Attribute" : uiResult.Identifier; foreach (var typeDefinition in allTypes) { if ((typeDefinition.Name == possibleAttributeName || typeDefinition.Name == uiResult.Identifier) && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible (typeDefinition, false)) { if (typeDefinition.DeclaringTypeDefinition != null) { var builder = new TypeSystemAstBuilder (new CSharpResolver (doc.Compilation)); foundIdentifier = true; yield return new PossibleNamespace (builder.ConvertType (typeDefinition.DeclaringTypeDefinition).ToString (), false, requiredReference); } else { foundIdentifier = true; yield return new PossibleNamespace (typeDefinition.Namespace, true, requiredReference); } } } } if (resolveResult is UnknownMemberResolveResult) { var umResult = (UnknownMemberResolveResult)resolveResult; string possibleAttributeName = isInsideAttributeType ? umResult.MemberName + "Attribute" : umResult.MemberName; foreach (var typeDefinition in allTypes.Where (t => t.HasExtensionMethods)) { if (!lookup.IsAccessible (typeDefinition, false)) continue; foreach (var method in typeDefinition.Methods.Where (m => m.IsExtensionMethod && (m.Name == possibleAttributeName || m.Name == umResult.MemberName))) { if (!lookup.IsAccessible (method, false)) continue; IType[] inferredTypes; if (CSharpResolver.IsEligibleExtensionMethod ( compilation.Import (umResult.TargetType), method, true, out inferredTypes )) { yield return new PossibleNamespace (typeDefinition.Namespace, true, requiredReference); goto skipType; } } skipType: ; } } if (resolveResult is ErrorResolveResult) { var identifier = unit != null ? unit.GetNodeAt<Identifier> (location) : null; if (identifier != null) { var uiResult = resolveResult as UnknownIdentifierResolveResult; if (uiResult != null) { string possibleAttributeName = isInsideAttributeType ? uiResult.Identifier + "Attribute" : uiResult.Identifier; foreach (var typeDefinition in allTypes) { if ((identifier.Name == possibleAttributeName || identifier.Name == uiResult.Identifier) && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible (typeDefinition, false)) yield return new PossibleNamespace (typeDefinition.Namespace, true, requiredReference); } } } } } // Try to search framework types if (!foundIdentifier && frameworkLookup != null && resolveResult is UnknownIdentifierResolveResult && node is AstType) { var uiResult = resolveResult as UnknownIdentifierResolveResult; if (uiResult != null) { var lookups = new List<Tuple<FrameworkLookup.AssemblyLookup, SystemAssembly>> (); try { foreach (var r in frameworkLookup.GetLookups (uiResult, tc, isInsideAttributeType)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName (r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) continue; if (CanBeReferenced (doc.Project, systemAssembly)) lookups.Add (Tuple.Create (r, systemAssembly)); } } catch (Exception e) { if (!TypeSystemService.RecreateFrameworkLookup (netProject)) LoggingService.LogError (string.Format ("Error while looking up identifier {0}", uiResult.Identifier), e); } foreach(var kv in lookups) yield return new PossibleNamespace (kv.Item1.Namespace, true, new MonoDevelop.Projects.ProjectReference (kv.Item2)); } } if (!foundIdentifier && frameworkLookup != null && resolveResult is UnknownMemberResolveResult) { var uiResult = resolveResult as UnknownMemberResolveResult; if (uiResult != null) { var lookups = new List<Tuple<FrameworkLookup.AssemblyLookup, SystemAssembly>> (); try { foreach (var r in frameworkLookup.GetLookups (uiResult, node.ToString (), tc, isInsideAttributeType)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName (r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) continue; if (CanBeReferenced (doc.Project, systemAssembly)) lookups.Add (Tuple.Create (r, systemAssembly)); } } catch (Exception e) { if (!TypeSystemService.RecreateFrameworkLookup (netProject)) LoggingService.LogError (string.Format ("Error while looking up member resolve result {0}", node), e); } foreach(var kv in lookups) yield return new PossibleNamespace (kv.Item1.Namespace, true, new MonoDevelop.Projects.ProjectReference (kv.Item2)); } } }
string GetName (AstNode node) { if (tag is SyntaxTree) { var type = node as TypeDeclaration; if (type != null) { var sb = new StringBuilder (); sb.Append (type.Name); while (type.Parent is TypeDeclaration) { type = type.Parent as TypeDeclaration; sb.Insert (0, type.Name + "."); } return sb.ToString (); } } if (node is Accessor) { if (node.Role == PropertyDeclaration.GetterRole) return "get"; if (node.Role == PropertyDeclaration.SetterRole) return "set"; if (node.Role == CustomEventDeclaration.AddAccessorRole) return "add"; if (node.Role == CustomEventDeclaration.RemoveAccessorRole) return "remove"; return node.ToString (); } if (node is OperatorDeclaration) return "operator"; if (node is EntityDeclaration) return ((EntityDeclaration)node).Name; if (node is FixedVariableInitializer) { return ((FixedVariableInitializer)node).Name; } return ((VariableInitializer)node).Name; }
public ResolveResult ResolveNode(AstNode node, ILog log) { var syntaxTree = node.GetParent<SyntaxTree>(); this.InitResolver(syntaxTree); var result = this.resolver.Resolve(node); if (result is MethodGroupResolveResult && node.Parent != null) { var methodGroupResolveResult = (MethodGroupResolveResult)result; var parentResolveResult = this.ResolveNode(node.Parent, log); var parentInvocation = parentResolveResult as InvocationResolveResult; IParameterizedMember method = methodGroupResolveResult.Methods.LastOrDefault(); bool isInvocation = node.Parent is InvocationExpression && (((InvocationExpression)(node.Parent)).Target == node); if (node is Expression) { var conversion = this.Resolver.GetConversion((Expression)node); if (conversion != null && conversion.IsMethodGroupConversion) { return new MemberResolveResult(new TypeResolveResult(conversion.Method.DeclaringType), conversion.Method); } } if (isInvocation && parentInvocation != null) { var or = methodGroupResolveResult.PerformOverloadResolution(this.compilation, parentInvocation.GetArgumentsForCall().ToArray()); if (or.FoundApplicableCandidate) { method = or.BestCandidate; return new MemberResolveResult(new TypeResolveResult(method.DeclaringType), method); } } if (parentInvocation != null && method == null) { var typeDef = methodGroupResolveResult.TargetType as DefaultResolvedTypeDefinition; if (typeDef != null) { var methods = typeDef.Methods.Where(m => m.Name == methodGroupResolveResult.MethodName); method = methods.FirstOrDefault(); } } if (method == null) { var extMethods = methodGroupResolveResult.GetEligibleExtensionMethods(false); if (!extMethods.Any()) { extMethods = methodGroupResolveResult.GetExtensionMethods(); } if (!extMethods.Any() || !extMethods.First().Any()) { throw new EmitterException(node, "Cannot find method defintion"); } method = extMethods.First().First(); } if (parentInvocation == null || method.FullName != parentInvocation.Member.FullName) { MemberResolveResult memberResolveResult = new MemberResolveResult(new TypeResolveResult(method.DeclaringType), method); return memberResolveResult; } return parentResolveResult; } if ((result == null || result.IsError) && log != null) { if (result is CSharpInvocationResolveResult && ((CSharpInvocationResolveResult)result).OverloadResolutionErrors != OverloadResolutionErrors.None) { return result; } log.LogWarning(string.Format("Node resolving has failed {0}: {1}", node.StartLocation, node.ToString())); } return result; }
public static void Replace(this TextEditorData editor, AstNode n, AstNode replaceWith) { var change = editor.GetRemoveNodeChange(n); editor.Replace(change.Offset, change.RemovedChars, replaceWith.ToString()); }
/// <summary> /// Resolves the specified node. /// </summary> public ResolveResult Resolve(AstNode node, CancellationToken cancellationToken = default(CancellationToken)) { if (node == null || node.IsNull || IsUnresolvableNode(node)) { return(ErrorResolveResult.UnknownError); } lock (resolveVisitor) { InitResolver(); resolveVisitor.cancellationToken = cancellationToken; try { ResolveResult rr = resolveVisitor.GetResolveResult(node); if (rr == null) { Debug.Fail(node.GetType() + " resolved to null.", node.StartLocation + ":'" + node.ToString() + "'"); } return(rr); } finally { resolveVisitor.cancellationToken = CancellationToken.None; } } }
/// <summary> /// Tries to get a type out of an unknow member resolve result. (In case of fully qualified names) /// </summary> /// <returns>The assemblies the type may be defined (if any).</returns> /// <param name="resolveResult">The resolve result.</param> /// <param name="typeParameterCount">Type parameter count.</param> /// <param name="isInsideAttributeType">If set to <c>true</c> this resolve result may be inside an attribute.</param> public IEnumerable<AssemblyLookup> GetLookups (UnknownMemberResolveResult resolveResult, AstNode node, int typeParameterCount, bool isInsideAttributeType) { string name = isInsideAttributeType ? resolveResult.MemberName + "Attribute" : resolveResult.MemberName; var identifier = GetIdentifier (name, typeParameterCount); foreach (var lookup in GetLookup (identifier, typeLookupTable, headerSize + assemblyListTable.Length * 4)) { if (node.ToString ().StartsWith (lookup.Namespace, StringComparison.Ordinal)) yield return lookup; } }
public void TryGenerateCode() { AstNode root = GetRoot(); foreach (var item in root.Children) { Debug.Log(item); } if (root.Descendants.OfType <UsingDeclaration>().Where(x => x.Namespace == "System").Count() == 0) { root.AddChild <AstNode>(new UsingDeclaration("System"), Roles.Root); } if (root.Descendants.OfType <UsingDeclaration>().Where(x => x.Namespace == "UnityEngine").Count() == 0) { root.AddChild <AstNode>(new UsingDeclaration("UnityEngine"), Roles.Root); } TypeDeclaration classNode = null; if (root.Descendants.OfType <TypeDeclaration>().Where(x => x.Name == "DemoClass").Count() != 0) { classNode = root.Descendants.OfType <TypeDeclaration>().Where(x => x.Name == "DemoClass").First(); } else { classNode = new TypeDeclaration(); classNode.Name = "DemoClass"; classNode.Modifiers = Modifiers.Public; var comment = new Comment("<summary>", CommentType.Documentation); root.AddChild(comment, Roles.Comment); comment = new Comment("代码说明信息", CommentType.Documentation); root.AddChild(comment, Roles.Comment); comment = new Comment("<summary>", CommentType.Documentation); root.AddChild(comment, Roles.Comment); root.AddChild(classNode, Roles.TypeMemberRole); } if (classNode.Descendants.OfType <FieldDeclaration>().Where(x => x.Variables.Where(y => y.Name == "DemoField").Count() > 0).Count() == 0) { var field = new FieldDeclaration(); field.Modifiers = Modifiers.Public; field.ReturnType = new BridgeUI.NRefactory.CSharp.PrimitiveType("int"); field.Variables.Add(new VariableInitializer("DemoField", new IdentifierExpression("0"))); classNode.AddChild(field, Roles.TypeMemberRole); } if (classNode.Descendants.OfType <ConstructorDeclaration>().Where(x => x.Name == "DemoClass").Count() == 0) { var constractNode = new ConstructorDeclaration(); constractNode.Modifiers = Modifiers.Public; constractNode.Name = "DemoClass"; var statement = new BlockStatement(); statement.Add(new AssignmentExpression(new IdentifierExpression("DemoField"), new PrimitiveExpression(1))); constractNode.Body = statement; classNode.AddChild(constractNode, Roles.TypeMemberRole); } if (classNode.Descendants.OfType <MethodDeclaration>().Where(x => x.Name == "DemoFunction").Count() == 0) { var mainFuncNode = new MethodDeclaration(); mainFuncNode.Modifiers = Modifiers.Public; mainFuncNode.Name = "DemoFunction"; mainFuncNode.ReturnType = new BridgeUI.NRefactory.CSharp.PrimitiveType("void"); var parameter1 = new ParameterDeclaration(); parameter1.Type = new BridgeUI.NRefactory.CSharp.PrimitiveType("int"); parameter1.Name = "arg1"; mainFuncNode.Parameters.Add(parameter1); var statement = new BlockStatement(); statement.Add(new InvocationExpression(new MemberReferenceExpression(new IdentifierExpression("Debug"), "Log", new AstType[0]), new PrimitiveExpression("Hellow World"))); mainFuncNode.Body = statement; var parameter2 = new ParameterDeclaration(); //parameter2.Type = new BridgeUI.NRefactory.CSharp.PrimitiveType("int[]"); var type = new ComposedType(); type.ArraySpecifiers.Add(new ArraySpecifier()); type.BaseType = new BridgeUI.NRefactory.CSharp.PrimitiveType("int"); type.HasNullableSpecifier = true; parameter2.Type = type; parameter2.Name = "arg2"; mainFuncNode.Parameters.Add(parameter2); classNode.AddChild(mainFuncNode, Roles.TypeMemberRole); } Debug.Log(root.ToString()); SaveToAssetFolder(root.ToString()); }
/// <summary> /// Converts an AstNode to its AstNode extended equivalent. /// </summary> /// <param name="node">The node to convert.</param> /// <returns>A node of the correct type.</returns> public static object GetNode(AstNode node) { switch (node.ToString()) { case "DefineImage": return (DefineImageNode)node; case "SetSharedProperties": return (SetSharedPropsNode)node; case "SetControlProperties": return (SetControlPropsNode)node; case "DefineString": return (DefineStringNode)node; case "AddText": return (AddTextNode)node; case "AddButton": return (AddButtonNode)node; case "AddTextEdit": return (AddTextEditNode)node; case "AddSlider": return (AddSliderNode)node; case "AddProgressBar": return (AddProgressBarNode)node; case "AddFormatedText": return (AddFormatedTextNode)node; default: return node; } }
string GetName(AstNode node) { if (tag is SyntaxTree) { var type = node as TypeDeclaration; if (type != null) { var sb = new StringBuilder(); sb.Append(type.Name); while (type.Parent is TypeDeclaration) { type = type.Parent as TypeDeclaration; sb.Insert(0, type.Name + "."); } return(sb.ToString()); } var delegateDecl = node as DelegateDeclaration; if (delegateDecl != null) { var sb = new StringBuilder(); sb.Append(delegateDecl.Name); var parentType = delegateDecl.Parent as TypeDeclaration; while (parentType != null) { sb.Insert(0, parentType.Name + "."); parentType = parentType.Parent as TypeDeclaration; } return(sb.ToString()); } } if (node is Accessor) { if (node.Role == PropertyDeclaration.GetterRole) { return("get"); } if (node.Role == PropertyDeclaration.SetterRole) { return("set"); } if (node.Role == CustomEventDeclaration.AddAccessorRole) { return("add"); } if (node.Role == CustomEventDeclaration.RemoveAccessorRole) { return("remove"); } return(node.ToString()); } if (node is OperatorDeclaration) { return("operator"); } if (node is EntityDeclaration) { return(((EntityDeclaration)node).Name); } if (node is FixedVariableInitializer) { return(((FixedVariableInitializer)node).Name); } return(((VariableInitializer)node).Name); }
MonoDevelop.Projects.Dom.ResolveResult Resolve (AstNode node) { MonoDevelop.Projects.Dom.ResolveResult result; if (!resolveCache.TryGetValue (node, out result)) resolveCache [node] = result = Resolver.Resolve (node.ToString (), new MonoDevelop.Projects.Dom.DomLocation (Location.Line, Location.Column)); return result; }
/// <summary> /// Walks a generated AST (Abstract Syntax Tree) and creates the elements of this UIScreen. /// </summary> /// <param name="State">A ParserState instance.</param> /// <param name="node">The root node of the AST.</param> private void WalkTree(UIParser.ParserState State, AstNode node) { NodeType NType = (NodeType)Enum.Parse(typeof(NodeType), node.ToString(), true); switch (NType) { case NodeType.DefineImage: //Defines an image and loads a texture for it. DefineImageNode ImgNode = (DefineImageNode)UINode.GetNode(node); UIImage Img = new UIImage(ImgNode, m_Screen); Elements.Add(ImgNode.Name, Img); break; case NodeType.DefineString: //Defines a string with a name. DefineStringNode StrNode = (DefineStringNode)UINode.GetNode(node); Strings.Add(StrNode.Name, StringManager.StrTable(State.CurrentStringTable)[StrNode.StrIndex]); break; case NodeType.AddButton: //Defines a button. AddButtonNode ButtonNode = (AddButtonNode)UINode.GetNode(node); UIButton Btn = new UIButton(ButtonNode, State, m_Screen); Elements.Add(ButtonNode.Name, Btn); break; case NodeType.AddText: AddTextNode TextNode = (AddTextNode)UINode.GetNode(node); UILabel Lbl = new UILabel(TextNode, State, m_Screen); Elements.Add(TextNode.Name, Lbl); break; case NodeType.AddTextEdit: AddTextEditNode TextEditNode = (AddTextEditNode)UINode.GetNode(node); UITextEdit Txt = new UITextEdit(TextEditNode, State, m_Screen); Elements.Add(TextEditNode.Name, Txt); break; case NodeType.AddSlider: AddSliderNode SliderNode = (AddSliderNode)UINode.GetNode(node); UISlider Slider = new UISlider(SliderNode, State, m_Screen); Elements.Add(SliderNode.Name, Slider); break; case NodeType.SetSharedProperties: //Assigns a bunch of shared properties to declarations following the statement. State.InSharedPropertiesGroup = true; SetSharedPropsNode SharedPropsNode = (SetSharedPropsNode)UINode.GetNode(node); if (SharedPropsNode.StringTable != null) State.CurrentStringTable = (int)SharedPropsNode.StringTable; if (SharedPropsNode.ControlPosition != null) { State.Position[0] = SharedPropsNode.ControlPosition.Numbers[0]; State.Position[1] = SharedPropsNode.ControlPosition.Numbers[1]; break; } if (SharedPropsNode.Color != null) { State.Color = new Color(); State.Color.R = (byte)SharedPropsNode.Color.Numbers[0]; State.Color.G = (byte)SharedPropsNode.Color.Numbers[1]; State.Color.B = (byte)SharedPropsNode.Color.Numbers[2]; } if (SharedPropsNode.TextColor != null) { State.TextColor = new Color(); State.TextColor.R = (byte)SharedPropsNode.TextColor.Numbers[0]; State.TextColor.G = (byte)SharedPropsNode.TextColor.Numbers[1]; State.TextColor.B = (byte)SharedPropsNode.TextColor.Numbers[2]; } if (SharedPropsNode.TextColorSelected != null) { State.TextColorSelected = new Color(); State.TextColorSelected.R = (byte)SharedPropsNode.TextColorSelected.Numbers[0]; State.TextColorSelected.G = (byte)SharedPropsNode.TextColorSelected.Numbers[1]; State.TextColorSelected.B = (byte)SharedPropsNode.TextColorSelected.Numbers[2]; } if (SharedPropsNode.TextColorHighlighted != null) { State.TextColorHighlighted = new Color(); State.TextColorHighlighted.R = (byte)SharedPropsNode.TextColorHighlighted.Numbers[0]; State.TextColorHighlighted.G = (byte)SharedPropsNode.TextColorHighlighted.Numbers[1]; State.TextColorHighlighted.B = (byte)SharedPropsNode.TextColorHighlighted.Numbers[2]; } if (SharedPropsNode.TextColorDisabled != null) { State.TextColorDisabled = new Color(); State.TextColorDisabled.R = (byte)SharedPropsNode.TextColorDisabled.Numbers[0]; State.TextColorDisabled.G = (byte)SharedPropsNode.TextColorDisabled.Numbers[1]; State.TextColorDisabled.B = (byte)SharedPropsNode.TextColorDisabled.Numbers[2]; } if (SharedPropsNode.BackColor != null) { State.BackColor = new Color(); State.BackColor.R = (byte)SharedPropsNode.BackColor.Numbers[0]; State.BackColor.G = (byte)SharedPropsNode.BackColor.Numbers[1]; State.BackColor.B = (byte)SharedPropsNode.BackColor.Numbers[2]; } if (SharedPropsNode.CursorColor != null) { State.CursorColor = new Color(); State.CursorColor.R = (byte)SharedPropsNode.CursorColor.Numbers[0]; State.CursorColor.G = (byte)SharedPropsNode.CursorColor.Numbers[1]; State.CursorColor.B = (byte)SharedPropsNode.CursorColor.Numbers[2]; } if (SharedPropsNode.TextButton) State.TextButton = true; if (SharedPropsNode.Opaque != null) State.IsOpaque = (SharedPropsNode.Opaque == 1) ? true : false; if (SharedPropsNode.Transparent != null) State.IsTransparent = (SharedPropsNode.Transparent == 1) ? true : false; if (SharedPropsNode.Alignment != null) State.Alignment = (int)SharedPropsNode.Alignment; if (SharedPropsNode.Image != "") State.Image = SharedPropsNode.Image; if (SharedPropsNode.Tooltip != "") State.Tooltip = SharedPropsNode.Tooltip; if (SharedPropsNode.Text != "") State.Caption = SharedPropsNode.Text; if (SharedPropsNode.Size != null) State.Size = new Vector2(SharedPropsNode.Size.Numbers[0], SharedPropsNode.Size.Numbers[1]); if (SharedPropsNode.Orientation != null) State.Orientation = (int)SharedPropsNode.Orientation; if (SharedPropsNode.Font != null) State.Font = (int)SharedPropsNode.Font; if (SharedPropsNode.Opaque != null) State.Opaque = (int)SharedPropsNode.Opaque; break; case NodeType.SetControlProperties: //Sets a bunch of properties to a specified control. SetControlPropsNode ControlPropsNode = (SetControlPropsNode)UINode.GetNode(node); UIControl Ctrl = new UIControl(ControlPropsNode, m_Screen, State); Controls.Add(ControlPropsNode.Control, Ctrl); if (State.InSharedPropertiesGroup) { UIElement Test = new UIElement(m_Screen, null); //Script implicitly created an object... :\ if (!Elements.TryGetValue(ControlPropsNode.Control, out Test)) { Elements.Add(ControlPropsNode.Control, new UIElement(m_Screen, null)); if (Ctrl.Image != null) Elements[ControlPropsNode.Control].Image = new UIImage(Ctrl.Image); Elements[ControlPropsNode.Control].Position = Ctrl.Position; } } break; case NodeType.End: State.InSharedPropertiesGroup = false; State.Image = ""; //Reset State.TextButton = false; //Reset State.Color = new Color(); State.Caption = ""; //TODO: Reset more? break; } foreach (AstNode child in node.ChildNodes) WalkTree(State, child); }
static IEnumerable <PossibleNamespace> GetPossibleNamespaces(Document doc, AstNode node, ResolveResult resolveResult, DocumentLocation location) { var unit = doc.ParsedDocument.GetAst <SyntaxTree> (); if (unit == null) { yield break; } var project = doc.Project; if (project == null) { yield break; } int tc = GetTypeParameterCount(node); var attribute = unit.GetNodeAt <ICSharpCode.NRefactory.CSharp.Attribute> (location); bool isInsideAttributeType = attribute != null && attribute.Type.Contains(location); var compilations = new List <Tuple <ICompilation, MonoDevelop.Projects.ProjectReference> > (); compilations.Add(Tuple.Create(doc.Compilation, (MonoDevelop.Projects.ProjectReference)null)); var referencedItems = IdeApp.Workspace != null?project.GetReferencedItems(IdeApp.Workspace.ActiveConfiguration).ToList() : (IEnumerable <SolutionItem>) new SolutionItem[0]; var solution = project != null ? project.ParentSolution : null; if (solution != null) { foreach (var curProject in solution.GetAllProjects()) { if (curProject == project || referencedItems.Contains(curProject)) { continue; } var otherRefes = IdeApp.Workspace != null?curProject.GetReferencedItems(IdeApp.Workspace.ActiveConfiguration).ToList() : (IEnumerable <SolutionItem>) new SolutionItem[0]; if (otherRefes.Contains(project)) { continue; } var comp = TypeSystemService.GetCompilation(curProject); if (comp == null) { continue; } compilations.Add(Tuple.Create(comp, new MonoDevelop.Projects.ProjectReference(curProject))); } } var netProject = project as DotNetProject; if (netProject == null) { yield break; } FrameworkLookup frameworkLookup; if (!TypeSystemService.TryGetFrameworkLookup(netProject, out frameworkLookup)) { frameworkLookup = null; } if (frameworkLookup != null && resolveResult is UnknownMemberResolveResult) { var umResult = (UnknownMemberResolveResult)resolveResult; try { foreach (var r in frameworkLookup.GetExtensionMethodLookups(umResult)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName(r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) { continue; } if (CanBeReferenced(doc.Project, systemAssembly)) { compilations.Add(Tuple.Create(TypeSystemService.GetCompilation(systemAssembly, doc.Compilation), new MonoDevelop.Projects.ProjectReference(systemAssembly))); } } } catch (Exception e) { LoggingService.LogError("Error while looking up framework extension methods.", e); } } bool foundIdentifier = false; var lookup = new MemberLookup(null, doc.Compilation.MainAssembly); foreach (var comp in compilations) { var compilation = comp.Item1; var requiredReference = comp.Item2; if (resolveResult is AmbiguousTypeResolveResult) { if (compilation != doc.Compilation) { continue; } var aResult = resolveResult as AmbiguousTypeResolveResult; var file = doc.ParsedDocument.ParsedFile as CSharpUnresolvedFile; var scope = file.GetUsingScope(location).Resolve(compilation); while (scope != null) { foreach (var u in scope.Usings) { foreach (var typeDefinition in u.Types) { if (typeDefinition.Name == aResult.Type.Name && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible(typeDefinition, false)) { yield return(new PossibleNamespace(typeDefinition.Namespace, true, requiredReference)); } } } scope = scope.Parent; } } var allTypes = compilation == doc.Compilation ? compilation.GetAllTypeDefinitions() : compilation.MainAssembly.GetAllTypeDefinitions(); if (resolveResult is UnknownIdentifierResolveResult) { var uiResult = resolveResult as UnknownIdentifierResolveResult; string possibleAttributeName = isInsideAttributeType ? uiResult.Identifier + "Attribute" : uiResult.Identifier; foreach (var typeDefinition in allTypes) { if ((typeDefinition.Name == possibleAttributeName || typeDefinition.Name == uiResult.Identifier) && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible(typeDefinition, false)) { if (typeDefinition.DeclaringTypeDefinition != null) { var builder = new TypeSystemAstBuilder(new CSharpResolver(doc.Compilation)); foundIdentifier = true; yield return(new PossibleNamespace(builder.ConvertType(typeDefinition.DeclaringTypeDefinition).ToString(), false, requiredReference)); } else { foundIdentifier = true; yield return(new PossibleNamespace(typeDefinition.Namespace, true, requiredReference)); } } } } if (resolveResult is UnknownMemberResolveResult) { var umResult = (UnknownMemberResolveResult)resolveResult; string possibleAttributeName = isInsideAttributeType ? umResult.MemberName + "Attribute" : umResult.MemberName; foreach (var typeDefinition in allTypes.Where(t => t.HasExtensionMethods)) { foreach (var method in typeDefinition.Methods.Where(m => m.IsExtensionMethod && (m.Name == possibleAttributeName || m.Name == umResult.MemberName))) { IType[] inferredTypes; if (CSharpResolver.IsEligibleExtensionMethod( compilation.Import(umResult.TargetType), method, true, out inferredTypes )) { yield return(new PossibleNamespace(typeDefinition.Namespace, true, requiredReference)); goto skipType; } } skipType: ; } } if (resolveResult is ErrorResolveResult) { var identifier = unit != null?unit.GetNodeAt <Identifier> (location) : null; if (identifier != null) { var uiResult = resolveResult as UnknownIdentifierResolveResult; if (uiResult != null) { string possibleAttributeName = isInsideAttributeType ? uiResult.Identifier + "Attribute" : uiResult.Identifier; foreach (var typeDefinition in allTypes) { if ((identifier.Name == possibleAttributeName || identifier.Name == uiResult.Identifier) && typeDefinition.TypeParameterCount == tc && lookup.IsAccessible(typeDefinition, false)) { yield return(new PossibleNamespace(typeDefinition.Namespace, true, requiredReference)); } } } } } } // Try to search framework types if (!foundIdentifier && frameworkLookup != null && resolveResult is UnknownIdentifierResolveResult) { var uiResult = resolveResult as UnknownIdentifierResolveResult; if (uiResult != null) { var lookups = new List <Tuple <FrameworkLookup.AssemblyLookup, SystemAssembly> > (); try { foreach (var r in frameworkLookup.GetLookups(uiResult, tc, isInsideAttributeType)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName(r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) { continue; } if (CanBeReferenced(doc.Project, systemAssembly)) { lookups.Add(Tuple.Create(r, systemAssembly)); } } } catch (Exception e) { LoggingService.LogError("Error while looking up framework types.", e); } foreach (var kv in lookups) { yield return(new PossibleNamespace(kv.Item1.Namespace, true, new MonoDevelop.Projects.ProjectReference(kv.Item2))); } } } if (!foundIdentifier && frameworkLookup != null && resolveResult is UnknownMemberResolveResult) { var uiResult = resolveResult as UnknownMemberResolveResult; if (uiResult != null) { var lookups = new List <Tuple <FrameworkLookup.AssemblyLookup, SystemAssembly> > (); try { foreach (var r in frameworkLookup.GetLookups(uiResult, node.ToString(), tc, isInsideAttributeType)) { var systemAssembly = netProject.AssemblyContext.GetAssemblyFromFullName(r.FullName, r.Package, netProject.TargetFramework); if (systemAssembly == null) { continue; } if (CanBeReferenced(doc.Project, systemAssembly)) { lookups.Add(Tuple.Create(r, systemAssembly)); } } } catch (Exception e) { LoggingService.LogError("Error while looking up framework types.", e); } foreach (var kv in lookups) { yield return(new PossibleNamespace(kv.Item1.Namespace, true, new MonoDevelop.Projects.ProjectReference(kv.Item2))); } } } }
public ResolveResult ResolveNode(AstNode node, ILog log) { var syntaxTree = node.GetParent <SyntaxTree>(); this.InitResolver(syntaxTree); var result = this.resolver.Resolve(node); if (result is MethodGroupResolveResult && node.Parent != null) { var methodGroupResolveResult = (MethodGroupResolveResult)result; var parentResolveResult = this.ResolveNode(node.Parent, log); var parentInvocation = parentResolveResult as InvocationResolveResult; IParameterizedMember method = methodGroupResolveResult.Methods.LastOrDefault(); bool isInvocation = node.Parent is InvocationExpression && (((InvocationExpression)(node.Parent)).Target == node); if (node is Expression) { var conversion = this.Resolver.GetConversion((Expression)node); if (conversion != null && conversion.IsMethodGroupConversion) { return(new MemberResolveResult(new TypeResolveResult(conversion.Method.DeclaringType), conversion.Method)); } } if (isInvocation && parentInvocation != null) { var or = methodGroupResolveResult.PerformOverloadResolution(this.compilation, parentInvocation.GetArgumentsForCall().ToArray()); if (or.FoundApplicableCandidate) { method = or.BestCandidate; return(new MemberResolveResult(new TypeResolveResult(method.DeclaringType), method)); } } if (parentInvocation != null && method == null) { var typeDef = methodGroupResolveResult.TargetType as DefaultResolvedTypeDefinition; if (typeDef != null) { var methods = typeDef.Methods.Where(m => m.Name == methodGroupResolveResult.MethodName); method = methods.FirstOrDefault(); } } if (method == null) { var extMethods = methodGroupResolveResult.GetEligibleExtensionMethods(false); if (!extMethods.Any()) { extMethods = methodGroupResolveResult.GetExtensionMethods(); } if (!extMethods.Any() || !extMethods.First().Any()) { throw new EmitterException(node, "Cannot find method defintion"); } method = extMethods.First().First(); } if (parentInvocation == null || method.FullName != parentInvocation.Member.FullName) { MemberResolveResult memberResolveResult = new MemberResolveResult(new TypeResolveResult(method.DeclaringType), method); return(memberResolveResult); } return(parentResolveResult); } if ((result == null || result.IsError) && log != null) { if (result is CSharpInvocationResolveResult && ((CSharpInvocationResolveResult)result).OverloadResolutionErrors != OverloadResolutionErrors.None) { return(result); } log.LogWarning(string.Format("Node resolving has failed {0}: {1}", node.StartLocation, node.ToString())); } return(result); }
private void PrintAstNode(AstNode item) { Debug.Log("[" + item.ToString() + "]" + " NodeType:" + item.NodeType + " Role:" + item.Role + " Type:" + item.GetType()); }
static string ToCSharp(AstNode node) { return(node.ToString()); }
public virtual void CheckIdentifier(string name, AstNode context) { if (Helpers.IsReservedWord(name)) { Bridge.Translator.Exception.Throw("Cannot use '{0}' as identifier {1}: {2}", name, context.StartLocation, context.ToString()); } }
/// <summary> /// Resolves the specified node. /// </summary> public ResolveResult Resolve(AstNode node, CancellationToken cancellationToken = default(CancellationToken)) { if (node == null || node.IsNull || IsUnresolvableNode(node)) return ErrorResolveResult.UnknownError; lock (resolveVisitor) { InitResolver(); resolveVisitor.cancellationToken = cancellationToken; try { ResolveResult rr = resolveVisitor.GetResolveResult(node); if (rr == null) Debug.Fail (node.GetType () + " resolved to null.", node.StartLocation + ":'" + node.ToString () + "'"); return rr; } finally { resolveVisitor.cancellationToken = CancellationToken.None; } } }
public virtual IVisitorException CreateException(AstNode node, string message) { if (String.IsNullOrEmpty(message)) { message = String.Format("Language construction {0} is not supported", node.GetType().Name); } string file = node.GetParent <SyntaxTree>().FileName; return(Exception.Create("{0} {1} {2}: {3}", file, message, node.StartLocation, node.ToString())); }
PropertyRenderInformation renderPropertyDeclaration(AstNode node) { var propDecl = node as PropertyDeclaration; if (propDecl == null) { return new PropertyRenderInformation() { anythingElse = new NameAndTypeRenderInformation() { name = chompedString(node.ToString()) }, }; } var nameAndType = new NameAndTypeRenderInformation() { name = chompedString(propDecl.Name), type = chompedString(propDecl.ReturnType.ToString()), }; var commands = new[] { "ReactiveCommand", "ReactiveAsyncCommand", }; if (propDecl.Attributes.Any(x => x.ToString().StartsWith("[Once]") || commands.Contains(propDecl.ReturnType.ToString()))) { return new PropertyRenderInformation() { onceProp = nameAndType, }; } if (!propDecl.Setter.IsNull) { return new PropertyRenderInformation() { readWriteProp = nameAndType, }; } else { return new PropertyRenderInformation() { outputProp = nameAndType, }; } }
private void ShowSubtree(AstNode node, Int32 indent, CSharpAstResolver resolver) { ResolveResult result = resolver.Resolve(node); Console.WriteLine("{0} node type = {1}, value {2}, resolve result = {3}", new String(' ', indent), node.GetType().Name, Prepare(node.ToString()), GetResolveResultRepresentation(result)); foreach (AstNode child in node.Children) { ShowSubtree(child, indent + IndentDelta, resolver); } }
public TooltipInformation GetKeywordTooltip (AstNode node) { return GetKeywordTooltip (node.ToString (), node); }
/// <summary> /// Walks a generated AST (Abstract Syntax Tree) and creates the elements of this UIScreen. /// </summary> /// <param name="State">A ParserState instance.</param> /// <param name="node">The root node of the AST.</param> private void WalkTree(UIParser.ParserState State, AstNode node, ref ParseResult Result) { NodeType NType = (NodeType)Enum.Parse(typeof(NodeType), node.ToString(), true); switch (NType) { case NodeType.DefineImage: //Defines an image and loads a texture for it. DefineImageNode ImgNode = (DefineImageNode)UINode.GetNode(node); UIImage Img = new UIImage(ImgNode, m_Screen); Result.Elements.Add(ImgNode.Name, Img); break; case NodeType.DefineString: //Defines a string with a name. DefineStringNode StrNode = (DefineStringNode)UINode.GetNode(node); Result.Strings.Add(StrNode.Name, StringManager.StrTable(State.CurrentStringTable)[StrNode.StrIndex]); break; case NodeType.AddButton: //Defines a button. AddButtonNode ButtonNode = (AddButtonNode)UINode.GetNode(node); UIButton Btn = new UIButton(ButtonNode, Result, m_Screen); Result.Elements.Add(ButtonNode.Name, Btn); break; case NodeType.AddText: AddTextNode TextNode = (AddTextNode)UINode.GetNode(node); UILabel Lbl = new UILabel(TextNode, Result, m_Screen); Result.Elements.Add(TextNode.Name, Lbl); break; case NodeType.AddTextEdit: AddTextEditNode TextEditNode = (AddTextEditNode)UINode.GetNode(node); UITextEdit Txt = new UITextEdit(TextEditNode, State, m_Screen); Result.Elements.Add(TextEditNode.Name, Txt); break; case NodeType.AddSlider: AddSliderNode SliderNode = (AddSliderNode)UINode.GetNode(node); UISlider Slider = new UISlider(SliderNode, State, m_Screen); Result.Elements.Add(SliderNode.Name, Slider); break; case NodeType.SetSharedProperties: //Assigns a bunch of shared properties to declarations following the statement. State.InSharedPropertiesGroup = true; SetSharedPropsNode SharedPropsNode = (SetSharedPropsNode)UINode.GetNode(node); if (SharedPropsNode.StringTable != null) { State.CurrentStringTable = (int)SharedPropsNode.StringTable; } if (SharedPropsNode.ControlPosition != null) { State.Position[0] = SharedPropsNode.ControlPosition.Numbers[0]; State.Position[1] = SharedPropsNode.ControlPosition.Numbers[1]; break; } if (SharedPropsNode.Color != null) { State.Color = new Color(); State.Color.R = (byte)SharedPropsNode.Color.Numbers[0]; State.Color.G = (byte)SharedPropsNode.Color.Numbers[1]; State.Color.B = (byte)SharedPropsNode.Color.Numbers[2]; } if (SharedPropsNode.TextColor != null) { State.TextColor = new Color(); State.TextColor.R = (byte)SharedPropsNode.TextColor.Numbers[0]; State.TextColor.G = (byte)SharedPropsNode.TextColor.Numbers[1]; State.TextColor.B = (byte)SharedPropsNode.TextColor.Numbers[2]; } if (SharedPropsNode.TextColorSelected != null) { State.TextColorSelected = new Color(); State.TextColorSelected.R = (byte)SharedPropsNode.TextColorSelected.Numbers[0]; State.TextColorSelected.G = (byte)SharedPropsNode.TextColorSelected.Numbers[1]; State.TextColorSelected.B = (byte)SharedPropsNode.TextColorSelected.Numbers[2]; } if (SharedPropsNode.TextColorHighlighted != null) { State.TextColorHighlighted = new Color(); State.TextColorHighlighted.R = (byte)SharedPropsNode.TextColorHighlighted.Numbers[0]; State.TextColorHighlighted.G = (byte)SharedPropsNode.TextColorHighlighted.Numbers[1]; State.TextColorHighlighted.B = (byte)SharedPropsNode.TextColorHighlighted.Numbers[2]; } if (SharedPropsNode.TextColorDisabled != null) { State.TextColorDisabled = new Color(); State.TextColorDisabled.R = (byte)SharedPropsNode.TextColorDisabled.Numbers[0]; State.TextColorDisabled.G = (byte)SharedPropsNode.TextColorDisabled.Numbers[1]; State.TextColorDisabled.B = (byte)SharedPropsNode.TextColorDisabled.Numbers[2]; } if (SharedPropsNode.BackColor != null) { State.BackColor = new Color(); State.BackColor.R = (byte)SharedPropsNode.BackColor.Numbers[0]; State.BackColor.G = (byte)SharedPropsNode.BackColor.Numbers[1]; State.BackColor.B = (byte)SharedPropsNode.BackColor.Numbers[2]; } if (SharedPropsNode.CursorColor != null) { State.CursorColor = new Color(); State.CursorColor.R = (byte)SharedPropsNode.CursorColor.Numbers[0]; State.CursorColor.G = (byte)SharedPropsNode.CursorColor.Numbers[1]; State.CursorColor.B = (byte)SharedPropsNode.CursorColor.Numbers[2]; } if (SharedPropsNode.TextButton) { State.TextButton = true; } if (SharedPropsNode.Opaque != null) { State.IsOpaque = (SharedPropsNode.Opaque == 1) ? true : false; } if (SharedPropsNode.Transparent != null) { State.IsTransparent = (SharedPropsNode.Transparent == 1) ? true : false; } if (SharedPropsNode.Alignment != null) { State.Alignment = (int)SharedPropsNode.Alignment; } if (SharedPropsNode.Image != "") { State.Image = SharedPropsNode.Image; } if (SharedPropsNode.Tooltip != "") { State.Tooltip = SharedPropsNode.Tooltip; } if (SharedPropsNode.Text != "") { State.Caption = SharedPropsNode.Text; } if (SharedPropsNode.Size != null) { State.Size = new Vector2(SharedPropsNode.Size.Numbers[0], SharedPropsNode.Size.Numbers[1]); } if (SharedPropsNode.Orientation != null) { State.Orientation = (int)SharedPropsNode.Orientation; } if (SharedPropsNode.Font != null) { State.Font = (int)SharedPropsNode.Font; } if (SharedPropsNode.Opaque != null) { State.Opaque = (int)SharedPropsNode.Opaque; } break; case NodeType.SetControlProperties: //Sets a bunch of properties to a specified control. SetControlPropsNode ControlPropsNode = (SetControlPropsNode)UINode.GetNode(node); UIControl Ctrl = new UIControl(ControlPropsNode, m_Screen, State); Result.Controls.Add(ControlPropsNode.Control, Ctrl); if (State.InSharedPropertiesGroup) { UIElement Test = new UIElement(m_Screen, null); //Script implicitly created an object... :\ if (!Result.Elements.TryGetValue(ControlPropsNode.Control, out Test)) { Result.Elements.Add(ControlPropsNode.Control, new UIElement(m_Screen, null)); if (Ctrl.Image != null) { Result.Elements[ControlPropsNode.Control].Image = new UIImage(Ctrl.Image); } Result.Elements[ControlPropsNode.Control].Position = Ctrl.Position; } } break; case NodeType.End: State.InSharedPropertiesGroup = false; State.Image = ""; //Reset State.TextButton = false; //Reset State.Color = new Color(); State.Caption = ""; State.Size = new Vector2(0, 0); State.Alignment = 0; State.Font = 0; //TODO: Reset more? break; } foreach (AstNode child in node.ChildNodes) { WalkTree(State, child, ref Result); } }
public override void CreateNewType (AstNode newType, NewTypeContext ntctx) { if (newType == null) throw new System.ArgumentNullException ("newType"); var correctFileName = MoveTypeToFile.GetCorrectFileName (context, (EntityDeclaration)newType); var content = context.TextEditor.Text; var types = new List<EntityDeclaration> (context.Unit.GetTypes ()); types.Sort ((x, y) => y.StartLocation.CompareTo (x.StartLocation)); foreach (var removeType in types) { var start = context.GetOffset (removeType.StartLocation); var end = context.GetOffset (removeType.EndLocation); content = content.Remove (start, end - start); } var insertLocation = types.Count > 0 ? context.GetOffset (types.Last ().StartLocation) : -1; if (insertLocation < 0 || insertLocation > content.Length) insertLocation = content.Length; content = content.Substring (0, insertLocation) + newType.ToString (FormattingOptions) + content.Substring (insertLocation); var formatter = new MonoDevelop.CSharp.Formatting.CSharpFormatter (); var policy = context.Project.Policies.Get<CSharpFormattingPolicy> (); var textPolicy = context.Project.Policies.Get<TextStylePolicy> (); content = formatter.FormatText (policy, textPolicy, MonoDevelop.CSharp.Formatting.CSharpFormatter.MimeType, content, 0, content.Length); File.WriteAllText (correctFileName, content); context.Project.AddFile (correctFileName); IdeApp.ProjectOperations.Save (context.Project); IdeApp.Workbench.OpenDocument (correctFileName); }
public static ResolveResult Resolve(this AstNode node, MonoDevelop.Ide.Gui.Document doc) { return(doc.GetResolver().Resolve(node.ToString(), new DomLocation(node.StartLocation.Line, node.StartLocation.Column))); }
public static void Replace (this TextEditorData editor, AstNode n, AstNode replaceWith) { var change = editor.GetRemoveNodeChange (n); editor.Replace (change.Offset, change.RemovedChars, replaceWith.ToString ()); }
private void ROOT_COMPSTMT_STMTLIST_STMT_COMMAND(AstNode node, AstNode next) { GenericNode genNode = node as GenericNode; if (genNode == null) { return; } string att = String.Empty; string res = String.Empty; AstNode args = null; AstNode block = null; int type = 0; // 0 = resource 1 = attribute foreach (AstNode child in genNode.ChildNodes.Where(child => child != null)) { if (child is Token) { Token token = child as Token; if (token.Terminal.Category != TokenCategory.Content) { continue; } if (next != null) { if (next.ToString() != "BLOCK") { continue; } // Next node is BLOCK: then COMMAND represent a Chef resource, set type to 1 (resource) res = token.Text; block = next; type = 1; } else { // It is a Chef attribute, set type to 0 (attribute) att = token.Text; type = 0; } } else { if (child.ToString() == "CALL_ARGS") { args = child; } } } switch (type) { case 0: Attribute(att, args); break; case 1: Resource(res, args, block); break; } }