Loading java/config/kotlin.go +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package config var ( KotlinStdlibJar = "external/kotlinc/lib/kotlin-stdlib.jar" KotlincIllegalFlags = []string{ "-no-jdk", "-no-stdlib", } ) func init() { Loading java/java.go +39 −3 Original line number Diff line number Diff line Loading @@ -89,6 +89,9 @@ type CompilerProperties struct { // list of module-specific flags that will be used for javac compiles Javacflags []string `android:"arch_variant"` // list of module-specific flags that will be used for kotlinc compiles Kotlincflags []string `android:"arch_variant"` // list of of java libraries that will be in the classpath Libs []string `android:"arch_variant"` Loading Loading @@ -1087,13 +1090,21 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path var kotlinJars android.Paths if srcFiles.HasExt(".kt") { // user defined kotlin flags. kotlincFlags := j.properties.Kotlincflags CheckKotlincFlags(ctx, kotlincFlags) // If there are kotlin files, compile them first but pass all the kotlin and java files // kotlinc will use the java files to resolve types referenced by the kotlin files, but // won't emit any classes for them. flags.kotlincFlags = "-no-stdlib" kotlincFlags = append(kotlincFlags, "-no-stdlib") if ctx.Device() { flags.kotlincFlags += " -no-jdk" kotlincFlags = append(kotlincFlags, "-no-jdk") } if len(kotlincFlags) > 0 { // optimization. ctx.Variable(pctx, "kotlincFlags", strings.Join(kotlincFlags, " ")) flags.kotlincFlags += "$kotlincFlags" } var kotlinSrcFiles android.Paths Loading Loading @@ -1332,6 +1343,31 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path j.outputFile = outputFile.WithoutRel() } // Check for invalid kotlinc flags. Only use this for flags explicitly passed by the user, // since some of these flags may be used internally. func CheckKotlincFlags(ctx android.ModuleContext, flags []string) { for _, flag := range flags { flag = strings.TrimSpace(flag) if !strings.HasPrefix(flag, "-") { ctx.PropertyErrorf("kotlincflags", "Flag `%s` must start with `-`", flag) } else if strings.HasPrefix(flag, "-Xintellij-plugin-root") { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, only use internal compiler for consistency.", flag) } else if inList(flag, config.KotlincIllegalFlags) { ctx.PropertyErrorf("kotlincflags", "Flag `%s` already used by build system", flag) } else if flag == "-include-runtime" { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, do not include runtime.", flag) } else { args := strings.Split(flag, " ") if args[0] == "-kotlin-home" { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, kotlin home already set to default (path to kotlinc in the repo).", flag) } } } } func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars android.Paths, deps deps, flags javaBuilderFlags, jarName string, extraJars android.Paths) android.Path { Loading java/java_test.go +61 −0 Original line number Diff line number Diff line Loading @@ -1124,3 +1124,64 @@ func TestJavaSdkLibrary(t *testing.T) { } } } var compilerFlagsTestCases = []struct { in string out bool }{ { in: "a", out: false, }, { in: "-a", out: true, }, { in: "-no-jdk", out: false, }, { in: "-no-stdlib", out: false, }, { in: "-kotlin-home", out: false, }, { in: "-kotlin-home /some/path", out: false, }, { in: "-include-runtime", out: false, }, { in: "-Xintellij-plugin-root", out: false, }, } type mockContext struct { android.ModuleContext result bool } func (ctx *mockContext) PropertyErrorf(property, format string, args ...interface{}) { // CheckBadCompilerFlags calls this function when the flag should be rejected ctx.result = false } func TestCompilerFlags(t *testing.T) { for _, testCase := range compilerFlagsTestCases { ctx := &mockContext{result: true} CheckKotlincFlags(ctx, []string{testCase.in}) if ctx.result != testCase.out { t.Errorf("incorrect output:") t.Errorf(" input: %#v", testCase.in) t.Errorf(" expected: %#v", testCase.out) t.Errorf(" got: %#v", ctx.result) } } } Loading
java/config/kotlin.go +5 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package config var ( KotlinStdlibJar = "external/kotlinc/lib/kotlin-stdlib.jar" KotlincIllegalFlags = []string{ "-no-jdk", "-no-stdlib", } ) func init() { Loading
java/java.go +39 −3 Original line number Diff line number Diff line Loading @@ -89,6 +89,9 @@ type CompilerProperties struct { // list of module-specific flags that will be used for javac compiles Javacflags []string `android:"arch_variant"` // list of module-specific flags that will be used for kotlinc compiles Kotlincflags []string `android:"arch_variant"` // list of of java libraries that will be in the classpath Libs []string `android:"arch_variant"` Loading Loading @@ -1087,13 +1090,21 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path var kotlinJars android.Paths if srcFiles.HasExt(".kt") { // user defined kotlin flags. kotlincFlags := j.properties.Kotlincflags CheckKotlincFlags(ctx, kotlincFlags) // If there are kotlin files, compile them first but pass all the kotlin and java files // kotlinc will use the java files to resolve types referenced by the kotlin files, but // won't emit any classes for them. flags.kotlincFlags = "-no-stdlib" kotlincFlags = append(kotlincFlags, "-no-stdlib") if ctx.Device() { flags.kotlincFlags += " -no-jdk" kotlincFlags = append(kotlincFlags, "-no-jdk") } if len(kotlincFlags) > 0 { // optimization. ctx.Variable(pctx, "kotlincFlags", strings.Join(kotlincFlags, " ")) flags.kotlincFlags += "$kotlincFlags" } var kotlinSrcFiles android.Paths Loading Loading @@ -1332,6 +1343,31 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path j.outputFile = outputFile.WithoutRel() } // Check for invalid kotlinc flags. Only use this for flags explicitly passed by the user, // since some of these flags may be used internally. func CheckKotlincFlags(ctx android.ModuleContext, flags []string) { for _, flag := range flags { flag = strings.TrimSpace(flag) if !strings.HasPrefix(flag, "-") { ctx.PropertyErrorf("kotlincflags", "Flag `%s` must start with `-`", flag) } else if strings.HasPrefix(flag, "-Xintellij-plugin-root") { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, only use internal compiler for consistency.", flag) } else if inList(flag, config.KotlincIllegalFlags) { ctx.PropertyErrorf("kotlincflags", "Flag `%s` already used by build system", flag) } else if flag == "-include-runtime" { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, do not include runtime.", flag) } else { args := strings.Split(flag, " ") if args[0] == "-kotlin-home" { ctx.PropertyErrorf("kotlincflags", "Bad flag: `%s`, kotlin home already set to default (path to kotlinc in the repo).", flag) } } } } func (j *Module) compileJavaHeader(ctx android.ModuleContext, srcFiles, srcJars android.Paths, deps deps, flags javaBuilderFlags, jarName string, extraJars android.Paths) android.Path { Loading
java/java_test.go +61 −0 Original line number Diff line number Diff line Loading @@ -1124,3 +1124,64 @@ func TestJavaSdkLibrary(t *testing.T) { } } } var compilerFlagsTestCases = []struct { in string out bool }{ { in: "a", out: false, }, { in: "-a", out: true, }, { in: "-no-jdk", out: false, }, { in: "-no-stdlib", out: false, }, { in: "-kotlin-home", out: false, }, { in: "-kotlin-home /some/path", out: false, }, { in: "-include-runtime", out: false, }, { in: "-Xintellij-plugin-root", out: false, }, } type mockContext struct { android.ModuleContext result bool } func (ctx *mockContext) PropertyErrorf(property, format string, args ...interface{}) { // CheckBadCompilerFlags calls this function when the flag should be rejected ctx.result = false } func TestCompilerFlags(t *testing.T) { for _, testCase := range compilerFlagsTestCases { ctx := &mockContext{result: true} CheckKotlincFlags(ctx, []string{testCase.in}) if ctx.result != testCase.out { t.Errorf("incorrect output:") t.Errorf(" input: %#v", testCase.in) t.Errorf(" expected: %#v", testCase.out) t.Errorf(" got: %#v", ctx.result) } } }