Loading java/base.go +24 −1 Original line number Diff line number Diff line Loading @@ -227,6 +227,12 @@ type DeviceProperties struct { // whether to generate Binder#GetTransaction name method. Generate_get_transaction_name *bool // whether all interfaces should be annotated with required permissions. Enforce_permissions *bool // allowlist for interfaces that (temporarily) do not require annotation for permissions. Enforce_permissions_exceptions []string `android:"path"` // list of flags that will be passed to the AIDL compiler Flags []string } Loading Loading @@ -419,6 +425,7 @@ type Module struct { extraOutputFiles android.Paths exportAidlIncludeDirs android.Paths ignoredAidlPermissionList android.Paths logtagsSrcs android.Paths Loading Loading @@ -772,6 +779,17 @@ func (j *Module) hasSrcExt(ext string) bool { return hasSrcExt(j.properties.Srcs, ext) } func (j *Module) individualAidlFlags(ctx android.ModuleContext, aidlFile android.Path) string { var flags string if Bool(j.deviceProperties.Aidl.Enforce_permissions) { if !android.InList(aidlFile.String(), j.ignoredAidlPermissionList.Strings()) { flags = "-Wmissing-permission-annotation -Werror" } } return flags } func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath, aidlIncludeDirs android.Paths) (string, android.Paths) { Loading Loading @@ -814,6 +832,11 @@ func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.Opt flags = append(flags, "--transaction_names") } if Bool(j.deviceProperties.Aidl.Enforce_permissions) { exceptions := j.deviceProperties.Aidl.Enforce_permissions_exceptions j.ignoredAidlPermissionList = android.PathsForModuleSrcExcludes(ctx, exceptions, nil) } aidlMinSdkVersion := j.MinSdkVersion(ctx).ApiLevel.String() flags = append(flags, "--min_sdk_version="+aidlMinSdkVersion) Loading java/droiddoc.go +1 −1 Original line number Diff line number Diff line Loading @@ -330,7 +330,7 @@ func (j *Javadoc) genSources(ctx android.ModuleContext, srcFiles android.Paths, // Process all aidl files together to support sharding them into one or more rules that produce srcjars. if len(aidlSrcs) > 0 { srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, flags.aidlDeps) srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, nil, flags.aidlDeps) outSrcFiles = append(outSrcFiles, srcJarFiles...) } Loading java/gen.go +12 −3 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ var ( }) ) func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlFlags string, deps android.Paths) android.Paths { func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlGlobalFlags string, aidlIndividualFlags map[string]string, deps android.Paths) android.Paths { // Shard aidl files into groups of 50 to avoid having to recompile all of them if one changes and to avoid // hitting command line length limits. shards := android.ShardPaths(aidlFiles, 50) Loading @@ -61,15 +61,17 @@ func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlFlags strin rule.Command().Text("rm -rf").Flag(outDir.String()) rule.Command().Text("mkdir -p").Flag(outDir.String()) rule.Command().Text("FLAGS=' " + aidlFlags + "'") rule.Command().Text("FLAGS=' " + aidlGlobalFlags + "'") for _, aidlFile := range shard { localFlag := aidlIndividualFlags[aidlFile.String()] depFile := srcJarFile.InSameDir(ctx, aidlFile.String()+".d") javaFile := outDir.Join(ctx, pathtools.ReplaceExtension(aidlFile.String(), "java")) rule.Command(). Tool(ctx.Config().HostToolPath(ctx, "aidl")). FlagWithDepFile("-d", depFile). Flag("$FLAGS"). Flag(localFlag). Input(aidlFile). Output(javaFile). Implicits(deps) Loading Loading @@ -159,7 +161,14 @@ func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, // Process all aidl files together to support sharding them into one or more rules that produce srcjars. if len(aidlSrcs) > 0 { srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, flags.aidlDeps) individualFlags := make(map[string]string) for _, aidlSrc := range aidlSrcs { flags := j.individualAidlFlags(ctx, aidlSrc) if flags != "" { individualFlags[aidlSrc.String()] = flags } } srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, individualFlags, flags.aidlDeps) outSrcFiles = append(outSrcFiles, srcJarFiles...) } Loading java/java_test.go +36 −0 Original line number Diff line number Diff line Loading @@ -1333,6 +1333,42 @@ func TestAidlFlagsWithMinSdkVersion(t *testing.T) { } } func TestAidlEnforcePermissions(t *testing.T) { ctx, _ := testJava(t, ` java_library { name: "foo", srcs: ["aidl/foo/IFoo.aidl"], aidl: { enforce_permissions: true }, } `) aidlCommand := ctx.ModuleForTests("foo", "android_common").Rule("aidl").RuleParams.Command expectedAidlFlag := "-Wmissing-permission-annotation -Werror" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } } func TestAidlEnforcePermissionsException(t *testing.T) { ctx, _ := testJava(t, ` java_library { name: "foo", srcs: ["aidl/foo/IFoo.aidl", "aidl/foo/IFoo2.aidl"], aidl: { enforce_permissions: true, enforce_permissions_exceptions: ["aidl/foo/IFoo2.aidl"] }, } `) aidlCommand := ctx.ModuleForTests("foo", "android_common").Rule("aidl").RuleParams.Command expectedAidlFlag := "$$FLAGS -Wmissing-permission-annotation -Werror aidl/foo/IFoo.aidl" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } expectedAidlFlag = "$$FLAGS aidl/foo/IFoo2.aidl" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } } func TestDataNativeBinaries(t *testing.T) { ctx, _ := testJava(t, ` java_test_host { Loading Loading
java/base.go +24 −1 Original line number Diff line number Diff line Loading @@ -227,6 +227,12 @@ type DeviceProperties struct { // whether to generate Binder#GetTransaction name method. Generate_get_transaction_name *bool // whether all interfaces should be annotated with required permissions. Enforce_permissions *bool // allowlist for interfaces that (temporarily) do not require annotation for permissions. Enforce_permissions_exceptions []string `android:"path"` // list of flags that will be passed to the AIDL compiler Flags []string } Loading Loading @@ -419,6 +425,7 @@ type Module struct { extraOutputFiles android.Paths exportAidlIncludeDirs android.Paths ignoredAidlPermissionList android.Paths logtagsSrcs android.Paths Loading Loading @@ -772,6 +779,17 @@ func (j *Module) hasSrcExt(ext string) bool { return hasSrcExt(j.properties.Srcs, ext) } func (j *Module) individualAidlFlags(ctx android.ModuleContext, aidlFile android.Path) string { var flags string if Bool(j.deviceProperties.Aidl.Enforce_permissions) { if !android.InList(aidlFile.String(), j.ignoredAidlPermissionList.Strings()) { flags = "-Wmissing-permission-annotation -Werror" } } return flags } func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.OptionalPath, aidlIncludeDirs android.Paths) (string, android.Paths) { Loading Loading @@ -814,6 +832,11 @@ func (j *Module) aidlFlags(ctx android.ModuleContext, aidlPreprocess android.Opt flags = append(flags, "--transaction_names") } if Bool(j.deviceProperties.Aidl.Enforce_permissions) { exceptions := j.deviceProperties.Aidl.Enforce_permissions_exceptions j.ignoredAidlPermissionList = android.PathsForModuleSrcExcludes(ctx, exceptions, nil) } aidlMinSdkVersion := j.MinSdkVersion(ctx).ApiLevel.String() flags = append(flags, "--min_sdk_version="+aidlMinSdkVersion) Loading
java/droiddoc.go +1 −1 Original line number Diff line number Diff line Loading @@ -330,7 +330,7 @@ func (j *Javadoc) genSources(ctx android.ModuleContext, srcFiles android.Paths, // Process all aidl files together to support sharding them into one or more rules that produce srcjars. if len(aidlSrcs) > 0 { srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, flags.aidlDeps) srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, nil, flags.aidlDeps) outSrcFiles = append(outSrcFiles, srcJarFiles...) } Loading
java/gen.go +12 −3 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ var ( }) ) func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlFlags string, deps android.Paths) android.Paths { func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlGlobalFlags string, aidlIndividualFlags map[string]string, deps android.Paths) android.Paths { // Shard aidl files into groups of 50 to avoid having to recompile all of them if one changes and to avoid // hitting command line length limits. shards := android.ShardPaths(aidlFiles, 50) Loading @@ -61,15 +61,17 @@ func genAidl(ctx android.ModuleContext, aidlFiles android.Paths, aidlFlags strin rule.Command().Text("rm -rf").Flag(outDir.String()) rule.Command().Text("mkdir -p").Flag(outDir.String()) rule.Command().Text("FLAGS=' " + aidlFlags + "'") rule.Command().Text("FLAGS=' " + aidlGlobalFlags + "'") for _, aidlFile := range shard { localFlag := aidlIndividualFlags[aidlFile.String()] depFile := srcJarFile.InSameDir(ctx, aidlFile.String()+".d") javaFile := outDir.Join(ctx, pathtools.ReplaceExtension(aidlFile.String(), "java")) rule.Command(). Tool(ctx.Config().HostToolPath(ctx, "aidl")). FlagWithDepFile("-d", depFile). Flag("$FLAGS"). Flag(localFlag). Input(aidlFile). Output(javaFile). Implicits(deps) Loading Loading @@ -159,7 +161,14 @@ func (j *Module) genSources(ctx android.ModuleContext, srcFiles android.Paths, // Process all aidl files together to support sharding them into one or more rules that produce srcjars. if len(aidlSrcs) > 0 { srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, flags.aidlDeps) individualFlags := make(map[string]string) for _, aidlSrc := range aidlSrcs { flags := j.individualAidlFlags(ctx, aidlSrc) if flags != "" { individualFlags[aidlSrc.String()] = flags } } srcJarFiles := genAidl(ctx, aidlSrcs, flags.aidlFlags+aidlIncludeFlags, individualFlags, flags.aidlDeps) outSrcFiles = append(outSrcFiles, srcJarFiles...) } Loading
java/java_test.go +36 −0 Original line number Diff line number Diff line Loading @@ -1333,6 +1333,42 @@ func TestAidlFlagsWithMinSdkVersion(t *testing.T) { } } func TestAidlEnforcePermissions(t *testing.T) { ctx, _ := testJava(t, ` java_library { name: "foo", srcs: ["aidl/foo/IFoo.aidl"], aidl: { enforce_permissions: true }, } `) aidlCommand := ctx.ModuleForTests("foo", "android_common").Rule("aidl").RuleParams.Command expectedAidlFlag := "-Wmissing-permission-annotation -Werror" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } } func TestAidlEnforcePermissionsException(t *testing.T) { ctx, _ := testJava(t, ` java_library { name: "foo", srcs: ["aidl/foo/IFoo.aidl", "aidl/foo/IFoo2.aidl"], aidl: { enforce_permissions: true, enforce_permissions_exceptions: ["aidl/foo/IFoo2.aidl"] }, } `) aidlCommand := ctx.ModuleForTests("foo", "android_common").Rule("aidl").RuleParams.Command expectedAidlFlag := "$$FLAGS -Wmissing-permission-annotation -Werror aidl/foo/IFoo.aidl" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } expectedAidlFlag = "$$FLAGS aidl/foo/IFoo2.aidl" if !strings.Contains(aidlCommand, expectedAidlFlag) { t.Errorf("aidl command %q does not contain %q", aidlCommand, expectedAidlFlag) } } func TestDataNativeBinaries(t *testing.T) { ctx, _ := testJava(t, ` java_test_host { Loading