Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
f67fb259
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,发现更多精彩内容 >>
提交
f67fb259
编写于
1月 15, 2018
作者:
M
Martin Strecker
提交者:
Sam Harwell
2月 14, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Removed generic constraint check. Changed C# null check from (v is null) to (v == null).
上级
2e2cbb6c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
36 deletion
+30
-36
src/EditorFeatures/CSharpTest/UseIsNullCheck/UseIsNullCheckTests.cs
...Features/CSharpTest/UseIsNullCheck/UseIsNullCheckTests.cs
+22
-11
src/Features/CSharp/Portable/UseIsNullCheck/CSharpUseIsNullCheckCodeFixProvider.cs
...ble/UseIsNullCheck/CSharpUseIsNullCheckCodeFixProvider.cs
+8
-4
src/Features/Core/Portable/UseIsNullCheck/AbstractUseIsNullDiagnosticAnalyzer.cs
...ble/UseIsNullCheck/AbstractUseIsNullDiagnosticAnalyzer.cs
+0
-21
未找到文件。
src/EditorFeatures/CSharpTest/UseIsNullCheck/UseIsNullCheckTests.cs
浏览文件 @
f67fb259
...
...
@@ -36,7 +36,7 @@ class C
{
void M(string s)
{
if (s
is
null)
if (s
==
null)
return;
}
}"
);
...
...
@@ -62,7 +62,7 @@ class C
{
void M(string s)
{
if (s
is
null)
if (s
==
null)
return;
}
}"
);
...
...
@@ -88,7 +88,7 @@ class C
{
void M(string s)
{
if (s
is
null)
if (s
==
null)
return;
}
}"
);
...
...
@@ -114,7 +114,7 @@ class C
{
void M(string s)
{
if (s
is
null)
if (s
==
null)
return;
}
}"
);
...
...
@@ -140,7 +140,7 @@ class C
{
void M(string s)
{
if (
!(s is null)
)
if (
s != null
)
return;
}
}"
);
...
...
@@ -183,8 +183,8 @@ class C
{
void M(string s1, string s2)
{
if (s1
is
null ||
s2
is
null)
if (s1
==
null ||
s2
==
null)
return;
}
}"
);
...
...
@@ -211,8 +211,8 @@ class C
{
void M(string s1, string s2)
{
if (s1
is
null ||
s2
is
null)
if (s1
==
null ||
s2
==
null)
return;
}
}"
);
...
...
@@ -222,7 +222,7 @@ void M(string s1, string s2)
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsUseIsNullCheck
)]
public
async
Task
TestMissingIfValueParameterTypeIsUnconstraintGeneric
()
{
await
Test
Missing
Async
(
await
Test
InRegularAndScript
Async
(
@"
class C
{
...
...
@@ -234,6 +234,17 @@ public static void NotNull<T>(T value, string parameterName)
}
}
}
"
,
@"
class C
{
public static void NotNull<T>(T value, string parameterName)
{
if (value == null)
{
throw new System.ArgumentNullException(parameterName);
}
}
}
"
);
}
...
...
@@ -259,7 +270,7 @@ class C
{
public static void NotNull<T>(T value, string parameterName) where T:class
{
if (value
is
null)
if (value
==
null)
{
throw new System.ArgumentNullException(parameterName);
}
...
...
src/Features/CSharp/Portable/UseIsNullCheck/CSharpUseIsNullCheckCodeFixProvider.cs
浏览文件 @
f67fb259
...
...
@@ -17,12 +17,16 @@ protected override string GetIsNullTitle()
protected
override
string
GetIsNotNullTitle
()
=>
GetIsNullTitle
();
protected
override
SyntaxNode
CreateIsNullCheck
(
SyntaxNode
argument
)
=>
SyntaxFactory
.
IsPatternExpression
(
private
static
SyntaxNode
CreateNullCheck
(
SyntaxNode
argument
,
SyntaxKind
comparisonOperator
)
=>
SyntaxFactory
.
BinaryExpression
(
comparisonOperator
,
(
ExpressionSyntax
)
argument
,
SyntaxFactory
.
ConstantPattern
(
SyntaxFactory
.
LiteralExpression
(
SyntaxKind
.
NullLiteralExpression
))).
Parenthesize
();
SyntaxFactory
.
LiteralExpression
(
SyntaxKind
.
NullLiteralExpression
)).
Parenthesize
();
protected
override
SyntaxNode
CreateIsNullCheck
(
SyntaxNode
argument
)
=>
CreateNullCheck
(
argument
,
SyntaxKind
.
EqualsExpression
);
protected
override
SyntaxNode
CreateIsNotNullCheck
(
SyntaxNode
notExpression
,
SyntaxNode
argument
)
=>
((
PrefixUnaryExpressionSyntax
)
notExpression
).
WithOperand
((
ExpressionSyntax
)
CreateIsNullCheck
(
argument
)
);
=>
CreateNullCheck
(
argument
,
SyntaxKind
.
NotEqualsExpression
);
}
}
src/Features/Core/Portable/UseIsNullCheck/AbstractUseIsNullDiagnosticAnalyzer.cs
浏览文件 @
f67fb259
...
...
@@ -109,11 +109,6 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context, IMethodSymbol refe
return
;
}
if
(
HasUnconstraintGenericParameter
(
syntaxFacts
,
semanticModel
,
arguments
[
0
],
arguments
[
1
],
cancellationToken
))
{
return
;
}
var
additionalLocations
=
ImmutableArray
.
Create
(
invocation
.
GetLocation
());
var
properties
=
ImmutableDictionary
<
string
,
string
>.
Empty
;
...
...
@@ -130,22 +125,6 @@ private void AnalyzeSyntax(SyntaxNodeAnalysisContext context, IMethodSymbol refe
additionalLocations
,
properties
));
}
private
static
bool
HasUnconstraintGenericParameter
(
ISyntaxFactsService
syntaxFacts
,
SemanticModel
semanticModel
,
SyntaxNode
node1
,
SyntaxNode
node2
,
CancellationToken
cancellationToken
)
{
var
valueNode
=
syntaxFacts
.
IsNullLiteralExpression
(
node1
)
?
node2
:
node1
;
var
argumentExpression
=
syntaxFacts
.
GetExpressionOfArgument
(
valueNode
);
if
(
argumentExpression
!=
null
)
{
var
parameterType
=
semanticModel
.
GetTypeInfo
(
argumentExpression
,
cancellationToken
).
Type
;
if
(
parameterType
is
ITypeParameterSymbol
typeParameter
)
{
return
!
typeParameter
.
HasReferenceTypeConstraint
;
}
}
return
false
;
}
private
static
bool
MatchesPattern
(
ISyntaxFactsService
syntaxFacts
,
SyntaxNode
node1
,
SyntaxNode
node2
)
=>
syntaxFacts
.
IsNullLiteralExpression
(
syntaxFacts
.
GetExpressionOfArgument
(
node1
))
&&
!
syntaxFacts
.
IsNullLiteralExpression
(
syntaxFacts
.
GetExpressionOfArgument
(
node2
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录