提交 1182f80a 编写于 作者: M Manish Vasani

Mark default value operations as having no side effects

上级 f6a86643
......@@ -268,6 +268,31 @@ int M()
}", optionName);
}
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
[InlineData(nameof(PreferDiscard))]
[InlineData(nameof(PreferUnusedLocal))]
public async Task Initialization_NonConstantValue_DefaultExpression(string optionName)
{
await TestInRegularAndScriptAsync(
@"struct C
{
C M()
{
C [|c|] = default(C);
c = new C();
return c;
}
}",
@"struct C
{
C M()
{
C c = new C();
return c;
}
}", optionName);
}
[Theory, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
[InlineData(nameof(PreferDiscard))]
[InlineData(nameof(PreferUnusedLocal))]
......
......@@ -405,16 +405,20 @@ bool IsRemovableAssignmentWithoutSideEffects(IOperation unusedSymbolWriteOperati
switch (assignment.Value.Kind)
{
// Parameter/local references have no side effects and can be removed.
case OperationKind.ParameterReference:
case OperationKind.LocalReference:
// Parameter/local references have no side effects and can be removed.
return true;
// Field references with null instance (static fields) or 'this' or 'Me' instance can
// have no side effects and can be removed.
case OperationKind.FieldReference:
// Field references with null instance (static fields) or 'this' or 'Me' instance can
// have no side effects and can be removed.
var fieldReference = (IFieldReferenceOperation)assignment.Value;
return fieldReference.Instance == null || fieldReference.Instance.Kind == OperationKind.InstanceReference;
case OperationKind.DefaultValue:
// default value expressions have no side-effects.
return true;
}
}
else if (unusedSymbolWriteOperation.Parent is IIncrementOrDecrementOperation)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册