internal static IField ScanGetter (RefactoringContext context, PropertyDeclaration propertyDeclaration)
		{
			if (propertyDeclaration.Getter.Body.Statements.Count != 1)
				return null;
			var returnStatement = propertyDeclaration.Getter.Body.Statements.First () as ReturnStatement;
			
			var result = context.ResolveMember (returnStatement.Expression);
			if (result == null)
				return null;
			return result.FirstOrDefault () as IField;
		}
		AstType GuessType (RefactoringContext context, IdentifierExpression identifier)
		{
			var type = CreateField.GuessType (context, identifier);
			if (type != null)
				return type;
			
			if (identifier != null && (identifier.Parent is InvocationExpression || identifier.Parent.Parent is InvocationExpression)) {
				var invocation = (identifier.Parent as InvocationExpression) ?? (identifier.Parent.Parent as InvocationExpression);
				var result = context.ResolveMember (invocation).FirstOrDefault () as IMethod;
				if (result == null)
					return null;
				int i = 0;
				foreach (var arg in invocation.Arguments) {
					if (arg.Contains (identifier.StartLocation))
						break;
					i++;
				}
				if (result.Parameters.Count < i)
					return null;
				return context.CreateShortType (result.Parameters[i].Type.Resolve (context.TypeResolveContext));
			}
			return null;
		}
		internal static IField ScanSetter (RefactoringContext context, PropertyDeclaration propertyDeclaration)
		{
			if (propertyDeclaration.Setter.Body.Statements.Count != 1)
				return null;
			var setAssignment = propertyDeclaration.Setter.Body.Statements.First () as ExpressionStatement;
			var assignment = setAssignment != null ? setAssignment.Expression as AssignmentExpression : null;
			if (assignment == null || assignment.Operator != AssignmentOperatorType.Assign)
				return null;
			var result = context.ResolveMember (assignment.Left);
			if (result == null)
				return null;
			return result.FirstOrDefault () as IField;
		}