Example #1
0
        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);
        }
Example #2
0
 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;
			}
Example #6
0
        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());
        }
Example #8
0
 /// <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;
         }
     }
 }
Example #9
0
		/// <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());
    }
Example #11
0
 /// <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;
     }
 }
Example #12
0
            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;
		}
Example #14
0
        /// <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());
 }
Example #18
0
 static string ToCSharp(AstNode node)
 {
     return(node.ToString());
 }
Example #19
0
 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());
     }
 }
Example #20
0
		/// <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;
				}
			}
		}
Example #21
0
        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()));
        }
Example #22
0
        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, };
            }
        }
Example #23
0
        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);
		}
Example #25
0
        /// <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)));
 }
Example #28
0
		public static void Replace (this TextEditorData editor, AstNode n, AstNode replaceWith)
		{
			var change = editor.GetRemoveNodeChange (n);
			editor.Replace (change.Offset, change.RemovedChars, replaceWith.ToString ());
		}
Example #29
0
        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;
            }
        }