修复 扫描通过实例调用静态方法遗漏的情况

This commit is contained in:
骏烈
2018-02-01 14:44:56 +08:00
parent a79cb7eccc
commit 902a416dbf

View File

@@ -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) {