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
if (mie != null) if (mie != null)
expr = mie.Target; expr = mie.Target;
string name = expr.ToCodeString(); 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) if (rt != null && rt.GetUnderlyingClass() != null)
return new TypeResolveResult(callingClass, callingMember, rt); return new TypeResolveResult(callingClass, callingMember, rt);
rt = pc.SearchType(new SearchTypeRequest(name + "Attribute", 0, callingClass, cu, caretLine, caretColumn)).Result; rt = pc.SearchType(new SearchTypeRequest(name + "Attribute", 0, callingClass, cu, caretLine, caretColumn)).Result;
@ -232,7 +233,7 @@ namespace Grunwald.BooBinding.CodeCompletion
if (c != null) if (c != null)
return new TypeResolveResult(callingClass, callingMember, c); return new TypeResolveResult(callingClass, callingMember, c);
} }
string namespaceName = pc.SearchNamespace(name, callingClass, cu, caretLine, caretColumn); string namespaceName = searchTypeResult.NamespaceResult;
if (namespaceName != null) { if (namespaceName != null) {
return new NamespaceResolveResult(callingClass, callingMember, namespaceName); 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
property.UserData = node; 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) 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); base.OnNamespaceDeclaration(node);
} }
} }

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

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

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

@ -450,5 +450,25 @@ namespace Grunwald.BooBinding.Tests
CtrlSpace(prog, "x", "bar", "i"); CtrlSpace(prog, "x", "bar", "i");
} }
#endregion #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
cmd = "#if"; cmd = "#if";
if (arg.ToLowerInvariant().EndsWith(" then")) if (arg.ToLowerInvariant().EndsWith(" then"))
arg = arg.Substring(0, arg.Length - 5); 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) { return new PreprocessingDirective(cmd, arg, dir.StartPosition, dir.EndPosition) {
Expression = dir.Expression Expression = dir.Expression

Loading…
Cancel
Save