Skip to content

Commit c6b670b

Browse files
committed
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
1 parent cb01586 commit c6b670b

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractCriteriaMethod.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public String getAttributeDeclarationString() {
5555
modifiers( declaration );
5656
preamble( declaration, paramTypes );
5757
chainSession( declaration );
58-
nullChecks( paramTypes, declaration );
58+
nullChecks( declaration, paramTypes );
5959
createBuilder(declaration);
6060
createCriteriaQuery( declaration );
6161
where( declaration, paramTypes );
@@ -145,12 +145,10 @@ private void createBuilder(StringBuilder declaration) {
145145
.append(".getCriteriaBuilder();\n");
146146
}
147147

148-
void nullChecks(List<String> paramTypes, StringBuilder declaration) {
149-
for ( int i = 0; i< paramNames.size(); i++ ) {
150-
final String paramName = paramNames.get(i);
151-
final String paramType = paramTypes.get(i);
152-
if ( !isNullable(i) && !isPrimitive(paramType) ) {
153-
nullCheck( declaration, paramName );
148+
void nullChecks(StringBuilder declaration, List<String> paramTypes) {
149+
for ( int i = 0; i<paramNames.size(); i++ ) {
150+
if ( isNonNull(i, paramTypes) ) {
151+
nullCheck( declaration, paramNames.get(i) );
154152
}
155153
}
156154
}

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,20 +162,25 @@ void parameters(List<String> paramTypes, StringBuilder declaration) {
162162
declaration
163163
.append(", ");
164164
}
165-
final String paramType = paramTypes.get(i);
166-
if ( !isNullable(i) && !isPrimitive(paramType)
167-
|| isSessionParameter(paramType) ) {
165+
if ( isNonNull(i, paramTypes) ) {
168166
notNull( declaration );
169167
}
170168
declaration
171-
.append(annotationMetaEntity.importType(paramType))
169+
.append(annotationMetaEntity.importType(paramTypes.get(i)))
172170
.append(" ")
173171
.append(parameterName(paramNames.get(i)));
174172
}
175173
declaration
176174
.append(")");
177175
}
178176

177+
boolean isNonNull(int i, List<String> paramTypes) {
178+
final String paramType = paramTypes.get(i);
179+
return !isNullable(i) && !isPrimitive(paramType)
180+
|| isSessionParameter(paramType)
181+
|| isSpecialParam(paramType);
182+
}
183+
179184
static boolean isSessionParameter(String paramType) {
180185
return SESSION_TYPES.contains(paramType);
181186
}

tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/QueryMethod.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,9 @@ public String getAttributeDeclarationString() {
9090
final List<String> paramTypes = parameterTypes();
9191
final StringBuilder declaration = new StringBuilder();
9292
comment( declaration );
93-
modifiers( paramTypes, declaration );
93+
modifiers( declaration, paramTypes );
9494
preamble( declaration, paramTypes );
95+
nullChecks( declaration, paramTypes );
9596
createSpecification( declaration );
9697
handleRestrictionParameters( declaration, paramTypes );
9798
collectOrdering( declaration, paramTypes, containerType );
@@ -301,7 +302,7 @@ private void comment(StringBuilder declaration) {
301302
.append("\n **/\n");
302303
}
303304

304-
private void modifiers(List<String> paramTypes, StringBuilder declaration) {
305+
private void modifiers(StringBuilder declaration, List<String> paramTypes) {
305306
boolean hasVarargs = paramTypes.stream().anyMatch(ptype -> ptype.endsWith("..."));
306307
if ( hasVarargs ) {
307308
declaration
@@ -321,6 +322,16 @@ private void modifiers(List<String> paramTypes, StringBuilder declaration) {
321322
}
322323
}
323324

325+
void nullChecks(StringBuilder declaration, List<String> paramTypes) {
326+
for ( int i = 0; i<paramNames.size(); i++ ) {
327+
final String paramType = paramTypes.get( i );
328+
// we don't do null checks on query parameters
329+
if ( isSessionParameter( paramType ) || isSpecialParam( paramType) ) {
330+
nullCheck( declaration, paramNames.get(i) );
331+
}
332+
}
333+
}
334+
324335
@Override
325336
public String getAttributeNameDeclarationString() {
326337
StringBuilder declaration = new StringBuilder( queryString.length() + 200 );

0 commit comments

Comments
 (0)