Browse Source

Fixed namespace handling in Boo code completion.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3831 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 17 years ago
parent
commit
30c368da42
  1. 5
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  2. 16
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs
  3. 6
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  4. 20
      src/AddIns/BackendBindings/Boo/BooBinding/Test/ResolverTests.cs
  5. 7
      src/Libraries/NRefactory/Project/Src/Lexer/Special/PreProcessingDirective.cs

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

@ -221,7 +221,8 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -221,7 +221,8 @@ namespace Grunwald.BooBinding.CodeCompletion
if (mie != null)
expr = mie.Target;
string name = expr.ToCodeString();
IReturnType rt = pc.SearchType(new SearchTypeRequest(name, 0, callingClass, cu, caretLine, caretColumn)).Result;
SearchTypeResult searchTypeResult = pc.SearchType(new SearchTypeRequest(name, 0, callingClass, cu, caretLine, caretColumn));
IReturnType rt = searchTypeResult.Result;
if (rt != null && rt.GetUnderlyingClass() != null)
return new TypeResolveResult(callingClass, callingMember, rt);
rt = pc.SearchType(new SearchTypeRequest(name + "Attribute", 0, callingClass, cu, caretLine, caretColumn)).Result;
@ -232,7 +233,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -232,7 +233,7 @@ namespace Grunwald.BooBinding.CodeCompletion
if (c != null)
return new TypeResolveResult(callingClass, callingMember, c);
}
string namespaceName = pc.SearchNamespace(name, callingClass, cu, caretLine, caretColumn);
string namespaceName = searchTypeResult.NamespaceResult;
if (namespaceName != null) {
return new NamespaceResolveResult(callingClass, callingMember, namespaceName);
}

16
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ConvertVisitor.cs

@ -506,9 +506,23 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -506,9 +506,23 @@ namespace Grunwald.BooBinding.CodeCompletion
property.UserData = node;
}
string PrependCurrentNamespace(string name)
{
if (string.IsNullOrEmpty(_cu.UsingScope.NamespaceName))
return name;
else
return _cu.UsingScope.NamespaceName + "." + name;
}
public override void OnNamespaceDeclaration(Boo.Lang.Compiler.Ast.NamespaceDeclaration node)
{
_cu.UsingScope = new DefaultUsingScope { NamespaceName = node.Name };
string[] namespaceName = node.Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string namePart in namespaceName) {
_cu.UsingScope = new DefaultUsingScope {
NamespaceName = PrependCurrentNamespace(namePart),
Parent = _cu.UsingScope
};
}
base.OnNamespaceDeclaration(node);
}
}

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

@ -192,9 +192,9 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -192,9 +192,9 @@ namespace Grunwald.BooBinding.CodeCompletion
}
}
string namespaceName = projectContent.SearchNamespace(identifier, callingClass, cu, resolver.CaretLine, resolver.CaretColumn);
if (namespaceName != null && namespaceName.Length > 0) {
MakeNamespaceResult(namespaceName);
SearchTypeResult searchTypeResult = projectContent.SearchType(new SearchTypeRequest(identifier, 0, callingClass, cu, resolver.CaretLine, resolver.CaretColumn));
if (!string.IsNullOrEmpty(searchTypeResult.NamespaceResult)) {
MakeNamespaceResult(searchTypeResult.NamespaceResult);
return true;
}

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

@ -450,5 +450,25 @@ namespace Grunwald.BooBinding.Tests @@ -450,5 +450,25 @@ namespace Grunwald.BooBinding.Tests
CtrlSpace(prog, "x", "bar", "i");
}
#endregion
[Test]
public void SystemNamespaceInFileWithNamespace()
{
string prog =
"namespace Test\n" +
"/*mark*/";
NamespaceResolveResult nrr = Resolve<NamespaceResolveResult>(prog, "System", "/*mark*/");
Assert.AreEqual("System", nrr.Name);
}
[Test]
public void ClassInParentNamespace()
{
string prog =
"namespace System.Collections.CustomSubNamespace\n" +
"/*mark*/";
TypeResolveResult trr = Resolve<TypeResolveResult>(prog, "ICollection", "/*mark*/");
Assert.AreEqual("System.Collections.ICollection", trr.ResolvedClass.FullyQualifiedName);
}
}
}

7
src/Libraries/NRefactory/Project/Src/Lexer/Special/PreProcessingDirective.cs

@ -39,6 +39,13 @@ namespace ICSharpCode.NRefactory @@ -39,6 +39,13 @@ namespace ICSharpCode.NRefactory
cmd = "#if";
if (arg.ToLowerInvariant().EndsWith(" then"))
arg = arg.Substring(0, arg.Length - 5);
} else if (cmd.Equals("#Else", StringComparison.InvariantCultureIgnoreCase)) {
if (dir.Expression != null)
cmd = "#elif";
else
cmd = "#else";
} else if (cmd.Equals("#ElseIf", StringComparison.InvariantCultureIgnoreCase)) {
cmd = "#elif";
}
return new PreprocessingDirective(cmd, arg, dir.StartPosition, dir.EndPosition) {
Expression = dir.Expression

Loading…
Cancel
Save