Fix Android.bp to Android.mk conversion bugs

Support + operators in Android.bp files
Remove trailing \n from list values in case they are part of an
expression
Replace manual $(LOCAL_PATH) prefixing in prependLocalPath with
a call to $(addprefix $(LOCAL_PATH),...) so it works on expressions.

Change-Id: I68a62b64381b7616fb7dc27fb064b1ffd3b4542a
diff --git a/androidbp/cmd/androidbp.go b/androidbp/cmd/androidbp.go
index d990418..ba2eda4 100644
--- a/androidbp/cmd/androidbp.go
+++ b/androidbp/cmd/androidbp.go
@@ -29,6 +29,13 @@
 func valueToString(value bpparser.Value) string {
 	if value.Variable != "" {
 		return fmt.Sprintf("$(%s)", value.Variable)
+	} else if value.Expression != nil {
+		if value.Expression.Operator != '+' {
+			panic(fmt.Errorf("unexpected operator '%c'", value.Expression.Operator))
+		}
+		return fmt.Sprintf("%s %s",
+			valueToString(value.Expression.Args[0]),
+			valueToString(value.Expression.Args[1]))
 	} else {
 		switch value.Type {
 		case bpparser.Bool:
@@ -36,7 +43,7 @@
 		case bpparser.String:
 			return fmt.Sprintf("%s", processWildcards(value.StringValue))
 		case bpparser.List:
-			return fmt.Sprintf("\\\n%s\n", listToMkString(value.ListValue))
+			return fmt.Sprintf("\\\n%s", listToMkString(value.ListValue))
 		case bpparser.Map:
 			return fmt.Sprintf("ERROR can't convert map to string")
 		default:
@@ -163,19 +170,12 @@
 }
 
 func prependLocalPath(name string, prop *bpparser.Property, suffix *string) (computedProps []string) {
-	includes := make([]string, 0, len(prop.Value.ListValue))
-	for _, tok := range prop.Value.ListValue {
-		if tok.Type == bpparser.String {
-			includes = append(includes, fmt.Sprintf("    $(LOCAL_PATH)/%s", tok.StringValue))
-		} else {
-			includes = append(includes, fmt.Sprintf("# ERROR: unsupported type %s in list",
-				tok.Type.String()))
-		}
-	}
 	if suffix != nil {
 		name += "_" + *suffix
 	}
-	return append(computedProps, fmt.Sprintf("%s := \\\n%s\n", name, strings.Join(includes, " \\\n")))
+	return []string{
+		fmt.Sprintf("%s := $(addprefix $(LOCAL_PATH)/,%s)\n", name, valueToString(prop.Value)),
+	}
 }
 
 func (w *androidMkWriter) lookupMap(parent bpparser.Value) (mapValue []*bpparser.Property) {