From d766c0e2256e26a650a2140846f8c176313e79eb Mon Sep 17 00:00:00 2001 From: Gavin King Date: Wed, 25 Jun 2025 21:45:32 +0200 Subject: [PATCH] check that arguments to special parameters of repository methods are non-null this is something we just agreed to require in the 1.1. spec --- .../annotation/AbstractCriteriaMethod.java | 12 +++++------- .../processor/annotation/AbstractQueryMethod.java | 13 +++++++++---- .../processor/annotation/QueryMethod.java | 15 +++++++++++++-- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java index 0ec5ee60ba3b..8639056e6969 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java @@ -55,7 +55,7 @@ public String getAttributeDeclarationString() { modifiers( declaration ); preamble( declaration, paramTypes ); chainSession( declaration ); - nullChecks( paramTypes, declaration ); + nullChecks( declaration, paramTypes ); createBuilder(declaration); createCriteriaQuery( declaration ); where( declaration, paramTypes ); @@ -145,12 +145,10 @@ private void createBuilder(StringBuilder declaration) { .append(".getCriteriaBuilder();\n"); } - void nullChecks(List paramTypes, StringBuilder declaration) { - for ( int i = 0; i< paramNames.size(); i++ ) { - final String paramName = paramNames.get(i); - final String paramType = paramTypes.get(i); - if ( !isNullable(i) && !isPrimitive(paramType) ) { - nullCheck( declaration, paramName ); + void nullChecks(StringBuilder declaration, List paramTypes) { + for ( int i = 0; i paramTypes, StringBuilder declaration) { declaration .append(", "); } - final String paramType = paramTypes.get(i); - if ( !isNullable(i) && !isPrimitive(paramType) - || isSessionParameter(paramType) ) { + if ( isNonNull(i, paramTypes) ) { notNull( declaration ); } declaration - .append(annotationMetaEntity.importType(paramType)) + .append(annotationMetaEntity.importType(paramTypes.get(i))) .append(" ") .append(parameterName(paramNames.get(i))); } @@ -176,6 +174,13 @@ void parameters(List paramTypes, StringBuilder declaration) { .append(")"); } + boolean isNonNull(int i, List paramTypes) { + final String paramType = paramTypes.get(i); + return !isNullable(i) && !isPrimitive(paramType) + || isSessionParameter(paramType) + || isSpecialParam(paramType); + } + static boolean isSessionParameter(String paramType) { return SESSION_TYPES.contains(paramType); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java index 7bc388daacf7..8dbefda086e5 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java @@ -90,8 +90,9 @@ public String getAttributeDeclarationString() { final List paramTypes = parameterTypes(); final StringBuilder declaration = new StringBuilder(); comment( declaration ); - modifiers( paramTypes, declaration ); + modifiers( declaration, paramTypes ); preamble( declaration, paramTypes ); + nullChecks( declaration, paramTypes ); createSpecification( declaration ); handleRestrictionParameters( declaration, paramTypes ); collectOrdering( declaration, paramTypes, containerType ); @@ -301,7 +302,7 @@ private void comment(StringBuilder declaration) { .append("\n **/\n"); } - private void modifiers(List paramTypes, StringBuilder declaration) { + private void modifiers(StringBuilder declaration, List paramTypes) { boolean hasVarargs = paramTypes.stream().anyMatch(ptype -> ptype.endsWith("...")); if ( hasVarargs ) { declaration @@ -321,6 +322,16 @@ private void modifiers(List paramTypes, StringBuilder declaration) { } } + void nullChecks(StringBuilder declaration, List paramTypes) { + for ( int i = 0; i