[#5215] Companion object for routine classes generated by ScalaGenerator cause java.lang.IllegalAccessError at runtime

This commit is contained in:
lukaseder 2018-12-05 11:50:09 +01:00
parent 0092d91acf
commit add8767a68
4 changed files with 58 additions and 4 deletions

View File

@ -4979,7 +4979,7 @@ public class JavaGenerator extends AbstractGenerator {
out.tab(1).javadoc("The parameter <code>%s</code>.%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 <code>%s</code>.%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);
}
}

View File

@ -1523,7 +1523,10 @@ public abstract class AbstractRoutine<T> 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 <T> Parameter<T> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed) {
return createParameter(name, type, isDefaulted, isUnnamed, null, null);
}
@ -1538,7 +1541,10 @@ public abstract class AbstractRoutine<T> 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 <T, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Converter<T, U> converter) {
return createParameter(name, type, isDefaulted, isUnnamed, converter, null);
}
@ -1553,7 +1559,10 @@ public abstract class AbstractRoutine<T> 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 <T, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Binding<T, U> binding) {
return createParameter(name, type, isDefaulted, isUnnamed, null, binding);
}
@ -1568,7 +1577,10 @@ public abstract class AbstractRoutine<T> 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 <T, X, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Converter<X, U> converter, Binding<T, X> binding) {
final Binding<T, U> actualBinding = DefaultBinding.newBinding(converter, type, binding);

View File

@ -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 <T> Parameter<T> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed) {
return createParameter(name, type, isDefaulted, isUnnamed, null, null);
}
/**
* Factory method for parameters.
*/
public static final <T, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Converter<T, U> converter) {
return createParameter(name, type, isDefaulted, isUnnamed, converter, null);
}
/**
* Factory method for parameters.
*/
public static final <T, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Binding<T, U> binding) {
return createParameter(name, type, isDefaulted, isUnnamed, null, binding);
}
/**
* Factory method for parameters.
*/
@SuppressWarnings("unchecked")
public static final <T, X, U> Parameter<U> createParameter(String name, DataType<T> type, boolean isDefaulted, boolean isUnnamed, Converter<X, U> converter, Binding<T, X> binding) {
final Binding<T, U> actualBinding = DefaultBinding.newBinding(converter, type, binding);
final DataType<U> actualType = converter == null && binding == null
? (DataType<U>) type
: type.asConvertedDataType(actualBinding);
return new ParameterImpl<U>(name, actualType, actualBinding, isDefaulted, isUnnamed);
}
private Internal() {}
}

View File

@ -272,7 +272,7 @@
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.4.2</version>
<version>3.4.4</version>
</plugin>
<plugin>
@ -339,6 +339,7 @@
</modules>