Browse Source

fix http://community.sharpdevelop.net/forums/t/15637.aspx

and other issues in WatchInputBox
pull/6/merge
Siegfried Pammer 14 years ago
parent
commit
c07882ccfb
  1. 11
      src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/WatchPadCommands.cs
  2. 86
      src/AddIns/Debugger/Debugger.AddIn/Pads/WatchInputBox.xaml.cs

11
src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/WatchPadCommands.cs

@ -29,20 +29,13 @@ namespace Debugger.AddIn
var inputWindow = new WatchInputBox(StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.AddWatch}"), var inputWindow = new WatchInputBox(StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.AddWatch}"),
StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.EnterExpression}")); StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.EnterExpression}"));
inputWindow.Owner = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWindow; inputWindow.Owner = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWindow;
var result = inputWindow.ShowDialog(); if (inputWindow.ShowDialog() != true)
if (!result.HasValue || !result.Value)
return; return;
string input = inputWindow.CommandText; string input = inputWindow.CommandText;
if (!string.IsNullOrEmpty(input)) { if (!string.IsNullOrEmpty(input)) {
// get language var text = new TextNode(null, input, inputWindow.ScriptLanguage).ToSharpTreeNode();
if (ProjectService.CurrentProject == null) return;
string language = ProjectService.CurrentProject.Language;
var text = new TextNode(null, input,
language == "VB" || language == "VBNet" ? SupportedLanguage.VBNet : SupportedLanguage.CSharp).ToSharpTreeNode();
var list = pad.WatchList; var list = pad.WatchList;
if(!list.WatchItems.Any(n => text.Node.FullName == ((TreeNodeWrapper)n).Node.FullName)) if(!list.WatchItems.Any(n => text.Node.FullName == ((TreeNodeWrapper)n).Node.FullName))

86
src/AddIns/Debugger/Debugger.AddIn/Pads/WatchInputBox.xaml.cs

@ -13,7 +13,9 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Debugging; using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver; using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion; using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Gui.Pads; using ICSharpCode.SharpDevelop.Gui.Pads;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Services; using ICSharpCode.SharpDevelop.Services;
@ -25,8 +27,12 @@ namespace Debugger.AddIn.Pads
/// </summary> /// </summary>
public partial class WatchInputBox : BaseWatchBox public partial class WatchInputBox : BaseWatchBox
{ {
private NRefactoryResolver resolver; NRefactoryResolver resolver;
private string language; SupportedLanguage language;
public SupportedLanguage ScriptLanguage {
get { return language; }
}
public WatchInputBox(string text, string caption) : base() public WatchInputBox(string text, string caption) : base()
{ {
@ -37,18 +43,20 @@ namespace Debugger.AddIn.Pads
this.Title = StringParser.Parse(caption); this.Title = StringParser.Parse(caption);
this.ConsolePanel.Content = console; this.ConsolePanel.Content = console;
if (ProjectService.CurrentProject == null) return; if (ProjectService.CurrentProject == null)
language = GetLanguageFromActiveViewContent();
// get language else
language = ProjectService.CurrentProject.Language; language = GetLanguage(ProjectService.CurrentProject.Language);
resolver = new NRefactoryResolver(LanguageProperties.GetLanguage(language));
resolver = new NRefactoryResolver(LanguageProperties.GetLanguage(language.ToString()));
// FIXME set language
if (language == "VB" || language == "VBNet") { switch (language) {
console.SetHighlighting("VBNET"); case SupportedLanguage.CSharp:
} else { console.SetHighlighting("C#");
language = "C#"; break;
console.SetHighlighting("C#"); case SupportedLanguage.VBNet:
console.SetHighlighting("VBNET");
break;
} }
// get process // get process
@ -72,7 +80,7 @@ namespace Debugger.AddIn.Pads
} }
} }
private void ShowDotCompletion(string currentText) void ShowDotCompletion(string currentText)
{ {
var seg = Process.SelectedStackFrame.NextStatement; var seg = Process.SelectedStackFrame.NextStatement;
@ -94,20 +102,15 @@ namespace Debugger.AddIn.Pads
} }
} }
private bool CheckSyntax() bool CheckSyntax()
{ {
string command = console.CommandText.Trim(); string command = console.CommandText.Trim();
// FIXME workaround the NRefactory issue that needs a ; at the end // FIXME workaround the NRefactory issue that needs a ; at the end
if (language == "C#") { if (language == SupportedLanguage.CSharp && !command.EndsWith(";"))
if(!command.EndsWith(";")) command += ";";
command += ";";
// FIXME only one string should be available; highlighting expects C#, supproted language, CSharp
language = "CSharp";
}
SupportedLanguage supportedLanguage = (SupportedLanguage)Enum.Parse(typeof(SupportedLanguage), language, true); using (var parser = ParserFactory.CreateParser(language, new StringReader(command))) {
using (var parser = ParserFactory.CreateParser(supportedLanguage, new StringReader(command))) {
parser.ParseExpression(); parser.ParseExpression();
if (parser.Errors.Count > 0) { if (parser.Errors.Count > 0) {
MessageService.ShowError(parser.Errors.ErrorOutput); MessageService.ShowError(parser.Errors.ErrorOutput);
@ -118,7 +121,38 @@ namespace Debugger.AddIn.Pads
return true; return true;
} }
private void AcceptButton_Click(object sender, RoutedEventArgs e) SupportedLanguage GetLanguage(string language)
{
if ("VBNet".Equals(language, StringComparison.OrdinalIgnoreCase)
|| "VB".Equals(language, StringComparison.OrdinalIgnoreCase)
|| "VB.NET".Equals(language, StringComparison.OrdinalIgnoreCase))
return SupportedLanguage.VBNet;
return SupportedLanguage.CSharp;
}
/// <summary>
/// Gets the language used in the currently active view content. This is useful, when there is no project
/// opened and we still want to add watches (i.e. the debugger is attached to an existing process without a solution).
/// </summary>
SupportedLanguage GetLanguageFromActiveViewContent()
{
ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorProvider;
if (provider != null && provider.TextEditor != null) {
string extension = Path.GetExtension(provider.TextEditor.FileName).ToLowerInvariant();
switch (extension) {
case ".cs":
return SupportedLanguage.CSharp;
case ".vb":
return SupportedLanguage.VBNet;
}
}
return SupportedLanguage.CSharp;
}
void AcceptButton_Click(object sender, RoutedEventArgs e)
{ {
if (!this.CheckSyntax()) if (!this.CheckSyntax())
return; return;
@ -127,7 +161,7 @@ namespace Debugger.AddIn.Pads
this.Close(); this.Close();
} }
private void CancelButton_Click(object sender, RoutedEventArgs e) void CancelButton_Click(object sender, RoutedEventArgs e)
{ {
DialogResult = false; DialogResult = false;
this.Close(); this.Close();

Loading…
Cancel
Save