在寫一個聲納規則(爪哇),我無法找到一種方法來檢測類成員的訪問。 實施例:如何檢測類的成員(場)ACCES在聲納規則
class SomeClass {
Object field;
}
class SomeOtherClass {
SomeClass instance = new SomeClass();
void method(){
Objects.requireNonNull(instance.field);
}
}
在本實施例SomeOtherClass.method()
訪問SomeClass的的包保護構件。
我找不到合適的方法org.sonar.plugins.java.api.tree.TreeVisitor
來檢測這個。
我的第一個猜測是使用
BaseTreeVisitor.visitMemberSelectExpression(MemberSelectExpressionTree))
但正如我預料它並沒有奏效。
我將代碼提交到https://github.com/arxes-tolina/sonar-plugins/ 並且僅實現了帶調試輸出的UnexpectedAccessCheck.visitMemberSelectExpression(MemberSelectExpressionTree)
。運行測試利茲的一些線路在控制檯上:
[main] DEBUG d.t.s.p.v.c.UnexpectedAccessCheck - visitMemberSelectExpression invoked. Name of the symbol of identifier: !unknownSymbol!
可能是,這個問題是有關 Proper way for getting annotations of Java-Methods in custom Sonar rules?
我使用聲納-java的插件的3.7.1和聲納插件-API的5.1。
你對我有什麼暗示?
不幸的是,這個提示並沒有幫助解決問題。 來自https://github.com/arxes-tolina/sonar-plugins/的'UnexpectedAccessCheckTest'因爲這種失敗的情況而失敗:'UnexpectedAccessCheckTestClassCaller.defaultAccesMember()'加入了一些字段(callee.visibleForAll)和(callee.visibleForTesting) 。在調試輸出中仍然會有一些'!unknownSymbol!'來查看。 – wojtus