[jOOQ/jOOQ#11129] Log a warning when users call deprecated Param.setValue(), setConverted(), setInline()

This commit is contained in:
Lukas Eder 2020-12-15 15:33:10 +01:00
parent f884803879
commit e210b1a7ee
8 changed files with 135 additions and 55 deletions

View File

@ -56,6 +56,7 @@ import org.jooq.Param;
import org.jooq.ParamMode;
import org.jooq.UDTRecord;
import org.jooq.conf.ParamType;
import org.jooq.tools.JooqLogger;
import org.jooq.tools.StringUtils;
/**
@ -63,17 +64,17 @@ import org.jooq.tools.StringUtils;
*
* @author Lukas Eder
*/
abstract class AbstractParam<T> extends AbstractField<T> implements Param<T> {
abstract class AbstractParam<T> extends AbstractParamX<T> {
/**
* Generated UID
*/
private static final long serialVersionUID = 1311856649676227970L;
private static final Clause[] CLAUSES = { FIELD, FIELD_VALUE };
private static final long serialVersionUID = 1311856649676227970L;
private static final Clause[] CLAUSES = { FIELD, FIELD_VALUE };
private final String paramName;
T value;
private boolean inline;
private final String paramName;
T value;
private boolean inline;
AbstractParam(T value, DataType<T> type) {
this(value, type, null);
@ -130,12 +131,7 @@ abstract class AbstractParam<T> extends AbstractField<T> implements Param<T> {
// ------------------------------------------------------------------------
@Override
public final void setValue(T value) {
setConverted(value);
}
@Override
public final void setConverted(Object value) {
final void setConverted0(Object value) {
this.value = getDataType().convert(value);
}
@ -150,7 +146,7 @@ abstract class AbstractParam<T> extends AbstractField<T> implements Param<T> {
}
@Override
public final void setInline(boolean inline) {
final void setInline0(boolean inline) {
this.inline = inline;
}

View File

@ -0,0 +1,95 @@
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq.impl;
import org.jooq.DataType;
import org.jooq.Name;
import org.jooq.Param;
import org.jooq.tools.JooqLogger;
/**
* A base implementation for {@link Param} handling deprecation warnings, see
* [#11129]
*
* @author Lukas Eder
*/
abstract class AbstractParamX<T> extends AbstractField<T> implements Param<T> {
/**
* Generated UID
*/
private static final long serialVersionUID = 1311856649676227970L;
private static final JooqLogger log = JooqLogger.getLogger(AbstractParam.class);
AbstractParamX(Name name, DataType<T> type) {
super(name, type);
}
// ------------------------------------------------------------------------
// XXX: Param API
// ------------------------------------------------------------------------
@Override
@Deprecated
public final void setValue(T value) {
log.warn("Deprecation", "org.jooq.Param will soon be made immutable. It is recommended to no longer use its deprecated, mutating methods.", new UnsupportedOperationException("Param.setValue"));
setConverted0(value);
}
final void setValue0(T value) {
setConverted0(value);
}
@Override
@Deprecated
public final void setConverted(Object value) {
log.warn("Deprecation", "org.jooq.Param will soon be made immutable. It is recommended to no longer use its deprecated, mutating methods.", new UnsupportedOperationException("Param.setConverted"));
setConverted0(value);
}
abstract void setConverted0(Object value);
@Override
@Deprecated
public final void setInline(boolean inline) {
log.warn("Deprecation", "org.jooq.Param will soon be made immutable. It is recommended to no longer use its deprecated, mutating methods.", new UnsupportedOperationException("Param.setInline"));
setInline0(inline);
}
abstract void setInline0(boolean inline);
}

View File

@ -175,7 +175,7 @@ abstract class AbstractQuery extends AbstractQueryPart implements Query {
throw new IllegalArgumentException("No such parameter : " + param);
for (Param<?> p : params) {
p.setConverted(value);
((AbstractParamX<?>) p).setConverted0(value);
closeIfNecessary(p);
}
@ -195,8 +195,8 @@ abstract class AbstractQuery extends AbstractQueryPart implements Query {
if (index < 1 || index > params.length)
throw new IllegalArgumentException("Index out of range for Query parameters : " + index);
Param<?> param = params[index - 1];
param.setConverted(value);
AbstractParamX<?> param = (AbstractParamX<?>) params[index - 1];
param.setConverted0(value);
closeIfNecessary(param);
return this;
}

View File

@ -55,12 +55,12 @@ import org.jooq.conf.ParamType;
* not needed.
*/
@Deprecated
final class ConvertedVal<T> extends AbstractField<T> implements Param<T> {
final class ConvertedVal<T> extends AbstractParamX<T> {
private static final long serialVersionUID = 1258437916133900173L;
final Param<?> delegate;
final AbstractParamX<?> delegate;
ConvertedVal(Param<?> delegate, DataType<T> type) {
ConvertedVal(AbstractParamX<?> delegate, DataType<T> type) {
super(delegate.getUnqualifiedName(), type);
this.delegate = delegate instanceof ConvertedVal ? ((ConvertedVal<?>) delegate).delegate : delegate;
@ -90,18 +90,13 @@ final class ConvertedVal<T> extends AbstractField<T> implements Param<T> {
}
@Override
public final void setValue(T value) {
delegate.setConverted(value);
public final void setConverted0(Object value) {
delegate.setConverted0(value);
}
@Override
public final void setConverted(Object value) {
delegate.setConverted(value);
}
@Override
public final void setInline(boolean inline) {
delegate.setInline(inline);
public final void setInline0(boolean inline) {
delegate.setInline0(inline);
}
@Override

View File

@ -23522,8 +23522,8 @@ public class DSL {
@NotNull
@Support
public static <T> Param<T> inline(T value) {
Param<T> val = val(value);
val.setInline(true);
AbstractParamX<T> val = (AbstractParamX<T>) val(value);
val.setInline0(true);
return val;
}
@ -24365,8 +24365,8 @@ public class DSL {
@NotNull
@Support
public static <T> Param<T> inline(Object value, Class<T> type) {
Param<T> val = val(value, type);
val.setInline(true);
AbstractParamX<T> val = (AbstractParamX<T>) val(value, type);
val.setInline0(true);
return val;
}
@ -24389,8 +24389,8 @@ public class DSL {
@NotNull
@Support
public static <T> Param<T> inline(Object value, Field<T> field) {
Param<T> val = val(value, field);
val.setInline(true);
AbstractParamX<T> val = (AbstractParamX<T>) val(value, field);
val.setInline0(true);
return val;
}
@ -24413,8 +24413,8 @@ public class DSL {
@NotNull
@Support
public static <T> Param<T> inline(Object value, DataType<T> type) {
Param<T> val = val(value, type);
val.setInline(true);
AbstractParamX<T> val = (AbstractParamX<T>) val(value, type);
val.setInline0(true);
return val;
}

View File

@ -375,7 +375,7 @@ final class Expression<T> extends AbstractTransformable<T> {
Param<U> result = val(u);
if (((Param<?>) rhs).isInline())
result.setInline(true);
((AbstractParamX<?>) result).setInline0(true);
return result;
}

View File

@ -51,12 +51,12 @@ import org.jooq.conf.ParamType;
*
* @author Lukas Eder
*/
final class LazyVal<T> extends AbstractField<T> implements Param<T> {
final class LazyVal<T> extends AbstractParamX<T> {
private static final long serialVersionUID = 1258437916133900173L;
private final T value;
private final Field<T> field;
private transient Param<T> delegate;
private static final long serialVersionUID = 1258437916133900173L;
private final T value;
private final Field<T> field;
private transient AbstractParamX<T> delegate;
LazyVal(T value, Field<T> field) {
super(AbstractParam.name(value, null), field.getDataType());
@ -67,7 +67,7 @@ final class LazyVal<T> extends AbstractField<T> implements Param<T> {
private final void init() {
if (delegate == null)
delegate = DSL.val(value, field);
delegate = (AbstractParamX<T>) DSL.val(value, field);
}
// ------------------------------------------------------------------------
@ -103,21 +103,15 @@ final class LazyVal<T> extends AbstractField<T> implements Param<T> {
}
@Override
public final void setValue(T value) {
public final void setConverted0(Object value) {
init();
delegate.setValue(value);
delegate.setConverted0(value);
}
@Override
public final void setConverted(Object value) {
public final void setInline0(boolean inline) {
init();
delegate.setConverted(value);
}
@Override
public final void setInline(boolean inline) {
init();
delegate.setInline(inline);
delegate.setInline0(inline);
}
@Override

View File

@ -117,13 +117,13 @@ final class Val<T> extends AbstractParam<T> {
final Val<T> copy(Object newValue) {
Val<T> w = new Val<>(getDataType().convert(newValue), getDataType(), getParamName());
w.setInline(isInline());
w.setInline0(isInline());
return w;
}
final <U> Val<U> convertTo0(DataType<U> type) {
Val<U> w = new Val<>(type.convert(getValue()), type, getParamName());
w.setInline(isInline());
w.setInline0(isInline());
return w;
}