//////////////////////////////////////////////////////////////////////////////// // checkstyle: Checks Java source code for adherence to a set of rules. // Copyright (C) 2001-2017 the original author or authors. // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.checks.naming; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** * Abstract class for checking a class member (field/method)'s name conforms to * a format specified by the format property. * * <p> * This class extends {@link AbstractNameCheck} with support for access level * restrictions. This allows the check to be configured to be applied to one of * the four Java access levels: {@code public}, {@code protected}, * {@code "package"}, and {@code private}. * </p> * * <p>Level is configured using the following properties: * <ol> * <li>applyToPublic, default true;</li> * <li>applyToProtected, default true;</li> * <li>applyToPackage, default true;</li> * <li>applyToPrivate, default true;</li> * </ol> * * * @author Rick Giles */ public abstract class AbstractAccessControlNameCheck extends AbstractNameCheck { /** If true, applies the check be public members. */ private boolean applyToPublic = true; /** If true, applies the check be protected members. */ private boolean applyToProtected = true; /** If true, applies the check be "package" members. */ private boolean applyToPackage = true; /** If true, applies the check be private members. */ private boolean applyToPrivate = true; /** * Creates a new {@code AbstractAccessControlNameCheck} instance. * * @param format * format to check with */ protected AbstractAccessControlNameCheck(String format) { super(format); } @Override protected boolean mustCheckName(DetailAST ast) { return shouldCheckInScope(ast); } /** * Should we check member with given modifiers. * * @param modifiers * modifiers of member to check. * @return true if we should check such member. */ protected boolean shouldCheckInScope(DetailAST modifiers) { final boolean isPublic = modifiers .branchContains(TokenTypes.LITERAL_PUBLIC); final boolean isProtected = modifiers .branchContains(TokenTypes.LITERAL_PROTECTED); final boolean isPrivate = modifiers .branchContains(TokenTypes.LITERAL_PRIVATE); final boolean isPackage = !(isPublic || isProtected || isPrivate); return applyToPublic && isPublic || applyToProtected && isProtected || applyToPackage && isPackage || applyToPrivate && isPrivate; } /** * Sets whether we should apply the check to public members. * * @param applyTo new value of the property. */ public void setApplyToPublic(boolean applyTo) { applyToPublic = applyTo; } /** * Sets whether we should apply the check to protected members. * * @param applyTo new value of the property. */ public void setApplyToProtected(boolean applyTo) { applyToProtected = applyTo; } /** * Sets whether we should apply the check to package-private members. * * @param applyTo new value of the property. */ public void setApplyToPackage(boolean applyTo) { applyToPackage = applyTo; } /** * Sets whether we should apply the check to private members. * * @param applyTo new value of the property. */ public void setApplyToPrivate(boolean applyTo) { applyToPrivate = applyTo; } }