public IEnumerable <MethodDeclaration> FindCandidatesViaRefactoringPermutations(TargetInfo left, MethodDeclaration right) { right = right.DeepCopy(); /* * Steps to change one to match the other. * Get the lookup table for left. * Get the lookup table for right. * Loop through left, renaming the corresponding right var as you go (don't worry about collisions yet). * Compare. * * This is essentially a normalization of one to the other. */ Dictionary <string, List <LocalLookupVariable> > left_table = left.GetLookupTableWithParams(); Dictionary <string, List <LocalLookupVariable> > right_table = right.GetLookupTableWithParams(); if (left_table.Keys.Count == right_table.Keys.Count) { IDictionary <string, string> renames = new Dictionary <string, string>(); for (int i = 0; i < left_table.Count; i++) { var left_var_name = left_table.Keys.ToArray()[i]; var right_var_name = right_table.Keys.ToArray()[i]; // current name => new name renames.Add(right_var_name, left_var_name); } RenameLocalVariableRefactoring r = new RenameLocalVariableRefactoring(renames); right.AcceptVisitor(r, null); yield return(right); } }
public IEnumerable<MethodDeclaration> FindCandidatesViaRefactoringPermutations(TargetInfo left, MethodDeclaration right) { right = right.DeepCopy(); /* * Steps to change one to match the other. * Get the lookup table for left. * Get the lookup table for right. * Loop through left, renaming the corresponding right var as you go (don't worry about collisions yet). * Compare. * * This is essentially a normalization of one to the other. */ Dictionary<string, List<LocalLookupVariable>> left_table = left.GetLookupTableWithParams(); Dictionary<string, List<LocalLookupVariable>> right_table = right.GetLookupTableWithParams(); if (left_table.Keys.Count == right_table.Keys.Count) { IDictionary<string, string> renames = new Dictionary<string, string>(); for (int i = 0; i < left_table.Count; i++) { var left_var_name = left_table.Keys.ToArray()[i]; var right_var_name = right_table.Keys.ToArray()[i]; // current name => new name renames.Add(right_var_name, left_var_name); } RenameLocalVariableRefactoring r = new RenameLocalVariableRefactoring(renames); right.AcceptVisitor(r, null); yield return right; } }
private void RunRenameLocalVariableRefactoringTest(string codeText, string idStart, string idEnd) { var foo_meth = AstMatchHelper.ParseToMethodDeclaration(codeText); var renameTable = new Dictionary<string, string> {{idStart, idEnd}}; RenameLocalVariableRefactoring r = new RenameLocalVariableRefactoring(renameTable); foo_meth.AcceptVisitor(r, null); var expectedCode = codeText.Replace(idStart, idEnd); Assert.IsTrue(AstMatchHelper.ParseToMethodDeclaration(expectedCode).Matches(foo_meth), "Expected code: " + expectedCode + " did not match actual code: " + foo_meth.Print()); }