From b8e9a1367f2b607127cad985b8c1ab1ce9b474b0 Mon Sep 17 00:00:00 2001
From: Sergei Zharinov <zharinov@users.noreply.github.com>
Date: Wed, 13 Jan 2021 14:41:49 +0400
Subject: [PATCH] fix(gradle-lite): Parse default registry urls configured
 explicitly (#8267)

---
 lib/manager/gradle-lite/common.ts      |  5 ++++
 lib/manager/gradle-lite/parser.spec.ts | 12 +++++++--
 lib/manager/gradle-lite/parser.ts      | 35 +++++++++++++++++++++++---
 3 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/lib/manager/gradle-lite/common.ts b/lib/manager/gradle-lite/common.ts
index 4c47de178a..354f64c0d5 100644
--- a/lib/manager/gradle-lite/common.ts
+++ b/lib/manager/gradle-lite/common.ts
@@ -1,5 +1,10 @@
 import { PackageDependency } from '../common';
 
+export { MAVEN_REPO } from '../../datasource/maven/common';
+
+export const JCENTER_REPO = 'https://jcenter.bintray.com/';
+export const GOOGLE_REPO = 'https://dl.google.com/android/maven2/';
+
 export interface ManagerData {
   fileReplacePosition: number;
   packageFile?: string;
diff --git a/lib/manager/gradle-lite/parser.spec.ts b/lib/manager/gradle-lite/parser.spec.ts
index be5c69c1b1..437a77ceef 100644
--- a/lib/manager/gradle-lite/parser.spec.ts
+++ b/lib/manager/gradle-lite/parser.spec.ts
@@ -1,5 +1,6 @@
 import { readFileSync } from 'fs';
 import path from 'path';
+import { GOOGLE_REPO, JCENTER_REPO, MAVEN_REPO } from './common';
 import { parseGradle, parseProps } from './parser';
 
 function getGradleFile(fileName: string): string {
@@ -45,8 +46,15 @@ describe('manager/gradle-lite/parser', () => {
     ({ urls } = parseGradle('uri "https://example.com"'));
     expect(urls).toStrictEqual(['https://example.com']);
 
-    ({ urls } = parseGradle('uri("https://example.com")'));
-    expect(urls).toStrictEqual(['https://example.com']);
+    ({ urls } = parseGradle(
+      'mavenCentral(); uri("https://example.com"); jcenter(); google();'
+    ));
+    expect(urls).toStrictEqual([
+      MAVEN_REPO,
+      'https://example.com',
+      JCENTER_REPO,
+      GOOGLE_REPO,
+    ]);
   });
   it('parses long form deps', () => {
     let deps;
diff --git a/lib/manager/gradle-lite/parser.ts b/lib/manager/gradle-lite/parser.ts
index c14f8137c3..e570e523b5 100644
--- a/lib/manager/gradle-lite/parser.ts
+++ b/lib/manager/gradle-lite/parser.ts
@@ -4,6 +4,9 @@ import { logger } from '../../logger';
 import { regEx } from '../../util/regex';
 import { PackageDependency } from '../common';
 import {
+  GOOGLE_REPO,
+  JCENTER_REPO,
+  MAVEN_REPO,
   ManagerData,
   PackageVariables,
   StringInterpolation,
@@ -188,7 +191,7 @@ function processPlugin({
   return { deps: [dep] };
 }
 
-function processRegistryUrl({
+function processCustomRegistryUrl({
   tokenMap,
 }: SyntaxHandlerInput): SyntaxHandlerOutput {
   const registryUrl = tokenMap.registryUrl?.value;
@@ -205,6 +208,18 @@ function processRegistryUrl({
   return null;
 }
 
+function processPredefinedRegistryUrl({
+  tokenMap,
+}: SyntaxHandlerInput): SyntaxHandlerOutput {
+  const registryName = tokenMap.registryName?.value;
+  const registryUrl = {
+    mavenCentral: MAVEN_REPO,
+    jcenter: JCENTER_REPO,
+    google: GOOGLE_REPO,
+  }[registryName];
+  return { urls: [registryUrl] };
+}
+
 function processLongFormDep({
   tokenMap,
   variables,
@@ -296,6 +311,20 @@ const matcherConfigs: SyntaxMatchConfig[] = [
     ],
     handler: processPlugin,
   },
+  {
+    // mavenCentral()
+    matchers: [
+      {
+        matchType: TokenType.Word,
+        matchValue: ['mavenCentral', 'jcenter', 'google'],
+        tokenMapKey: 'registryName',
+      },
+      { matchType: TokenType.LeftParen },
+      { matchType: TokenType.RightParen },
+      endOfInstruction,
+    ],
+    handler: processPredefinedRegistryUrl,
+  },
   {
     // url 'https://repo.spring.io/snapshot/'
     matchers: [
@@ -303,7 +332,7 @@ const matcherConfigs: SyntaxMatchConfig[] = [
       { matchType: TokenType.String, tokenMapKey: 'registryUrl' },
       endOfInstruction,
     ],
-    handler: processRegistryUrl,
+    handler: processCustomRegistryUrl,
   },
   {
     // url('https://repo.spring.io/snapshot/')
@@ -314,7 +343,7 @@ const matcherConfigs: SyntaxMatchConfig[] = [
       { matchType: TokenType.RightParen },
       endOfInstruction,
     ],
-    handler: processRegistryUrl,
+    handler: processCustomRegistryUrl,
   },
   {
     // group: "com.example", name: "my.dependency", version: "1.2.3"
-- 
GitLab