Browse Source

Fixed SD2-813: If statement not parsed

Fixed other small bugs.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1417 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
58dfc5abce
  1. 10
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  2. 7
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  3. 18
      src/AddIns/BackendBindings/Boo/BooBinding/Test/ResolverTests.cs
  4. 2070
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs
  5. 6
      src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG
  6. 8
      src/Libraries/NRefactory/Test/Parser/Expressions/BinaryOperatorExpressionTests.cs
  7. 2
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  8. 6
      src/Main/Base/Project/Src/Dom/Implementations/AnonymousMethodReturnType.cs
  9. 2
      src/Main/Base/Project/Src/Project/Converter/PrjxToSolutionProject.cs
  10. 9
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  11. 4
      src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs
  12. 13
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

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

@ -103,6 +103,14 @@ namespace Grunwald.BooBinding.CodeCompletion
callingMember = ResolveCurrentMember(olderClass); callingMember = ResolveCurrentMember(olderClass);
} }
} }
if (callingMember != null) {
if (caretLine > callingMember.BodyRegion.EndLine) {
this.caretLine = callingMember.BodyRegion.EndLine;
this.caretColumn = callingMember.BodyRegion.EndColumn - 1;
} else if (caretLine == callingMember.BodyRegion.EndLine && caretColumn >= callingMember.BodyRegion.EndColumn) {
this.caretColumn = callingMember.BodyRegion.EndColumn - 1;
}
}
return true; return true;
} }
@ -197,7 +205,7 @@ namespace Grunwald.BooBinding.CodeCompletion
return new NamespaceResolveResult(callingClass, callingMember, ""); return new NamespaceResolveResult(callingClass, callingMember, "");
} }
ResolveResult rr = NRResolver.GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, caretLine, caretColumn, expressionResult.Expression); ResolveResult rr = NRResolver.GetResultFromDeclarationLine(callingClass, callingMember as IMethodOrProperty, this.caretLine, this.caretColumn, expressionResult.Expression);
if (rr != null) return rr; if (rr != null) return rr;
AST.Expression expr; AST.Expression expr;

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

@ -84,6 +84,13 @@ namespace Grunwald.BooBinding.CodeCompletion
void MakeMethodResult(IReturnType type, string methodName) void MakeMethodResult(IReturnType type, string methodName)
{ {
resolveResult = new MethodResolveResult(callingClass, resolver.CallingMember, type, methodName); resolveResult = new MethodResolveResult(callingClass, resolver.CallingMember, type, methodName);
IMethod m = (resolveResult as MethodResolveResult).GetMethodIfSingleOverload();
if (m != null) {
AnonymousMethodReturnType amrt = new AnonymousMethodReturnType(cu);
amrt.MethodReturnType = m.ReturnType;
amrt.MethodParameters = m.Parameters;
resolveResult.ResolvedType = amrt;
}
} }
void MakeNamespaceResult(string namespaceName) void MakeNamespaceResult(string namespaceName)

18
src/AddIns/BackendBindings/Boo/BooBinding/Test/ResolverTests.cs

@ -6,6 +6,7 @@
*/ */
using System; using System;
using System.Collections;
using System.Reflection; using System.Reflection;
using NUnit.Framework; using NUnit.Framework;
using ICSharpCode.Core; using ICSharpCode.Core;
@ -217,8 +218,25 @@ namespace Grunwald.BooBinding.Tests
"\t\tif boo640b = boo640a as FieldInfo: /*640*/\n" + "\t\tif boo640b = boo640a as FieldInfo: /*640*/\n" +
"\t\t\tprint boo640b\n" + "\t\t\tprint boo640b\n" +
"\t\n" + "\t\n" +
"\tprint 'end of method'\n" +
"\t/*1*/\n"; "\t/*1*/\n";
[Test]
public void MyMethodCompletion()
{
MethodResolveResult rr = Resolve<MethodResolveResult>(regressionProg, "MyMethod", "/*1*/");
ArrayList arr = rr.GetCompletionData(lastPC);
Assert.IsNotNull(arr);
bool beginInvoke = false;
bool invoke = false;
foreach (IMember m in arr) {
if (m.Name == "BeginInvoke") beginInvoke = true;
if (m.Name == "Invoke") invoke = true;
}
Assert.IsTrue(beginInvoke, "beginInvoke");
Assert.IsTrue(invoke, "invoke");
}
[Test] [Test]
public void Boo629VariableScope() public void Boo629VariableScope()
{ {

2070
src/Libraries/NRefactory/Project/Src/Parser/CSharp/Parser.cs

File diff suppressed because it is too large Load Diff

6
src/Libraries/NRefactory/Project/Src/Parser/CSharp/cs.ATG

@ -335,7 +335,11 @@ bool SkipGeneric(ref Token pt)
--braces; --braces;
} else if (pt.kind == Tokens.LessThan) { } else if (pt.kind == Tokens.LessThan) {
++braces; ++braces;
} else if (pt.kind == Tokens.Semicolon || pt.kind == Tokens.OpenCurlyBrace || pt.kind == Tokens.CloseCurlyBrace || pt.kind == Tokens.EOF) { } else if (pt.kind != Tokens.Identifier && pt.kind != Tokens.Comma
&& pt.kind != Tokens.OpenSquareBracket && pt.kind != Tokens.CloseSquareBracket
&& pt.kind != Tokens.Question
&& !Tokens.TypeKW[pt.kind])
{
return false; return false;
} }
} }

