aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPrzemyslaw Szczepaniak <pszczepaniak@google.com>2018-03-21 10:16:19 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-21 10:16:19 +0000
commit170ab730ecd6c53b49e9bb9e98a0c1663ceca6ef (patch)
treedef42306fea2fd469d0248bc7da3a67ee00657a6 /java
parent28c68b9a760f437cae88709c382be2ca475a02e9 (diff)
parent66c0c4067f8a70847eaa37273671aa8fe4203f1d (diff)
downloadbuild_soong-170ab730ecd6c53b49e9bb9e98a0c1663ceca6ef.tar.gz
build_soong-170ab730ecd6c53b49e9bb9e98a0c1663ceca6ef.tar.bz2
build_soong-170ab730ecd6c53b49e9bb9e98a0c1663ceca6ef.zip
Merge "Add support for renamed kotlin stdlib."
Diffstat (limited to 'java')
-rw-r--r--java/builder.go6
-rw-r--r--java/java.go24
-rw-r--r--java/java_test.go14
3 files changed, 43 insertions, 1 deletions
diff --git a/java/builder.go b/java/builder.go
index 12110f2f..d36e0dc0 100644
--- a/java/builder.go
+++ b/java/builder.go
@@ -66,6 +66,7 @@ var (
`${config.GenKotlinBuildFileCmd} $classpath $outDir $out.rsp $srcJarDir/list > $outDir/kotlinc-build.xml &&` +
`${config.KotlincCmd} $kotlincFlags ` +
`-jvm-target $kotlinJvmTarget -Xbuild-file=$outDir/kotlinc-build.xml && ` +
+ `rm $outDir/kotlinc-build.xml && ` +
`${config.SoongZipCmd} -jar -o $out -C $outDir -D $outDir`,
CommandDeps: []string{
"${config.KotlincCmd}",
@@ -358,6 +359,11 @@ func TransformJarsToJar(ctx android.ModuleContext, outputFile android.WritablePa
// for downstream tools like desugar.
jarArgs = append(jarArgs, "-stripFile module-info.class")
+ // Remove any kotlin-reflect related files
+ // TODO(pszczepaniak): Support kotlin-reflect
+ jarArgs = append(jarArgs, "-stripFile \"*.kotlin_module\"")
+ jarArgs = append(jarArgs, "-stripFile \"*.kotlin_builtin\"")
+
if stripDirs {
jarArgs = append(jarArgs, "-D")
}
diff --git a/java/java.go b/java/java.go
index 5f5225c4..125fde1e 100644
--- a/java/java.go
+++ b/java/java.go
@@ -83,6 +83,10 @@ type CompilerProperties struct {
// ext, and framework for device targets)
No_framework_libs *bool
+ // Use renamed kotlin stdlib (com.android.kotlin.*). This allows kotlin usage without colliding
+ // with app-provided kotlin stdlib.
+ Renamed_kotlin_stdlib *bool
+
// list of module-specific flags that will be used for javac compiles
Javacflags []string `android:"arch_variant"`
@@ -810,6 +814,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
// won't emit any classes for them.
flags.kotlincFlags = "-no-stdlib"
+
if ctx.Device() {
flags.kotlincFlags += " -no-jdk"
}
@@ -830,9 +835,15 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
// Make javac rule depend on the kotlinc rule
flags.classpath = append(flags.classpath, kotlinJar)
+
// Jar kotlin classes into the final jar after javac
jars = append(jars, kotlinJar)
- jars = append(jars, deps.kotlinStdlib...)
+
+ // Don't add kotlin-stdlib if using (on-device) renamed stdlib
+ // (it's expected to be on device bootclasspath)
+ if !proptools.Bool(j.properties.Renamed_kotlin_stdlib) {
+ jars = append(jars, deps.kotlinStdlib...)
+ }
}
// Store the list of .java files that was passed to javac
@@ -952,6 +963,17 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
outputFile = combinedJar
}
+ // Use renamed kotlin standard library?
+ if srcFiles.HasExt(".kt") && proptools.Bool(j.properties.Renamed_kotlin_stdlib) {
+ jarjarFile := android.PathForModuleOut(ctx, "kotlin-renamed", jarName)
+ TransformJarJar(ctx, jarjarFile, outputFile,
+ android.PathForSource(ctx, "external/kotlinc/jarjar-rules.txt"))
+ outputFile = jarjarFile
+ if ctx.Failed() {
+ return
+ }
+ }
+
if j.properties.Jarjar_rules != nil {
jarjar_rules := android.PathForModuleSrc(ctx, *j.properties.Jarjar_rules)
// Transform classes.jar into classes-jarjar.jar
diff --git a/java/java_test.go b/java/java_test.go
index 6ef406f7..6e3ada42 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -176,6 +176,8 @@ func testContext(config android.Config, bp string,
"bar-doc/b.java": nil,
"bar-doc/known_oj_tags.txt": nil,
"external/doclava/templates-sdk": nil,
+
+ "external/kotlinc/jarjar-rules.txt": nil,
}
for k, v := range fs {
@@ -755,6 +757,12 @@ func TestKotlin(t *testing.T) {
name: "baz",
srcs: ["c.java"],
}
+
+ java_library {
+ name: "blorg",
+ renamed_kotlin_stdlib: true,
+ srcs: ["b.kt"],
+ }
`)
fooKotlinc := ctx.ModuleForTests("foo", "android_common").Rule("kotlinc")
@@ -797,6 +805,12 @@ func TestKotlin(t *testing.T) {
t.Errorf(`expected %q in bar implicits %v`,
bazHeaderJar.Output.String(), barKotlinc.Implicits.Strings())
}
+
+ blorgRenamedJar := ctx.ModuleForTests("blorg", "android_common").Output("kotlin-renamed/blorg.jar")
+ if blorgRenamedJar.Implicit.String() != "external/kotlinc/jarjar-rules.txt" {
+ t.Errorf(`expected external/kotlinc/jarjar-rules.txt in blorg implicit %q`,
+ blorgRenamedJar.Implicit.String())
+ }
}
func TestTurbine(t *testing.T) {