From a2323c417af8886d3dd2c8501487b4998fc02a9e Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 31 Dec 2005 19:56:30 +0000 Subject: [PATCH] Fixed SD2-629: VBNetForeachLoopVariableTest. Fixed some Boo code completion bugs. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@958 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/CodeCompletion/BooResolver.cs | 22 +++++++++++-------- .../Src/CodeCompletion/ResolveVisitor.cs | 2 +- .../NRefactoryResolver/NRefactoryResolver.cs | 10 +++++++-- .../Base/Project/Src/Project/MSBuildEngine.cs | 8 +++++-- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs index b711869849..ac706d6028 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs @@ -26,7 +26,7 @@ namespace Grunwald.BooBinding.CodeCompletion int caretLine; int caretColumn; IClass callingClass; - IMember callingMember; + IMethodOrProperty callingMember; public IClass CallingClass { get { @@ -34,7 +34,7 @@ namespace Grunwald.BooBinding.CodeCompletion } } - public IMember CallingMember { + public IMethodOrProperty CallingMember { get { return callingMember; } @@ -107,28 +107,32 @@ namespace Grunwald.BooBinding.CodeCompletion return callingClass; } - IMember ResolveCurrentMember(IClass callingClass) + IMethodOrProperty ResolveCurrentMember(IClass callingClass) { //LoggingService.DebugFormatted("Getting current method... caretLine = {0}, caretColumn = {1}", caretLine, caretColumn); if (callingClass == null) return null; - IMember best = null; + IMethodOrProperty best = null; int line = 0; - foreach (IMember m in callingClass.Methods) { + foreach (IMethod m in callingClass.Methods) { if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) { line = m.Region.BeginLine; best = m; } } - foreach (IMember m in callingClass.Properties) { + foreach (IProperty m in callingClass.Properties) { if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) { line = m.Region.BeginLine; best = m; } } if (callingClass.Region.IsEmpty) { - foreach (IMember m in callingClass.Methods) { - if (best == null || best.Region.EndLine < caretLine) - return m; + // maybe we are in Main method? + foreach (IMethod m in callingClass.Methods) { + if (m.Region.IsEmpty && !m.IsSynthetic) { + // the main method + if (best == null || best.BodyRegion.EndLine < caretLine) + return m; + } } } return best; diff --git a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs index 69c59fa9a9..c9c224748c 100644 --- a/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs +++ b/src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs @@ -152,7 +152,7 @@ namespace Grunwald.BooBinding.CodeCompletion return true; } - IMethodOrProperty method = resolver.CallingMember as IMethodOrProperty; + IMethodOrProperty method = resolver.CallingMember; if (method != null) { foreach (IParameter p in method.Parameters) { if (IsSameName(p.Name, identifier)) { diff --git a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs index c20dae9e1f..05a614462c 100644 --- a/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs +++ b/src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs @@ -474,8 +474,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver int endLine = bodyRegion.EndLine; // Fix for SD2-511 (Code completion in inserted line) - if (caretLine > startLine && caretLine < endLine) - endLine = caretLine; + if (language == SupportedLanguage.CSharp) { + // Do not do this for VB: the parser does not correct create the + // ForEachStatement when the method in truncated in the middle + // VB does not have the "inserted line looks like variable declaration"-problem + // anyways. + if (caretLine > startLine && caretLine < endLine) + endLine = caretLine; + } int offset = 0; for (int i = 0; i < startLine - 1; ++i) { // -1 because the startLine must be included diff --git a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs index 40a876437c..aac29d092f 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildEngine.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildEngine.cs @@ -198,8 +198,12 @@ namespace ICSharpCode.SharpDevelop.Project engine.RegisterLogger(logger); Microsoft.Build.BuildEngine.Project project = engine.CreateNewProject(); - project.Load(buildFile); - engine.BuildProject(project, targets); + try { + project.Load(buildFile); + engine.BuildProject(project, targets); + } catch (InvalidProjectFileException ex) { + results.Errors.Add(new CompilerError(ex.ProjectFile, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message)); + } LoggingService.Debug("MSBuild finished"); MSBuildEngine.isRunning = false;