Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e020ba9c authored by Zi Wang's avatar Zi Wang Committed by Gerrit Code Review
Browse files

Merge "Use OutputFilesProvider on droidstubs" into main

parents aee299e9 39e68fff
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -69,11 +69,7 @@ func TestDroiddoc(t *testing.T) {
			"bar-doc/a.java": nil,
			"bar-doc/b.java": nil,
		})
	barStubs := ctx.ModuleForTests("bar-stubs", "android_common")
	barStubsOutputs, err := barStubs.Module().(*Droidstubs).OutputFiles("")
	if err != nil {
		t.Errorf("Unexpected error %q retrieving \"bar-stubs\" output file", err)
	}
	barStubsOutputs := ctx.ModuleForTests("bar-stubs", "android_common").OutputFiles(t, "")
	if len(barStubsOutputs) != 1 {
		t.Errorf("Expected one output from \"bar-stubs\" got %s", barStubsOutputs)
	}
+40 −60
Original line number Diff line number Diff line
@@ -283,66 +283,6 @@ func DroidstubsHostFactory() android.Module {
	return module
}

func getStubsTypeAndTag(tag string) (StubsType, string, error) {
	if len(tag) == 0 {
		return Everything, "", nil
	}
	if tag[0] != '.' {
		return Unavailable, "", fmt.Errorf("tag must begin with \".\"")
	}

	stubsType := Everything
	// Check if the tag has a stubs type prefix (e.g. ".exportable")
	for st := Everything; st <= Exportable; st++ {
		if strings.HasPrefix(tag, "."+st.String()) {
			stubsType = st
		}
	}

	return stubsType, strings.TrimPrefix(tag, "."+stubsType.String()), nil
}

// Droidstubs' tag supports specifying with the stubs type.
// While supporting the pre-existing tags, it also supports tags with
// the stubs type prefix. Some examples are shown below:
// {.annotations.zip} - pre-existing behavior. Returns the path to the
// annotation zip.
// {.exportable} - Returns the path to the exportable stubs src jar.
// {.exportable.annotations.zip} - Returns the path to the exportable
// annotations zip file.
// {.runtime.api_versions.xml} - Runtime stubs does not generate api versions
// xml file. For unsupported combinations, the default everything output file
// is returned.
func (d *Droidstubs) OutputFiles(tag string) (android.Paths, error) {
	stubsType, prefixRemovedTag, err := getStubsTypeAndTag(tag)
	if err != nil {
		return nil, err
	}
	switch prefixRemovedTag {
	case "":
		stubsSrcJar, err := d.StubsSrcJar(stubsType)
		return android.Paths{stubsSrcJar}, err
	case ".docs.zip":
		docZip, err := d.DocZip(stubsType)
		return android.Paths{docZip}, err
	case ".api.txt", android.DefaultDistTag:
		// This is the default dist path for dist properties that have no tag property.
		apiFilePath, err := d.ApiFilePath(stubsType)
		return android.Paths{apiFilePath}, err
	case ".removed-api.txt":
		removedApiFilePath, err := d.RemovedApiFilePath(stubsType)
		return android.Paths{removedApiFilePath}, err
	case ".annotations.zip":
		annotationsZip, err := d.AnnotationsZip(stubsType)
		return android.Paths{annotationsZip}, err
	case ".api_versions.xml":
		apiVersionsXmlFilePath, err := d.ApiVersionsXmlFilePath(stubsType)
		return android.Paths{apiVersionsXmlFilePath}, err
	default:
		return nil, fmt.Errorf("unsupported module reference tag %q", tag)
	}
}

func (d *Droidstubs) AnnotationsZip(stubsType StubsType) (ret android.Path, err error) {
	switch stubsType {
	case Everything:
@@ -1363,6 +1303,46 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {

		rule.Build("nullabilityWarningsCheck", "nullability warnings check")
	}

	d.setOutputFiles(ctx)
}

// This method sets the outputFiles property, which is used to set the
// OutputFilesProvider later.
// Droidstubs' tag supports specifying with the stubs type.
// While supporting the pre-existing tags, it also supports tags with
// the stubs type prefix. Some examples are shown below:
// {.annotations.zip} - pre-existing behavior. Returns the path to the
// annotation zip.
// {.exportable} - Returns the path to the exportable stubs src jar.
// {.exportable.annotations.zip} - Returns the path to the exportable
// annotations zip file.
// {.runtime.api_versions.xml} - Runtime stubs does not generate api versions
// xml file. For unsupported combinations, the default everything output file
// is returned.
func (d *Droidstubs) setOutputFiles(ctx android.ModuleContext) {
	tagToOutputFileFunc := map[string]func(StubsType) (android.Path, error){
		"":                     d.StubsSrcJar,
		".docs.zip":            d.DocZip,
		".api.txt":             d.ApiFilePath,
		android.DefaultDistTag: d.ApiFilePath,
		".removed-api.txt":     d.RemovedApiFilePath,
		".annotations.zip":     d.AnnotationsZip,
		".api_versions.xml":    d.ApiVersionsXmlFilePath,
	}
	stubsTypeToPrefix := map[StubsType]string{
		Everything: "",
		Exportable: ".exportable",
	}
	for _, tag := range android.SortedKeys(tagToOutputFileFunc) {
		for _, stubType := range android.SortedKeys(stubsTypeToPrefix) {
			tagWithPrefix := stubsTypeToPrefix[stubType] + tag
			outputFile, err := tagToOutputFileFunc[tag](stubType)
			if err == nil {
				ctx.SetOutputFiles(android.Paths{outputFile}, tagWithPrefix)
			}
		}
	}
}

func (d *Droidstubs) createApiContribution(ctx android.DefaultableHookContext) {