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; }