Improve error message when assigning select to nonconfigurable property

Bug: 323382414
Test: m nothing --no-skip-soong-tests
Change-Id: Ideac33cd286566e14e7ff1ff579930add48a94db
This commit is contained in:
Cole Faust 2024-04-30 13:58:17 -07:00
parent ca5ffdd3ce
commit 1c48101091

View file

@ -534,20 +534,18 @@ func (ctx *unpackContext) unpackToConfigurable(propertyName string, property *pa
} }
} }
func (ctx *unpackContext) reportSelectOnNonConfigurablePropertyError( // If the given property is a select, returns an error saying that you can't assign a select to
property *parser.Property, // a non-configurable property. Otherwise returns nil.
) bool { func selectOnNonConfigurablePropertyError(property *parser.Property) error {
if _, ok := property.Value.Eval().(*parser.Select); !ok { if _, ok := property.Value.Eval().(*parser.Select); !ok {
return false return nil
} }
ctx.addError(&UnpackError{ return &UnpackError{
fmt.Errorf("can't assign select statement to non-configurable property %q. This requires a small soong change to enable in most cases, please file a go/soong-bug if you'd like to use a select statement here", fmt.Errorf("can't assign select statement to non-configurable property %q. This requires a small soong change to enable in most cases, please file a go/soong-bug if you'd like to use a select statement here",
property.Name), property.Name),
property.Value.Pos(), property.Value.Pos(),
}) }
return true
} }
// unpackSlice creates a value of a given slice or pointer to slice type from the property, // unpackSlice creates a value of a given slice or pointer to slice type from the property,
@ -574,7 +572,9 @@ func (ctx *unpackContext) unpackToSliceInner(
sliceName string, property *parser.Property, sliceType reflect.Type) (reflect.Value, bool) { sliceName string, property *parser.Property, sliceType reflect.Type) (reflect.Value, bool) {
propValueAsList, ok := property.Value.Eval().(*parser.List) propValueAsList, ok := property.Value.Eval().(*parser.List)
if !ok { if !ok {
if !ctx.reportSelectOnNonConfigurablePropertyError(property) { if err := selectOnNonConfigurablePropertyError(property); err != nil {
ctx.addError(err)
} else {
ctx.addError(&UnpackError{ ctx.addError(&UnpackError{
fmt.Errorf("can't assign %s value to list property %q", fmt.Errorf("can't assign %s value to list property %q",
property.Value.Type(), property.Name), property.Value.Type(), property.Name),
@ -659,10 +659,14 @@ func propertyToValue(typ reflect.Type, property *parser.Property) (reflect.Value
case reflect.Bool: case reflect.Bool:
b, ok := property.Value.Eval().(*parser.Bool) b, ok := property.Value.Eval().(*parser.Bool)
if !ok { if !ok {
return value, &UnpackError{ if err := selectOnNonConfigurablePropertyError(property); err != nil {
fmt.Errorf("can't assign %s value to bool property %q", return value, err
property.Value.Type(), property.Name), } else {
property.Value.Pos(), return value, &UnpackError{
fmt.Errorf("can't assign %s value to bool property %q",
property.Value.Type(), property.Name),
property.Value.Pos(),
}
} }
} }
value = reflect.ValueOf(b.Value) value = reflect.ValueOf(b.Value)
@ -681,10 +685,14 @@ func propertyToValue(typ reflect.Type, property *parser.Property) (reflect.Value
case reflect.String: case reflect.String:
s, ok := property.Value.Eval().(*parser.String) s, ok := property.Value.Eval().(*parser.String)
if !ok { if !ok {
return value, &UnpackError{ if err := selectOnNonConfigurablePropertyError(property); err != nil {
fmt.Errorf("can't assign %s value to string property %q", return value, err
property.Value.Type(), property.Name), } else {
property.Value.Pos(), return value, &UnpackError{
fmt.Errorf("can't assign %s value to string property %q",
property.Value.Type(), property.Name),
property.Value.Pos(),
}
} }
} }
value = reflect.ValueOf(s.Value) value = reflect.ValueOf(s.Value)