diff --git a/ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs b/ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs index 5d642348f..a60defe7b 100644 --- a/ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs +++ b/ICSharpCode.CodeConverter/CSharp/NodesVisitor.cs @@ -1467,10 +1467,18 @@ public override CSharpSyntaxNode VisitQualifiedName(VBSyntax.QualifiedNameSyntax var lhsSyntax = (NameSyntax)node.Left.Accept(TriviaConvertingVisitor); var rhsSyntax = (SimpleNameSyntax)node.Right.Accept(TriviaConvertingVisitor); - var qualifiedName = node.Parent.IsKind(VBasic.SyntaxKind.NamespaceStatement) - ? lhsSyntax - : QualifyNode(node.Left, lhsSyntax); - return node.Left.IsKind(VBasic.SyntaxKind.GlobalName) + var partOfNamespaceDeclaration = node.Parent.IsKind(VBasic.SyntaxKind.NamespaceStatement); + var leftIsGlobal = node.Left.IsKind(VBasic.SyntaxKind.GlobalName); + + ExpressionSyntax qualifiedName; + if (partOfNamespaceDeclaration) { + if (leftIsGlobal) return rhsSyntax; + qualifiedName = lhsSyntax; + } else { + qualifiedName = QualifyNode(node.Left, lhsSyntax); + } + + return leftIsGlobal ? (CSharpSyntaxNode)SyntaxFactory.AliasQualifiedName((IdentifierNameSyntax)lhsSyntax, rhsSyntax) : SyntaxFactory.QualifiedName((NameSyntax) qualifiedName, rhsSyntax); } diff --git a/Tests/CSharp/NamespaceLevelTests.cs b/Tests/CSharp/NamespaceLevelTests.cs index b77f9a3af..10fdee3ac 100644 --- a/Tests/CSharp/NamespaceLevelTests.cs +++ b/Tests/CSharp/NamespaceLevelTests.cs @@ -13,6 +13,20 @@ public void TestNamespace() using System.Linq; using Microsoft.VisualBasic; +namespace Test +{ +}"); + } + + [Fact] + public void TestGlobalNamespace() + { + TestConversionVisualBasicToCSharp(@"Namespace Global.Test +End Namespace", @"using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.VisualBasic; + namespace Test { }");