Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
b1c50848
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b1c50848
编写于
5月 09, 2019
作者:
G
Gen Lu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix commit of import completion
上级
abad5e19
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
90 addition
and
37 deletion
+90
-37
src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/CompletionSource.cs
...entation/IntelliSense/AsyncCompletion/CompletionSource.cs
+38
-37
src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb
...Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb
+52
-0
未找到文件。
src/EditorFeatures/Core/Implementation/IntelliSense/AsyncCompletion/CompletionSource.cs
浏览文件 @
b1c50848
...
...
@@ -49,8 +49,8 @@ internal class CompletionSource : ForegroundThreadAffinitizedObject, IAsyncCompl
private
static
readonly
EditorOptionKey
<
bool
>
NonBlockingCompletionEditorOption
=
new
EditorOptionKey
<
bool
>(
NonBlockingCompletion
);
// Use CWT to cache data needed to create VSCompletionItem, so the table would be cleared when Roslyn completion item cache is cleared.
private
static
readonly
ConditionalWeakTable
<
RoslynCompletionItem
,
VSCompletionItemData
>
s_roslynItemToVsItemData
=
new
ConditionalWeakTable
<
RoslynCompletionItem
,
VSCompletionItemData
>();
private
static
readonly
ConditionalWeakTable
<
RoslynCompletionItem
,
StrongBox
<
VSCompletionItemData
>
>
s_roslynItemToVsItemData
=
new
ConditionalWeakTable
<
RoslynCompletionItem
,
StrongBox
<
VSCompletionItemData
>
>();
// Cache all the VS completion filters which essentially make them singletons.
// Because all items that should be filtered using the same filter button must
...
...
@@ -348,55 +348,56 @@ public VSCompletionItemData(string displayText, ImageElement icon, ImmutableArra
Document
document
,
RoslynCompletionItem
roslynItem
)
{
if
(
roslynItem
.
IsCached
&&
s_roslynItemToVsItemData
.
TryGetValue
(
roslynItem
,
out
var
itemData
))
VSCompletionItemData
itemData
;
if
(
roslynItem
.
IsCached
&&
s_roslynItemToVsItemData
.
TryGetValue
(
roslynItem
,
out
var
boxedItemData
))
{
return
new
VSCompletionItem
(
displayText
:
itemData
.
DisplayText
,
source
:
this
,
icon
:
itemData
.
Icon
,
filters
:
itemData
.
Filters
,
suffix
:
roslynItem
.
InlineDescription
,
// InlineDescription will be right-aligned in the selection popup
insertText
:
itemData
.
InsertionText
,
sortText
:
roslynItem
.
SortText
,
filterText
:
roslynItem
.
FilterText
,
attributeIcons
:
itemData
.
AttributeIcons
);
itemData
=
boxedItemData
.
Value
;
}
else
{
var
imageId
=
roslynItem
.
Tags
.
GetFirstGlyph
().
GetImageId
();
var
filters
=
GetFilters
(
roslynItem
);
var
imageId
=
roslynItem
.
Tags
.
GetFirstGlyph
().
GetImageId
();
var
filters
=
GetFilters
(
roslynItem
);
// roslynItem generated by providers can contain an insertionText in a property bag.
// We will not use it but other providers may need it.
// We actually will calculate the insertion text once again when called TryCommit.
if
(!
roslynItem
.
Properties
.
TryGetValue
(
InsertionText
,
out
var
insertionText
))
{
insertionText
=
roslynItem
.
DisplayText
;
}
// roslynItem generated by providers can contain an insertionText in a property bag.
// We will not use it but other providers may need it.
// We actually will calculate the insertion text once again when called TryCommit.
if
(!
roslynItem
.
Properties
.
TryGetValue
(
InsertionText
,
out
var
insertionText
))
{
insertionText
=
roslynItem
.
DisplayText
;
}
var
supportedPlatforms
=
SymbolCompletionItem
.
GetSupportedPlatforms
(
roslynItem
,
document
.
Project
.
Solution
.
Workspace
);
var
attributeImages
=
supportedPlatforms
!=
null
?
s_WarningImageAttributeImagesArray
:
ImmutableArray
<
ImageElement
>.
Empty
;
var
supportedPlatforms
=
SymbolCompletionItem
.
GetSupportedPlatforms
(
roslynItem
,
document
.
Project
.
Solution
.
Workspace
);
var
attributeImages
=
supportedPlatforms
!=
null
?
s_WarningImageAttributeImagesArray
:
ImmutableArray
<
ImageElement
>.
Empty
;
itemData
=
new
VSCompletionItemData
(
displayText
:
roslynItem
.
GetEntireDisplayText
(),
icon
:
new
ImageElement
(
new
ImageId
(
imageId
.
Guid
,
imageId
.
Id
),
roslynItem
.
DisplayText
),
filters
:
filters
,
attributeIcons
:
attributeImages
,
insertionText
:
insertionText
);
// It doesn't make sense to cache VS item data for those Roslyn items created from scratch for each session,
// since CWT uses object identity for comparison.
if
(
roslynItem
.
IsCached
)
{
s_roslynItemToVsItemData
.
Add
(
roslynItem
,
new
StrongBox
<
VSCompletionItemData
>(
itemData
));
}
}
var
item
=
new
VSCompletionItem
(
displayText
:
roslynItem
.
GetEntireDisplayText
()
,
displayText
:
itemData
.
DisplayText
,
source
:
this
,
icon
:
new
ImageElement
(
new
ImageId
(
imageId
.
Guid
,
imageId
.
Id
),
roslynItem
.
DisplayText
)
,
filters
:
f
ilters
,
icon
:
itemData
.
Icon
,
filters
:
itemData
.
F
ilters
,
suffix
:
roslynItem
.
InlineDescription
,
// InlineDescription will be right-aligned in the selection popup
insertText
:
insertionText
,
insertText
:
i
temData
.
I
nsertionText
,
sortText
:
roslynItem
.
SortText
,
filterText
:
roslynItem
.
FilterText
,
attributeIcons
:
attributeImage
s
);
attributeIcons
:
itemData
.
AttributeIcon
s
);
item
.
Properties
.
AddProperty
(
RoslynItem
,
roslynItem
);
// It doesn't make sense to cache VS item data for those Roslyn items created from scratch for each session,
// since CWT uses object identity for comparison.
if
(
roslynItem
.
IsCached
)
{
var
data
=
new
VSCompletionItemData
(
item
.
DisplayText
,
item
.
Icon
,
item
.
Filters
,
item
.
AttributeIcons
,
item
.
InsertText
);
s_roslynItemToVsItemData
.
Add
(
roslynItem
,
data
);
}
return
item
;
}
...
...
src/EditorFeatures/Test2/IntelliSense/CSharpCompletionCommandHandlerTests.vb
浏览文件 @
b1c50848
...
...
@@ -4900,6 +4900,58 @@ class C
End
Using
End
Function
<
WorkItem
(
35614
,
"https://github.com/dotnet/roslyn/issues/35614"
)
>
<
MemberData
(
NameOf
(
AllCompletionImplementations
))
>
<
WpfTheory
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
Completion
)
>
Public
Async
Function
TestTypeImportCompletion
(
completionImplementation
As
CompletionImplementation
)
As
Task
Using
state
=
TestStateFactory
.
CreateCSharpTestState
(
completionImplementation
,
<
Document
><
!
[
CDATA
[
namespace
NS1
{
class
C
{
public
void
Foo
()
{
Bar
$$
}
}
}
namespace
NS2
{
public
class
Bar
{
}
}
]]
></
Document
>
)
Dim
expectedText
=
"
using NS2;
namespace NS1
{
class C
{
public void Foo()
{
Bar
}
}
}
namespace NS2
{
public class Bar { }
}
"
state
.
Workspace
.
Options
=
state
.
Workspace
.
Options
.
WithChangedOption
(
CompletionOptions
.
ShowItemsFromUnimportedNamespaces
,
LanguageNames
.
CSharp
,
True
)
state
.
SendInvokeCompletionList
()
Await
state
.
AssertSelectedCompletionItem
(
displayText
:
=
"Bar"
,
isHardSelected
:
=
True
,
inlineDescription
:
=
"NS2"
)
state
.
SendTab
()
Assert
.
Equal
(
expectedText
,
state
.
GetDocumentText
())
End
Using
End
Function
Private
Class
MultipleChangeCompletionProvider
Inherits
CompletionProvider
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录