Use change modifier fix in more places and remove duplicate code
[fedora-idea.git] / plugins / InspectionGadgets / src / com / siyeh / ig / inheritance / NonProtectedConstructorInAbstractClassInspection.java
blobf92e37d1023cb09326bea68b6ccf3cd9188ba770
1 /*
2 * Copyright 2003-2008 Dave Griffith, Bas Leijdekkers
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.siyeh.ig.inheritance;
18 import com.intellij.psi.PsiClass;
19 import com.intellij.psi.PsiMethod;
20 import com.intellij.psi.PsiModifier;
21 import com.siyeh.InspectionGadgetsBundle;
22 import com.siyeh.ig.BaseInspection;
23 import com.siyeh.ig.BaseInspectionVisitor;
24 import com.siyeh.ig.InspectionGadgetsFix;
25 import com.siyeh.ig.fixes.ChangeModifierFix;
26 import com.siyeh.ig.ui.SingleCheckboxOptionsPanel;
27 import org.jetbrains.annotations.NotNull;
29 import javax.swing.*;
31 public class NonProtectedConstructorInAbstractClassInspection
32 extends BaseInspection {
34 /**
35 * @noinspection PublicField
37 public boolean m_ignoreNonPublicClasses = false;
39 @NotNull
40 public String getDisplayName() {
41 return InspectionGadgetsBundle.message(
42 "non.protected.constructor.in.abstract.class.display.name");
45 @NotNull
46 public String getID() {
47 return "ConstructorNotProtectedInAbstractClass";
50 @NotNull
51 protected String buildErrorString(Object... infos) {
52 return InspectionGadgetsBundle.message(
53 "non.protected.constructor.in.abstract.class.problem.descriptor");
56 public JComponent createOptionsPanel() {
57 return new SingleCheckboxOptionsPanel(
58 InspectionGadgetsBundle.message(
59 "non.protected.constructor.in.abstract.class.ignore.option"),
60 this, "m_ignoreNonPublicClasses");
63 public BaseInspectionVisitor buildVisitor() {
64 return new NonProtectedConstructorInAbstractClassVisitor();
67 public InspectionGadgetsFix buildFix(Object... infos) {
68 return new ChangeModifierFix(PsiModifier.PROTECTED);
71 private class NonProtectedConstructorInAbstractClassVisitor
72 extends BaseInspectionVisitor {
74 @Override public void visitMethod(@NotNull PsiMethod method) {
75 //no call to super, so we don't drill into anonymous classes
76 if (!method.isConstructor()) {
77 return;
79 if (method.hasModifierProperty(PsiModifier.PROTECTED)
80 || method.hasModifierProperty(PsiModifier.PRIVATE)) {
81 return;
83 final PsiClass containingClass = method.getContainingClass();
84 if (containingClass == null) {
85 return;
87 if (m_ignoreNonPublicClasses &&
88 !containingClass.hasModifierProperty(PsiModifier.PUBLIC)) {
89 return;
91 if (!containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
92 return;
94 if (containingClass.isEnum()) {
95 return;
97 registerMethodError(method);