Пример #1
0
		public void FindFieldsInsideFunction(ITsBlock body)
		{
			//Find Fields
			foreach (var instruction in body.StatementsEnumerable)
			{
				if (instruction is ITsExpressionStatement)
				{
					var expr = (instruction as ITsExpressionStatement).Expression.Expressions.LastOrDefault() as ITsSimpleAssignmentExpression;
					if (expr != null && /*expr.IsAssignment &&*/ expr.Dest.GetText().StartsWith("this."))
					{
						var name = expr.Dest.GetText().Replace("this.", "");
						var end = name.IndexOf(".");
						if (end != -1)
						{
							name = name.Substring(0, end);
						}
						end = name.IndexOf("[");
						if (end != -1)
						{
							name = name.Substring(0, end);
						}
						if (!PrototypeFields.ContainsKey(name))
						{
							PrototypeFields.Add(name, null);
						}
					}
				}

			}
		}
Пример #2
0
		public TsFunction(ITsFunctionExpression expression)
		{
			Node = expression;
			Parameters = expression.ParameterList;
			Block = expression.Block;
			//expression.GetText()
		}
Пример #3
0
		public TsFunction(ITsFunctionStatement statement)
		{
			Node = statement;
			Parameters = statement.Signatures[0].Signature.ParameterList;
			Block = statement.Block;
		}
Пример #4
0
		public void FindAndMoveNgMethodsInsideFunction(ITsBlock body)
		{
			TsElementFactory factory = TsElementFactory.GetInstance(body);
			foreach (var instruction in body.StatementsEnumerable)
			{
				if (instruction is ITsExpressionStatement)
				{
					var expr = (instruction as ITsExpressionStatement).Expression.Expressions.LastOrDefault() as ITsSimpleAssignmentExpression;
					if (expr != null && /*expr.IsAssignment &&*/ expr.Dest.GetText().StartsWith("$scope."))
					{
						var name = expr.Dest.GetText().Replace("$scope.", "");
						var end = name.IndexOf(".");
						if (end != -1)
						{
							name = name.Substring(0, end);
						}
						if (name.IndexOf("[") > -1) { continue; }
						if (expr.Source is ITsFunctionExpression)
						{
							PrototypeMethods.Add(new Tuple<string, TsFunction>(name, new TsFunction(expr.Source as ITsFunctionExpression)));
							ModificationUtil.ReplaceChild(expr, factory.CreateStatement("$scope." + name + " = this." + name + ".bind(this);"));
						}
					}
				}
			}
		}
Пример #5
0
		public void FindAndMoveMethodsInsideFunction(ITsBlock body)
		{
			foreach (var instruction in body.StatementsEnumerable.ToArray())
			{
				//this.f1 = function(){}
				if (instruction is ITsExpressionStatement)
				{
					var expr = (instruction as ITsExpressionStatement).Expression.Expressions.LastOrDefault() as ITsSimpleAssignmentExpression;
					if (expr != null && /*expr.IsAssignment &&*/ expr.Dest.GetText().StartsWith("this."))
					{
						var name = expr.Dest.GetText().Replace("this.", "");
						var end = name.IndexOf(".");
						if (end != -1)
						{
							name = name.Substring(0, end);
						}
						if (name.IndexOf("[")>-1){ continue; }
						if (expr.Source is ITsFunctionExpression)
						{
							PrototypeMethods.Add(new Tuple<string, TsFunction>(name, new TsFunction(expr.Source as ITsFunctionExpression)));
							ModificationUtil.DeleteChild(expr);
						}
					}
				}

				//function f1(){}
				if (instruction is ITsFunctionStatement)
				{
					var expr = (instruction as ITsFunctionStatement);
					PrototypeMethods.Add(new Tuple<string, TsFunction>(expr.DeclaredName, new TsFunction(expr)));
					ModificationUtil.DeleteChild(expr);
				}

				//var f1 = function(){}, f2 = function(){}
				if (instruction is ITsVariableDeclarationStatement)
				{
					var expr = (instruction as ITsVariableDeclarationStatement);
					var vars = expr.DeclarationsEnumerable.ToArray();
					foreach (var declaration in vars)
					{
						if (declaration.Value is ITsFunctionExpression)
						{
							PrototypeMethods.Add(new Tuple<string, TsFunction>(declaration.NameNode.GetText(),  new TsFunction(declaration.Value as ITsFunctionExpression)));
							ModificationUtil.DeleteChild(declaration);
						}
					}
					if (expr.Declarations.IsEmpty)
					{
						ModificationUtil.DeleteChild(expr);
					}
				}
			}

		}