From 37d60be34696bc765891ee1642a29d5dde308512 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 16 Apr 2006 12:52:23 +0000 Subject: [PATCH] Fixed problem with trailing space in expressions for VB debugger tooltips. DomPersistence no longer crashes when the cache index file is corrupted. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1307 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Dom/ReflectionLayer/DomPersistence.cs | 36 ++++++++++--------- .../Src/Services/Debugger/DebuggerService.cs | 5 +-- .../RefactoringService/CodeGenerator.cs | 4 ++- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/Main/Base/Project/Src/Dom/ReflectionLayer/DomPersistence.cs b/src/Main/Base/Project/Src/Dom/ReflectionLayer/DomPersistence.cs index fac3e7fd4e..662b3b665c 100644 --- a/src/Main/Base/Project/Src/Dom/ReflectionLayer/DomPersistence.cs +++ b/src/Main/Base/Project/Src/Dom/ReflectionLayer/DomPersistence.cs @@ -107,27 +107,29 @@ namespace ICSharpCode.SharpDevelop.Dom string indexFile = GetIndexFileName(); Dictionary list = new Dictionary(StringComparer.InvariantCultureIgnoreCase); if (File.Exists(indexFile)) { - using (FileStream fs = new FileStream(indexFile, FileMode.Open, FileAccess.Read)) { - using (BinaryReader reader = new BinaryReader(fs)) { - if (reader.ReadInt64() != IndexFileMagic) { - LoggingService.Warn("Index cache has wrong file magic"); - return list; - } - if (reader.ReadInt16() != FileVersion) { - LoggingService.Warn("Index cache has wrong file version"); - return list; - } - int count = reader.ReadInt32(); - for (int i = 0; i < count; i++) { - string key = reader.ReadString(); - list[key] = reader.ReadString(); + try { + using (FileStream fs = new FileStream(indexFile, FileMode.Open, FileAccess.Read)) { + using (BinaryReader reader = new BinaryReader(fs)) { + if (reader.ReadInt64() != IndexFileMagic) { + LoggingService.Warn("Index cache has wrong file magic"); + return list; + } + if (reader.ReadInt16() != FileVersion) { + LoggingService.Warn("Index cache has wrong file version"); + return list; + } + int count = reader.ReadInt32(); + for (int i = 0; i < count; i++) { + string key = reader.ReadString(); + list[key] = reader.ReadString(); + } } - return list; } + } catch (IOException ex) { + LoggingService.Warn("Error reading DomPersistance cache index", ex); } - } else { - return list; } + return list; } static void SaveCacheIndex(Dictionary cacheIndex) diff --git a/src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs b/src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs index 20e4b33553..e4003109bd 100644 --- a/src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs +++ b/src/Main/Base/Project/Src/Services/Debugger/DebuggerService.cs @@ -311,8 +311,8 @@ namespace ICSharpCode.Core return; string textContent = doc.TextContent; ExpressionResult expressionResult = expressionFinder.FindFullExpression(textContent, seg.Offset + logicPos.X); - string expression = expressionResult.Expression; - if (expression != null && expression.Length > 0) { + string expression = (expressionResult.Expression ?? "").Trim(); + if (expression.Length > 0) { // Look if it is variable ResolveResult result = ParserService.Resolve(expressionResult, logicPos.Y + 1, logicPos.X + 1, textArea.MotherTextEditorControl.FileName, textContent); bool debuggerCanShowValue; @@ -446,6 +446,7 @@ namespace ICSharpCode.Core text.Append(member.ToString()); } if (tryDisplayValue && currentDebugger != null) { + LoggingService.Info("asking debugger for value of '" + expression + "'"); string currentValue = currentDebugger.GetValueAsString(expression); if (currentValue != null) { debuggerCanShowValue = true; diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs b/src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs index 38a43ddff6..3b8b0c7ce0 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs @@ -348,7 +348,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring public virtual MethodDeclaration CreateOnEventMethod(IEvent e) { TypeReference type; - if (e.ReturnType.TypeArguments != null && e.ReturnType.Name == "EventHandler") { + if (e.ReturnType == null) { + type = new TypeReference("?"); + } else if (e.ReturnType.TypeArguments != null && e.ReturnType.Name == "EventHandler") { type = ConvertType(e.ReturnType.TypeArguments[0], new ClassFinder(e)); } else { type = ConvertType(e.ReturnType, new ClassFinder(e));