From 902a416dbf0bfd8100203c968f130d4db2957cc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AA=8F=E7=83=88?= Date: Thu, 1 Feb 2018 14:44:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E6=89=AB=E6=8F=8F?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=AE=9E=E4=BE=8B=E8=B0=83=E7=94=A8=E9=9D=99?= =?UTF-8?q?=E6=80=81=E6=96=B9=E6=B3=95=E9=81=97=E6=BC=8F=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rule/AvoidAccessStaticViaInstanceRule.kt | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/eclipse-plugin/com.alibaba.smartfox.eclipse.plugin/src/main/kotlin/com/alibaba/smartfox/eclipse/pmd/rule/AvoidAccessStaticViaInstanceRule.kt b/eclipse-plugin/com.alibaba.smartfox.eclipse.plugin/src/main/kotlin/com/alibaba/smartfox/eclipse/pmd/rule/AvoidAccessStaticViaInstanceRule.kt index 48ec34b..44d7fd7 100644 --- a/eclipse-plugin/com.alibaba.smartfox.eclipse.plugin/src/main/kotlin/com/alibaba/smartfox/eclipse/pmd/rule/AvoidAccessStaticViaInstanceRule.kt +++ b/eclipse-plugin/com.alibaba.smartfox.eclipse.plugin/src/main/kotlin/com/alibaba/smartfox/eclipse/pmd/rule/AvoidAccessStaticViaInstanceRule.kt @@ -35,7 +35,8 @@ class AvoidAccessStaticViaInstanceRule : AbstractEclipseRule() { override fun getVisitor(ast: CompilationUnit, ruleContext: RuleContext): ASTVisitor { return object : ASTVisitor() { 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 } val name = node.name @@ -45,9 +46,25 @@ class AvoidAccessStaticViaInstanceRule : AbstractEclipseRule() { } val qualifier = node.qualifier val typeBinding = qualifier.resolveTypeBinding() - if (qualifier.isSimpleName && typeBinding.name != qualifier.fullyQualifiedName) { - violation(ruleContext, node, ast) - return false + 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) + return false + } } if (qualifier.isQualifiedName) { val qualifiedName = qualifier as QualifiedName