Examples of errors detected by the V3139 diagnostic
V3139. Two or more case-branches perform the same actions.
Stride
V3139 Two or more case-branches perform the same actions. RotationComponentCurveViewModel.cs 53
public override void AddPoint(....)
{
....
switch (Component)
{
case VectorComponent.X:
value.X = realPoint.Y;
break;
case VectorComponent.Y:
value.Y = realPoint.Y;
break;
case VectorComponent.Z:
value.Z = realPoint.Y; // <=
break;
case VectorComponent.W:
value.Z = realPoint.Y; // <=
break;
default:
throw new NotSupportedException();
}
....
}
.NET Core Libraries (CoreFX)
V3139 Two or more case-branches perform the same actions. WMIGenerator.cs 5220
private static string
ConvertToNumericValueAndAddToArray(....)
{
string retFunctionName = string.Empty;
enumType = string.Empty;
switch(cimType)
{
case CimType.UInt8:
case CimType.SInt8:
case CimType.SInt16:
case CimType.UInt16:
case CimType.SInt32:
arrayToAdd.Add(System.Convert.ToInt32(
numericValue,
(IFormatProvider)CultureInfo.InvariantCulture
.GetFormat(typeof(int))));
retFunctionName = "ToInt32";
enumType = "System.Int32";
break;
case CimType.UInt32:
arrayToAdd.Add(System.Convert.ToInt32(
numericValue,
(IFormatProvider)CultureInfo.InvariantCulture
.GetFormat(typeof(int))));
retFunctionName = "ToInt32";
enumType = "System.Int32";
break;
}
return retFunctionName;
}
.NET Core Libraries (CoreFX)
V3139 Two or more case-branches perform the same actions. ColorTranslator.cs 302
switch (c.ToKnownColor())
{
....
case KnownColor.Control:
colorString = "buttonface";
break;
case KnownColor.ControlLight:
colorString = "buttonface";
break;
....
}
Roslyn Analyzers
V3139 Two or more case-branches perform the same actions. CodeMetricsAnalyzer.cs 251
static bool isApplicableByDefault(string ruleId, SymbolKind symbolKind)
{
switch (ruleId)
{
....
case CA1505RuleId:
switch (symbolKind)
{
case SymbolKind.NamedType:
case SymbolKind.Method:
case SymbolKind.Field:
case SymbolKind.Property:
case SymbolKind.Event:
return true;
default:
return false;
}
case CA1506RuleId:
switch (symbolKind)
{
case SymbolKind.NamedType:
case SymbolKind.Method:
case SymbolKind.Field:
case SymbolKind.Property:
case SymbolKind.Event:
return true;
default:
return false;
}
default:
throw new NotImplementedException();
}
}
Orchard CMS
V3139 Two or more case-branches perform the same actions. SerialDocumentExecuter.cs 23
public class SerialDocumentExecuter : DocumentExecuter
{
private static IExecutionStrategy ParallelExecutionStrategy
= new ParallelExecutionStrategy();
private static IExecutionStrategy SerialExecutionStrategy
= new SerialExecutionStrategy();
private static IExecutionStrategy SubscriptionExecutionStrategy
= new SubscriptionExecutionStrategy();
protected override IExecutionStrategy SelectExecutionStrategy(....)
{
switch (context.Operation.OperationType)
{
case OperationType.Query:
return SerialExecutionStrategy;
case OperationType.Mutation:
return SerialExecutionStrategy;
case OperationType.Subscription:
return SubscriptionExecutionStrategy;
default:
throw ....;
}
}
}
Open XML SDK
V3139 Two or more case-branches perform the same actions. OpenXmlPartReader.cs 560
private void InnerSkip()
{
Debug.Assert(_xmlReader != null);
switch (_elementState)
{
case ElementState.Null:
ThrowIfNull();
break;
case ElementState.EOF:
return;
case ElementState.Start:
_xmlReader.Skip();
_elementStack.Pop();
GetElementInformation();
return;
case ElementState.End:
case ElementState.MiscNode:
// cursor is end element, pop stack
_xmlReader.Skip();
_elementStack.Pop();
GetElementInformation();
return;
....
}
....
}
Similar errors can be found in some other places:
- V3139 Two or more case-branches perform the same actions. OpenXmlMiscNode.cs 312
- V3139 Two or more case-branches perform the same actions. CustomPropertyPartTypeInfo.cs 30
- V3139 Two or more case-branches perform the same actions. CustomXmlPartTypeInfo.cs 15
- And 1 additional diagnostic messages.
QuantConnect Lean
V3139 Two or more case-branches perform the same actions. SecurityCacheTests.cs 510
public string[] GetPropertiesBy(SecuritySeedData type)
{
switch (type)
{
case SecuritySeedData.None:
return new string[0];
case SecuritySeedData.OpenInterest:
return new[] { "OpenInterest" }; // <=
case SecuritySeedData.OpenInterestTick:
return new[] { "OpenInterest" }; // <=
case SecuritySeedData.TradeTick:
return new[] {"Price", "Volume"};
....
case SecuritySeedData.Fundamentals:
return new string[0];
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
ILSpy
V3139 Two or more case-branches perform the same actions. ILSpy Images.cs 251
protected override ImageSource GetBaseImage(MemberIcon icon)
{
ImageSource baseImage;
switch (icon)
{
case MemberIcon.Field:
baseImage = Images.Field;
break;
case MemberIcon.FieldReadOnly:
baseImage = Images.FieldReadOnly;
break;
case MemberIcon.Literal:
baseImage = Images.Literal; // <=
break;
case MemberIcon.EnumValue:
baseImage = Images.Literal; // <=
break;
case MemberIcon.Property:
baseImage = Images.Property;
break;
case MemberIcon.Indexer:
baseImage = Images.Indexer;
break;
case MemberIcon.Method:
baseImage = Images.Method;
break;
case MemberIcon.Constructor:
baseImage = Images.Constructor;
break;
case MemberIcon.VirtualMethod:
baseImage = Images.VirtualMethod;
break;
case MemberIcon.Operator:
baseImage = Images.Operator;
break;
case MemberIcon.ExtensionMethod:
baseImage = Images.ExtensionMethod;
break;
case MemberIcon.PInvokeMethod:
baseImage = Images.PInvokeMethod;
break;
case MemberIcon.Event:
baseImage = Images.Event;
break;
default:
throw new ArgumentOutOfRangeException(nameof(icon),
$"MemberIcon.{icon} is not supported!");
}
return baseImage;
}
ILSpy
V3139 Two or more case-branches perform the same actions. ICSharpCode.Decompiler CSharpConversions.cs 829
bool ImplicitConstantExpressionConversion(ResolveResult rr, IType toType)
{
....
switch (toTypeCode)
{
case TypeCode.SByte:
return val >= SByte.MinValue && val <= SByte.MaxValue;
case TypeCode.Byte:
return val >= Byte.MinValue && val <= Byte.MaxValue;
case TypeCode.Int16:
return val >= Int16.MinValue && val <= Int16.MaxValue;
case TypeCode.UInt16:
return val >= UInt16.MinValue && val <= UInt16.MaxValue;
case TypeCode.UInt32:
return val >= 0; // <=
case TypeCode.UInt64:
return val >= 0; // <=
}
....
}
Similar errors can be found in some other places:
- V3139 Two or more case-branches perform the same actions. ICSharpCode.Decompiler EscapeInvalidIdentifiers.cs 85
- V3139 Two or more case-branches perform the same actions. ICSharpCode.Decompiler TransformExpressionTrees.cs 370
Ryujinx
V3139 Two or more case-branches perform the same actions. Demangler.cs 2251
private BaseNode ParseExpression()
{
....
case 'm':
_position += 2;
return ParseBinaryExpression("%");
case 'M':
_position += 2;
return ParseBinaryExpression("%");
....
}
Similar errors can be found in some other places:
- V3139 Two or more case-branches perform the same actions. Demangler.cs 2499
- V3139 Two or more case-branches perform the same actions. InstEmitSimdHelper.cs 1684
- V3139 Two or more case-branches perform the same actions. OperandType.cs 29
- And 16 additional diagnostic messages.
PeachPie
V3139 Two or more case-branches perform the same actions. ReflectionUtils.Nullability.cs 170
private static FlowAnalysisAnnotations DecodeFlowAnalysisAttributes(....)
{
var result = FlowAnalysisAnnotations.None;
foreach (var attr in attributes)
{
switch (attr.AttributeType.FullName)
{
case "System.Diagnostics.CodeAnalysis.AllowNullAttribute":
result |= FlowAnalysisAnnotations.AllowNull;
break;
case "System.Diagnostics.CodeAnalysis.DisallowNullAttribute":
result |= FlowAnalysisAnnotations.DisallowNull;
break;
case "System.Diagnostics.CodeAnalysis.MaybeNullAttribute":
result |= FlowAnalysisAnnotations.MaybeNull;
break;
case "System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute":
if (TryGetBoolArgument(attr, out bool maybeNullWhen))
{
result |= maybeNullWhen ? FlowAnalysisAnnotations.MaybeNullWhenTrue
: FlowAnalysisAnnotations.MaybeNullWhenFalse;
}
break;
case "System.Diagnostics.CodeAnalysis.NotNullAttribute":
result |= FlowAnalysisAnnotations.AllowNull;
break;
}
}
}
DotNetNuke
V3139 Two or more case-branches perform the same actions. RequestFilterModule.cs 81
public enum AddressType
{
IPv4 = 0,
IPv6 = 1,
}
private static void FilterRequest(object sender, EventArgs e)
{
....
switch (varArray[1])
{
case "IPv4":
varVal = NetworkUtils.GetAddress(varVal, AddressType.IPv4);
break;
case "IPv6":
varVal = NetworkUtils.GetAddress(varVal, AddressType.IPv4);
break;
}
....
}
DotNetNuke
V3139 Two or more case-branches perform the same actions. PropertyAccessTests.cs 118
private static DateTime CalculateTime(int lapse, string measurement)
{
var nextTime = new DateTime();
switch (measurement)
{
case "s":
nextTime = DateTime.Now.AddSeconds(lapse);
break;
case "m":
nextTime = DateTime.Now.AddMinutes(lapse);
break;
case "h":
nextTime = DateTime.Now.AddHours(lapse);
break;
case "d":
nextTime = DateTime.Now.AddDays(lapse); // <=
break;
case "w":
nextTime = DateTime.Now.AddDays(lapse); // <=
break;
case "mo":
nextTime = DateTime.Now.AddMonths(lapse);
break;
case "y":
nextTime = DateTime.Now.AddYears(lapse);
break;
}
return nextTime;
}
Eto.Forms
V3139 Two or more case-branches perform the same actions. Eto.Wpf(net462) SplitterHandler.cs 357
void UpdateColumnSizing(....)
{
....
switch (FixedPanel)
{
case SplitterFixedPanel.Panel1:
SetLength(0, new sw.GridLength(1, sw.GridUnitType.Star)); // <=
break;
case SplitterFixedPanel.Panel2:
SetLength(0, new sw.GridLength(1, sw.GridUnitType.Star)); // <=
break;
case SplitterFixedPanel.None:
SetLength(0, new sw.GridLength(1, sw.GridUnitType.Star));
SetLength(2, new sw.GridLength(1, sw.GridUnitType.Star));
break;
}
....
}
ScreenToGif
V3139 Two or more case-branches perform the same actions. ShortcutSelection.cs 79
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value is not int index)
return DependencyProperty.UnsetValue;
switch (index)
{
case 0:
return Key.F1;
case 1:
return Key.F2;
case 2:
return Key.F3;
case 13:
return Key.F4;
case 4:
return Key.F5;
case 5:
return Key.F6;
case 6:
return Key.F7;
case 7:
return Key.F8;
case 8:
return Key.F9;
case 9:
return Key.F10;
case 10:
return Key.F11; // <=
case 11:
return Key.F11; // <=
}
return Key.F1;
}