From d33ca43e17dc7afd66f91f4b9d3be2daf31c157a Mon Sep 17 00:00:00 2001 From: Ryan Murfitt <rmurfitt@gmail.com> Date: Mon, 23 Sep 2019 14:29:51 +1000 Subject: [PATCH] feat(gradle): Support Kotlin DSL extra properties (#4493) --- lib/manager/gradle/build-gradle.ts | 19 ++++++++++ test/manager/gradle/build-gradle.spec.ts | 44 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/lib/manager/gradle/build-gradle.ts b/lib/manager/gradle/build-gradle.ts index d3e48abf34..d22b7ac493 100644 --- a/lib/manager/gradle/build-gradle.ts +++ b/lib/manager/gradle/build-gradle.ts @@ -33,6 +33,7 @@ export function updateGradleVersion( updateLocalVariables, updateGlobalVariables, updatePropertyFileGlobalVariables, + updateKotlinVariablesByExtra, ]; // eslint-disable-next-line guard-for-in @@ -142,6 +143,24 @@ function updateGlobalVariables( return null; } +function updateKotlinVariablesByExtra( + dependency: GradleDependency, + buildGradleContent: string, + newVersion: string +): string | null { + const variable = variables[`${dependency.group}:${dependency.name}`]; + if (variable) { + const regex = new RegExp( + `(val ${variable} by extra(?: {|\\()\\s*")(.*)("\\s*[})])` + ); + const match = buildGradleContent.match(regex); + if (match) { + return buildGradleContent.replace(regex, `$1${newVersion}$3`); + } + } + return null; +} + function updatePropertyFileGlobalVariables( dependency: GradleDependency, buildGradleContent: string, diff --git a/test/manager/gradle/build-gradle.spec.ts b/test/manager/gradle/build-gradle.spec.ts index 4dd451f6c1..f6344814ce 100644 --- a/test/manager/gradle/build-gradle.spec.ts +++ b/test/manager/gradle/build-gradle.spec.ts @@ -289,4 +289,48 @@ describe('lib/manager/gradle/updateGradleVersion', () => { ); expect(updatedGradleFile).toEqual('String mysqlVersion = "7.0.0"'); }); + + it('should replace a external extra variable assigned to a Kotlin named argument dependency', () => { + const gradleFile = `compile(group = "mysql" , + name = "mysql-connector-java", + version = mysqlVersion) + `; + const mysqlDependency = { + group: 'mysql', + depGroup: 'mysql', + name: 'mysql-connector-java', + version: '6.0.5', + }; + collectVersionVariables([mysqlDependency], gradleFile); + + const gradleWithVersionFile = 'val mysqlVersion by extra("6.0.5")'; + const updatedGradleFile = updateGradleVersion( + gradleWithVersionFile, + mysqlDependency, + '7.0.0' + ); + expect(updatedGradleFile).toEqual('val mysqlVersion by extra("7.0.0")'); + }); + + it('should replace a external lazy extra variable assigned to a Kotlin named argument dependency', () => { + const gradleFile = `compile(group = "mysql" , + name = "mysql-connector-java", + version = mysqlVersion) + `; + const mysqlDependency = { + group: 'mysql', + depGroup: 'mysql', + name: 'mysql-connector-java', + version: '6.0.5', + }; + collectVersionVariables([mysqlDependency], gradleFile); + + const gradleWithVersionFile = 'val mysqlVersion by extra { "6.0.5" }'; + const updatedGradleFile = updateGradleVersion( + gradleWithVersionFile, + mysqlDependency, + '7.0.0' + ); + expect(updatedGradleFile).toEqual('val mysqlVersion by extra { "7.0.0" }'); + }); }); -- GitLab