Ich versuche, meine eigene Sonarqube Regel zu machen, das Ziel der Regel ist zu prüfen, ob es ein Leerraum zwischen einer Variablen und einem Gleichheitszeichen sein sollte. Zum Beispiel:Classcast: org.sonar.java.model.declaration.VariableTreeImpl
int num=3; // Noncompliant
int num = 3; // Compliant
zu tun, dass ich die VariableTreeImpl
zu bekommen versuchen die Methode equalToken()
zu verwenden. so sollte ich die Art ändern VariableTree
zu VariableTreeImpl
@Override
public void visitClass(ClassTree tree) {
if (tree.is(Tree.Kind.CLASS) || tree.is(Tree.Kind.ENUM)) {
for (Tree member : tree.members()) {
if (member.is(Tree.Kind.VARIABLE)) {
if (((VariableTree) member).initializer() != null && ((VariableTreeImpl)member).equalToken()!= null ){
SyntaxToken variableFistToken = ((VariableTree) member).simpleName().firstToken();
SyntaxToken initializerToken = ((VariableTree) member).initializer().firstToken();
if (noSpacingBetweenEqualSign(variableFistToken,initializerToken,((VariableTreeImpl) member).equalToken())) {
context.reportIssue(this, member, "Before and after equals sign should have white space");
}
}
}
}
}
super.visitClass(tree);
}
Es scheint auch bei JUnit-Tests zu arbeiten, aber wenn ich starten Sonnar-Scanner auf meinem Testprojekt bekomme ich folgende Fehlermeldung:
Caused by: java.lang.ClassCastException: org.sonar.java.model.declaration.VariableTreeImpl cannot be cast to org.sonar.java.model.declaration.VariableTreeImpl
at com.gisquest.custom.sonar.check.DeclareVariableCheck.visitClass(DeclareVariableCheck.java:39)
at org.sonar.java.model.declaration.ClassTreeImpl.accept(ClassTreeImpl.java:198)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:37)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.visitCompilationUnit(BaseTreeVisitor.java:55)
at org.sonar.java.model.JavaTree$CompilationUnitTreeImpl.accept(JavaTree.java:184)
at org.sonar.plugins.java.api.tree.BaseTreeVisitor.scan(BaseTreeVisitor.java:43)
at com.gisquest.custom.sonar.check.DeclareVariableCheck.scanFile(DeclareVariableCheck.java:29)
at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:121)
at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:84)
... 38 more
ERROR:
Ich habe Ich habe ein paar Nachforschungen angestellt und bin auf diese Frage gestoßen, die mein Problem zu sein scheint: SonarQube java.lang.ClassCastException: ParametrizedTypeJavaType cannot be cast to ParametrizedTypeJavaType
So bin ich total verwirrt. Was ist der gute Ansatz, um mit meinem Problem umzugehen?
Ich verwende Sonarqube Version 6.2.
danke Michael in meiner pom.xml Ich benutze 4.3.0.7717 –
Zuletzt veröffentlichte Version von SonarJava ist '4.12.0.11033'. Ich empfehle Ihnen, Ihr Projekt und Ihre SonarQube-Instanz auf die neueste Version zu aktualisieren. Beachten Sie, dass mein Kommentar immer noch gültig ist. Eine neue Methode, um auf das gleiche Token zuzugreifen, ist Teil von '4.13'. –