Remove res and assets in androidmk if default

Test: new tests in androidmk_test and bpfix_test. Ran against file.
Fixes: 209019903
Change-Id: I5fc9005302c006b3205b4cbd04cef7c2aca40bc8
This commit is contained in:
Trevor Radcliffe 2022-01-25 22:08:59 +00:00
parent 620dc3f4f9
commit 82cf9a7d4b
3 changed files with 162 additions and 4 deletions

View file

@ -699,7 +699,7 @@ include $(call all-makefiles-under,$(LOCAL_PATH))
expected: ` expected: `
android_library { android_library {
srcs: ["test.java"], srcs: ["test.java"],
resource_dirs: ["res"],
jacoco: { jacoco: {
include_filter: ["foo.*"], include_filter: ["foo.*"],
}, },
@ -1458,7 +1458,7 @@ include $(BUILD_RRO_PACKAGE)
runtime_resource_overlay { runtime_resource_overlay {
name: "foo", name: "foo",
product_specific: true, product_specific: true,
resource_dirs: ["res"],
sdk_version: "current", sdk_version: "current",
theme: "FooTheme", theme: "FooTheme",
@ -1602,6 +1602,22 @@ cc_prebuilt_library_shared {
check_elf_files: false, check_elf_files: false,
} }
`,
},
{
desc: "Drop default resource and asset dirs from bp",
in: `
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_ASSET_DIR := $(LOCAL_PATH)/assets
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
include $(BUILD_PACKAGE)
`,
expected: `
android_app {
name: "foo",
}
`, `,
}, },
} }

View file

@ -158,6 +158,10 @@ var fixSteps = []FixStep{
Name: "formatFlagProperties", Name: "formatFlagProperties",
Fix: runPatchListMod(formatFlagProperties), Fix: runPatchListMod(formatFlagProperties),
}, },
{
Name: "removeResourcesAndAssetsIfDefault",
Fix: removeResourceAndAssetsIfDefault,
},
} }
// for fix that only need to run once // for fix that only need to run once
@ -886,6 +890,24 @@ func removeSoongConfigBoolVariable(f *Fixer) error {
return nil return nil
} }
func removeResourceAndAssetsIfDefault(f *Fixer) error {
for _, def := range f.tree.Defs {
mod, ok := def.(*parser.Module)
if !ok {
continue
}
resourceDirList, resourceDirFound := getLiteralListPropertyValue(mod, "resource_dirs")
if resourceDirFound && len(resourceDirList) == 1 && resourceDirList[0] == "res" {
removeProperty(mod, "resource_dirs")
}
assetDirList, assetDirFound := getLiteralListPropertyValue(mod, "asset_dirs")
if assetDirFound && len(assetDirList) == 1 && assetDirList[0] == "assets" {
removeProperty(mod, "asset_dirs")
}
}
return nil
}
// Converts the default source list property, 'srcs', to a single source property with a given name. // Converts the default source list property, 'srcs', to a single source property with a given name.
// "LOCAL_MODULE" reference is also resolved during the conversion process. // "LOCAL_MODULE" reference is also resolved during the conversion process.
func convertToSingleSource(mod *parser.Module, srcPropertyName string) { func convertToSingleSource(mod *parser.Module, srcPropertyName string) {

View file

@ -19,11 +19,10 @@ package bpfix
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"reflect"
"strings" "strings"
"testing" "testing"
"reflect"
"github.com/google/blueprint/parser" "github.com/google/blueprint/parser"
"github.com/google/blueprint/pathtools" "github.com/google/blueprint/pathtools"
) )
@ -2063,3 +2062,124 @@ func TestHaveSameLicense(t *testing.T) {
}) })
} }
} }
func TestRemoveResourceAndAssetsIfDefault(t *testing.T) {
tests := []struct {
name string
in string
out string
}{
{
name: "resource_dirs default",
in: `
android_app {
name: "foo",
resource_dirs: ["res"],
}
`,
out: `
android_app {
name: "foo",
}
`,
},
{
name: "resource_dirs not default",
in: `
android_app {
name: "foo",
resource_dirs: ["reso"],
}
`,
out: `
android_app {
name: "foo",
resource_dirs: ["reso"],
}
`,
},
{
name: "resource_dirs includes not default",
in: `
android_app {
name: "foo",
resource_dirs: ["res", "reso"],
}
`,
out: `
android_app {
name: "foo",
resource_dirs: ["res", "reso"],
}
`,
}, {
name: "asset_dirs default",
in: `
android_app {
name: "foo",
asset_dirs: ["assets"],
}
`,
out: `
android_app {
name: "foo",
}
`,
},
{
name: "asset_dirs not default",
in: `
android_app {
name: "foo",
asset_dirs: ["assety"],
}
`,
out: `
android_app {
name: "foo",
asset_dirs: ["assety"],
}
`,
},
{
name: "asset_dirs includes not default",
in: `
android_app {
name: "foo",
asset_dirs: ["assets", "assety"],
}
`,
out: `
android_app {
name: "foo",
asset_dirs: ["assets", "assety"],
}
`,
},
{
name: "resource_dirs and asset_dirs both default",
in: `
android_app {
name: "foo",
asset_dirs: ["assets"],
resource_dirs: ["res"],
}
`,
out: `
android_app {
name: "foo",
}
`,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
runPassOnce(t, test.in, test.out, func(fixer *Fixer) error {
return removeResourceAndAssetsIfDefault(fixer)
})
})
}
}