From 0251dcff1fa53ec3e23182be0ad946deede43abf Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 23 Dec 2011 14:42:04 +0000 Subject: [PATCH] [#1015] FindBugs: 7 occurrences of "Bad attempt to compute absolute value of signed 32-bit hashcode" --- jOOQ/src/main/java/org/jooq/impl/AbstractSelect.java | 2 +- jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java | 8 ++++---- jOOQ/src/main/java/org/jooq/impl/MergeImpl.java | 4 ++-- jOOQ/src/main/java/org/jooq/impl/Util.java | 8 ++++++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractSelect.java index a4bd549fbb..994c917281 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractSelect.java @@ -123,7 +123,7 @@ abstract class AbstractSelect extends AbstractResultQuery i public final Table asTable() { // Its usually better to alias nested selects that are used in // the FROM clause of a query - return new SelectQueryAsTable(this).as("alias_" + Math.abs(hashCode())); + return new SelectQueryAsTable(this).as("alias_" + Util.hash(this)); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java index 857da4b0ee..9632e7353b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java @@ -305,8 +305,8 @@ implements toSQLReference0(local); String enclosed = local.render(); - String subqueryName = "limit_" + Math.abs(enclosed.hashCode()); - String rownumName = "rownum_" + Math.abs(enclosed.hashCode()); + String subqueryName = "limit_" + Util.hash(enclosed); + String rownumName = "rownum_" + Util.hash(enclosed); context.sql("select * from (select ") .sql(subqueryName) @@ -368,8 +368,8 @@ implements toSQLReference0(local); String enclosed = local.render(); - String subqueryName = "limit_" + Math.abs(enclosed.hashCode()); - String rownumName = "rownum_" + Math.abs(enclosed.hashCode()); + String subqueryName = "limit_" + Util.hash(enclosed); + String rownumName = "rownum_" + Util.hash(enclosed); context.sql("select * from (select ") .sql(subqueryName) diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index b3629724e2..7db58d8291 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -322,7 +322,7 @@ implements case SQLSERVER: case SYBASE: { if (using instanceof Select) { - int hash = Math.abs(using.hashCode()); + int hash = Util.hash(using); context.sql(" as ") .sql("dummy_") @@ -335,7 +335,7 @@ implements // Some fields are unnamed // [#579] Correct this String name = StringUtils.isBlank(field.getName()) - ? "dummy_" + hash + "_" + Math.abs(field.hashCode()) + ? "dummy_" + hash + "_" + Util.hash(field) : field.getName(); context.sql(separator).literal(name); diff --git a/jOOQ/src/main/java/org/jooq/impl/Util.java b/jOOQ/src/main/java/org/jooq/impl/Util.java index e4e5144839..0ae502b1fd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Util.java +++ b/jOOQ/src/main/java/org/jooq/impl/Util.java @@ -628,4 +628,12 @@ final class Util { static QueryPartInternal internal(QueryPart part) { return part.internalAPI(QueryPartInternal.class); } + + /** + * Return a non-negative hash code for a {@link QueryPart}, taking into + * account FindBugs' RV_ABSOLUTE_VALUE_OF_HASHCODE pattern + */ + static int hash(Object object) { + return 0x7FFFFFF & object.hashCode(); + } } \ No newline at end of file