build: Fix bp2build panic issue

panic in top down mutator "bp2build_conversion_bp2build"
for module "foo".
reflect: call of reflect.Value.NumField on interface Value

Test: go test ./bp2build
Change-Id: I9ee460ca38a37c6a6c1a0787159fa5f38b852b55
This commit is contained in:
liulvping
2023-05-24 10:27:44 +08:00
committed by lvping liu
parent cd4e6a609e
commit 4d11d10ce2
2 changed files with 50 additions and 0 deletions

View File

@@ -848,6 +848,9 @@ func (productConfigProperties *ProductConfigProperties) AddSoongConfigProperties
// indirections to extract the struct from the reflect.Value.
if v, ok := maybeExtractConfigVarProp(variableStruct); ok {
variableStruct = v
} else if !v.IsValid() {
// Skip invalid variables which may not used, else leads to panic
continue
}
for j := 0; j < variableStruct.NumField(); j++ {

View File

@@ -200,6 +200,53 @@ custom_cc_library_static {
)`}})
}
func TestSoongConfigModuleType_MultipleBoolVar_PartialUseNotPanic(t *testing.T) {
bp := `
soong_config_bool_variable {
name: "feature1",
}
soong_config_bool_variable {
name: "feature2",
}
soong_config_module_type {
name: "custom_cc_library_static",
module_type: "cc_library_static",
config_namespace: "acme",
variables: ["feature1", "feature2",],
properties: ["cflags"],
}
custom_cc_library_static {
name: "foo",
bazel_module: { bp2build_available: true },
host_supported: true,
soong_config_variables: {
feature1: {
conditions_default: {
cflags: ["-DDEFAULT1"],
},
cflags: ["-DFEATURE1"],
},
},
}`
runSoongConfigModuleTypeTest(t, Bp2buildTestCase{
Description: "soong config variables - used part of multiple bool variable do not panic",
ModuleTypeUnderTest: "cc_library_static",
ModuleTypeUnderTestFactory: cc.LibraryStaticFactory,
Blueprint: bp,
ExpectedBazelTargets: []string{`cc_library_static(
name = "foo",
copts = select({
"//build/bazel/product_variables:acme__feature1": ["-DFEATURE1"],
"//conditions:default": ["-DDEFAULT1"],
}),
local_includes = ["."],
)`}})
}
func TestSoongConfigModuleType_StringAndBoolVar(t *testing.T) {
bp := `
soong_config_bool_variable {