mirror of
https://github.com/alibaba/p3c.git
synced 2025-10-15 15:40:26 +00:00
修复 扫描通过实例调用静态方法遗漏的情况
This commit is contained in:
@@ -35,7 +35,8 @@ class AvoidAccessStaticViaInstanceRule : AbstractEclipseRule() {
|
|||||||
override fun getVisitor(ast: CompilationUnit, ruleContext: RuleContext): ASTVisitor {
|
override fun getVisitor(ast: CompilationUnit, ruleContext: RuleContext): ASTVisitor {
|
||||||
return object : ASTVisitor() {
|
return object : ASTVisitor() {
|
||||||
override fun visit(node: QualifiedName?): Boolean {
|
override fun visit(node: QualifiedName?): Boolean {
|
||||||
if (node!!.parent !is MethodInvocation && node.parent !is VariableDeclarationFragment) {
|
val parent = node!!.parent
|
||||||
|
if (parent !is MethodInvocation && parent !is VariableDeclarationFragment) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
val name = node.name
|
val name = node.name
|
||||||
@@ -45,10 +46,26 @@ class AvoidAccessStaticViaInstanceRule : AbstractEclipseRule() {
|
|||||||
}
|
}
|
||||||
val qualifier = node.qualifier
|
val qualifier = node.qualifier
|
||||||
val typeBinding = qualifier.resolveTypeBinding()
|
val typeBinding = qualifier.resolveTypeBinding()
|
||||||
if (qualifier.isSimpleName && typeBinding.name != qualifier.fullyQualifiedName) {
|
if (qualifier.isSimpleName) {
|
||||||
|
when (parent) {
|
||||||
|
is MethodInvocation -> {
|
||||||
|
val methodBinding = parent.resolveMethodBinding()
|
||||||
|
val methodTypeBinding = methodBinding.declaringClass
|
||||||
|
if (methodBinding.modifiers and Modifier.STATIC != 0
|
||||||
|
&& qualifier.fullyQualifiedName != methodTypeBinding.name
|
||||||
|
&& methodTypeBinding == typeBinding && binding.name != typeBinding.name) {
|
||||||
|
violation(ruleContext, parent, ast)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (typeBinding.name != qualifier.fullyQualifiedName) {
|
||||||
violation(ruleContext, node, ast)
|
violation(ruleContext, node, ast)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (qualifier.isQualifiedName) {
|
if (qualifier.isQualifiedName) {
|
||||||
val qualifiedName = qualifier as QualifiedName
|
val qualifiedName = qualifier as QualifiedName
|
||||||
if (typeBinding.name != qualifiedName.name.identifier) {
|
if (typeBinding.name != qualifiedName.name.identifier) {
|
||||||
|
Reference in New Issue
Block a user