This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 4b7fab4c53 GROOVY-11688: Potential minor improvement to STC error 
message
4b7fab4c53 is described below

commit 4b7fab4c534b734af3e41a27ae90dc3bf662200a
Author: Paul King <[email protected]>
AuthorDate: Sun Jun 1 13:56:05 2025 +1000

    GROOVY-11688: Potential minor improvement to STC error message
---
 .../transform/stc/StaticTypeCheckingVisitor.java   | 24 ++++++++++++----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 2605a17e2e..6e28420b5b 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -3137,13 +3137,13 @@ out:    if ((samParameterTypes.length == 1 && 
isOrImplements(samParameterTypes[0
     private void checkNamedParamsAnnotation(final Parameter param, final 
MapExpression args) {
         if (!isOrImplements(param.getType(), MAP_TYPE)) return;
         List<MapEntryExpression> entryExpressions = 
args.getMapEntryExpressions();
-        Map<Object, Expression> entries = new LinkedHashMap<>();
+        Map<Object, MapEntryExpression> entries = new LinkedHashMap<>();
         for (MapEntryExpression entry : entryExpressions) {
             Object key = entry.getKeyExpression();
             if (key instanceof ConstantExpression) {
                 key = ((ConstantExpression) key).getValue();
             }
-            entries.put(key, entry.getValueExpression());
+            entries.put(key, entry);
         }
         List<String> collectedNames = new ArrayList<>();
         List<AnnotationNode> annotations = 
param.getAnnotations(NAMED_PARAMS_CLASSNODE);
@@ -3177,21 +3177,22 @@ out:    if ((samParameterTypes.length == 1 && 
isOrImplements(samParameterTypes[0
             }
         }
         if (!collectedNames.isEmpty()) {
-            for (Map.Entry<Object, Expression> entry : entries.entrySet()) {
-                if (!collectedNames.contains(entry.getKey())) {
-                    addStaticTypeError("unexpected named arg: " + 
entry.getKey(), args);
+            for (Map.Entry<Object, MapEntryExpression> entry : 
entries.entrySet()) {
+                Object name = entry.getKey();
+                if (!collectedNames.contains(name)) {
+                    addStaticTypeError("unexpected named arg: " + name, 
entry.getValue());
                 }
             }
         }
     }
 
-    private void processNamedParam(final AnnotationConstantExpression value, 
final Map<Object, Expression> entries, final Expression expression, final 
List<String> collectedNames) {
+    private void processNamedParam(final AnnotationConstantExpression value, 
final Map<Object, MapEntryExpression> entries, final MapExpression args, final 
List<String> collectedNames) {
         AnnotationNode namedParam = (AnnotationNode) value.getValue();
         if 
(!namedParam.getClassNode().getName().equals(NamedParam.class.getName())) 
return;
-        processNamedParam(namedParam, entries, expression, collectedNames);
+        processNamedParam(namedParam, entries, args, collectedNames);
     }
 
-    private void processNamedParam(final AnnotationNode namedParam, final 
Map<Object, Expression> entries, final Expression expression, final 
List<String> collectedNames) {
+    private void processNamedParam(final AnnotationNode namedParam, final 
Map<Object, MapEntryExpression> entries, final MapExpression args, final 
List<String> collectedNames) {
         String name = null;
         boolean required = false;
         ClassNode expectedType = null;
@@ -3210,12 +3211,13 @@ out:    if ((samParameterTypes.length == 1 && 
isOrImplements(samParameterTypes[0
         }
         if (!entries.containsKey(name)) {
             if (required) {
-                addStaticTypeError("required named param '" + name + "' not 
found.", expression);
+                addStaticTypeError("required named param '" + name + "' not 
found.", args);
             }
         } else if (expectedType != null) {
-            ClassNode argumentType = 
getDeclaredOrInferredType(entries.get(name));
+            MapEntryExpression entry = entries.get(name);
+            ClassNode argumentType = 
getDeclaredOrInferredType(entry.getValueExpression());
             if (!isAssignableTo(argumentType, expectedType)) {
-                addStaticTypeError("argument for named param '" + name + "' 
has type '" + prettyPrintType(argumentType) + "' but expected '" + 
prettyPrintType(expectedType) + "'.", expression);
+                addStaticTypeError("argument for named param '" + name + "' 
has type '" + prettyPrintType(argumentType) + "' but expected '" + 
prettyPrintType(expectedType) + "'.", entry);
             }
         }
     }

Reply via email to