From f8a6dfacf1e27f599bb31dca45de9289a56644f7 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Thu, 4 Jul 2019 16:22:08 +0200 Subject: [PATCH] [jOOQ/jOOQ#8900] Make jOOQ compatible with Java 6 - Mostly surround pieces of code with [java-8] preprocessor tags - Added ExceptionTools#sneakyThrow() which is used in MiniJAXB --- .../org/jooq/meta/extensions/ddl/DDLDatabase.java | 2 +- .../jooq/meta/AbstractTypedElementDefinition.java | 5 ++++- .../information_schema/tables/Routines.java | 2 ++ .../main/java/org/jooq/meta/xml/XMLDatabase.java | 3 ++- jOOQ/src/main/java/org/jooq/conf/MiniJAXB.java | 10 ++++++++-- .../java/org/jooq/exception/ExceptionTools.java | 15 +++++++++++++++ .../jooq/impl/AbstractResourceManagingScope.java | 2 ++ .../java/org/jooq/impl/DefaultConfiguration.java | 2 ++ jOOQ/src/main/java/org/jooq/impl/Function.java | 4 ++-- .../main/java/org/jooq/types/YearToSecond.java | 2 -- 10 files changed, 38 insertions(+), 9 deletions(-) diff --git a/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/ddl/DDLDatabase.java b/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/ddl/DDLDatabase.java index 7798364213..b50d93a52b 100644 --- a/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/ddl/DDLDatabase.java +++ b/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/ddl/DDLDatabase.java @@ -105,7 +105,7 @@ public class DDLDatabase extends H2Database { String encoding = getProperties().getProperty("encoding", "UTF-8"); String sort = getProperties().getProperty("sort", "semantic").toLowerCase(); String unqualifiedSchema = getProperties().getProperty("unqualifiedSchema", "none").toLowerCase(); - String defaultNameCase = getProperties().getProperty("defaultNameCase", "as_is").toUpperCase(); + final String defaultNameCase = getProperties().getProperty("defaultNameCase", "as_is").toUpperCase(); boolean parseIgnoreComments = !"false".equalsIgnoreCase(getProperties().getProperty("parseIgnoreComments")); String parseIgnoreCommentStart = getProperties().getProperty("parseIgnoreCommentStart", defaultSettings.getParseIgnoreCommentStart()); String parseIgnoreCommentStop = getProperties().getProperty("parseIgnoreCommentStop", defaultSettings.getParseIgnoreCommentStop()); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java index e65e357ee1..18fa70d164 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractTypedElementDefinition.java @@ -143,6 +143,7 @@ public abstract class AbstractTypedElementDefinition public static final DataType getDataType(Database db, String t, int p, int s) { + // [#8493] Synthetic SQLDataType aliases used by the code generator only if ("OFFSETDATETIME".equalsIgnoreCase(t)) return SQLDataType.OFFSETDATETIME.precision(p); @@ -154,7 +155,9 @@ public abstract class AbstractTypedElementDefinition return SQLDataType.LOCALDATETIME.precision(p); else if ("LOCALTIME".equalsIgnoreCase(t)) return SQLDataType.LOCALTIME.precision(p); - else if (db.getForceIntegerTypesOnZeroScaleDecimals()) + else + + if (db.getForceIntegerTypesOnZeroScaleDecimals()) return DefaultDataType.getDataType(db.getDialect(), t, p, s); DataType result = DefaultDataType.getDataType(db.getDialect(), t); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/information_schema/tables/Routines.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/information_schema/tables/Routines.java index 90283ce1e7..8f3d314cd1 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/information_schema/tables/Routines.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/information_schema/tables/Routines.java @@ -309,6 +309,7 @@ public class Routines extends TableImpl { */ public final TableField AS_LOCATOR = createField("as_locator", org.jooq.impl.SQLDataType.VARCHAR(3), this, ""); + /** * The column information_schema.routines.created. */ @@ -319,6 +320,7 @@ public class Routines extends TableImpl { */ public final TableField LAST_ALTERED = createField("last_altered", org.jooq.impl.SQLDataType.TIMESTAMPWITHTIMEZONE, this, ""); + /** * The column information_schema.routines.new_savepoint_level. */ diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/xml/XMLDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/xml/XMLDatabase.java index 69f5799b2c..0f101e1029 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/xml/XMLDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/xml/XMLDatabase.java @@ -230,7 +230,8 @@ public class XMLDatabase extends AbstractDatabase { info = MiniJAXB.append(info, MiniJAXB.unmarshal(content, InformationSchema.class)); } else - throw t; + // required due to Java 6 + ExceptionTools.sneakyThrow(t); } } diff --git a/jOOQ/src/main/java/org/jooq/conf/MiniJAXB.java b/jOOQ/src/main/java/org/jooq/conf/MiniJAXB.java index b51de32a60..7cbab2b703 100644 --- a/jOOQ/src/main/java/org/jooq/conf/MiniJAXB.java +++ b/jOOQ/src/main/java/org/jooq/conf/MiniJAXB.java @@ -113,7 +113,10 @@ public class MiniJAXB { return; } catch (Throwable t) { - if (ExceptionTools.getCause(t, ClassNotFoundException.class) != null || + if (t instanceof Error) { + ExceptionTools.sneakyThrow(t); + } + else if (ExceptionTools.getCause(t, ClassNotFoundException.class) != null || ExceptionTools.getCause(t, Error.class) != null) { jaxbAvailable = false; log.debug("JAXB is not available from the classpath / module path"); @@ -121,7 +124,7 @@ public class MiniJAXB { else { jaxbAvailable = true; log.debug("JAXB is available from the classpath / module path"); - throw t; + throw new ConfigurationException("Error while reading xml", t); } } } @@ -171,6 +174,9 @@ public class MiniJAXB { return result; } catch (Throwable t) { + if (t instanceof Error) { + ExceptionTools.sneakyThrow(t); + } if (ExceptionTools.getCause(t, ClassNotFoundException.class) != null || ExceptionTools.getCause(t, Error.class) != null) { jaxbAvailable = false; diff --git a/jOOQ/src/main/java/org/jooq/exception/ExceptionTools.java b/jOOQ/src/main/java/org/jooq/exception/ExceptionTools.java index ab37cd350b..13fb5972cc 100644 --- a/jOOQ/src/main/java/org/jooq/exception/ExceptionTools.java +++ b/jOOQ/src/main/java/org/jooq/exception/ExceptionTools.java @@ -74,5 +74,20 @@ public final class ExceptionTools { return null; } + /** + * Sneaky throw any type of Throwable. + */ + public static void sneakyThrow(Throwable throwable) { + ExceptionTools. sneakyThrow0(throwable); + } + + /** + * Sneaky throw any type of Throwable. + */ + @SuppressWarnings("unchecked") + private static void sneakyThrow0(Throwable throwable) throws E { + throw (E) throwable; + } + private ExceptionTools() {} } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResourceManagingScope.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResourceManagingScope.java index 5a84068334..e70e937829 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResourceManagingScope.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResourceManagingScope.java @@ -94,9 +94,11 @@ abstract class AbstractResourceManagingScope extends AbstractScope implements Re return closeable; } + @Override public final R autoClose(R closeable) { DefaultExecuteContext.register(closeable); return closeable; } + } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java b/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java index 46c633bff9..e9ea9ca851 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultConfiguration.java @@ -169,7 +169,9 @@ public class DefaultConfiguration implements Configuration { null, null, null, + null, + dialect, SettingsTools.defaultSettings(), null diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index b36732efe7..eff6f22f3d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -258,8 +258,8 @@ class Function extends AbstractField implements } else if (term == PRODUCT) { @SuppressWarnings({ "unchecked", "rawtypes" }) - Field f = (Field) DSL.field("{0}", arguments.get(0)); - Field negatives = DSL.when(f.lt(zero()), inline(-1)); + final Field f = (Field) DSL.field("{0}", arguments.get(0)); + final Field negatives = DSL.when(f.lt(zero()), inline(-1)); @SuppressWarnings("serial") Field negativesSum = new CustomField("sum", NUMERIC) { diff --git a/jOOQ/src/main/java/org/jooq/types/YearToSecond.java b/jOOQ/src/main/java/org/jooq/types/YearToSecond.java index c5aec087a3..73aa1ca821 100644 --- a/jOOQ/src/main/java/org/jooq/types/YearToSecond.java +++ b/jOOQ/src/main/java/org/jooq/types/YearToSecond.java @@ -125,13 +125,11 @@ public final class YearToSecond extends Number implements Interval, Comparable