【问题标题】:SonarQube - Java - Force local variables to be effectively finalSonarQube - Java - 强制局部变量有效地最终
【发布时间】:2020-05-15 12:22:19
【问题描述】:

我正在使用 SonarQube,但我找不到任何用于报告局部变量重新分配的 Java 规则(也可以选择方法参数或类字段,但不在当然是设置器),或者换句话说,强制每个局部变量实际上是最终的

非编译示例

public Car createRedCar() {
  Car car = new Car();
  car.setColor(Color.RED);

  car = makeCool(car); // <- error, car variable was reassigned
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return car;
}

编译示例

public Car createRedCar() {
  Car car = new Car();
  car.setColor(Color.RED);

  Car coolCar = makeCool(car); // <- it's ok, because all local variables are effectively final
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return coolCar;
}

另一个编译示例

public Car createRedCar() {
  final Car car = new Car();
  car.setColor(Color.RED);

  final Car coolCar = makeCool(car); // <- it's also ok, but i don't want to force every variable to be final
  // do other irrelevant stuff with car, eg log, dispatch event or whatever
  return coolCar;
}

我不想强制每个变量都有 final 关键字,只是为了让它们成为有效的 final OR final。

如果没有默认规则,我可以使用自定义规则和/或插件,或者最后甚至写一个,但可能有人已经这样做了,这就是我在这里发帖的原因。

我正在使用 sonarqube-7.4,如果它符合我想要的规则,我愿意更新。

【问题讨论】:

  • 好吧,我不知道有什么规则可以做你想做的事,有 checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck 有 squid:S1226 部分做你想要的但不完全是:) - 但我不知道这样的规则
  • 谢谢,FinalLocalVariableCheck 并不真正适用于我的情况,但squid:S1226 绝对是一个进步!

标签: java sonarqube final rules local-variables


【解决方案1】:

如果有人感兴趣,我已经制定了一个规则,可以满足我在问题中所要求的功能。目前,它仅在 sonarqube-8.3.1 上进行了测试。

link to the repo.

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 1970-01-01
    • 2012-05-27
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2015-01-25
    相关资源
    最近更新 更多