1 package com.puppycrawl.tools.checkstyle.checks.naming; 20 21 import com.puppycrawl.tools.checkstyle.api.DetailAST; 22 import com.puppycrawl.tools.checkstyle.api.TokenTypes; 23 import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; 24 25 38 public final class AbstractClassNameCheck extends AbstractFormatCheck 39 { 40 41 private static final String DEFAULT_FORMAT = "^Abstract.*$|^.*Factory$"; 42 43 44 public AbstractClassNameCheck() 45 { 46 super(DEFAULT_FORMAT); 47 } 48 49 50 public int[] getDefaultTokens() 51 { 52 return new int[]{TokenTypes.CLASS_DEF}; 53 } 54 55 56 public int[] getRequiredTokens() 57 { 58 return getDefaultTokens(); 59 } 60 61 62 public void visitToken(DetailAST aAST) 63 { 64 switch (aAST.getType()) { 65 case TokenTypes.CLASS_DEF: 66 visitClassDef(aAST); 67 break; 68 default: 69 throw new IllegalStateException (aAST.toString()); 70 } 71 } 72 73 77 private void visitClassDef(DetailAST aAST) 78 { 79 if (isAbstract(aAST)) { 80 final String className = 81 aAST.findFirstToken(TokenTypes.IDENT).getText(); 82 83 if (!isMatchingClassName(className)) { 84 log(aAST.getLineNo(), aAST.getColumnNo(), 85 "illegal.abstract.class.name", className, getFormat()); 86 } 87 } 88 } 89 90 94 private boolean isAbstract(DetailAST aAST) 95 { 96 final DetailAST abstractAST = aAST.findFirstToken(TokenTypes.MODIFIERS) 97 .findFirstToken(TokenTypes.ABSTRACT); 98 99 return abstractAST != null; 100 } 101 102 106 private boolean isMatchingClassName(String aClassName) 107 { 108 return getRegexp().matcher(aClassName).find(); 109 } 110 } 111 | Popular Tags |