Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
5d719960
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,发现更多精彩内容 >>
未验证
提交
5d719960
编写于
9月 15, 2020
作者:
A
Allison Chou
提交者:
GitHub
9月 15, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #47657 from allisonchou/ChangeSignatureTargetTypedNew
Add change signature support for target-typed new
上级
66b8559c
23da0072
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
147 addition
and
32 deletion
+147
-32
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.OptionalParameter.SymbolKinds.cs
...nature/AddParameterTests.OptionalParameter.SymbolKinds.cs
+41
-0
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
...rFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
+2
-4
src/EditorFeatures/CSharpTest/ChangeSignature/ChangeSignature_Delegates.cs
...s/CSharpTest/ChangeSignature/ChangeSignature_Delegates.cs
+0
-1
src/EditorFeatures/CSharpTest/ChangeSignature/RemoveParametersTests.cs
...tures/CSharpTest/ChangeSignature/RemoveParametersTests.cs
+29
-0
src/EditorFeatures/CSharpTest/ChangeSignature/ReorderParametersTests.cs
...ures/CSharpTest/ChangeSignature/ReorderParametersTests.cs
+51
-0
src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs
.../Portable/ChangeSignature/CSharpChangeSignatureService.cs
+24
-27
未找到文件。
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.OptionalParameter.SymbolKinds.cs
浏览文件 @
5d719960
...
...
@@ -46,6 +46,47 @@ public B(int a, int x = 10, int y = 11, int z = 12)
}
}
class D : B
{
public D() : base(1, 100, z: 102) { }
}"
;
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
updatedSignature
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
[
WorkItem
(
44126
,
"https://github.com/dotnet/roslyn/issues/44126"
)]
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
AddOptionalParameter_ToConstructor_TargetTypedNew
()
{
var
markup
=
@"
class B
{
public B() : this(1) { }
public B$$(int a)
{
B q = new(1);
}
}
class D : B
{
public D() : base(1) { }
}"
;
var
updatedSignature
=
new
[]
{
new
AddedParameterOrExistingIndex
(
0
),
AddedParameterOrExistingIndex
.
CreateAdded
(
"System.Int32"
,
"x"
,
CallSiteKind
.
Value
,
callSiteValue
:
"100"
,
isRequired
:
false
,
defaultValue
:
"10"
),
AddedParameterOrExistingIndex
.
CreateAdded
(
"System.Int32"
,
"y"
,
CallSiteKind
.
Omitted
,
isRequired
:
false
,
defaultValue
:
"11"
),
AddedParameterOrExistingIndex
.
CreateAdded
(
"System.Int32"
,
"z"
,
CallSiteKind
.
Value
,
callSiteValue
:
"102"
,
isRequired
:
false
,
defaultValue
:
"12"
)};
var
updatedCode
=
@"
class B
{
public B() : this(1, 100, z: 102) { }
public B(int a, int x = 10, int y = 11, int z = 12)
{
B q = new(1, 100, z: 102);
}
}
class D : B
{
public D() : base(1, 100, z: 102) { }
...
...
src/EditorFeatures/CSharpTest/ChangeSignature/AddParameterTests.cs
浏览文件 @
5d719960
...
...
@@ -1237,7 +1237,7 @@ class C
public void M()
{
_ = new(1, 2
);
C _ = new(1, ""y""
);
}
}"
;
var
permutation
=
new
[]
{
...
...
@@ -1254,11 +1254,9 @@ class C
public void M()
{
_ = new(1, 2
);
C _ = new(""y"", 34, 1
);
}
}"
;
// Expect: _ = new(2, 34, 1);
// Tracked by https://github.com/dotnet/roslyn/issues/44126
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
permutation
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
}
...
...
src/EditorFeatures/CSharpTest/ChangeSignature/ChangeSignature_Delegates.cs
浏览文件 @
5d719960
...
...
@@ -7,7 +7,6 @@
using
Microsoft.CodeAnalysis.ChangeSignature
;
using
Microsoft.CodeAnalysis.CodeRefactorings
;
using
Microsoft.CodeAnalysis.Editor.UnitTests.ChangeSignature
;
using
Microsoft.CodeAnalysis.Editor.UnitTests.Workspaces
;
using
Microsoft.CodeAnalysis.Test.Utilities
;
using
Roslyn.Test.Utilities
;
using
Xunit
;
...
...
src/EditorFeatures/CSharpTest/ChangeSignature/RemoveParametersTests.cs
浏览文件 @
5d719960
...
...
@@ -377,5 +377,34 @@ class C
state
=
handler
.
GetCommandState
(
new
ReorderParametersCommandArgs
(
textView
,
textView
.
TextBuffer
));
Assert
.
True
(
state
.
IsUnspecified
);
}
[
WorkItem
(
44126
,
"https://github.com/dotnet/roslyn/issues/44126"
)]
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
RemoveParameters_TargetTypedNew
()
{
var
markup
=
@"
public class C
{
public $$C(int a, string b) { }
void M()
{
C c = new(1, ""b"");
}
}"
;
var
updatedSignature
=
new
[]
{
1
};
var
updatedCode
=
@"
public class C
{
public C(string b) { }
void M()
{
C c = new(""b"");
}
}"
;
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
updatedSignature
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
}
}
src/EditorFeatures/CSharpTest/ChangeSignature/ReorderParametersTests.cs
浏览文件 @
5d719960
...
...
@@ -202,6 +202,57 @@ public MyClass(string y, int x)
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
permutation
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
[
WorkItem
(
44126
,
"https://github.com/dotnet/roslyn/issues/44126"
)]
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
ReorderConstructorParametersAndArguments_TargetTypedNew
()
{
var
markup
=
@"
using System;
class MyClass2 : MyClass
{
public MyClass2() : base(5, ""test2"")
{
}
}
class MyClass
{
public MyClass() : this(2, ""test"")
{
}
public MyClass(int x, string y)
{
MyClass t = new$$(x, y);
}
}"
;
var
permutation
=
new
[]
{
1
,
0
};
var
updatedCode
=
@"
using System;
class MyClass2 : MyClass
{
public MyClass2() : base(""test2"", 5)
{
}
}
class MyClass
{
public MyClass() : this(""test"", 2)
{
}
public MyClass(string y, int x)
{
MyClass t = new(y, x);
}
}"
;
await
TestChangeSignatureViaCommandAsync
(
LanguageNames
.
CSharp
,
markup
,
updatedSignature
:
permutation
,
expectedUpdatedInvocationDocumentCode
:
updatedCode
);
}
[
WpfFact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
ChangeSignature
)]
public
async
Task
ReorderAttributeConstructorParametersAndArguments
()
{
...
...
src/Features/CSharp/Portable/ChangeSignature/CSharpChangeSignatureService.cs
浏览文件 @
5d719960
...
...
@@ -53,6 +53,7 @@ internal sealed class CSharpChangeSignatureService : AbstractChangeSignatureServ
SyntaxKind
.
ThisConstructorInitializer
,
SyntaxKind
.
BaseConstructorInitializer
,
SyntaxKind
.
ObjectCreationExpression
,
SyntaxKind
.
ImplicitObjectCreationExpression
,
SyntaxKind
.
Attribute
,
SyntaxKind
.
NameMemberCref
));
...
...
@@ -80,6 +81,7 @@ internal sealed class CSharpChangeSignatureService : AbstractChangeSignatureServ
SyntaxKind
.
ThisConstructorInitializer
,
SyntaxKind
.
BaseConstructorInitializer
,
SyntaxKind
.
ObjectCreationExpression
,
SyntaxKind
.
ImplicitObjectCreationExpression
,
SyntaxKind
.
Attribute
,
SyntaxKind
.
DelegateDeclaration
,
SyntaxKind
.
NameMemberCref
,
...
...
@@ -355,10 +357,26 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
return
parenLambda
.
WithParameterList
(
parenLambda
.
ParameterList
.
WithParameters
(
updatedParameters
));
}
// Handle references in crefs
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
NameMemberCref
,
out
NameMemberCrefSyntax
?
nameMemberCref
))
{
if
(
nameMemberCref
.
Parameters
==
null
||
!
nameMemberCref
.
Parameters
.
Parameters
.
Any
())
{
return
nameMemberCref
;
}
var
newParameters
=
UpdateDeclaration
(
nameMemberCref
.
Parameters
.
Parameters
,
signaturePermutation
,
CreateNewCrefParameterSyntax
);
var
newCrefParameterList
=
nameMemberCref
.
Parameters
.
WithParameters
(
newParameters
);
return
nameMemberCref
.
WithParameters
(
newCrefParameterList
);
}
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
// Update reference site argument lists
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
InvocationExpression
,
out
InvocationExpressionSyntax
?
invocation
))
{
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
InvocationExpressionSyntax
)
originalNode
,
cancellationToken
);
return
invocation
.
WithArgumentList
(
...
...
@@ -373,16 +391,16 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
cancellationToken
).
ConfigureAwait
(
false
));
}
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
ObjectCreationExpression
,
out
ObjectCreationExpressionSyntax
?
objCreation
))
// Handles both ObjectCreationExpressionSyntax and ImplicitObjectCreationExpressionSyntax
if
(
updatedNode
is
BaseObjectCreationExpressionSyntax
objCreation
)
{
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
ObjectCreationExpressionSyntax
)
originalNode
,
cancellationToken
);
if
(
objCreation
.
ArgumentList
==
null
)
{
return
updatedNode
;
}
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
BaseObjectCreationExpressionSyntax
)
originalNode
,
cancellationToken
);
return
objCreation
.
WithArgumentList
(
await
UpdateArgumentListAsync
(
declarationSymbol
,
...
...
@@ -398,7 +416,6 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
ThisConstructorInitializer
,
out
ConstructorInitializerSyntax
?
constructorInit
)
||
updatedNode
.
IsKind
(
SyntaxKind
.
BaseConstructorInitializer
,
out
constructorInit
))
{
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
ConstructorInitializerSyntax
)
originalNode
,
cancellationToken
);
return
constructorInit
.
WithArgumentList
(
...
...
@@ -415,7 +432,6 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
ElementAccessExpression
,
out
ElementAccessExpressionSyntax
?
elementAccess
))
{
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
ElementAccessExpressionSyntax
)
originalNode
,
cancellationToken
);
return
elementAccess
.
WithArgumentList
(
...
...
@@ -432,7 +448,6 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
Attribute
,
out
AttributeSyntax
?
attribute
))
{
var
semanticModel
=
await
document
.
GetRequiredSemanticModelAsync
(
cancellationToken
).
ConfigureAwait
(
false
);
var
symbolInfo
=
semanticModel
.
GetSymbolInfo
((
AttributeSyntax
)
originalNode
,
cancellationToken
);
if
(
attribute
.
ArgumentList
==
null
)
...
...
@@ -452,21 +467,6 @@ private static bool InSymbolHeader(SyntaxNode matchingNode, int position)
cancellationToken
).
ConfigureAwait
(
false
));
}
// Handle references in crefs
if
(
updatedNode
.
IsKind
(
SyntaxKind
.
NameMemberCref
,
out
NameMemberCrefSyntax
?
nameMemberCref
))
{
if
(
nameMemberCref
.
Parameters
==
null
||
!
nameMemberCref
.
Parameters
.
Parameters
.
Any
())
{
return
nameMemberCref
;
}
var
newParameters
=
UpdateDeclaration
(
nameMemberCref
.
Parameters
.
Parameters
,
signaturePermutation
,
CreateNewCrefParameterSyntax
);
var
newCrefParameterList
=
nameMemberCref
.
Parameters
.
WithParameters
(
newParameters
);
return
nameMemberCref
.
WithParameters
(
newCrefParameterList
);
}
Debug
.
Assert
(
false
,
"Unknown reference location"
);
return
null
;
}
...
...
@@ -572,13 +572,10 @@ private static bool IsParamsArrayExpanded(SemanticModel semanticModel, SyntaxNod
}
else
{
#pragma warning disable IDE0007 // Use implicit type - Using 'var' causes "error CS8506: No best type was found for the switch expression"
// TODO: File a bug on IDE0007 analyzer
BaseArgumentListSyntax
?
argumentList
=
node
switch
#pragma warning restore IDE0007 // Use implicit type
{
InvocationExpressionSyntax
invocation
=>
invocation
.
ArgumentList
,
ObjectCreationExpressionSyntax
objectCreation
=>
objectCreation
.
ArgumentList
,
Base
ObjectCreationExpressionSyntax
objectCreation
=>
objectCreation
.
ArgumentList
,
ConstructorInitializerSyntax
constructorInitializer
=>
constructorInitializer
.
ArgumentList
,
ElementAccessExpressionSyntax
elementAccess
=>
elementAccess
.
ArgumentList
,
_
=>
throw
ExceptionUtilities
.
UnexpectedValue
(
node
.
Kind
())
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录