Skip to content

Commit 2a2b995

Browse files
committed
eliminate more unchecked casts and an obsolete method
1 parent d952505 commit 2a2b995

File tree

7 files changed

+191
-176
lines changed

7 files changed

+191
-176
lines changed

hibernate-core/src/main/java/org/hibernate/procedure/internal/ProcedureParameterImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,7 @@ private BindableType<T> getBindableType(QueryParameterBinding<T> binding) {
178178
return type;
179179
}
180180
else if ( binding != null ) {
181-
//noinspection unchecked
182-
return (BindableType<T>) binding.getBindType();
181+
return binding.getBindType();
183182
}
184183
else {
185184
return null;

hibernate-core/src/main/java/org/hibernate/query/internal/QueryParameterBindingsImpl.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ private QueryParameterBindingsImpl(
6565
ParameterMetadataImplementor parameterMetadata) {
6666
this.parameterMetadata = parameterMetadata;
6767
final var queryParameters = parameterMetadata.getRegistrations();
68-
this.parameterBindingMap = linkedMapOfSize( queryParameters.size() );
69-
this.parameterBindingMapByNameOrPosition = mapOfSize( queryParameters.size() );
68+
parameterBindingMap = linkedMapOfSize( queryParameters.size() );
69+
parameterBindingMapByNameOrPosition = mapOfSize( queryParameters.size() );
7070
for ( var queryParameter : queryParameters ) {
7171
parameterBindingMap.put( queryParameter,
7272
createBinding( sessionFactory, parameterMetadata, queryParameter ) );
@@ -84,28 +84,30 @@ else if ( queryParameter.isOrdinal() ) {
8484
}
8585

8686
private static <T> QueryParameterBindingImpl<T> createBinding(
87-
SessionFactoryImplementor factory, ParameterMetadataImplementor parameterMetadata, QueryParameter<T> parameter) {
87+
SessionFactoryImplementor factory,
88+
ParameterMetadataImplementor parameterMetadata,
89+
QueryParameter<T> parameter) {
8890
return new QueryParameterBindingImpl<>( parameter, factory,
8991
parameterMetadata.getInferredParameterType( parameter ) );
9092
}
9193

92-
private QueryParameterBindingsImpl(QueryParameterBindingsImpl original, SessionFactoryImplementor sessionFactory) {
94+
private QueryParameterBindingsImpl(
95+
QueryParameterBindingsImpl original,
96+
SessionFactoryImplementor sessionFactory) {
9397
this.parameterMetadata = original.parameterMetadata;
9498
this.parameterBindingMap = linkedMapOfSize( original.parameterBindingMap.size() );
95-
this.parameterBindingMapByNameOrPosition = mapOfSize( original.parameterBindingMapByNameOrPosition.size() );
96-
for ( var entry : original.parameterBindingMap.entrySet() ) {
97-
parameterBindingMap.put( entry.getKey(), createBinding( sessionFactory, entry.getValue() ) );
98-
}
99-
for ( var entry : parameterBindingMap.entrySet() ) {
100-
final var queryParameter = entry.getKey();
101-
final var parameterBinding = entry.getValue();
99+
this.parameterBindingMapByNameOrPosition =
100+
mapOfSize( original.parameterBindingMapByNameOrPosition.size() );
101+
original.parameterBindingMap.forEach( (key, value) ->
102+
parameterBindingMap.put( key, createBinding( sessionFactory, value ) ) );
103+
parameterBindingMap.forEach( (queryParameter, parameterBinding) -> {
102104
if ( queryParameter.isNamed() ) {
103105
parameterBindingMapByNameOrPosition.put( queryParameter.getName(), parameterBinding );
104106
}
105-
else if ( queryParameter.getPosition() != null ) {
107+
else if ( queryParameter.isOrdinal() ) {
106108
parameterBindingMapByNameOrPosition.put( queryParameter.getPosition(), parameterBinding );
107109
}
108-
}
110+
} );
109111
}
110112

111113
private static <T> QueryParameterBindingImpl<T> createBinding(
@@ -164,10 +166,14 @@ public void validate() {
164166
if ( !entry.getValue().isBound() ) {
165167
final var queryParameter = entry.getKey();
166168
if ( queryParameter.isNamed() ) {
167-
throw new QueryParameterException( "No argument for named parameter ':" + queryParameter.getName() + "'" );
169+
throw new QueryParameterException(
170+
"No argument for named parameter ':"
171+
+ queryParameter.getName() + "'" );
168172
}
169173
else {
170-
throw new QueryParameterException( "No argument for ordinal parameter '?" + queryParameter.getPosition() + "'" );
174+
throw new QueryParameterException(
175+
"No argument for ordinal parameter '?"
176+
+ queryParameter.getPosition() + "'" );
171177
}
172178
}
173179
}
@@ -231,7 +237,8 @@ public QueryKey.ParameterBindingsMemento generateQueryKeyMemento(SharedSessionCo
231237

232238
private void handleQueryParameters(SharedSessionContractImplementor session, MutableCacheKeyImpl mutableCacheKey) {
233239
final var typeConfiguration = session.getFactory().getTypeConfiguration();
234-
// We know that parameters are consumed in processing order, this ensures consistency of generated cache keys
240+
// We know that parameters are consumed in processing order;
241+
// this ensures the consistency of generated cache keys
235242
for ( var entry : parameterBindingMap.entrySet() ) {
236243
final var queryParameter = entry.getKey();
237244
final var binding = entry.getValue();
@@ -301,12 +308,14 @@ else if ( binding.getBindValue() != null ) {
301308

302309
if ( bindType == null ) {
303310
if ( queryParameter.isNamed() ) {
304-
throw new QueryParameterException( "Could not determine mapping type for named parameter ':"
305-
+ queryParameter.getName() + "'" );
311+
throw new QueryParameterException(
312+
"Could not determine mapping type for named parameter ':"
313+
+ queryParameter.getName() + "'" );
306314
}
307315
else {
308-
throw new QueryParameterException( "Could not determine mapping type for ordinal parameter '?"
309-
+ queryParameter.getPosition() + "'" );
316+
throw new QueryParameterException(
317+
"Could not determine mapping type for ordinal parameter '?"
318+
+ queryParameter.getPosition() + "'" );
310319
}
311320
}
312321

hibernate-core/src/main/java/org/hibernate/query/spi/AbstractCommonQueryContract.java

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import jakarta.persistence.Parameter;
1212
import jakarta.persistence.TemporalType;
1313
import jakarta.persistence.metamodel.Type;
14+
import org.checkerframework.checker.nullness.qual.NonNull;
1415
import org.hibernate.FlushMode;
1516
import org.hibernate.HibernateException;
1617
import org.hibernate.Internal;
@@ -144,14 +145,16 @@ protected int getIntegerLiteral(JpaExpression<Number> expression, int defaultVal
144145
if ( expression == null ) {
145146
return defaultValue;
146147
}
147-
else if ( expression instanceof SqmLiteral<?> ) {
148-
return ( (SqmLiteral<Number>) expression ).getLiteralValue().intValue();
148+
else if ( expression instanceof SqmLiteral<Number> numericLiteral ) {
149+
return numericLiteral.getLiteralValue().intValue();
149150
}
150-
else if ( expression instanceof Parameter<?> ) {
151-
final Number parameterValue = getParameterValue( (Parameter<Number>) expression );
152-
return parameterValue == null ? defaultValue : parameterValue.intValue();
151+
else if ( expression instanceof SqmParameter<Number> parameterExpression ) {
152+
final Number number = getParameterValue( parameterExpression );
153+
return number == null ? defaultValue : number.intValue();
154+
}
155+
else {
156+
throw new IllegalArgumentException( "Not an integer literal: " + expression );
153157
}
154-
throw new IllegalArgumentException( "Can't get integer literal value from: " + expression );
155158
}
156159

157160
protected int getMaxRows(SqmSelectStatement<?> selectStatement, int size) {
@@ -171,11 +174,11 @@ protected int getMaxRows(SqmSelectStatement<?> selectStatement, int size) {
171174
}
172175

173176
private Number fetchValue(JpaExpression<Number> expression) {
174-
if ( expression instanceof SqmLiteral<?> ) {
175-
return ((SqmLiteral<Number>) expression).getLiteralValue();
177+
if ( expression instanceof SqmLiteral<Number> numericLiteral ) {
178+
return numericLiteral.getLiteralValue();
176179
}
177-
else if ( expression instanceof SqmParameter<?> ) {
178-
return getParameterValue( (Parameter<Number>) expression );
180+
else if ( expression instanceof SqmParameter<Number> numericParameter ) {
181+
return getParameterValue( numericParameter );
179182
}
180183
else {
181184
throw new IllegalArgumentException( "Can't get max rows value from: " + expression );
@@ -704,30 +707,36 @@ private <P> JavaType<P> getJavaType(Class<P> javaType) {
704707
}
705708

706709
protected QueryParameterBinding<?> locateBinding(Parameter<?> parameter) {
707-
final var bindings = getQueryParameterBindings();
708710
if ( parameter instanceof QueryParameterImplementor<?> parameterImplementor ) {
709711
getCheckOpen();
710-
return bindings.getBinding( getQueryParameter( parameterImplementor ) );
712+
return getQueryParameterBindings().getBinding( getQueryParameter( parameterImplementor ) );
711713
}
712714
else {
713-
final String name = parameter.getName();
714-
final Integer position = parameter.getPosition();
715-
final QueryParameterBinding<?> binding;
716-
if ( name != null ) {
717-
binding = bindings.getBinding( name );
718-
}
719-
else if ( position != null ) {
720-
binding = bindings.getBinding( position );
721-
}
722-
else {
723-
throw new IllegalArgumentException( "Parameter must have either a name or a position" );
715+
return locateBinding( parameter.getName(), parameter.getPosition() );
716+
}
717+
}
718+
719+
private @NonNull QueryParameterBinding<?> locateBinding(String name, Integer position) {
720+
final var bindings = getQueryParameterBindings();
721+
if ( name != null ) {
722+
final var binding = bindings.getBinding( name );
723+
if ( binding == null ) {
724+
// should never occur
725+
throw new IllegalArgumentException( "No binding for given parameter named '" + name + "'" );
724726
}
727+
return binding;
728+
}
729+
else if ( position != null ) {
730+
final var binding = bindings.getBinding( position );
725731
if ( binding == null ) {
726732
// should never occur
727-
throw new IllegalArgumentException( "No binding for given parameter reference [" + parameter + "]" );
733+
throw new IllegalArgumentException( "No binding for given parameter at position " + position );
728734
}
729735
return binding;
730736
}
737+
else {
738+
throw new IllegalArgumentException( "Parameter must have either a name or a position" );
739+
}
731740
}
732741

733742
protected QueryParameterBinding<?> locateBinding(String name) {
@@ -1052,8 +1061,7 @@ public <P> CommonQueryContract setParameterList(String name, P[] values, Class<P
10521061
}
10531062

10541063
public <P> CommonQueryContract setParameterList(String name, P[] values, Type<P> type) {
1055-
final var list = List.of( values );
1056-
locateBinding( name ).setBindValues( list, (BindableType<P>) type );
1064+
locateBinding( name ).setBindValues( List.of( values ), (BindableType<P>) type );
10571065
return this;
10581066
}
10591067

@@ -1153,8 +1161,7 @@ public <P> CommonQueryContract setParameterList(QueryParameter<P> parameter, Col
11531161

11541162
@Override
11551163
public <P> CommonQueryContract setParameterList(QueryParameter<P> parameter, P[] values) {
1156-
final var list = List.of( values );
1157-
locateBinding( parameter ).setBindValues( list );
1164+
locateBinding( parameter ).setBindValues( List.of( values ) );
11581165
return this;
11591166
}
11601167

@@ -1172,8 +1179,7 @@ public <P> CommonQueryContract setParameterList(QueryParameter<P> parameter, P[]
11721179

11731180
@Override
11741181
public <P> CommonQueryContract setParameterList(QueryParameter<P> parameter, P[] values, Type<P> type) {
1175-
final var list = List.of( values );
1176-
locateBinding( parameter ).setBindValues( list, (BindableType<P>) type );
1182+
locateBinding( parameter ).setBindValues( List.of( values ), (BindableType<P>) type );
11771183
return this;
11781184
}
11791185

hibernate-core/src/main/java/org/hibernate/query/spi/QueryParameterBindings.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ default <P> QueryParameterBinding<P> getBinding(QueryParameter<P> parameter) {
9494
* Currently unused and can be safely removed.
9595
*/
9696
@Deprecated(forRemoval = true, since = "6.6")
97-
// @SuppressWarnings({"rawtypes", "unchecked"})
9897
QueryParameterBindings NO_PARAM_BINDINGS = new QueryParameterBindings() {
9998
@Override
10099
public boolean isBound(QueryParameterImplementor<?> parameter) {

0 commit comments

Comments
 (0)