Re: Package and class declaration versus the directory and file names
Oliver Burn <[email protected]> Wed, 11 Aug 2010 20:41:01 +1000
| Newsgroups | gmane.comp.java.audit.checkstyle.user |
|---|---|
| Message-ID | <[email protected]> |
Thanks - do you mind if I add these to the next release of Checkstyle? On Wed, Aug 4, 2010 at 14:25, Richard Walker <[email protected]>wrote: > On 4 August 2010 11:12, Oliver Burn <[email protected]> wrote: > > All available checks are listed at > > http://checkstyle.sourceforge.net/availablechecks.html > > Yes, I did check that list first. > > > There are no checks for what you are looking for. Typically the compiler > > or IDE warns about these errors. > > Except that neither my IDE (Emacs) nor compiler (Sun, oops, Oracle JDK > javac) does. > > So after a few hours, I now have the following two checks working. > I have not done any polishing; I attach in case anyone else is interested. > > > 1. > > import com.puppycrawl.tools.checkstyle.api.*; > > public class PackageMatchesDirectory extends Check { > > private String dirSearchString = ""; > private int dirSearchStringLength; > > public void setDirSearchString(String s) { > dirSearchString = s; > dirSearchStringLength = dirSearchString.length(); > } > > @Override > public int[] getDefaultTokens() > { > return new int[]{TokenTypes.PACKAGE_DEF}; > } > > @Override > public void visitToken(DetailAST ast) > { > DetailAST nameAST = ast.getLastChild().getPreviousSibling(); > FullIdent full = FullIdent.createFullIdent(nameAST); > > String thisFilename = getFileContents().getFilename(); > > /* Strip away everything up to and including dirSearchString */ > int srcPosition = thisFilename.indexOf(dirSearchString); > if (srcPosition == -1) { > log(ast.getLineNo(), > "attempt to check source code not in " + > dirSearchString + " directory"); > return; > } > > thisFilename = thisFilename.substring(srcPosition + > dirSearchStringLength); > srcPosition = thisFilename.lastIndexOf("/"); > if (srcPosition == -1) { > log(ast.getLineNo(), > "source file at top level has a package declaration"); > return; > } > > String thisDirname = thisFilename.substring(0,srcPosition); > > if (!(thisDirname.replace('/','.').equals(full.getText()))) { > log(ast.getLineNo(), > "package declaration does not match directory path"); > > } > } > > } > > > 2. > > import com.puppycrawl.tools.checkstyle.api.*; > > public class OuterTypeMatchesFilename extends Check { > > private boolean haveSeenFirstToken; > > @Override > public int[] getDefaultTokens() > { > return new int[] {TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, > TokenTypes.ENUM_DEF, TokenTypes.ANNOTATION_DEF, }; > } > > @Override > public void beginTree(DetailAST ast) > { > haveSeenFirstToken = false; > } > > @Override > public void visitToken(DetailAST ast) > { > /* Only check first declaration */ > if (haveSeenFirstToken) { > return; > } > haveSeenFirstToken = true; > > String outerTypeName = > ast.findFirstToken(TokenTypes.IDENT).getText(); > > > String thisFilename = getFileContents().getFilename(); > > /* Strip away everything up to and including last slash, and > .java suffix */ > int srcPosition = thisFilename.lastIndexOf("/"); > thisFilename = thisFilename.substring(srcPosition + 1); > > if (!thisFilename.endsWith(".java")) { > log(ast.getLineNo(), > "filename does not end in .java"); > return; > } > > thisFilename = thisFilename.substring(0,thisFilename.length()-5); > > if (!(thisFilename.equals(outerTypeName))) { > log(ast.getLineNo(), > "outer type declaration does not match filename"); > > } > } > > } > > > ------------------------------------------------------------------------------ > The Palm PDK Hot Apps Program offers developers who use the > Plug-In Development Kit to bring their C/C++ apps to Palm for a share > of $1 Million in cash or HP Products. Visit us here for more details: > http://p.sf.net/sfu/dev2dev-palm > _______________________________________________ > Checkstyle-user mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/checkstyle-user > ------------------------------------------------------------------------------ This SF.net email is sponsored by Make an app they can't live without Enter the BlackBerry Developer Challenge http://p.sf.net/sfu/RIM-dev2dev _______________________________________________ Checkstyle-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/checkstyle-user