【问题标题】:squid:MaximumInheritanceDepth on Android鱿鱼:Android 上的最大继承深度
【发布时间】:2020-11-21 21:31:37
【问题描述】:

这是我的设置:

  • SonarQube 5.6.6
  • SonarJava 插件 4.8.0.9441

代码:

public class BaseActivity extends android.app.Activity {}

public class FooActivity extends BaseActivity {}

SonarQube 认为FooActivity 违反了squid:MaximumInheritanceDepth

这个班级有 6 个家长,超过 5 个授权。

android.app.Activity 是 Android 原生 API。 在计算违反此规则的情况时,是否应该忽略 Activity 的任何超类?

这是一个错误吗?

【问题讨论】:

    标签: java sonarqube


    【解决方案1】:

    这不是错误,而是配置问题。规则squid:S110 可以配置为从继承树中过滤掉类。默认情况下,不会忽略任何类,规则只计算继承级别的数量,直到达到Object 类。为了配置过滤类,您必须设置filteredClasses 规则属性。

    请注意,计划更新规则以不简单地从总继承深度中排除过滤类,而是在达到过滤类后立即停止增加继承级别。该修复将在处理 Jira 票证SONARJAVA-2252 时完成。

    【讨论】:

    • 能否请您详细说明如何“设置filteredClasses 规则属性”,特别是在Android 上下文中?
    • 我将 Quality Profile 的规则配置为将过滤类设置为:android.app.*,android.view.*,android.content.*,android.os.*
    • 更新:我还添加了支持库版本(v4、v7等)
    • 更新 2:对于 Androidx,您现在还需要添加 appcompat 软件包版本
    • @sunil 这是我当前的配置:“android.app.*,android.view.*,android.content.*,android.os.*,android.support.v7.app.* ,android.support.v4.app.*, android.arch.lifecycle.*, androidx.appcompat.app.*”
    【解决方案2】:

    您可以随时通过在类级别使用以下注释来抑制此警告 @java.lang.SuppressWarnings("squid:MaximumInheritanceDepth")

    【讨论】:

    • 请仔细阅读问题。 OP 明确要求:“这是一个错误吗?” - 除此之外,您永远不应该隐藏任何错误消息、通知或警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    相关资源
    最近更新 更多