Loading android/bazel_handler.go +21 −5 Original line number Diff line number Diff line Loading @@ -34,10 +34,26 @@ import ( "android/soong/shared" ) type cqueryRequest interface { // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. Name() string // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. // The function should have the following properties: // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. StarlarkFunctionBody() string } // Map key to describe bazel cquery requests. type cqueryKey struct { label string requestType cquery.RequestType requestType cqueryRequest archType ArchType } Loading Loading @@ -133,7 +149,7 @@ func (bazelCtx *bazelContext) GetOutputFiles(label string, archType ArchType) ([ var ret []string if ok { bazelOutput := strings.TrimSpace(rawString) ret = cquery.GetOutputFiles.ParseResult(bazelOutput).([]string) ret = cquery.GetOutputFiles.ParseResult(bazelOutput) } return ret, ok } Loading @@ -145,7 +161,7 @@ func (bazelCtx *bazelContext) GetOutputFilesAndCcObjectFiles(label string, archT result, ok := bazelCtx.cquery(label, cquery.GetOutputFilesAndCcObjectFiles, archType) if ok { bazelOutput := strings.TrimSpace(result) returnResult := cquery.GetOutputFilesAndCcObjectFiles.ParseResult(bazelOutput).(cquery.GetOutputFilesAndCcObjectFiles_Result) returnResult := cquery.GetOutputFilesAndCcObjectFiles.ParseResult(bazelOutput) outputFiles = returnResult.OutputFiles ccObjects = returnResult.CcObjectFiles } Loading Loading @@ -231,7 +247,7 @@ func (context *bazelContext) BazelEnabled() bool { // If the given request was already made (and the results are available), then // returns (result, true). If the request is queued but no results are available, // then returns ("", false). func (context *bazelContext) cquery(label string, requestType cquery.RequestType, func (context *bazelContext) cquery(label string, requestType cqueryRequest, archType ArchType) (string, bool) { key := cqueryKey{label, requestType, archType} if result, ok := context.results[key]; ok { Loading Loading @@ -449,7 +465,7 @@ func indent(original string) string { // and grouped by their request type. The data retrieved for each label depends on its // request type. func (context *bazelContext) cqueryStarlarkFileContents() []byte { requestTypeToCqueryIdEntries := map[cquery.RequestType][]string{} requestTypeToCqueryIdEntries := map[cqueryRequest][]string{} for val, _ := range context.requests { cqueryId := getCqueryId(val) mapEntryString := fmt.Sprintf("%q : True", cqueryId) Loading bazel/cquery/request_type.go +30 −27 Original line number Diff line number Diff line Loading @@ -5,8 +5,8 @@ import ( ) var ( GetOutputFiles RequestType = &getOutputFilesRequestType{} GetOutputFilesAndCcObjectFiles RequestType = &getOutputFilesAndCcObjectFilesType{} GetOutputFiles = &getOutputFilesRequestType{} GetOutputFilesAndCcObjectFiles = &getOutputFilesAndCcObjectFilesType{} ) type GetOutputFilesAndCcObjectFiles_Result struct { Loading @@ -14,12 +14,15 @@ type GetOutputFilesAndCcObjectFiles_Result struct { CcObjectFiles []string } type RequestType interface { type getOutputFilesRequestType struct{} // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. Name() string func (g getOutputFilesRequestType) Name() string { return "getOutputFiles" } // StarlarkFunctionBody returns a straark function body to process this request type. // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. Loading @@ -27,36 +30,33 @@ type RequestType interface { // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. StarlarkFunctionBody() string // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. // The type of this value depends on the request type; it is up to the caller to // cast to the correct type. ParseResult(rawString string) interface{} } type getOutputFilesRequestType struct{} func (g getOutputFilesRequestType) Name() string { return "getOutputFiles" } func (g getOutputFilesRequestType) StarlarkFunctionBody() string { return "return ', '.join([f.path for f in target.files.to_list()])" } func (g getOutputFilesRequestType) ParseResult(rawString string) interface{} { // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. func (g getOutputFilesRequestType) ParseResult(rawString string) []string { return strings.Split(rawString, ", ") } type getOutputFilesAndCcObjectFilesType struct{} // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. func (g getOutputFilesAndCcObjectFilesType) Name() string { return "getOutputFilesAndCcObjectFiles" } // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. // The function should have the following properties: // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. func (g getOutputFilesAndCcObjectFilesType) StarlarkFunctionBody() string { return ` outputFiles = [f.path for f in target.files.to_list()] Loading @@ -71,7 +71,10 @@ for linker_input in linker_inputs: return ', '.join(outputFiles) + "|" + ', '.join(ccObjectFiles)` } func (g getOutputFilesAndCcObjectFilesType) ParseResult(rawString string) interface{} { // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. func (g getOutputFilesAndCcObjectFilesType) ParseResult(rawString string) GetOutputFilesAndCcObjectFiles_Result { var outputFiles []string var ccObjects []string Loading Loading
android/bazel_handler.go +21 −5 Original line number Diff line number Diff line Loading @@ -34,10 +34,26 @@ import ( "android/soong/shared" ) type cqueryRequest interface { // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. Name() string // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. // The function should have the following properties: // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. StarlarkFunctionBody() string } // Map key to describe bazel cquery requests. type cqueryKey struct { label string requestType cquery.RequestType requestType cqueryRequest archType ArchType } Loading Loading @@ -133,7 +149,7 @@ func (bazelCtx *bazelContext) GetOutputFiles(label string, archType ArchType) ([ var ret []string if ok { bazelOutput := strings.TrimSpace(rawString) ret = cquery.GetOutputFiles.ParseResult(bazelOutput).([]string) ret = cquery.GetOutputFiles.ParseResult(bazelOutput) } return ret, ok } Loading @@ -145,7 +161,7 @@ func (bazelCtx *bazelContext) GetOutputFilesAndCcObjectFiles(label string, archT result, ok := bazelCtx.cquery(label, cquery.GetOutputFilesAndCcObjectFiles, archType) if ok { bazelOutput := strings.TrimSpace(result) returnResult := cquery.GetOutputFilesAndCcObjectFiles.ParseResult(bazelOutput).(cquery.GetOutputFilesAndCcObjectFiles_Result) returnResult := cquery.GetOutputFilesAndCcObjectFiles.ParseResult(bazelOutput) outputFiles = returnResult.OutputFiles ccObjects = returnResult.CcObjectFiles } Loading Loading @@ -231,7 +247,7 @@ func (context *bazelContext) BazelEnabled() bool { // If the given request was already made (and the results are available), then // returns (result, true). If the request is queued but no results are available, // then returns ("", false). func (context *bazelContext) cquery(label string, requestType cquery.RequestType, func (context *bazelContext) cquery(label string, requestType cqueryRequest, archType ArchType) (string, bool) { key := cqueryKey{label, requestType, archType} if result, ok := context.results[key]; ok { Loading Loading @@ -449,7 +465,7 @@ func indent(original string) string { // and grouped by their request type. The data retrieved for each label depends on its // request type. func (context *bazelContext) cqueryStarlarkFileContents() []byte { requestTypeToCqueryIdEntries := map[cquery.RequestType][]string{} requestTypeToCqueryIdEntries := map[cqueryRequest][]string{} for val, _ := range context.requests { cqueryId := getCqueryId(val) mapEntryString := fmt.Sprintf("%q : True", cqueryId) Loading
bazel/cquery/request_type.go +30 −27 Original line number Diff line number Diff line Loading @@ -5,8 +5,8 @@ import ( ) var ( GetOutputFiles RequestType = &getOutputFilesRequestType{} GetOutputFilesAndCcObjectFiles RequestType = &getOutputFilesAndCcObjectFilesType{} GetOutputFiles = &getOutputFilesRequestType{} GetOutputFilesAndCcObjectFiles = &getOutputFilesAndCcObjectFilesType{} ) type GetOutputFilesAndCcObjectFiles_Result struct { Loading @@ -14,12 +14,15 @@ type GetOutputFilesAndCcObjectFiles_Result struct { CcObjectFiles []string } type RequestType interface { type getOutputFilesRequestType struct{} // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. Name() string func (g getOutputFilesRequestType) Name() string { return "getOutputFiles" } // StarlarkFunctionBody returns a straark function body to process this request type. // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. Loading @@ -27,36 +30,33 @@ type RequestType interface { // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. StarlarkFunctionBody() string // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. // The type of this value depends on the request type; it is up to the caller to // cast to the correct type. ParseResult(rawString string) interface{} } type getOutputFilesRequestType struct{} func (g getOutputFilesRequestType) Name() string { return "getOutputFiles" } func (g getOutputFilesRequestType) StarlarkFunctionBody() string { return "return ', '.join([f.path for f in target.files.to_list()])" } func (g getOutputFilesRequestType) ParseResult(rawString string) interface{} { // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. func (g getOutputFilesRequestType) ParseResult(rawString string) []string { return strings.Split(rawString, ", ") } type getOutputFilesAndCcObjectFilesType struct{} // Name returns a string name for this request type. Such request type names must be unique, // and must only consist of alphanumeric characters. func (g getOutputFilesAndCcObjectFilesType) Name() string { return "getOutputFilesAndCcObjectFiles" } // StarlarkFunctionBody returns a starlark function body to process this request type. // The returned string is the body of a Starlark function which obtains // all request-relevant information about a target and returns a string containing // this information. // The function should have the following properties: // - `target` is the only parameter to this function (a configured target). // - The return value must be a string. // - The function body should not be indented outside of its own scope. func (g getOutputFilesAndCcObjectFilesType) StarlarkFunctionBody() string { return ` outputFiles = [f.path for f in target.files.to_list()] Loading @@ -71,7 +71,10 @@ for linker_input in linker_inputs: return ', '.join(outputFiles) + "|" + ', '.join(ccObjectFiles)` } func (g getOutputFilesAndCcObjectFilesType) ParseResult(rawString string) interface{} { // ParseResult returns a value obtained by parsing the result of the request's Starlark function. // The given rawString must correspond to the string output which was created by evaluating the // Starlark given in StarlarkFunctionBody. func (g getOutputFilesAndCcObjectFilesType) ParseResult(rawString string) GetOutputFilesAndCcObjectFiles_Result { var outputFiles []string var ccObjects []string Loading