From f6ac8fe07fed757b7194ce33939997d4c6f4e23c Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 28 Nov 2013 16:47:08 +0100 Subject: [PATCH] drop "ignore feature envy in tests" checkbox and use "suppress for 'Tests' scope" quickfix --- .../ig/abstraction/FeatureEnvyInspection.java | 97 ------------------- .../FeatureEnvyInspectionBase.java | 65 +++++++++++++ .../ig/abstraction/FeatureEnvyInspection.java | 34 +++++++ 3 files changed, 99 insertions(+), 97 deletions(-) delete mode 100644 plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java create mode 100644 plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspectionBase.java create mode 100644 plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java deleted file mode 100644 index 4adf8ad35dc4..000000000000 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.siyeh.ig.abstraction; - -import com.intellij.codeInsight.TestFrameworks; -import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiIdentifier; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiNamedElement; -import com.siyeh.InspectionGadgetsBundle; -import com.siyeh.ig.BaseInspection; -import com.siyeh.ig.BaseInspectionVisitor; -import com.siyeh.ig.psiutils.TestUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.util.Set; - -public class FeatureEnvyInspection extends BaseInspection { - - @SuppressWarnings({"PublicField"}) - public boolean ignoreTestCases = false; - - @Override - @NotNull - public String getDisplayName() { - return InspectionGadgetsBundle.message("feature.envy.display.name"); - } - - @Override - @NotNull - public String buildErrorString(Object... infos) { - final PsiNamedElement element = (PsiNamedElement)infos[0]; - final String className = element.getName(); - return InspectionGadgetsBundle.message( - "feature.envy.problem.descriptor", className); - } - - @Override - @Nullable - public JComponent createOptionsPanel() { - return new SingleCheckboxOptionsPanel( - InspectionGadgetsBundle.message( - "feature.envy.ignore.test.cases.option"), this, - "ignoreTestCases"); - } - - @Override - public BaseInspectionVisitor buildVisitor() { - return new FeatureEnvyVisitor(); - } - - private class FeatureEnvyVisitor extends BaseInspectionVisitor { - - @Override - public void visitMethod(@NotNull PsiMethod method) { - if (ignoreTestCases) { - final PsiClass containingClass = method.getContainingClass(); - if (containingClass != null && - TestFrameworks.getInstance().isTestClass(containingClass)) { - return; - } - if (TestUtils.isJUnitTestMethod(method)) { - return; - } - } - final PsiIdentifier nameIdentifier = method.getNameIdentifier(); - if (nameIdentifier == null) { - return; - } - final PsiClass containingClass = method.getContainingClass(); - final ClassAccessVisitor visitor = - new ClassAccessVisitor(containingClass); - method.accept(visitor); - final Set overaccessedClasses = - visitor.getOveraccessedClasses(); - for (PsiClass aClass : overaccessedClasses) { - registerError(nameIdentifier, aClass); - } - } - } -} \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspectionBase.java new file mode 100644 index 000000000000..590e7d6d316f --- /dev/null +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/abstraction/FeatureEnvyInspectionBase.java @@ -0,0 +1,65 @@ +/* + * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.abstraction; + +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiNamedElement; +import com.siyeh.InspectionGadgetsBundle; +import com.siyeh.ig.BaseInspection; +import com.siyeh.ig.BaseInspectionVisitor; +import org.jetbrains.annotations.NotNull; + +import java.util.Set; + +public class FeatureEnvyInspectionBase extends BaseInspection { + + @SuppressWarnings({"PublicField", "UnusedDeclaration"}) + public boolean ignoreTestCases = false; // keep for compatibility + + @Override + @NotNull + public String getDisplayName() { + return InspectionGadgetsBundle.message("feature.envy.display.name"); + } + + @Override + @NotNull + public String buildErrorString(Object... infos) { + final PsiNamedElement element = (PsiNamedElement)infos[0]; + final String className = element.getName(); + return InspectionGadgetsBundle.message("feature.envy.problem.descriptor", className); + } + + @Override + public BaseInspectionVisitor buildVisitor() { + return new FeatureEnvyVisitor(); + } + + private static class FeatureEnvyVisitor extends BaseInspectionVisitor { + + @Override + public void visitMethod(@NotNull PsiMethod method) { + final PsiClass containingClass = method.getContainingClass(); + final ClassAccessVisitor visitor = new ClassAccessVisitor(containingClass); + method.accept(visitor); + final Set overAccessedClasses = visitor.getOveraccessedClasses(); + for (PsiClass aClass : overAccessedClasses) { + registerMethodError(method, aClass, method); + } + } + } +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java new file mode 100644 index 000000000000..4694e0644c6f --- /dev/null +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/abstraction/FeatureEnvyInspection.java @@ -0,0 +1,34 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.abstraction; + +import com.intellij.psi.PsiElement; +import com.siyeh.ig.InspectionGadgetsFix; +import com.siyeh.ig.fixes.SuppressForTestsScopeFix; +import org.jetbrains.annotations.Nullable; + +/** + * @author Bas Leijdekkers + */ +public class FeatureEnvyInspection extends FeatureEnvyInspectionBase { + + @Nullable + @Override + protected InspectionGadgetsFix buildFix(Object... infos) { + final PsiElement context = (PsiElement)infos[1]; + return SuppressForTestsScopeFix.build(this, context); + } +}