From 5a4b7eead13cb85e05ad30f30bd42d2b3f651daf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Wielgo=C5=82aski?= <piotr.wielgolaski@tomtom.com>
Date: Tue, 31 May 2022 16:23:47 +0200
Subject: [PATCH] feat(maven): Parse maven dependency.optional into depType
 (#15775)

---
 .../manager/maven/__fixtures__/simple.pom.xml |  6 ++++++
 .../maven/__snapshots__/extract.spec.ts.snap  | 19 +++++++++++++++----
 .../maven/__snapshots__/index.spec.ts.snap    | 19 +++++++++++++++----
 lib/modules/manager/maven/extract.spec.ts     |  5 +++++
 lib/modules/manager/maven/extract.ts          |  2 ++
 lib/modules/manager/maven/index.spec.ts       |  4 ++++
 6 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/lib/modules/manager/maven/__fixtures__/simple.pom.xml b/lib/modules/manager/maven/__fixtures__/simple.pom.xml
index 46de0f9ced..d4ff6503cf 100644
--- a/lib/modules/manager/maven/__fixtures__/simple.pom.xml
+++ b/lib/modules/manager/maven/__fixtures__/simple.pom.xml
@@ -132,6 +132,12 @@
       <artifactId>hard-range</artifactId>
       <version>[1.0.0]</version>
     </dependency>
+    <dependency>
+      <groupId>org.example</groupId>
+      <artifactId>optional</artifactId>
+      <version>1.0.0</version>
+      <optional>true</optional>
+    </dependency>
   </dependencies>
 
   <distributionManagement>
diff --git a/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap
index fc55da77b1..8862b7d616 100644
--- a/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap
+++ b/lib/modules/manager/maven/__snapshots__/extract.spec.ts.snap
@@ -147,11 +147,22 @@ Object {
         "https://maven.atlassian.com/content/repositories/atlassian-public/",
       ],
     },
+    Object {
+      "currentValue": "1.0.0",
+      "datasource": "maven",
+      "depName": "org.example:optional",
+      "depType": "optional",
+      "fileReplacePosition": 3555,
+      "registryUrls": Array [
+        "https://repo.maven.apache.org/maven2",
+        "https://maven.atlassian.com/content/repositories/atlassian-public/",
+      ],
+    },
     Object {
       "currentValue": "1.0",
       "datasource": "maven",
       "depName": "org.example:relocation-artifact",
-      "fileReplacePosition": 3612,
+      "fileReplacePosition": 3787,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -162,7 +173,7 @@ Object {
       "datasource": "maven",
       "depName": "org.example:profile-artifact",
       "depType": "compile",
-      "fileReplacePosition": 3944,
+      "fileReplacePosition": 4119,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -173,7 +184,7 @@ Object {
       "datasource": "maven",
       "depName": "org.example:profile-build-artefact",
       "depType": "build",
-      "fileReplacePosition": 4200,
+      "fileReplacePosition": 4375,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -184,7 +195,7 @@ Object {
       "datasource": "maven",
       "depName": "org.apache.maven.plugins:maven-checkstyle-plugin",
       "depType": "build",
-      "fileReplacePosition": 4594,
+      "fileReplacePosition": 4769,
       "registryUrls": Array [
         "https://repo.maven.apache.org/maven2",
         "https://maven.atlassian.com/content/repositories/atlassian-public/",
diff --git a/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap b/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap
index 044d08501f..70030a4f34 100644
--- a/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap
+++ b/lib/modules/manager/maven/__snapshots__/index.spec.ts.snap
@@ -152,11 +152,22 @@ Array [
           "https://maven.atlassian.com/content/repositories/atlassian-public/",
         ],
       },
+      Object {
+        "currentValue": "1.0.0",
+        "datasource": "maven",
+        "depName": "org.example:optional",
+        "depType": "optional",
+        "fileReplacePosition": 3555,
+        "registryUrls": Array [
+          "https://repo.maven.apache.org/maven2",
+          "https://maven.atlassian.com/content/repositories/atlassian-public/",
+        ],
+      },
       Object {
         "currentValue": "1.0",
         "datasource": "maven",
         "depName": "org.example:relocation-artifact",
-        "fileReplacePosition": 3612,
+        "fileReplacePosition": 3787,
         "registryUrls": Array [
           "https://repo.maven.apache.org/maven2",
           "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -167,7 +178,7 @@ Array [
         "datasource": "maven",
         "depName": "org.example:profile-artifact",
         "depType": "compile",
-        "fileReplacePosition": 3944,
+        "fileReplacePosition": 4119,
         "registryUrls": Array [
           "https://repo.maven.apache.org/maven2",
           "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -179,7 +190,7 @@ Array [
         "datasource": "maven",
         "depName": "org.example:profile-build-artefact",
         "depType": "build",
-        "fileReplacePosition": 4200,
+        "fileReplacePosition": 4375,
         "registryUrls": Array [
           "https://repo.maven.apache.org/maven2",
           "https://maven.atlassian.com/content/repositories/atlassian-public/",
@@ -190,7 +201,7 @@ Array [
         "datasource": "maven",
         "depName": "org.apache.maven.plugins:maven-checkstyle-plugin",
         "depType": "build",
-        "fileReplacePosition": 4594,
+        "fileReplacePosition": 4769,
         "registryUrls": Array [
           "https://repo.maven.apache.org/maven2",
           "https://maven.atlassian.com/content/repositories/atlassian-public/",
diff --git a/lib/modules/manager/maven/extract.spec.ts b/lib/modules/manager/maven/extract.spec.ts
index 60f925a758..5d26683b3d 100644
--- a/lib/modules/manager/maven/extract.spec.ts
+++ b/lib/modules/manager/maven/extract.spec.ts
@@ -86,6 +86,11 @@ describe('modules/manager/maven/extract', () => {
             currentValue: '[1.0.0]',
             depType: 'compile',
           },
+          {
+            depName: 'org.example:optional',
+            currentValue: '1.0.0',
+            depType: 'optional',
+          },
           {
             depName: 'org.example:relocation-artifact',
             currentValue: '1.0',
diff --git a/lib/modules/manager/maven/extract.ts b/lib/modules/manager/maven/extract.ts
index 22960d0712..5f80d4bdb2 100644
--- a/lib/modules/manager/maven/extract.ts
+++ b/lib/modules/manager/maven/extract.ts
@@ -77,6 +77,8 @@ function depFromNode(
       case 'dependency':
         if (underBuildSettingsElement) {
           depType = 'build';
+        } else if (node.valueWithPath('optional')?.trim() === 'true') {
+          depType = 'optional';
         } else {
           depType = node.valueWithPath('scope')?.trim() ?? 'compile'; // maven default scope is compile
         }
diff --git a/lib/modules/manager/maven/index.spec.ts b/lib/modules/manager/maven/index.spec.ts
index 3cdc1c070c..592c74da21 100644
--- a/lib/modules/manager/maven/index.spec.ts
+++ b/lib/modules/manager/maven/index.spec.ts
@@ -104,6 +104,10 @@ describe('modules/manager/maven/index', () => {
               currentValue: "it's not a version",
             },
             { depName: 'org.example:hard-range', currentValue: '[1.0.0]' },
+            {
+              depName: 'org.example:optional',
+              currentValue: '1.0.0',
+            },
             {
               depName: 'org.example:relocation-artifact',
               currentValue: '1.0',
-- 
GitLab