Browse Source

simplified code generation in OverrideToStringMethod and added Cancel support

pull/1/head
Siegfried Pammer 15 years ago
parent
commit
10cdfe20c7
  1. 28
      src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/OverrideToStringMethodDialog.xaml.cs

28
src/AddIns/Misc/SharpRefactoring/Project/Src/Gui/OverrideToStringMethodDialog.xaml.cs

@ -21,40 +21,34 @@ namespace SharpRefactoring.Gui
public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog
{ {
List<Wrapper<IField>> fields; List<Wrapper<IField>> fields;
string baseCall;
public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor startAnchor, ITextAnchor anchor, IList<IField> fields) public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor startAnchor, ITextAnchor anchor, IList<IField> fields, string baseCall)
: base(context, editor, anchor) : base(context, editor, anchor)
{ {
InitializeComponent(); InitializeComponent();
this.baseCall = baseCall;
this.fields = fields.Select(f => new Wrapper<IField>() { Entity = f }).ToList(); this.fields = fields.Select(f => new Wrapper<IField>() { Entity = f }).ToList();
this.listBox.ItemsSource = this.fields.Select(i => i.Create(null)); this.listBox.ItemsSource = this.fields.Select(i => i.Create(null));
} }
protected override string GenerateCode(LanguageProperties language, IClass currentClass) protected override string GenerateCode(LanguageProperties language, IClass currentClass)
{ {
var fields = this.fields string[] fields = this.fields
.Where(f => f.IsChecked) .Where(f => f.IsChecked)
.Select(f2 => f2.Entity.Name) .Select(f2 => f2.Entity.Name)
.ToArray(); .ToArray();
ClassFinder context = new ClassFinder(currentClass, editor.Caret.Line, editor.Caret.Column); Ast.PrimitiveExpression formatString = new Ast.PrimitiveExpression(GenerateFormatString(currentClass, language.CodeGenerator, fields));
IMember member = OverrideCompletionItemProvider.GetOverridableMembers(currentClass).First(m => m.Name == "ToString"); List<Ast.Expression> param = new List<Ast.Expression>() { formatString };
var node = language.CodeGenerator.GetOverridingMethod(member, context) as Ast.MethodDeclaration;
var formatString = new Ast.PrimitiveExpression(GenerateFormatString(currentClass, language.CodeGenerator, fields));
var param = new List<Ast.Expression>() { formatString };
Ast.ReturnStatement ret = new Ast.ReturnStatement(new Ast.InvocationExpression( Ast.ReturnStatement ret = new Ast.ReturnStatement(new Ast.InvocationExpression(
new Ast.MemberReferenceExpression(new Ast.TypeReferenceExpression(new Ast.TypeReference("System.String", true)), "Format"), new Ast.MemberReferenceExpression(new Ast.TypeReferenceExpression(new Ast.TypeReference("System.String", true)), "Format"),
param.Concat(fields.Select(f => new Ast.IdentifierExpression(f))).ToList() param.Concat(fields.Select(f => new Ast.IdentifierExpression(f))).ToList()
)); ));
node.Body.Children.Clear(); return language.CodeGenerator.GenerateCode(ret, "").Trim();
node.Body.AddChild(ret);
int offset = editor.Document.GetLineForOffset(editor.Caret.Offset).Offset;
return language.CodeGenerator.GenerateCode(node, DocumentUtilitites.GetWhitespaceAfter(editor.Document, offset)).TrimStart();
} }
string GenerateFormatString(IClass currentClass, CodeGenerator generator, string[] fields) string GenerateFormatString(IClass currentClass, CodeGenerator generator, string[] fields)
@ -75,5 +69,13 @@ namespace SharpRefactoring.Gui
return "[" + currentClass.Name + fieldsString + "]"; return "[" + currentClass.Name + fieldsString + "]";
} }
protected override void CancelButtonClick(object sender, System.Windows.RoutedEventArgs e)
{
base.CancelButtonClick(sender, e);
editor.Document.Insert(anchor.Offset, baseCall);
editor.Select(anchor.Offset, baseCall.Length);
}
} }
} }

Loading…
Cancel
Save