001//////////////////////////////////////////////////////////////////////////////// 002// checkstyle: Checks Java source code for adherence to a set of rules. 003// Copyright (C) 2001-2014 Oliver Burn 004// 005// This library is free software; you can redistribute it and/or 006// modify it under the terms of the GNU Lesser General Public 007// License as published by the Free Software Foundation; either 008// version 2.1 of the License, or (at your option) any later version. 009// 010// This library is distributed in the hope that it will be useful, 011// but WITHOUT ANY WARRANTY; without even the implied warranty of 012// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013// Lesser General Public License for more details. 014// 015// You should have received a copy of the GNU Lesser General Public 016// License along with this library; if not, write to the Free Software 017// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 018//////////////////////////////////////////////////////////////////////////////// 019package com.puppycrawl.tools.checkstyle.checks.coding; 020 021import com.puppycrawl.tools.checkstyle.api.Check; 022import com.puppycrawl.tools.checkstyle.api.TokenTypes; 023import com.puppycrawl.tools.checkstyle.api.DetailAST; 024 025/** 026 * <p> 027 * Checks if array initialization contains optional trailing comma. 028 * </p> 029 * <p> 030 * Rationale: Putting this comma in make is easier to change the 031 * order of the elements or add new elements on the end. 032 * </p> 033 * <p> 034 * An example of how to configure the check is: 035 * </p> 036 * <pre> 037 * <module name="ArrayTrailingComma"/> 038 * </pre> 039 * @author o_sukhodolsky 040 */ 041public class ArrayTrailingCommaCheck extends Check 042{ 043 @Override 044 public int[] getDefaultTokens() 045 { 046 return new int[] {TokenTypes.ARRAY_INIT}; 047 } 048 049 @Override 050 public void visitToken(DetailAST arrayInit) 051 { 052 final DetailAST rcurly = arrayInit.findFirstToken(TokenTypes.RCURLY); 053 054 // if curlys are on the same line 055 // or array is empty then check nothing 056 if ((arrayInit.getLineNo() == rcurly.getLineNo()) 057 || (arrayInit.getChildCount() == 1)) 058 { 059 return; 060 } 061 062 final DetailAST prev = rcurly.getPreviousSibling(); 063 if (prev.getType() != TokenTypes.COMMA) { 064 log(rcurly.getLineNo(), "array.trailing.comma"); 065 } 066 } 067}