From 1bca9cc4434f512d1908982dcd628680578a2a1a Mon Sep 17 00:00:00 2001 From: Rick Giles Date: Mon, 30 Jun 2003 20:40:13 +0000 Subject: [PATCH] every Home interface must have findByPrimaryKey method --- .../checks/j2ee/AbstractInterfaceCheck.java | 45 +++++++++++++++++++ .../checks/j2ee/HomeInterfaceCheck.java | 22 ++------- .../checks/j2ee/LocalHomeInterfaceCheck.java | 3 ++ .../checks/j2ee/RemoteInterfaceCheck.java | 14 +++++- .../src/tests/HomeInterfaceCheckTest.java | 1 + .../tests/LocalHomeInterfaceCheckTest.java | 1 + 6 files changed, 67 insertions(+), 19 deletions(-) diff --git a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/AbstractInterfaceCheck.java b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/AbstractInterfaceCheck.java index c2e972567..eb2e5597c 100644 --- a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/AbstractInterfaceCheck.java +++ b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/AbstractInterfaceCheck.java @@ -92,4 +92,49 @@ public class AbstractInterfaceCheck } } } + + /** + * Checks that every method of an AST has a throws clause for a given + * Exception. + * @param aAST the AST to check. + * @param aException the name of the Exception class. + */ + protected void checkThrows(DetailAST aAST, String aException) + { + final DetailAST objBlock = aAST.findFirstToken(TokenTypes.OBJBLOCK); + if (objBlock != null) { + DetailAST child = (DetailAST) objBlock.getFirstChild(); + while (child != null) { + if (child.getType() == TokenTypes.METHOD_DEF) { + if (!Utils.hasThrows(child, aException)) { + final DetailAST nameAST = + child.findFirstToken(TokenTypes.IDENT); + final String name = nameAST.getText(); + log(nameAST.getLineNo(), nameAST.getColumnNo(), + "missingthrows.bean", + new Object[] {name, aException}); + } + } + child = (DetailAST) child.getNextSibling(); + } + } + } + + /** + * Checks that an AST contains the definition of a findByPrimaryKey + * method. + * @param aAST the AST to check. + */ + protected void checkFindByPrimaryKey(DetailAST aAST) + { + if (!Utils.hasPublicMethod(aAST, "findByPrimaryKey", false, 1)) + { + final DetailAST nameAST = aAST.findFirstToken(TokenTypes.IDENT); + log( + aAST.getLineNo(), + nameAST.getColumnNo(), + "missingmethod.bean", + new Object[] {"Home interface", "findByPrimaryKey"}); + } + } } diff --git a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/HomeInterfaceCheck.java b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/HomeInterfaceCheck.java index 116bd8a48..afd950e68 100644 --- a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/HomeInterfaceCheck.java +++ b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/HomeInterfaceCheck.java @@ -47,23 +47,9 @@ public class HomeInterfaceCheck super.checkMethods(aAST); // every method must throw java.rmi.RemoteException - final DetailAST objBlock = aAST.findFirstToken(TokenTypes.OBJBLOCK); - if (objBlock != null) { - DetailAST child = (DetailAST) objBlock.getFirstChild(); - while (child != null) { - if (child.getType() == TokenTypes.METHOD_DEF) { - if (!Utils.hasThrows(child, "java.rmi.RemoteException")) { - final DetailAST nameAST = - child.findFirstToken(TokenTypes.IDENT); - final String name = nameAST.getText(); - log(nameAST.getLineNo(), nameAST.getColumnNo(), - "missingthrows.bean", - new Object[] {name, "java.rmi.RemoteException"}); - } - } - child = (DetailAST) child.getNextSibling(); - } - } + checkThrows(aAST, "java.rmi.RemoteException"); + + // a home interface must have a findByPrimaryKey method + checkFindByPrimaryKey(aAST); } - } diff --git a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/LocalHomeInterfaceCheck.java b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/LocalHomeInterfaceCheck.java index 66c419470..a61ce6731 100644 --- a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/LocalHomeInterfaceCheck.java +++ b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/LocalHomeInterfaceCheck.java @@ -46,6 +46,9 @@ public class LocalHomeInterfaceCheck { super.checkMethods(aAST); + // a home interface must have a findByPrimaryKey method + checkFindByPrimaryKey(aAST); + // every method must not throw java.rmi.RemoteException final DetailAST objBlock = aAST.findFirstToken(TokenTypes.OBJBLOCK); if (objBlock != null) { diff --git a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/RemoteInterfaceCheck.java b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/RemoteInterfaceCheck.java index 09a66f723..43d3c26ab 100644 --- a/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/RemoteInterfaceCheck.java +++ b/contrib/j2ee/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/j2ee/RemoteInterfaceCheck.java @@ -26,7 +26,7 @@ import com.puppycrawl.tools.checkstyle.api.DetailAST; * @version 30-Jun-2003 */ public class RemoteInterfaceCheck - extends HomeInterfaceCheck + extends AbstractInterfaceCheck { /** * @see com.puppycrawl.tools.checkstyle.api.Check @@ -37,4 +37,16 @@ public class RemoteInterfaceCheck checkMethods(aAST); } } + + /** + * + * @see com.puppycrawl.tools.checkstyle.checks.j2ee.AbstractInterfaceCheck + */ + protected void checkMethods(DetailAST aAST) + { + super.checkMethods(aAST); + + // every method must throw java.rmi.RemoteException + checkThrows(aAST, "java.rmi.RemoteException"); + } } diff --git a/contrib/j2ee/src/tests/HomeInterfaceCheckTest.java b/contrib/j2ee/src/tests/HomeInterfaceCheckTest.java index 516a9e34d..9daa6857a 100644 --- a/contrib/j2ee/src/tests/HomeInterfaceCheckTest.java +++ b/contrib/j2ee/src/tests/HomeInterfaceCheckTest.java @@ -10,6 +10,7 @@ public class HomeInterfaceCheckTest extends BaseCheckTestCase final DefaultConfiguration checkConfig = createCheckConfig(HomeInterfaceCheck.class); final String[] expected = { + "14:18: Home interface has no findByPrimaryKey method.", "20:19: Method createSomething does not throw java.rmi.RemoteException.", "20:19: Method createSomething does not throw javax.ejb.CreateException.", "20:19: Method createSomething is not public.", diff --git a/contrib/j2ee/src/tests/LocalHomeInterfaceCheckTest.java b/contrib/j2ee/src/tests/LocalHomeInterfaceCheckTest.java index 008428850..4d81b4657 100644 --- a/contrib/j2ee/src/tests/LocalHomeInterfaceCheckTest.java +++ b/contrib/j2ee/src/tests/LocalHomeInterfaceCheckTest.java @@ -10,6 +10,7 @@ public class LocalHomeInterfaceCheckTest extends BaseCheckTestCase final DefaultConfiguration checkConfig = createCheckConfig(LocalHomeInterfaceCheck.class); final String[] expected = { + "12:18: Home interface has no findByPrimaryKey method.", "18:19: Method createSomething does not throw javax.ejb.CreateException.", "18:19: Method createSomething is not public.", "18:19: Void createSomething method.",