From d2353bd74b16360986cffe6c20b1d9c329199ab2 Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Mon, 7 Aug 2017 15:26:52 -0400 Subject: [PATCH] Add JdbcMapper.WarnOnUnusedParams annotation --- .../java/com/moparisthebest/jdbc/codegen/JdbcMapper.java | 7 +++++++ .../moparisthebest/jdbc/codegen/JdbcMapperProcessor.java | 3 ++- .../java/com/moparisthebest/jdbc/codegen/PersonDAO.java | 4 ++++ .../com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapper.java b/common/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapper.java index e6d7db7..15e99bd 100644 --- a/common/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapper.java +++ b/common/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapper.java @@ -50,6 +50,13 @@ public interface JdbcMapper extends Closeable { String arrayStringTypeName() default ""; } + @Retention(RetentionPolicy.SOURCE) + @Target({ElementType.METHOD}) + /** + * Instead of a compile-time error this will only warn on unused params, mainly for debugging or presenting an unfinished API + */ + public @interface WarnOnUnusedParams {} + @Retention(RetentionPolicy.SOURCE) @Target({ElementType.METHOD}) public @interface SQL { diff --git a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapperProcessor.java b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapperProcessor.java index 94c309d..a0f1d40 100644 --- a/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapperProcessor.java +++ b/jdbcmapper/src/main/java/com/moparisthebest/jdbc/codegen/JdbcMapperProcessor.java @@ -205,6 +205,7 @@ public class JdbcMapperProcessor extends AbstractProcessor { lookupCloseMethod = false; continue; // skip close method } + final JdbcMapper.WarnOnUnusedParams warnOnUnusedParams = eeMethod.getAnnotation(JdbcMapper.WarnOnUnusedParams.class); final JdbcMapper.SQL sql = eeMethod.getAnnotation(JdbcMapper.SQL.class); if (sql == null || sql.value().isEmpty()) { processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "@JdbcMapper.SQL with non-empty query is required on abstract or interface methods", methodElement); @@ -318,7 +319,7 @@ public class JdbcMapperProcessor extends AbstractProcessor { } else if(isPrimitiveInteger(unusedType.getKind()) && maxRows == null && this.allowedMaxRowParamNames.contains(unusedParam.getKey())) { maxRows = CompileTimeResultSetMapper.MaxRows.getMaxRows(unusedParam.getKey(), unusedType.toString()); } else - processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, String.format("@JdbcMapper.SQL method has unused parameter '%s'", unusedParam.getKey()), unusedParam.getValue()); + processingEnv.getMessager().printMessage(warnOnUnusedParams != null ? Diagnostic.Kind.MANDATORY_WARNING : Diagnostic.Kind.ERROR, String.format("@JdbcMapper.SQL method has unused parameter '%s'", unusedParam.getKey()), unusedParam.getValue()); } } diff --git a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java index 7d43f81..a5a71af 100644 --- a/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java +++ b/jdbcmapper/src/test/java/com/moparisthebest/jdbc/codegen/PersonDAO.java @@ -51,6 +51,10 @@ public interface PersonDAO extends JdbcMapper { @JdbcMapper.SQL("SELECT person_no FROM person WHERE last_name = {lastName}") long getPersonNo(String lastName) throws SQLException; + @JdbcMapper.WarnOnUnusedParams + @JdbcMapper.SQL("SELECT person_no FROM person WHERE last_name = {lastName}") + long getPersonNoUnusedParam(String lastName, String unused) throws SQLException; + @JdbcMapper.SQL("SELECT first_name, last_name FROM person WHERE last_name = {lastName}") ResultSet getPeopleResultSet(String lastName) throws SQLException; diff --git a/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java b/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java index 9e874d5..da52fa3 100644 --- a/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java +++ b/presto-sqlparser/src/test/java/com/moparisthebest/jdbc/codegen/PrestoPersonDAO.java @@ -51,6 +51,10 @@ public interface PrestoPersonDAO extends PersonDAO { @JdbcMapper.SQL("SELECT person_no FROM person WHERE last_name = {lastName}") long getPersonNo(String lastName) throws SQLException; + @JdbcMapper.WarnOnUnusedParams + @JdbcMapper.SQL("SELECT person_no FROM person WHERE last_name = {lastName}") + long getPersonNoUnusedParam(String lastName, String unused) throws SQLException; + @JdbcMapper.SQL("SELECT first_name, last_name FROM person WHERE last_name = {lastName}") ResultSet getPeopleResultSet(String lastName) throws SQLException;