From 98231804c3dc39cfd3745e76a2a5fb8a29b94b33 Mon Sep 17 00:00:00 2001
From: Johannes Feichtner <343448+Churro@users.noreply.github.com>
Date: Wed, 8 Mar 2023 07:31:28 +0100
Subject: [PATCH] feat(manager/gradle): add support for map notation deps in
 Groovy maps (#20798)

---
 lib/modules/manager/gradle/parser.spec.ts     |  6 +++++
 .../manager/gradle/parser/assignments.ts      | 25 +++++++++++--------
 .../manager/gradle/parser/dependencies.ts     |  2 +-
 3 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/lib/modules/manager/gradle/parser.spec.ts b/lib/modules/manager/gradle/parser.spec.ts
index be59d51b67..3d45f553b8 100644
--- a/lib/modules/manager/gradle/parser.spec.ts
+++ b/lib/modules/manager/gradle/parser.spec.ts
@@ -157,6 +157,7 @@ describe('modules/manager/gradle/parser', () => {
             releaseCoroutines: "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.26.1-eap13"
             api: "org.slf4j:slf4j-api:$slfj4Version",
           ]
+          foo = [ group: "org.slf4j", name: "slf4j-ext", version: slfj4Version ]
         `;
 
         const { deps } = parseGradle(input);
@@ -176,6 +177,11 @@ describe('modules/manager/gradle/parser', () => {
             groupName: 'slfj4Version',
             currentValue: '2.0.0',
           },
+          {
+            depName: 'org.slf4j:slf4j-ext',
+            groupName: 'slfj4Version',
+            currentValue: '2.0.0',
+          },
         ]);
       });
     });
diff --git a/lib/modules/manager/gradle/parser/assignments.ts b/lib/modules/manager/gradle/parser/assignments.ts
index 9b5ccbd49b..a058020618 100644
--- a/lib/modules/manager/gradle/parser/assignments.ts
+++ b/lib/modules/manager/gradle/parser/assignments.ts
@@ -13,6 +13,7 @@ import {
   storeInTokenMap,
   storeVarToken,
 } from './common';
+import { qGroovyMapNotationDependencies } from './dependencies';
 import { handleAssignment } from './handlers';
 
 // foo = "1.2.3"
@@ -65,16 +66,20 @@ const qKotlinSingleExtraVarAssignment = q
   })
   .handler(cleanupTempVars);
 
-// foo: "1.2.3"
-const qGroovySingleMapOfVarAssignment = q
-  .sym(storeVarToken)
-  .handler(prependNestingDepth)
-  .handler(coalesceVariable)
-  .handler((ctx) => storeInTokenMap(ctx, 'keyToken'))
-  .op(':')
-  .join(qTemplateString)
-  .handler((ctx) => storeInTokenMap(ctx, 'valToken'))
-  .handler(handleAssignment);
+const qGroovySingleMapOfVarAssignment = q.alt(
+  // foo: [group: "foo", name: "bar", version: "1.2.3"]
+  q.begin<Ctx>().join(qGroovyMapNotationDependencies).end(),
+  // foo: "1.2.3"
+  q
+    .sym(storeVarToken)
+    .handler(prependNestingDepth)
+    .handler(coalesceVariable)
+    .handler((ctx) => storeInTokenMap(ctx, 'keyToken'))
+    .op(':')
+    .join(qTemplateString)
+    .handler((ctx) => storeInTokenMap(ctx, 'valToken'))
+    .handler(handleAssignment)
+);
 
 const qGroovyMapOfExpr = (
   search: q.QueryBuilder<Ctx, parser.Node>
diff --git a/lib/modules/manager/gradle/parser/dependencies.ts b/lib/modules/manager/gradle/parser/dependencies.ts
index 6336337902..0ec2b03129 100644
--- a/lib/modules/manager/gradle/parser/dependencies.ts
+++ b/lib/modules/manager/gradle/parser/dependencies.ts
@@ -79,7 +79,7 @@ const qDependencySet = q
   .handler(cleanupTempVars);
 
 // group: "foo", name: "bar", version: "1.2.3"
-const qGroovyMapNotationDependencies = q
+export const qGroovyMapNotationDependencies = q
   .sym<Ctx>('group')
   .op(':')
   .join(qGroupId)
-- 
GitLab