【发布时间】:2016-01-16 08:27:44
【问题描述】:
我是 SonarQube 的新手。以下代码在 SonarQube 5.2 中正确运行(违反规则“Printf 样式的格式字符串不应导致运行时出现意外行为”),但在 SonarQube 5.3 中导致错误:
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7.1:sonar
(default-cli) on project art: SonarQube is unable to analyze file:
'D:\workspace\art\src\main\java\grp\art\Iso8601Util.java': index (1)
must be less than size (1) -> [Help 1]
...
Caused by: java.lang.IndexOutOfBoundsException: index (1) must be less than size (1)
at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:301)
at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:280)
at com.google.common.collect.RegularImmutableList.get(RegularImmutableList.java:91)
at org.sonar.java.checks.PrintfCheck.verifyParameters(PrintfCheck.java:173)
at org.sonar.java.checks.PrintfCheck.onMethodInvocationFound(PrintfCheck.java:112)
at org.sonar.java.checks.methods.AbstractMethodDetection.checkInvocation(AbstractMethodDetection.java:52)
at org.sonar.java.checks.methods.AbstractMethodDetection.visitNode(AbstractMethodDetection.java:43)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:89)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visitChildren(SubscriptionVisitor.java:115)
at org.sonar.java.ast.visitors.SubscriptionVisitor.visit(SubscriptionVisitor.java:91)
at org.sonar.java.ast.visitors.SubscriptionVisitor.scanTree(SubscriptionVisitor.java:72)
at org.sonar.java.ast.visitors.SubscriptionVisitor.scanFile(SubscriptionVisitor.java:65)
at org.sonar.java.checks.SubscriptionBaseVisitor.scanFile(SubscriptionBaseVisitor.java:33)
at org.sonar.java.model.InternalVisitorsBridge.visitFile(InternalVisitorsBridge.java:111)
at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:97)
... 54 more
我只是使用开箱即用的 SonarQube Java 插件,maven 3.2.1 到 Eclipse/m2e 和 org.codehaus.mojo:sonar-maven-plugin:2.7.1 (mvn sonar:sonar --errors -Dsonar.host.url=http://myserver:9000/)
我将使用 SimpleDateFormat 而不是 String.format,但我只是报告了 SonarQube 5.3 中可能出现的意外行为。
import java.util.Date;
public class Iso8601Util {
/**
* @return Date formatté en 1970-01-01T00:00:00Z
*/
public static String now() {
return format(new Date());
}
/**
* @return Date formatté en 1970-01-01T00:00:00Z
*/
public static String format(Date date) {
return String.format("%tFT%<tTZ", date);
}
/**
* @return Date formatté en 1970-01-01 00:00:00
*/
public static String formatWithoutTZ(Date date) {
return String.format("%tF %<tT", date);
}
/**
* @return Date formatté en 1970-01-01T00:00:00Z mais utilisable
* pour un chemin de fichier (ou de répertoire) pour Windows.
*/
public static String nowWindowsFileCompatible() {
return now().replace(":", "");
}
}
【问题讨论】: