Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
469ab8e2
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,发现更多精彩内容 >>
提交
469ab8e2
编写于
7月 19, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add VB tests.
上级
520fc35f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
155 addition
and
9 deletion
+155
-9
src/EditorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
...itorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
+97
-1
src/EditorFeatures/VisualBasicTest/AddParameter/AddParameterTests.vb
...eatures/VisualBasicTest/AddParameter/AddParameterTests.vb
+27
-0
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
...table/AddParameter/AbstractAddParameterCodeFixProvider.cs
+31
-8
未找到文件。
src/EditorFeatures/CSharpTest/AddParameter/AddParameterTests.cs
浏览文件 @
469ab8e2
...
...
@@ -460,7 +460,7 @@ private void Foo()
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestNullArg
()
public
async
Task
TestNullArg
1
()
{
await
TestInRegularAndScriptAsync
(
@"
...
...
@@ -488,6 +488,102 @@ void M()
{
new C(null, 1);
}
}"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestNullArg2
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(string s) { }
}
class D
{
void M()
{
new [|C|](null, 1);
}
}"
,
@"
class C
{
public C(string s, int v) { }
}
class D
{
void M()
{
new C(null, 1);
}
}"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestDefaultArg1
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(int i) { }
}
class D
{
void M()
{
new [|C|](default, 1);
}
}"
,
@"
class C
{
public C(int i, int v) { }
}
class D
{
void M()
{
new C(default, 1);
}
}"
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)]
public
async
Task
TestDefaultArg2
()
{
await
TestInRegularAndScriptAsync
(
@"
class C
{
public C(string s) { }
}
class D
{
void M()
{
new [|C|](default, 1);
}
}"
,
@"
class C
{
public C(string s, int v) { }
}
class D
{
void M()
{
new C(default, 1);
}
}"
);
}
}
...
...
src/EditorFeatures/VisualBasicTest/AddParameter/AddParameterTests.vb
浏览文件 @
469ab8e2
...
...
@@ -54,6 +54,33 @@ class D
end class"
)
End
Function
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)
>
Public
Async
Function
TestNothingArgument1
()
As
Task
Await
TestInRegularAndScriptAsync
(
"
class C
public sub new(i as integer)
end sub
end class
class D
sub M()
dim a = new C(nothing, [|1|])
end sub
end class"
,
"
class C
public sub new(i as integer, v As Integer)
end sub
end class
class D
sub M()
dim a = new C(nothing, 1)
end sub
end class"
)
End
Function
<
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsAddParameter
)
>
Public
Async
Function
TestNamedArg
()
As
Task
Await
TestInRegularAndScriptAsync
(
...
...
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
浏览文件 @
469ab8e2
...
...
@@ -442,13 +442,15 @@ private int NonParamsParameterCount(IMethodSymbol method)
// don't match, then this is the argument we should make the parameter for.
var
expressionOfArgumment
=
syntaxFacts
.
GetExpressionOfArgument
(
argument
);
var
argumentTypeInfo
=
semanticModel
.
GetTypeInfo
(
expressionOfArgumment
);
var
isNullLiteral
=
syntaxFacts
.
IsNullLiteralExpression
(
expressionOfArgumment
);
var
isDefaultLiteral
=
syntaxFacts
.
IsDefaultLiteralExpression
(
expressionOfArgumment
);
if
(
argumentTypeInfo
.
Type
==
null
&&
argumentTypeInfo
.
ConvertedType
==
null
)
{
// Didn't know the type of the argument. We shouldn't assume it doesn't
// match a parameter. However, if the user wrote 'null' and it didn't
// match anything, then this is the problem argument.
if
(!
syntaxFacts
.
IsNullLiteralExpression
(
expressionOfArgumment
)
&&
!
syntaxFacts
.
IsDefaultLiteralExpression
(
expressionOfArgumment
))
if
(!
isNullLiteral
&&
!
isDefaultLiteral
)
{
continue
;
}
...
...
@@ -456,9 +458,9 @@ private int NonParamsParameterCount(IMethodSymbol method)
var
parameter
=
method
.
Parameters
[
i
];
if
(!
TypeInfoMatchesType
(
argumentTypeInfo
,
parameter
.
Type
))
if
(!
TypeInfoMatchesType
(
argumentTypeInfo
,
parameter
.
Type
,
isNullLiteral
,
isDefaultLiteral
))
{
if
(
TypeInfoMatchesWithParamsExpansion
(
argumentTypeInfo
,
parameter
))
if
(
TypeInfoMatchesWithParamsExpansion
(
argumentTypeInfo
,
parameter
,
isNullLiteral
,
isDefaultLiteral
))
{
// The argument matched if we expanded out the params-parameter.
// As the params-parameter has to be last, there's nothing else to
...
...
@@ -474,11 +476,13 @@ private int NonParamsParameterCount(IMethodSymbol method)
return
null
;
}
private
bool
TypeInfoMatchesWithParamsExpansion
(
TypeInfo
argumentTypeInfo
,
IParameterSymbol
parameter
)
private
bool
TypeInfoMatchesWithParamsExpansion
(
TypeInfo
argumentTypeInfo
,
IParameterSymbol
parameter
,
bool
isNullLiteral
,
bool
isDefaultLiteral
)
{
if
(
parameter
.
IsParams
&&
parameter
.
Type
is
IArrayTypeSymbol
arrayType
)
{
if
(
TypeInfoMatchesType
(
argumentTypeInfo
,
arrayType
.
ElementType
))
if
(
TypeInfoMatchesType
(
argumentTypeInfo
,
arrayType
.
ElementType
,
isNullLiteral
,
isDefaultLiteral
))
{
return
true
;
}
...
...
@@ -487,8 +491,27 @@ private bool TypeInfoMatchesWithParamsExpansion(TypeInfo argumentTypeInfo, IPara
return
false
;
}
private
bool
TypeInfoMatchesType
(
TypeInfo
argumentTypeInfo
,
ITypeSymbol
type
)
=>
type
.
Equals
(
argumentTypeInfo
.
Type
)
||
type
.
Equals
(
argumentTypeInfo
.
ConvertedType
);
private
bool
TypeInfoMatchesType
(
TypeInfo
argumentTypeInfo
,
ITypeSymbol
type
,
bool
isNullLiteral
,
bool
isDefaultLiteral
)
{
if
(
type
.
Equals
(
argumentTypeInfo
.
Type
)
||
type
.
Equals
(
argumentTypeInfo
.
ConvertedType
))
{
return
true
;
}
if
(
isDefaultLiteral
)
{
return
true
;
}
if
(
isNullLiteral
)
{
return
type
.
IsReferenceType
||
type
.
IsNullable
();
}
return
false
;
}
private
class
MyCodeAction
:
CodeAction
.
DocumentChangeAction
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录