wording
[fedora-idea.git] / plugins / InspectionGadgets / src / com / siyeh / ig / inheritance / NonProtectedConstructorInAbstractClassInspection.java
blobcb542164ed170889890b01b393d0ac90b97a42da
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 @Override
40 @NotNull
41 public String getDisplayName() {
42 return InspectionGadgetsBundle.message(
43 "non.protected.constructor.in.abstract.class.display.name");
46 @Override
47 @NotNull
48 public String getID() {
49 return "ConstructorNotProtectedInAbstractClass";
52 @Override
53 @NotNull
54 protected String buildErrorString(Object... infos) {
55 return InspectionGadgetsBundle.message(
56 "non.protected.constructor.in.abstract.class.problem.descriptor");
59 @Override
60 public JComponent createOptionsPanel() {
61 return new SingleCheckboxOptionsPanel(
62 InspectionGadgetsBundle.message(
63 "non.protected.constructor.in.abstract.class.ignore.option"),
64 this, "m_ignoreNonPublicClasses");
67 @Override
68 public BaseInspectionVisitor buildVisitor() {
69 return new NonProtectedConstructorInAbstractClassVisitor();
72 @Override
73 public InspectionGadgetsFix buildFix(Object... infos) {
74 return new ChangeModifierFix(PsiModifier.PROTECTED);
77 private class NonProtectedConstructorInAbstractClassVisitor
78 extends BaseInspectionVisitor {
80 @Override public void visitMethod(@NotNull PsiMethod method) {
81 //no call to super, so we don't drill into anonymous classes
82 if (!method.isConstructor()) {
83 return;
85 if (method.hasModifierProperty(PsiModifier.PROTECTED)
86 || method.hasModifierProperty(PsiModifier.PRIVATE)
87 || method.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) {
88 return;
90 final PsiClass containingClass = method.getContainingClass();
91 if (containingClass == null) {
92 return;
94 if (m_ignoreNonPublicClasses &&
95 !containingClass.hasModifierProperty(PsiModifier.PUBLIC)) {
96 return;
98 if (!containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) {
99 return;
101 if (containingClass.isEnum()) {
102 return;
104 registerMethodError(method);