From add8767a6871a5dfcb429e299da242c8833eed5e Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 5 Dec 2018 11:50:09 +0100 Subject: [PATCH] [#5215] Companion object for routine classes generated by ScalaGenerator cause java.lang.IllegalAccessError at runtime --- .../java/org/jooq/codegen/JavaGenerator.java | 6 +-- .../java/org/jooq/impl/AbstractRoutine.java | 12 ++++++ .../src/main/java/org/jooq/impl/Internal.java | 41 +++++++++++++++++++ pom.xml | 3 +- 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java index d279003594..76f4edddae 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -4979,7 +4979,7 @@ public class JavaGenerator extends AbstractGenerator { out.tab(1).javadoc("The parameter %s.%s", parameter.getQualifiedOutputName(), parameterComment(paramComment)); out.tab(1).println("val %s : %s[%s] = %s.createParameter(\"%s\", %s, %s, %s" + converterTemplate(converter) + converterTemplate(binding) + ")", - paramId, Parameter.class, paramType, AbstractRoutine.class, paramName, paramTypeRef, isDefaulted, isUnnamed, converter, binding); + paramId, Parameter.class, paramType, Internal.class, paramName, paramTypeRef, isDefaulted, isUnnamed, converter, binding); } out.println("}"); @@ -5015,8 +5015,8 @@ public class JavaGenerator extends AbstractGenerator { if (!printDeprecationIfUnknownType(out, paramTypeFull)) out.tab(1).javadoc("The parameter %s.%s", parameter.getQualifiedOutputName(), parameterComment(paramComment)); - out.tab(1).println("public static final %s<%s> %s = createParameter(\"%s\", %s, %s, %s" + converterTemplate(converter) + converterTemplate(binding) + ");", - Parameter.class, paramType, paramId, paramName, paramTypeRef, isDefaulted, isUnnamed, converter, binding); + out.tab(1).println("public static final %s<%s> %s = %s.createParameter(\"%s\", %s, %s, %s" + converterTemplate(converter) + converterTemplate(binding) + ");", + Parameter.class, paramType, paramId, Internal.class, paramName, paramTypeRef, isDefaulted, isUnnamed, converter, binding); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index 82f160700c..273f053d2e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -1523,7 +1523,10 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin * {@link Parameter#isDefaulted()} * @param isUnnamed Whether the parameter is unnamed (see * {@link Parameter#isUnnamed()}. + * + * @deprecated - Please, re-generate your routine code. */ + @Deprecated protected static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed) { return createParameter(name, type, isDefaulted, isUnnamed, null, null); } @@ -1538,7 +1541,10 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin * {@link Parameter#isDefaulted()} * @param isUnnamed Whether the parameter is unnamed (see * {@link Parameter#isUnnamed()}. + * + * @deprecated - Please, re-generate your routine code. */ + @Deprecated protected static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Converter converter) { return createParameter(name, type, isDefaulted, isUnnamed, converter, null); } @@ -1553,7 +1559,10 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin * {@link Parameter#isDefaulted()} * @param isUnnamed Whether the parameter is unnamed (see * {@link Parameter#isUnnamed()}. + * + * @deprecated - Please, re-generate your routine code. */ + @Deprecated protected static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Binding binding) { return createParameter(name, type, isDefaulted, isUnnamed, null, binding); } @@ -1568,7 +1577,10 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin * {@link Parameter#isDefaulted()} * @param isUnnamed Whether the parameter is unnamed (see * {@link Parameter#isUnnamed()}. + * + * @deprecated - Please, re-generate your routine code. */ + @Deprecated @SuppressWarnings("unchecked") protected static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Converter converter, Binding binding) { final Binding actualBinding = DefaultBinding.newBinding(converter, type, binding); diff --git a/jOOQ/src/main/java/org/jooq/impl/Internal.java b/jOOQ/src/main/java/org/jooq/impl/Internal.java index fa2b0f1d18..c3b32cfc8a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Internal.java +++ b/jOOQ/src/main/java/org/jooq/impl/Internal.java @@ -37,11 +37,15 @@ */ package org.jooq.impl; +import org.jooq.Binding; +import org.jooq.Converter; +import org.jooq.DataType; import org.jooq.ForeignKey; import org.jooq.Identity; import org.jooq.Index; import org.jooq.Name; import org.jooq.OrderField; +import org.jooq.Parameter; import org.jooq.Record; import org.jooq.Table; import org.jooq.TableField; @@ -123,6 +127,9 @@ public final class Internal { return result; } + /** + * Factory method for path aliases. + */ public static final Name createPathAlias(Table child, ForeignKey path) { Name name = DSL.name(path.getName()); @@ -138,5 +145,39 @@ public final class Internal { return DSL.name("alias_" + Tools.hash(name)); } + /** + * Factory method for parameters. + */ + public static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed) { + return createParameter(name, type, isDefaulted, isUnnamed, null, null); + } + + /** + * Factory method for parameters. + */ + public static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Converter converter) { + return createParameter(name, type, isDefaulted, isUnnamed, converter, null); + } + + /** + * Factory method for parameters. + */ + public static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Binding binding) { + return createParameter(name, type, isDefaulted, isUnnamed, null, binding); + } + + /** + * Factory method for parameters. + */ + @SuppressWarnings("unchecked") + public static final Parameter createParameter(String name, DataType type, boolean isDefaulted, boolean isUnnamed, Converter converter, Binding binding) { + final Binding actualBinding = DefaultBinding.newBinding(converter, type, binding); + final DataType actualType = converter == null && binding == null + ? (DataType) type + : type.asConvertedDataType(actualBinding); + + return new ParameterImpl(name, actualType, actualBinding, isDefaulted, isUnnamed); + } + private Internal() {} } diff --git a/pom.xml b/pom.xml index cc7a628e20..a09374e420 100644 --- a/pom.xml +++ b/pom.xml @@ -272,7 +272,7 @@ net.alchim31.maven scala-maven-plugin - 3.4.2 + 3.4.4 @@ -339,6 +339,7 @@ +