提交 b6f7d7b4 编写于 作者: B Balaji Soundrarajan

Codemodel should return only Namespace when asked for CodeNamespace

Fix #1923 AbstractCodeType should return only a namespace when asked for
a CodeNamespace but not a Type
上级 49e708bf
......@@ -39,6 +39,13 @@ private SyntaxNode GetNamespaceOrTypeNode()
.FirstOrDefault();
}
private SyntaxNode GetNamespaceNode()
{
return LookupNode().Ancestors()
.Where(n => CodeModelService.IsNamespace(n))
.FirstOrDefault();
}
internal INamedTypeSymbol LookupTypeSymbol()
{
return (INamedTypeSymbol)LookupSymbol();
......@@ -123,7 +130,7 @@ public EnvDTE.CodeNamespace Namespace
{
get
{
var namespaceNode = GetNamespaceOrTypeNode();
var namespaceNode = GetNamespaceNode();
return namespaceNode != null
? FileCodeModel.CreateCodeElement<EnvDTE.CodeNamespace>(namespaceNode)
......
......@@ -108,6 +108,10 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.CodeModel
Return Sub(name) codeElement.Name = name
End Function
Protected Overrides Function GetNamespace(codeElement As EnvDTE80.CodeClass2) As EnvDTE.CodeNamespace
Return codeElement.Namespace
End Function
Protected Overrides Function GetParent(codeElement As EnvDTE80.CodeClass2) As Object
Return codeElement.Parent
End Function
......
......@@ -151,6 +151,10 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.CodeModel
Protected MustOverride Function GetName(codeElement As TCodeElement) As String
Protected MustOverride Function GetNameSetter(codeElement As TCodeElement) As Action(Of String)
Protected Overridable Function GetNamespace(codeElement As TCodeElement) As EnvDTE.CodeNamespace
Throw New NotSupportedException
End Function
Protected Overridable Function GetAccess(codeElement As TCodeElement) As EnvDTE.vsCMAccess
Throw New NotSupportedException
End Function
......@@ -1064,6 +1068,18 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.CodeModel
End Using
End Sub
Protected Sub TestNamespaceName(Code As XElement, name As String)
Using state = CreateCodeModelTestState(GetWorkspaceDefinition(Code))
Dim codeElement = state.GetCodeElementAtCursor(Of TCodeElement)()
Assert.NotNull(codeElement)
Dim codeNamespaceElement = GetNamespace(codeElement)
Assert.NotNull(codeNamespaceElement)
Assert.Equal(name, codeNamespaceElement.Name)
End Using
End Sub
Protected Sub TestSetTypeProp(code As XElement, expectedCode As XElement, codeTypeRef As EnvDTE.CodeTypeRef)
TestSetTypeProp(code, expectedCode, codeTypeRef, NoThrow(Of EnvDTE.CodeTypeRef)())
End Sub
......
......@@ -2812,6 +2812,38 @@ End Class
End Sub
#End Region
#Region "NameSpace Tests"
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
Public Sub GetNamespaceNameFromInnerClass()
Dim code =
<Code>
Namespace NS1
Class C1
Class $$C2
End Class
End Class
End NameSpace
</Code>
TestNamespaceName(code, "NS1")
End Sub
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
Public Sub GetNamespaceNameFromOuterClass()
Dim code =
<Code>
Namespace NS1
Class $$C1
Class C2
End Class
End Class
End NameSpace
</Code>
TestNamespaceName(code, "NS1")
End Sub
#End Region
#Region "GenericExtender"
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册