From d0b1083b127e1a6bb6d7ad1d732be7f2300e624c Mon Sep 17 00:00:00 2001 From: Gavin King Date: Thu, 26 Jun 2025 13:40:27 +0200 Subject: [PATCH] simplifications in QueryMethod --- .../annotation/AbstractQueryMethod.java | 1 - .../annotation/AnnotationMetaEntity.java | 17 +++-- .../processor/annotation/QueryMethod.java | 72 ++++++++----------- 3 files changed, 41 insertions(+), 49 deletions(-) diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java index 2f6620b6e1de..65e43eef6ab6 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AbstractQueryMethod.java @@ -177,7 +177,6 @@ void parameters(List paramTypes, StringBuilder declaration) { boolean isNonNull(int i, List paramTypes) { final String paramType = paramTypes.get(i); return !isNullable(i) && !isPrimitive(paramType) - || isSessionParameter(paramType) || isSpecialParam(paramType); } diff --git a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java index eca690965215..a6fb5a0da243 100644 --- a/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java +++ b/tooling/metamodel-generator/src/main/java/org/hibernate/processor/annotation/AnnotationMetaEntity.java @@ -2017,8 +2017,8 @@ private static boolean isFinderParameterMappingToAttribute(VariableElement param private String[] sessionTypeFromParameters(List paramNames, List paramTypes) { for ( int i = 0; i < paramNames.size(); i ++ ) { final String type = paramTypes.get(i); - final String name = paramNames.get(i); if ( isSessionParameter(type) ) { + final String name = paramNames.get(i); return new String[] { type, name }; } } @@ -2208,7 +2208,6 @@ private void createSingleParameterFinder( // else intentionally fall through case BASIC: case MULTIVALUED: - final List paramPatterns = parameterPatterns( method ); putMember( methodKey, new CriteriaFinderMethod( this, method, @@ -2218,11 +2217,8 @@ private void createSingleParameterFinder( paramNames, paramTypes, parameterNullability(method, entity), - method.getParameters().stream() - .map(param -> isFinderParameterMappingToAttribute(param) - && fieldType == FieldType.MULTIVALUED) - .collect(toList()), - paramPatterns, + parameterMultivalued( method, fieldType ), + parameterPatterns( method ), repository, sessionType[0], sessionType[1], @@ -2239,6 +2235,13 @@ private void createSingleParameterFinder( } } + private static List parameterMultivalued(ExecutableElement method, FieldType fieldType) { + return method.getParameters().stream() + .map( param -> isFinderParameterMappingToAttribute( param ) + && fieldType == FieldType.MULTIVALUED ) + .collect( toList() ); + } + private static FieldType pickStrategy(FieldType fieldType, String sessionType, List profiles) { if ( ( usingStatelessSession(sessionType) || usingReactiveSession(sessionType) ) && !profiles.isEmpty() ) { 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 8dbefda086e5..5dd4012462f7 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 @@ -117,8 +117,7 @@ String specificationType() { @Override void createQuery(StringBuilder declaration) { - final boolean specification = isUsingSpecification(); - if ( specification ) { + if ( isUsingSpecification() ) { if ( isReactive() ) { declaration .append(localSessionName()) @@ -226,9 +225,8 @@ else if ( BOOLEAN.equals(returnTypeName) ) { @Override void setParameters(StringBuilder declaration, List paramTypes, String indent) { for ( int i = 0; i < paramNames.size(); i++ ) { - final String paramName = paramNames.get(i); - final String paramType = paramTypes.get(i); - if ( !isSpecialParam(paramType) ) { + if ( !isSpecialParam( paramTypes.get(i) ) ) { + final String paramName = paramNames.get(i); final int ordinal = i+1; if ( queryString.contains(":" + paramName) ) { declaration.append(indent); @@ -291,8 +289,7 @@ private static void setNamedParameter(StringBuilder declaration, String paramNam private void comment(StringBuilder declaration) { declaration - .append("\n/**"); - declaration + .append("\n/**") .append("\n * Execute the query {@value #") .append(getConstantName()) .append("}.") @@ -303,7 +300,8 @@ private void comment(StringBuilder declaration) { } private void modifiers(StringBuilder declaration, List paramTypes) { - boolean hasVarargs = paramTypes.stream().anyMatch(ptype -> ptype.endsWith("...")); + final boolean hasVarargs = + paramTypes.stream().anyMatch(ptype -> ptype.endsWith("...")); if ( hasVarargs ) { declaration .append("@SafeVarargs\n"); @@ -326,7 +324,7 @@ void nullChecks(StringBuilder declaration, List paramTypes) { for ( int i = 0; i paramTypes) { @Override public String getAttributeNameDeclarationString() { - StringBuilder declaration = new StringBuilder( queryString.length() + 200 ); + final StringBuilder declaration = + new StringBuilder( queryString.length() + 200 ); declaration .append("\n/**\n * @see ") .append("#"); @@ -346,42 +345,33 @@ public String getAttributeNameDeclarationString() { .append( " = \"" ); for ( int i = 0; i < queryString.length(); i++ ) { final char c = queryString.charAt( i ); - switch ( c ) { - case '\r': - declaration.append( "\\r" ); - break; - case '\n': - declaration.append( "\\n" ); - break; - case '\\': - declaration.append( "\\\\" ); - break; - case '"': - declaration.append( "\\\"" ); - break; - default: - declaration.append( c ); - break; - } + declaration.append(switch ( c ) { + case '\r' -> "\\r"; + case '\n' -> "\\n"; + case '\\' -> "\\\\"; + case '"' -> "\\\""; + default -> c; + }); } - return declaration.append("\";").toString(); + return declaration + .append("\";") + .toString(); } private String getConstantName() { final String stem = getUpperUnderscoreCaseFromLowerCamelCase(methodName); - if ( paramTypes.isEmpty() ) { - return stem; - } - else { - return stem + "_" - + paramTypes.stream() - .filter(type -> !isSpecialParam(type)) - .map(type -> type.indexOf('<')>0 ? type.substring(0, type.indexOf('<')) : type) - .map(StringHelper::unqualify) - .map(type -> type.replace("[]", "Array")) - .reduce((x,y) -> x + '_' + y) - .orElse(""); - } + return paramTypes.isEmpty() + || paramTypes.stream().allMatch(AbstractQueryMethod::isSpecialParam) + ? stem + : stem + "_" + paramTypes.stream() + .filter( type -> !isSpecialParam(type) ) + .map( type -> type.indexOf('<') > 0 + ? type.substring(0, type.indexOf('<')) + : type ) + .map( StringHelper::unqualify ) + .map( type -> type.replace("[]", "Array") ) + .reduce( (x, y) -> x + '_' + y ) + .orElseThrow(); } public String getTypeDeclaration() {