package org.ovirt.checkstyle.checks; import com.puppycrawl.tools.checkstyle.api.AbstractCheck; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; /** * Since GWT can't handle member variables which have the private modifier, this check was added to make sure it is not * used in the packages that need to undergo GWT compilation. */ public class NoFinalMemberCheck extends AbstractCheck { private boolean run = true; /** This check is not configurable */ @Override public int[] getDefaultTokens() { return new int[] { TokenTypes.VARIABLE_DEF}; } @Override public void visitToken(DetailAST aAST) { if (run) { if (aAST.getType() == TokenTypes.VARIABLE_DEF // A variable && aAST.getParent().getType() == TokenTypes.OBJBLOCK // which is a class variable && aAST.getParent().getParent().getType() != TokenTypes.ENUM_DEF // and not in an enum ) { // find the modifiers DetailAST child = aAST.getFirstChild(); while (child != null) { // final is only allowed for statics (i.e., constants) if (child.branchContains(TokenTypes.FINAL) && !child.branchContains(TokenTypes.LITERAL_STATIC)) { log(child.getLineNo(), child.getColumnNo(), "non-static final member variables are not allowed"); } child = child.getNextSibling(); } } } } public void setRun(boolean run) { this.run = run; } }