| /* |
| * 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.codeInspection.ui.SingleCheckboxOptionsPanel; |
| import com.intellij.psi.*; |
| import com.intellij.psi.util.PropertyUtil; |
| import com.siyeh.InspectionGadgetsBundle; |
| import com.siyeh.ig.BaseInspection; |
| import com.siyeh.ig.BaseInspectionVisitor; |
| import com.siyeh.ig.psiutils.LibraryUtil; |
| import org.jetbrains.annotations.Nls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| |
| /** |
| * @author Bas Leijdekkers |
| */ |
| public class BooleanParameterInspection extends BaseInspection { |
| |
| @SuppressWarnings("PublicField") |
| public boolean onlyReportMultiple = false; |
| |
| @Nls |
| @NotNull |
| @Override |
| public String getDisplayName() { |
| return InspectionGadgetsBundle.message("boolean.parameter.display.name"); |
| } |
| |
| @NotNull |
| @Override |
| protected String buildErrorString(Object... infos) { |
| final PsiMethod method = (PsiMethod)infos[0]; |
| final int booleanParameterCount = ((Integer)infos[1]).intValue(); |
| if (booleanParameterCount == 1) { |
| return method.isConstructor() |
| ? InspectionGadgetsBundle.message("boolean.parameter.constructor.problem.descriptor") |
| : InspectionGadgetsBundle.message("boolean.parameter.problem.descriptor"); |
| } |
| else { |
| return method.isConstructor() |
| ? InspectionGadgetsBundle.message("boolean.parameters.constructor.problem.descriptor") |
| : InspectionGadgetsBundle.message("boolean.parameters.problem.descriptor"); |
| } |
| } |
| |
| @Nullable |
| @Override |
| public JComponent createOptionsPanel() { |
| return new SingleCheckboxOptionsPanel( |
| InspectionGadgetsBundle.message("boolean.parameter.only.report.multiple.option"), this, "onlyReportMultiple"); |
| } |
| |
| @Override |
| public BaseInspectionVisitor buildVisitor() { |
| return new BooleanParameterVisitor(); |
| } |
| |
| private class BooleanParameterVisitor extends BaseInspectionVisitor { |
| |
| @Override |
| public void visitMethod(PsiMethod method) { |
| super.visitMethod(method); |
| if (!method.hasModifierProperty(PsiModifier.PUBLIC)) { |
| final PsiClass aClass = method.getContainingClass(); |
| if (aClass == null || !aClass.isInterface()) { |
| return; |
| } |
| } |
| if (PropertyUtil.isSimpleSetter(method) || LibraryUtil.isOverrideOfLibraryMethod(method)) { |
| return; |
| } |
| final PsiParameterList parameterList = method.getParameterList(); |
| final PsiParameter[] parameters = parameterList.getParameters(); |
| int count = 0; |
| for (PsiParameter parameter : parameters) { |
| final PsiType type = parameter.getType(); |
| if (!PsiPrimitiveType.BOOLEAN.equals(type)) { |
| continue; |
| } |
| count++; |
| if (count > 1) { |
| break; |
| } |
| } |
| |
| if (count == 0 || onlyReportMultiple && count == 1) { |
| return; |
| } |
| registerMethodError(method, method, Integer.valueOf(count)); |
| } |
| } |
| } |
| |