提交 77b6ad38 编写于 作者: B Balaji Soundrarajan

Declare Function Sub is vsCMElementDeclareDecl kind

Fix #2355 VB Declare Function and Declare Sub should be of kind
vsCMElementDeclareDecl
上级 38775c26
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using EnvDTE;
using Microsoft.VisualStudio.LanguageServices.Implementation.Interop;
using Microsoft.VisualStudio.TextManager.Interop;
namespace Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.InternalElements
{
public sealed class CodeFunctionDeclareDecl : CodeFunction
{
internal static new EnvDTE.CodeFunction Create(
CodeModelState state,
FileCodeModel fileCodeModel,
SyntaxNodeKey nodeKey,
int? nodeKind)
{
var element = new CodeFunctionDeclareDecl(state, fileCodeModel, nodeKey, nodeKind);
var result = (EnvDTE.CodeFunction)ComAggregate.CreateAggregatedObject(element);
fileCodeModel.OnElementCreated(nodeKey, (EnvDTE.CodeElement)result);
return result;
}
internal static new EnvDTE.CodeFunction CreateUnknown(
CodeModelState state,
FileCodeModel fileCodeModel,
int nodeKind,
string name)
{
var element = new CodeFunctionDeclareDecl(state, fileCodeModel, nodeKind, name);
return (EnvDTE.CodeFunction)ComAggregate.CreateAggregatedObject(element);
}
private CodeFunctionDeclareDecl(
CodeModelState state,
FileCodeModel fileCodeModel,
SyntaxNodeKey nodeKey,
int? nodeKind)
: base(state, fileCodeModel, nodeKey, nodeKind)
{
}
private CodeFunctionDeclareDecl(
CodeModelState state,
FileCodeModel fileCodeModel,
int nodeKind,
string name)
: base(state, fileCodeModel, nodeKind, name)
{
}
public override vsCMElement Kind
{
get { return vsCMElement.vsCMElementDeclareDecl; }
}
}
}
......@@ -241,6 +241,7 @@
<Compile Include="CodeModel\InternalElements\CodeEvent.cs" />
<Compile Include="CodeModel\InternalElements\CodeFunction.cs" />
<Compile Include="CodeModel\InternalElements\CodeFunction.IMethodXML.cs" />
<Compile Include="CodeModel\InternalElements\CodeFunctionDeclareDecl.cs" />
<Compile Include="CodeModel\InternalElements\CodeFunctionWithEventHandler.cs" />
<Compile Include="CodeModel\InternalElements\CodeImplementsStatement.cs" />
<Compile Include="CodeModel\InternalElements\CodeImport.cs" />
......@@ -309,4 +310,4 @@
<Import Project="..\..\..\..\build\VSL.Imports.Closed.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
</ImportGroup>
</Project>
</Project>
\ No newline at end of file
......@@ -141,8 +141,8 @@ Namespace Microsoft.VisualStudio.LanguageServices.UnitTests.CodeModel
{GetType(EnvDTE80.CodeElement2), {EnvDTE.vsCMElement.vsCMElementOptionStmt, EnvDTE.vsCMElement.vsCMElementInheritsStmt, EnvDTE.vsCMElement.vsCMElementImplementsStmt}},
{GetType(EnvDTE.CodeEnum), {EnvDTE.vsCMElement.vsCMElementEnum}},
{GetType(EnvDTE80.CodeEvent), {EnvDTE.vsCMElement.vsCMElementEvent}},
{GetType(EnvDTE.CodeFunction), {EnvDTE.vsCMElement.vsCMElementFunction}},
{GetType(EnvDTE80.CodeFunction2), {EnvDTE.vsCMElement.vsCMElementFunction}},
{GetType(EnvDTE.CodeFunction), {EnvDTE.vsCMElement.vsCMElementFunction, EnvDTE.vsCMElement.vsCMElementDeclareDecl}},
{GetType(EnvDTE80.CodeFunction2), {EnvDTE.vsCMElement.vsCMElementFunction, EnvDTE.vsCMElement.vsCMElementDeclareDecl}},
{GetType(EnvDTE80.CodeImport), {EnvDTE.vsCMElement.vsCMElementImportStmt}},
{GetType(EnvDTE.CodeInterface), {EnvDTE.vsCMElement.vsCMElementInterface}},
{GetType(EnvDTE80.CodeInterface2), {EnvDTE.vsCMElement.vsCMElementInterface}},
......
......@@ -930,6 +930,48 @@ End Class
#End Region
#Region "Kind tests"
<WorkItem(2355, "https://github.com/dotnet/roslyn/issues/2355")>
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
Public Sub DeclareSubKind()
Dim code =
<Code>
Public Class Class1
Public Declare Sub $$f1 Lib "MyLib.dll" ()
End Class
</Code>
TestKind(code, EnvDTE.vsCMElement.vsCMElementDeclareDecl)
End Sub
<WorkItem(2355, "https://github.com/dotnet/roslyn/issues/2355")>
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
Public Sub DeclareFunctionKind()
Dim code =
<Code>
Public Class Class1
Public Declare Function f2$$ Lib "MyLib.dll" () As Integer
End Class
</Code>
TestKind(code, EnvDTE.vsCMElement.vsCMElementDeclareDecl)
End Sub
<WorkItem(2355, "https://github.com/dotnet/roslyn/issues/2355")>
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
Public Sub SubKind()
Dim code =
<Code>
Public Class Class1
Public Sub F1$$()
End Sub
End Class
</Code>
TestKind(code, EnvDTE.vsCMElement.vsCMElementFunction)
End Sub
#End Region
#Region "OverrideKind tests"
<ConditionalFact(GetType(x86)), Trait(Traits.Feature, Traits.Features.CodeModel)>
......
......@@ -180,13 +180,17 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.CodeModel
SyntaxKind.SetAccessorBlock,
SyntaxKind.AddHandlerAccessorBlock,
SyntaxKind.RemoveHandlerAccessorBlock,
SyntaxKind.RaiseEventAccessorBlock,
SyntaxKind.DeclareFunctionStatement,
SyntaxKind.DeclareSubStatement
SyntaxKind.RaiseEventAccessorBlock
If scope = EnvDTE.vsCMElement.vsCMElementFunction Then
Return True
End If
Case SyntaxKind.DeclareFunctionStatement,
SyntaxKind.DeclareSubStatement
If scope = EnvDTE.vsCMElement.vsCMElementDeclareDecl Then
Return True
End If
Case SyntaxKind.EnumMemberDeclaration
If scope = EnvDTE.vsCMElement.vsCMElementVariable Then
Return True
......@@ -567,10 +571,11 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.CodeModel
SyntaxKind.OperatorBlock,
SyntaxKind.SubBlock,
SyntaxKind.SubStatement,
SyntaxKind.FunctionStatement,
SyntaxKind.DeclareFunctionStatement,
SyntaxKind.DeclareSubStatement
SyntaxKind.FunctionStatement
Return CType(CodeFunctionWithEventHandler.Create(state, fileCodeModel, nodeKey, node.Kind), EnvDTE.CodeElement)
Case SyntaxKind.DeclareFunctionStatement,
SyntaxKind.DeclareSubStatement
Return CType(CodeFunctionDeclareDecl.Create(state, fileCodeModel, nodeKey, node.Kind), EnvDTE.CodeElement)
Case SyntaxKind.PropertyBlock,
SyntaxKind.PropertyStatement
Return CType(CodeProperty.Create(state, fileCodeModel, nodeKey, node.Kind), EnvDTE.CodeElement)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册