在嵌套的while-switch-switch构造中使用规则S2538进行误报

时间:2016-12-01 10:29:46

标签: c# sonarlint

我们在以下代码中使用规则S2538时会出现误报

  EventLogLevel[] eventLevels = null;
  bool reachedEnd = false;
  while(!reachedEnd && jsonReader.Read())
  {
    switch(jsonReader.TokenType)
    {
      case JsonToken.PropertyName:
        string propertyName = jsonReader.Value.ToString();

        switch(propertyName)
        {
          case nameof(EventLevels):
            eventLevels = EventSettingsJson.ParseEventLogLevelsArray(nameof(EventLevels), jsonReader);
            break;
          default:
            throw new JsonParserException($"Invalid property: {propertyName}");
        }

        break;
      case JsonToken.EndObject:
        reachedEnd = true;
        break;
      default:
        throw new JsonParserException($"Unexpected Token Type while parsing json properties. TokenType: {jsonReader.TokenType}");
    }
  }

  if(eventLevels != null)
  {
    return new EventLogCollectionSettings(eventLogName, eventLevels);
  }

最后一个if (eventLevels != null)会显示警告,并显示以下消息:

  

[更改此条件,使其不会始终评估为   “假”。

我无法创建一个测试用例来重现它。

1 个答案:

答案 0 :(得分:1)

我们在数据流分析引擎中了解此限制。它与此票证有关:https://jira.sonarsource.com/browse/SLVS-1091。我们还没有解决它。