From 6d9af3466b7aa47732f25a6232090ddd4ec8eb1e Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Mon, 21 Nov 2016 15:19:09 +0300 Subject: [PATCH] [groovy] unnecessary def: offer to remove modifier when other modifiers are present even if there are generics --- .../style/GrUnnecessaryDefModifierInspection.java | 9 +++++---- .../jetbrains/plugins/groovy/lang/psi/util/psiUtil.kt | 6 ++++++ .../style/GrUnnecessaryDefModifierInspectionTest.groovy | 4 ++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspection.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspection.java index 0fc53286785f..f8686af623ea 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspection.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspection.java @@ -25,12 +25,13 @@ import org.jetbrains.plugins.groovy.codeInspection.GroovyInspectionBundle; import org.jetbrains.plugins.groovy.codeInspection.GroovySuppressableInspectionTool; import org.jetbrains.plugins.groovy.codeInspection.bugs.GrModifierFix; import org.jetbrains.plugins.groovy.codeInspection.bugs.GrRemoveModifierFix; -import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifier; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtilKt; -public class GrUnnecessaryDefModifierInspection extends GroovySuppressableInspectionTool implements CleanupLocalInspectionTool{ +import static org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.kDEF; + +public class GrUnnecessaryDefModifierInspection extends GroovySuppressableInspectionTool implements CleanupLocalInspectionTool { private static final GrModifierFix FIX = new GrRemoveModifierFix(GrModifier.DEF); @@ -40,13 +41,13 @@ public class GrUnnecessaryDefModifierInspection extends GroovySuppressableInspec return new PsiElementVisitor() { @Override public void visitElement(PsiElement modifier) { - if (modifier.getNode().getElementType() != GroovyTokenTypes.kDEF) return; + if (modifier.getNode().getElementType() != kDEF) return; PsiElement list = modifier.getParent(); if (!(list instanceof GrModifierList)) return; PsiElement owner = list.getParent(); - if (!PsiUtilKt.modifierListMayBeEmpty(owner)) return; + if (!PsiUtilKt.modifierListMayBeEmpty(owner) && !PsiUtilKt.hasOtherModifiers((GrModifierList)list, kDEF)) return; holder.registerProblem( modifier, diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/psiUtil.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/psiUtil.kt index c5250bc2abdf..7feac6c5c9bb 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/psiUtil.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/psiUtil.kt @@ -16,7 +16,9 @@ package org.jetbrains.plugins.groovy.lang.psi.util import com.intellij.psi.PsiElement +import com.intellij.psi.tree.IElementType import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.mCOLON +import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariableDeclaration import org.jetbrains.plugins.groovy.lang.psi.api.statements.clauses.GrForInClause @@ -46,3 +48,7 @@ fun modifierListMayBeEmpty(owner: PsiElement?): Boolean = when (owner) { is GrVariableDeclaration -> owner.typeElementGroovy != null else -> true } + +fun GrModifierList.hasOtherModifiers(modifierElementType: IElementType): Boolean { + return modifiers.any { it.node.elementType != modifierElementType } +} diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspectionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspectionTest.groovy index 71b2b0cb3a19..67a64e011e27 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspectionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/codeInspection/style/GrUnnecessaryDefModifierInspectionTest.groovy @@ -37,6 +37,8 @@ def baw(def a) {} def T bax() {} +synchronized def T baxx(Class c) {} + def Object bar def baf @@ -64,6 +66,8 @@ boolean baz(a) {} def T bax() {} +synchronized T baxx(Class c) {} + Object bar def baf