Browse Source

fix #299: Declare local variable: Automatic variable naming

pull/343/merge
Siegfried Pammer 12 years ago
parent
commit
4f02dc3bd2
  1. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs
  2. 16
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp.Refactoring/CodeActions/DeclareLocalVariableAction.cs

@ -72,6 +72,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -72,6 +72,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
guessedType = GetDelegateType(context, ((MethodGroupResolveResult)resolveResult).Methods.First(), expr);
}
var name = CreateMethodDeclarationAction.CreateBaseName(expr, guessedType);
name = context.GetLocalNameProposal(name, expr.StartLocation);
var type = context.UseExplicitTypes ? context.CreateShortType(guessedType) : new SimpleType("var");
var varDecl = new VariableDeclarationStatement(type, name, expr.Clone());
var replaceNode = visitor.Matches.First () as Expression;
@ -100,6 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -100,6 +101,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
var linkedNodes = new List<AstNode>();
var name = CreateMethodDeclarationAction.CreateBaseName(expr, guessedType);
name = context.GetLocalNameProposal(name, expr.StartLocation);
var type = context.UseExplicitTypes ? context.CreateShortType(guessedType) : new SimpleType("var");
var varDecl = new VariableDeclarationStatement(type, name, expr.Clone());
linkedNodes.Add(varDecl.Variables.First().NameToken);

16
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/BaseRefactoringContext.cs

@ -214,6 +214,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -214,6 +214,22 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
} while (type.Members.Select (m => m.GetChildByRole (Roles.Identifier)).Any (n => n.Name == proposedName));
return proposedName;
}
public virtual string GetLocalNameProposal (string name, TextLocation loc, bool camelCase = true)
{
string baseName = (camelCase ? char.ToLower (name [0]) : char.ToUpper (name [0])) + name.Substring (1);
var node = RootNode.GetNodeAt(loc);
if (node == null)
return baseName;
var context = GetResolverStateBefore (node);
int number = -1;
string proposedName;
do {
proposedName = AppendNumberToName (baseName, number++);
} while (!(context.ResolveSimpleName (proposedName, EmptyList<IType>.Instance) is UnknownIdentifierResolveResult));
return proposedName;
}
static string AppendNumberToName (string baseName, int number)
{

Loading…
Cancel
Save