Improve error message when assigning select to nonconfigurable property

Bug: 323382414
Test: m nothing --no-skip-soong-tests
Change-Id: Ideac33cd286566e14e7ff1ff579930add48a94db
diff --git a/proptools/unpack.go b/proptools/unpack.go
index dd0f119..1b48a61 100644
--- a/proptools/unpack.go
+++ b/proptools/unpack.go
@@ -534,20 +534,18 @@
 	}
 }
 
-func (ctx *unpackContext) reportSelectOnNonConfigurablePropertyError(
-	property *parser.Property,
-) bool {
+// If the given property is a select, returns an error saying that you can't assign a select to
+// a non-configurable property. Otherwise returns nil.
+func selectOnNonConfigurablePropertyError(property *parser.Property) error {
 	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",
 			property.Name),
 		property.Value.Pos(),
-	})
-
-	return true
+	}
 }
 
 // unpackSlice creates a value of a given slice or pointer to slice type from the property,
@@ -574,7 +572,9 @@
 	sliceName string, property *parser.Property, sliceType reflect.Type) (reflect.Value, bool) {
 	propValueAsList, ok := property.Value.Eval().(*parser.List)
 	if !ok {
-		if !ctx.reportSelectOnNonConfigurablePropertyError(property) {
+		if err := selectOnNonConfigurablePropertyError(property); err != nil {
+			ctx.addError(err)
+		} else {
 			ctx.addError(&UnpackError{
 				fmt.Errorf("can't assign %s value to list property %q",
 					property.Value.Type(), property.Name),
@@ -659,10 +659,14 @@
 	case reflect.Bool:
 		b, ok := property.Value.Eval().(*parser.Bool)
 		if !ok {
-			return value, &UnpackError{
-				fmt.Errorf("can't assign %s value to bool property %q",
-					property.Value.Type(), property.Name),
-				property.Value.Pos(),
+			if err := selectOnNonConfigurablePropertyError(property); err != nil {
+				return value, err
+			} else {
+				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)
@@ -681,10 +685,14 @@
 	case reflect.String:
 		s, ok := property.Value.Eval().(*parser.String)
 		if !ok {
-			return value, &UnpackError{
-				fmt.Errorf("can't assign %s value to string property %q",
-					property.Value.Type(), property.Name),
-				property.Value.Pos(),
+			if err := selectOnNonConfigurablePropertyError(property); err != nil {
+				return value, err
+			} else {
+				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)