Ensure all dependencies for running Kotlin dev
* Check the POM file of the downloaded bootstrap compiler.
* Check the Class-Path on the compiler META-INF/MANIFEST.MF
Bug: b/348324744
Change-Id: I040ece1716373540803e1452749681c077e0e646
diff --git a/tools/download_kotlin_dev.py b/tools/download_kotlin_dev.py
index aa73ba8..7359f1d 100755
--- a/tools/download_kotlin_dev.py
+++ b/tools/download_kotlin_dev.py
@@ -14,10 +14,14 @@
url_request = urllib
import os
import sys
+import xml.etree.ElementTree
+
JETBRAINS_KOTLIN_MAVEN_URL = "https://maven.pkg.jetbrains.space/kotlin/p/" \
"kotlin/bootstrap/org/jetbrains/kotlin/"
KOTLIN_RELEASE_URL = JETBRAINS_KOTLIN_MAVEN_URL + "kotlin-compiler/"
+KOTLINC_LIB = os.path.join(utils.THIRD_PARTY, "kotlin",
+ "kotlin-compiler-dev", "kotlinc", "lib")
def download_newest():
@@ -55,12 +59,12 @@
raise Exception('Url: %s \n returned %s' %
(KOTLIN_RELEASE_URL, response.getcode()))
+ # Check POM for expected dependencies.
+ check_pom(top_most_version_and_build)
+
# We can now download all files related to the kotlin compiler version.
print("Downloading version: " + top_most_version_and_build)
- kotlinc_lib = os.path.join(utils.THIRD_PARTY, "kotlin",
- "kotlin-compiler-dev", "kotlinc", "lib")
-
utils.DownloadFromGoogleCloudStorage(
os.path.join(utils.THIRD_PARTY, "kotlin",
"kotlin-compiler-dev.tar.gz.sha1"))
@@ -68,20 +72,61 @@
download_and_save(
JETBRAINS_KOTLIN_MAVEN_URL +
"kotlin-compiler/{0}/kotlin-compiler-{0}.jar".format(
- top_most_version_and_build), kotlinc_lib, "kotlin-compiler.jar")
+ top_most_version_and_build), KOTLINC_LIB, "kotlin-compiler.jar")
download_and_save(
JETBRAINS_KOTLIN_MAVEN_URL +
"kotlin-stdlib/{0}/kotlin-stdlib-{0}.jar".format(
- top_most_version_and_build), kotlinc_lib, "kotlin-stdlib.jar")
+ top_most_version_and_build), KOTLINC_LIB, "kotlin-stdlib.jar")
+ download_and_save(
+ JETBRAINS_KOTLIN_MAVEN_URL +
+ "kotlin-stdlib-jdk8/{0}/kotlin-stdlib-jdk8-{0}.jar".format(
+ top_most_version_and_build), KOTLINC_LIB, "kotlin-stdlib-jdk8.jar")
+ # POM file has dependency on version 1.6.10 - download latest anyway.
download_and_save(
JETBRAINS_KOTLIN_MAVEN_URL +
"kotlin-reflect/{0}/kotlin-reflect-{0}.jar".format(
- top_most_version_and_build), kotlinc_lib, "kotlin-reflect.jar")
+ top_most_version_and_build), KOTLINC_LIB, "kotlin-reflect.jar")
download_and_save(
JETBRAINS_KOTLIN_MAVEN_URL +
"kotlin-script-runtime/{0}/kotlin-script-runtime-{0}.jar".format(
- top_most_version_and_build), kotlinc_lib,
+ top_most_version_and_build), KOTLINC_LIB,
"kotlin-script-runtime.jar")
+ download_and_save(
+ "https://repo1.maven.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.6.4/kotlinx-coroutines-core-jvm-1.6.4.jar", KOTLINC_LIB, "kotlinx-coroutines-core-jvm.jar")
+ download_and_save(
+ "https://repo1.maven.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20200330/trove4j-1.0.20200330.jar", KOTLINC_LIB, "trove4j.jar")
+
+
+def check_pom(top_most_version_and_build):
+ # Download POM, and check the expected dependencies.
+ download_and_save(
+ JETBRAINS_KOTLIN_MAVEN_URL +
+ "kotlin-compiler/{0}/kotlin-compiler-{0}.pom".format(
+ top_most_version_and_build), KOTLINC_LIB, "kotlin-compiler.pom")
+ pom_file = os.path.join(KOTLINC_LIB, "kotlin-compiler.pom")
+ ns = "http://maven.apache.org/POM/4.0.0"
+ xml.etree.ElementTree.register_namespace('', ns)
+ tree = xml.etree.ElementTree.ElementTree()
+ tree.parse(pom_file)
+ #return tree.getroot().find("{%s}dependencies" % ns).text
+ for dependency in tree.getroot().find("{%s}dependencies" % ns):
+ groupId = dependency.find("{%s}groupId" % ns).text
+ artifactId = dependency.find("{%s}artifactId" % ns).text
+ version = dependency.find("{%s}version" % ns).text
+ coordinates = (
+ '{groupId}:{artifactId}:{version}'
+ .format(groupId=groupId, artifactId=artifactId, version=version))
+ print('Dependecy: ' + coordinates)
+ expected_dependencies = set()
+ for artifactId in ("kotlin-stdlib", "kotlin-stdlib-jdk8", "kotlin-script-runtime"):
+ expected_dependencies.add(
+ 'org.jetbrains.kotlin:{artifactId}:{version}'
+ .format(artifactId=artifactId, version=top_most_version_and_build))
+ expected_dependencies.add('org.jetbrains.kotlin:kotlin-reflect:1.6.10')
+ expected_dependencies.add('org.jetbrains.intellij.deps:trove4j:1.0.20200330')
+ expected_dependencies.add('org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4')
+ if not coordinates in expected_dependencies:
+ raise Exception('Unexpected dependency: ' + coordinates)
def download_and_save(url, path, name):