8
src/Libraries/NRefactory/Test/Parser/Expressions/BinaryOperatorExpressionTests.cs

@ -235,6 +235,14 @@ namespace ICSharpCode.NRefactory.Tests.AST
{ {
CSharpTestBinaryOperatorExpressionTest("a ?? b", BinaryOperatorType.NullCoalescing); CSharpTestBinaryOperatorExpressionTest("a ?? b", BinaryOperatorType.NullCoalescing);
} }
[Test]
public void CSharpLessThanOrGreaterTest()
{
const string expr = "i1 < 0 || i1 > (Count - 1)";
BinaryOperatorExpression boe = ParseUtilCSharp.ParseExpression<BinaryOperatorExpression>(expr);
Assert.AreEqual(BinaryOperatorType.LogicalOr, boe.Op);
}
#endregion #endregion
#region VB.NET #region VB.NET

2
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -159,7 +159,7 @@ namespace ICSharpCode.SharpDevelop.Commands
{ {
public static void SaveAll() public static void SaveAll()
{ {
foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) { foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection.ToArray()) {
if (content.IsViewOnly) { if (content.IsViewOnly) {
continue; continue;
} }

6
src/Main/Base/Project/Src/Dom/Implementations/AnonymousMethodReturnType.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public sealed class AnonymousMethodReturnType : ProxyReturnType public sealed class AnonymousMethodReturnType : ProxyReturnType
{ {
IReturnType returnType; IReturnType returnType;
List<IParameter> parameters = new List<IParameter>(); IList<IParameter> parameters = new List<IParameter>();
ICompilationUnit cu; ICompilationUnit cu;
public AnonymousMethodReturnType(ICompilationUnit cu) public AnonymousMethodReturnType(ICompilationUnit cu)
@ -45,6 +45,10 @@ namespace ICSharpCode.SharpDevelop.Dom
get { get {
return parameters; return parameters;
} }
set {
if (value == null) throw new ArgumentNullException("value");
parameters = value;
}
} }
public override bool IsDefaultReturnType { public override bool IsDefaultReturnType {

2
src/Main/Base/Project/Src/Project/Converter/PrjxToSolutionProject.cs

@ -167,7 +167,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
public string Negate(string booleanString) public string Negate(string booleanString)
{ {
return (!bool.Parse(booleanString)).ToString(); return "false".Equals(booleanString, StringComparison.OrdinalIgnoreCase).ToString();
} }
public string GetFileName(string fileName) public string GetFileName(string fileName)

9
src/Main/Base/Project/Src/Project/Solution/Solution.cs

@ -213,10 +213,15 @@ namespace ICSharpCode.SharpDevelop.Project
return null; return null;
} }
public void Save() public void Save()
{ {
Save(fileName); try {
Save(fileName);
} catch (IOException ex) {
MessageService.ShowError("Could not save " + fileName + ":\n" + ex.Message);
} catch (UnauthorizedAccessException ex) {
MessageService.ShowError("Could not save " + fileName + ":\n" + ex.Message + "\n\nEnsure the file is writable.");
}
} }
public SolutionFolder CreateFolder(string folderName) public SolutionFolder CreateFolder(string folderName)

4
src/Main/Base/Project/Src/Services/LanguageBinding/LanguageBindingService.cs

@ -95,6 +95,10 @@ namespace ICSharpCode.Core
MessageService.ShowError("Error loading " + location + ":\n" + ex.Message); MessageService.ShowError("Error loading " + location + ":\n" + ex.Message);
newProject = new UnknownProject(location, title); newProject = new UnknownProject(location, title);
newProject.TypeGuid = projectTypeGuid; newProject.TypeGuid = projectTypeGuid;
} catch (UnauthorizedAccessException ex) {
MessageService.ShowError("Error loading " + location + ":\n" + ex.Message);
newProject = new UnknownProject(location, title);
newProject.TypeGuid = projectTypeGuid;
} }
} else { } else {
newProject = new UnknownProject(location, title); newProject = new UnknownProject(location, title);

13
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -287,12 +287,7 @@ namespace ICSharpCode.SharpDevelop.Project
ILanguageBinding binding = LanguageBindingService.GetBindingPerProjectFile(fileName); ILanguageBinding binding = LanguageBindingService.GetBindingPerProjectFile(fileName);
IProject project; IProject project;
if (binding != null) { if (binding != null) {
try { project = LanguageBindingService.LoadProject(fileName, solution.Name);
project = LanguageBindingService.LoadProject(fileName, solution.Name);
} catch (UnauthorizedAccessException ex) {
MessageService.ShowError(ex.Message);
return;
}
} else { } else {
MessageService.ShowError(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.InvalidProjectOrCombine}", new string[,] {{"FileName", fileName}})); MessageService.ShowError(StringParser.Parse("${res:ICSharpCode.SharpDevelop.Commands.OpenCombine.InvalidProjectOrCombine}", new string[,] {{"FileName", fileName}}));
return; return;
@ -311,9 +306,11 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
solution.FixSolutionConfiguration(new IProject[] { project }); solution.FixSolutionConfiguration(new IProject[] { project });
solution.Save(solutionFile);
LoadSolution(solutionFile); if (FileUtility.ObservedSave((NamedFileOperationDelegate)solution.Save, solutionFile) == FileOperationResult.OK) {
// only load when saved succesfully
LoadSolution(solutionFile);
}
} }
public static void SaveSolution() public static void SaveSolution()

Loading…
Cancel
Save