diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2011-11-04 15:55:43 +0400 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2011-11-04 15:55:43 +0400 |
commit | 7c97e6d93cc6be3cd11baa2c24c58a282d241ba0 (patch) | |
tree | 82e9d33fbc840fdc730b6dbe88e13cc1f987148b /main/contrib | |
parent | e65640bc4ab2c853691b60db76c4997dbd10cefe (diff) |
Synced with nrefactory.
Diffstat (limited to 'main/contrib')
-rw-r--r-- | main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseExplicitType.cs | 38 | ||||
-rw-r--r-- | main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseVarKeyword.cs | 24 |
2 files changed, 49 insertions, 13 deletions
diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseExplicitType.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseExplicitType.cs index b31bf78cb3..22e9ff2131 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseExplicitType.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseExplicitType.cs @@ -36,32 +36,54 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring public bool IsValid (RefactoringContext context) { var varDecl = GetVariableDeclarationStatement (context); - if (varDecl == null) - return false; - var type = context.Resolve (varDecl.Variables.First ().Initializer).Type; + IType type; + if (varDecl != null) { + type = context.Resolve (varDecl.Variables.First ().Initializer).Type; + } else { + var foreachStatement = GetForeachStatement (context); + if (foreachStatement == null) + return false; + type = context.Resolve (foreachStatement.VariableType).Type; + } + return !type.Equals (SharedTypes.Null) && !type.Equals (SharedTypes.UnknownType); } public void Run (RefactoringContext context) { - var varDecl = GetVariableDeclarationStatement (context); - using (var script = context.StartScript ()) { - var type = context.Resolve (varDecl.Variables.First ().Initializer).Type; - script.Replace (varDecl.Type, context.CreateShortType (type)); + var varDecl = GetVariableDeclarationStatement (context); + if (varDecl != null) { + var type = context.Resolve (varDecl.Variables.First ().Initializer).Type; + script.Replace (varDecl.Type, context.CreateShortType (type)); + } else { + var foreachStatement = GetForeachStatement (context); + var type = context.Resolve (foreachStatement.VariableType).Type; + script.Replace (foreachStatement.VariableType, context.CreateShortType (type)); + } } } + static readonly AstType varType = new SimpleType ("var"); + static VariableDeclarationStatement GetVariableDeclarationStatement (RefactoringContext context) { var result = context.GetNode<VariableDeclarationStatement> (); - if (result != null && result.Variables.Count == 1 && !result.Variables.First ().Initializer.IsNull && result.Type.Contains (context.Location.Line, context.Location.Column) && result.Type.IsMatch (new SimpleType ("var"))) { + if (result != null && result.Variables.Count == 1 && !result.Variables.First ().Initializer.IsNull && result.Type.Contains (context.Location.Line, context.Location.Column) && result.Type.IsMatch (varType)) { if (context.Resolve (result.Variables.First ().Initializer) == null) return null; return result; } return null; } + + static ForeachStatement GetForeachStatement (RefactoringContext context) + { + var result = context.GetNode<ForeachStatement> (); + if (result != null && result.VariableType.Contains (context.Location) && result.VariableType.IsMatch (varType)) + return result; + return null; + } } } diff --git a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseVarKeyword.cs b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseVarKeyword.cs index 8aa9c8b66e..049034005e 100644 --- a/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseVarKeyword.cs +++ b/main/contrib/ICSharpCode.NRefactory.CSharp/Refactoring/ContextAction/UseVarKeyword.cs @@ -29,25 +29,39 @@ using ICSharpCode.NRefactory.PatternMatching; namespace ICSharpCode.NRefactory.CSharp.Refactoring { - public class UseVarKeyword: IContextAction + public class UseVarKeyword : IContextAction { public bool IsValid (RefactoringContext context) { - return GetVariableDeclarationStatement (context) != null; + return GetVariableDeclarationStatement (context) != null || GetForeachStatement (context) != null; } public void Run (RefactoringContext context) { - var varDecl = GetVariableDeclarationStatement (context); using (var script = context.StartScript ()) { - script.Replace (varDecl.Type, new SimpleType ("var")); + var varDecl = GetVariableDeclarationStatement (context); + if (varDecl != null) { + script.Replace (varDecl.Type, new SimpleType ("var")); + } else { + script.Replace (GetForeachStatement (context).VariableType, new SimpleType ("var")); + } } } + static readonly AstType varType = new SimpleType ("var"); + static VariableDeclarationStatement GetVariableDeclarationStatement (RefactoringContext context) { var result = context.GetNode<VariableDeclarationStatement> (); - if (result != null && result.Variables.Count == 1 && !result.Variables.First ().Initializer.IsNull && result.Type.Contains (context.Location.Line, context.Location.Column) && !result.Type.IsMatch (new SimpleType ("var"))) + if (result != null && result.Variables.Count == 1 && !result.Variables.First ().Initializer.IsNull && result.Type.Contains (context.Location) && !result.Type.IsMatch (varType)) + return result; + return null; + } + + static ForeachStatement GetForeachStatement (RefactoringContext context) + { + var result = context.GetNode<ForeachStatement> (); + if (result != null && result.VariableType.Contains (context.Location) && !result.VariableType.IsMatch (varType)) return result; return null; } |