Browse Source

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
shortcuts
Daniel Grunwald 20 years ago
parent
commit
a2323c417a
  1. 22
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  2. 2
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  3. 10
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  4. 8
      src/Main/Base/Project/Src/Project/MSBuildEngine.cs

22
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs

@ -26,7 +26,7 @@ namespace Grunwald.BooBinding.CodeCompletion
int caretLine; int caretLine;
int caretColumn; int caretColumn;
IClass callingClass; IClass callingClass;
IMember callingMember; IMethodOrProperty callingMember;
public IClass CallingClass { public IClass CallingClass {
get { get {
@ -34,7 +34,7 @@ namespace Grunwald.BooBinding.CodeCompletion
} }
} }
public IMember CallingMember { public IMethodOrProperty CallingMember {
get { get {
return callingMember; return callingMember;
} }
@ -107,28 +107,32 @@ namespace Grunwald.BooBinding.CodeCompletion
return callingClass; return callingClass;
} }
IMember ResolveCurrentMember(IClass callingClass) IMethodOrProperty ResolveCurrentMember(IClass callingClass)
{ {
//LoggingService.DebugFormatted("Getting current method... caretLine = {0}, caretColumn = {1}", caretLine, caretColumn); //LoggingService.DebugFormatted("Getting current method... caretLine = {0}, caretColumn = {1}", caretLine, caretColumn);
if (callingClass == null) return null; if (callingClass == null) return null;
IMember best = null; IMethodOrProperty best = null;
int line = 0; int line = 0;
foreach (IMember m in callingClass.Methods) { foreach (IMethod m in callingClass.Methods) {
if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) { if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) {
line = m.Region.BeginLine; line = m.Region.BeginLine;
best = m; best = m;
} }
} }
foreach (IMember m in callingClass.Properties) { foreach (IProperty m in callingClass.Properties) {
if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) { if (m.Region.BeginLine <= caretLine && m.Region.BeginLine > line) {
line = m.Region.BeginLine; line = m.Region.BeginLine;
best = m; best = m;
} }
} }
if (callingClass.Region.IsEmpty) { if (callingClass.Region.IsEmpty) {
foreach (IMember m in callingClass.Methods) { // maybe we are in Main method?
if (best == null || best.Region.EndLine < caretLine) foreach (IMethod m in callingClass.Methods) {
return m; if (m.Region.IsEmpty && !m.IsSynthetic) {
// the main method
if (best == null || best.BodyRegion.EndLine < caretLine)
return m;
}
} }
} }
return best; return best;

2
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs

@ -152,7 +152,7 @@ namespace Grunwald.BooBinding.CodeCompletion
return true; return true;
} }
IMethodOrProperty method = resolver.CallingMember as IMethodOrProperty; IMethodOrProperty method = resolver.CallingMember;
if (method != null) { if (method != null) {
foreach (IParameter p in method.Parameters) { foreach (IParameter p in method.Parameters) {
if (IsSameName(p.Name, identifier)) { if (IsSameName(p.Name, identifier)) {

10
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -474,8 +474,14 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
int endLine = bodyRegion.EndLine; int endLine = bodyRegion.EndLine;
// Fix for SD2-511 (Code completion in inserted line) // Fix for SD2-511 (Code completion in inserted line)
if (caretLine > startLine && caretLine < endLine) if (language == SupportedLanguage.CSharp) {
endLine = caretLine; // 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; int offset = 0;
for (int i = 0; i < startLine - 1; ++i) { // -1 because the startLine must be included for (int i = 0; i < startLine - 1; ++i) { // -1 because the startLine must be included

8
src/Main/Base/Project/Src/Project/MSBuildEngine.cs

@ -198,8 +198,12 @@ namespace ICSharpCode.SharpDevelop.Project
engine.RegisterLogger(logger); engine.RegisterLogger(logger);
Microsoft.Build.BuildEngine.Project project = engine.CreateNewProject(); Microsoft.Build.BuildEngine.Project project = engine.CreateNewProject();
project.Load(buildFile); try {
engine.BuildProject(project, targets); 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"); LoggingService.Debug("MSBuild finished");
MSBuildEngine.isRunning = false; MSBuildEngine.isRunning = false;

Loading…
Cancel
Save