【问题标题】:CodeModel Modifier OrderCodeModel 修饰符顺序
【发布时间】:2016-05-03 13:18:51
【问题描述】:

使用 CodeModel,有没有办法控制修饰符的顺序? 特别是在创建字段时。

CodeModel 似乎有自己的修饰符顺序定义,不同于 Java 语言规范和 SonarQube 和 CheckStyle 等产品:

https://sonar43.spring.io/rules/show/squid:ModifiersOrderCheck?layout=false http://checkstyle.sourceforge.net/config_modifier.html

修饰符应按以下顺序出现:

  1. 注释
  2. 公开
  3. 受保护
  4. 私人
  5. 摘要
  6. 静态
  7. 最终
  8. 瞬态
  9. 易变
  10. 同步
  11. 原生
  12. strictfp

此示例代码:

// Create field for serialVersionUID
JFieldVar field1 = newClass.field(JMod.PRIVATE | JMod.STATIC | JMod.FINAL, long.class, "serialVersionUID");
field1.init(JExpr.lit(1L));

产生以下不遵循建议顺序的修饰符:

private final static long serialVersionUID = 1L;

【问题讨论】:

    标签: java sonarqube modifier


    【解决方案1】:

    这是不可能的*。即使是讨厌的反射黑客也不会这样做。修饰符的顺序由JMods#generate(JFormatter) 方法(在底部)确定。不幸的是,JMods 类只有一个明确声明为private 的构造函数。


    *当然,您可以添加另一层检测、字节码组装或类似的,或者只是创建一个修改版本的 CodeModel 以供本地使用。但是没有非侵入式的方式来改变修饰符的顺序。

    【讨论】:

    • 是的,我明白了。谢谢你的建议。为了我的目的,我将在本地进行更改。知道小组是否接受变更请求吗?如果是这样,我如何让这个进入队列?
    • 不确定更改请求。源的最后一次更改是在 2 年前。而 java.net 迟早会被关闭。 GitHub上有一些克隆/分叉,但不幸的是我不知道“官方”回购......
    猜你喜欢
    • 2021-01-20
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多