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

Commit b1cba215 authored by Paul Duffin's avatar Paul Duffin Committed by Android (Google) Code Review
Browse files

Merge "Avoid passing around []hiddenAPIModule" into sc-dev

parents a49f6b91 98ea0d49
Loading
Loading
Loading
Loading
+5 −8
Original line number Original line Diff line number Diff line
@@ -140,7 +140,7 @@ type commonBootclasspathFragment interface {
	// produceHiddenAPIAllFlagsFile produces the all-flags.csv and intermediate files.
	// produceHiddenAPIAllFlagsFile produces the all-flags.csv and intermediate files.
	//
	//
	// Updates the supplied hiddenAPIInfo with the paths to the generated files set.
	// Updates the supplied hiddenAPIInfo with the paths to the generated files set.
	produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []hiddenAPIModule, input HiddenAPIFlagInput) *HiddenAPIFlagOutput
	produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIFlagOutput
}
}


var _ commonBootclasspathFragment = (*BootclasspathFragmentModule)(nil)
var _ commonBootclasspathFragment = (*BootclasspathFragmentModule)(nil)
@@ -465,7 +465,7 @@ func (b *BootclasspathFragmentModule) populateApexContentInfoDexJars(ctx android
			if unencodedDex == nil {
			if unencodedDex == nil {
				// This is an error. Sometimes Soong will report the error directly, other times it will
				// This is an error. Sometimes Soong will report the error directly, other times it will
				// defer the error reporting to happen only when trying to use the missing file in ninja.
				// defer the error reporting to happen only when trying to use the missing file in ninja.
				// Either way it is handled by extractBootDexJarsFromHiddenAPIModules which must have been
				// Either way it is handled by extractBootDexJarsFromModules which must have been
				// called before this as it generates the flags that are used to encode these files.
				// called before this as it generates the flags that are used to encode these files.
				continue
				continue
			}
			}
@@ -561,12 +561,9 @@ func (b *BootclasspathFragmentModule) generateHiddenAPIBuildActions(ctx android.
	// TODO(b/179354495): Stop hidden API processing being conditional once all bootclasspath_fragment
	// TODO(b/179354495): Stop hidden API processing being conditional once all bootclasspath_fragment
	//  modules have been updated to support it.
	//  modules have been updated to support it.
	if input.canPerformHiddenAPIProcessing(ctx, b.properties) {
	if input.canPerformHiddenAPIProcessing(ctx, b.properties) {
		// Get the content modules that contribute to the hidden API processing.
		hiddenAPIModules := gatherHiddenAPIModuleFromContents(ctx, contents)

		// Delegate the production of the hidden API all-flags.csv file to a module type specific method.
		// Delegate the production of the hidden API all-flags.csv file to a module type specific method.
		common := ctx.Module().(commonBootclasspathFragment)
		common := ctx.Module().(commonBootclasspathFragment)
		output = common.produceHiddenAPIAllFlagsFile(ctx, hiddenAPIModules, input)
		output = common.produceHiddenAPIAllFlagsFile(ctx, contents, input)
	}
	}


	// Initialize a HiddenAPIInfo structure.
	// Initialize a HiddenAPIInfo structure.
@@ -620,7 +617,7 @@ func (b *BootclasspathFragmentModule) createHiddenAPIFlagInput(ctx android.Modul


// produceHiddenAPIAllFlagsFile produces the hidden API all-flags.csv file (and supporting files)
// produceHiddenAPIAllFlagsFile produces the hidden API all-flags.csv file (and supporting files)
// for the fragment.
// for the fragment.
func (b *BootclasspathFragmentModule) produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []hiddenAPIModule, input HiddenAPIFlagInput) *HiddenAPIFlagOutput {
func (b *BootclasspathFragmentModule) produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIFlagOutput {
	// Generate the rules to create the hidden API flags and update the supplied hiddenAPIInfo with the
	// Generate the rules to create the hidden API flags and update the supplied hiddenAPIInfo with the
	// paths to the created files.
	// paths to the created files.
	return hiddenAPIGenerateAllFlagsForBootclasspathFragment(ctx, contents, input)
	return hiddenAPIGenerateAllFlagsForBootclasspathFragment(ctx, contents, input)
@@ -841,7 +838,7 @@ func (module *prebuiltBootclasspathFragmentModule) Name() string {


// produceHiddenAPIAllFlagsFile returns a path to the prebuilt all-flags.csv or nil if none is
// produceHiddenAPIAllFlagsFile returns a path to the prebuilt all-flags.csv or nil if none is
// specified.
// specified.
func (module *prebuiltBootclasspathFragmentModule) produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []hiddenAPIModule, _ HiddenAPIFlagInput) *HiddenAPIFlagOutput {
func (module *prebuiltBootclasspathFragmentModule) produceHiddenAPIAllFlagsFile(ctx android.ModuleContext, contents []android.Module, _ HiddenAPIFlagInput) *HiddenAPIFlagOutput {
	pathForOptionalSrc := func(src *string) android.Path {
	pathForOptionalSrc := func(src *string) android.Path {
		if src == nil {
		if src == nil {
			// TODO(b/179354495): Fail if this is not provided once prebuilts have been updated.
			// TODO(b/179354495): Fail if this is not provided once prebuilts have been updated.
+34 −24
Original line number Original line Diff line number Diff line
@@ -679,11 +679,11 @@ func buildRuleToGenerateHiddenApiFlags(ctx android.BuilderContext, name, desc st
// * metadata.csv
// * metadata.csv
// * index.csv
// * index.csv
// * all-flags.csv
// * all-flags.csv
func hiddenAPIGenerateAllFlagsForBootclasspathFragment(ctx android.ModuleContext, contents []hiddenAPIModule, input HiddenAPIFlagInput) *HiddenAPIFlagOutput {
func hiddenAPIGenerateAllFlagsForBootclasspathFragment(ctx android.ModuleContext, contents []android.Module, input HiddenAPIFlagInput) *HiddenAPIFlagOutput {
	hiddenApiSubDir := "modular-hiddenapi"
	hiddenApiSubDir := "modular-hiddenapi"


	// Gather the dex files for the boot libraries provided by this fragment.
	// Gather the dex files for the boot libraries provided by this fragment.
	bootDexJars := extractBootDexJarsFromHiddenAPIModules(ctx, contents)
	bootDexJars := extractBootDexJarsFromModules(ctx, contents)


	// Generate the stub-flags.csv.
	// Generate the stub-flags.csv.
	stubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "stub-flags.csv")
	stubFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "stub-flags.csv")
@@ -691,7 +691,7 @@ func hiddenAPIGenerateAllFlagsForBootclasspathFragment(ctx android.ModuleContext
	rule.Build("modularHiddenAPIStubFlagsFile", "modular hiddenapi stub flags")
	rule.Build("modularHiddenAPIStubFlagsFile", "modular hiddenapi stub flags")


	// Extract the classes jars from the contents.
	// Extract the classes jars from the contents.
	classesJars := extractClassJarsFromHiddenAPIModules(ctx, contents)
	classesJars := extractClassesJarsFromModules(contents)


	// Generate the set of flags from the annotations in the source code.
	// Generate the set of flags from the annotations in the source code.
	annotationFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "annotation-flags.csv")
	annotationFlagsCSV := android.PathForModuleOut(ctx, hiddenApiSubDir, "annotation-flags.csv")
@@ -746,26 +746,15 @@ func buildRuleToGenerateRemovedDexSignatures(ctx android.ModuleContext, removedT
	return android.OptionalPathForPath(output)
	return android.OptionalPathForPath(output)
}
}


// gatherHiddenAPIModuleFromContents gathers the hiddenAPIModule from the supplied contents.
// extractBootDexJarsFromModules extracts the boot dex jars from the supplied modules.
func gatherHiddenAPIModuleFromContents(ctx android.ModuleContext, contents []android.Module) []hiddenAPIModule {
func extractBootDexJarsFromModules(ctx android.ModuleContext, contents []android.Module) android.Paths {
	hiddenAPIModules := []hiddenAPIModule{}
	for _, module := range contents {
		if hiddenAPI, ok := module.(hiddenAPIModule); ok {
			hiddenAPIModules = append(hiddenAPIModules, hiddenAPI)
		} else if _, ok := module.(*DexImport); ok {
			// Ignore this for the purposes of hidden API processing
		} else {
			ctx.ModuleErrorf("module %s does not implement hiddenAPIModule", module)
		}
	}
	return hiddenAPIModules
}

// extractBootDexJarsFromHiddenAPIModules extracts the boot dex jars from the supplied modules.
func extractBootDexJarsFromHiddenAPIModules(ctx android.ModuleContext, contents []hiddenAPIModule) android.Paths {
	bootDexJars := android.Paths{}
	bootDexJars := android.Paths{}
	for _, module := range contents {
	for _, module := range contents {
		bootDexJar := module.bootDexJar()
		hiddenAPIModule := hiddenAPIModuleFromModule(ctx, module)
		if hiddenAPIModule == nil {
			continue
		}
		bootDexJar := hiddenAPIModule.bootDexJar()
		if bootDexJar == nil {
		if bootDexJar == nil {
			if ctx.Config().AlwaysUsePrebuiltSdks() {
			if ctx.Config().AlwaysUsePrebuiltSdks() {
				// TODO(b/179354495): Remove this workaround when it is unnecessary.
				// TODO(b/179354495): Remove this workaround when it is unnecessary.
@@ -793,15 +782,36 @@ func extractBootDexJarsFromHiddenAPIModules(ctx android.ModuleContext, contents
	return bootDexJars
	return bootDexJars
}
}


// extractClassJarsFromHiddenAPIModules extracts the class jars from the supplied modules.
func hiddenAPIModuleFromModule(ctx android.BaseModuleContext, module android.Module) hiddenAPIModule {
func extractClassJarsFromHiddenAPIModules(ctx android.ModuleContext, contents []hiddenAPIModule) android.Paths {
	if hiddenAPIModule, ok := module.(hiddenAPIModule); ok {
		return hiddenAPIModule
	} else if _, ok := module.(*DexImport); ok {
		// Ignore this for the purposes of hidden API processing
	} else {
		ctx.ModuleErrorf("module %s does not implement hiddenAPIModule", module)
	}

	return nil
}

// extractClassesJarsFromModules extracts the class jars from the supplied modules.
func extractClassesJarsFromModules(contents []android.Module) android.Paths {
	classesJars := android.Paths{}
	classesJars := android.Paths{}
	for _, module := range contents {
	for _, module := range contents {
		classesJars = append(classesJars, module.classesJars()...)
		classesJars = append(classesJars, retrieveClassesJarsFromModule(module)...)
	}
	}
	return classesJars
	return classesJars
}
}


// retrieveClassesJarsFromModule retrieves the classes jars from the supplied module.
func retrieveClassesJarsFromModule(module android.Module) android.Paths {
	if hiddenAPIModule, ok := module.(hiddenAPIModule); ok {
		return hiddenAPIModule.classesJars()
	}

	return nil
}

// deferReportingMissingBootDexJar returns true if a missing boot dex jar should not be reported by
// deferReportingMissingBootDexJar returns true if a missing boot dex jar should not be reported by
// Soong but should instead only be reported in ninja if the file is actually built.
// Soong but should instead only be reported in ninja if the file is actually built.
func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.Module) bool {
func deferReportingMissingBootDexJar(ctx android.ModuleContext, module android.Module) bool {
+2 −4
Original line number Original line Diff line number Diff line
@@ -290,16 +290,14 @@ func (b *platformBootclasspathModule) generateHiddenAPIBuildActions(ctx android.
	// Use the flag files from this module and all the fragments.
	// Use the flag files from this module and all the fragments.
	input.FlagFilesByCategory = monolithicInfo.FlagsFilesByCategory
	input.FlagFilesByCategory = monolithicInfo.FlagsFilesByCategory


	hiddenAPIModules := gatherHiddenAPIModuleFromContents(ctx, modules)

	// Generate the monolithic stub-flags.csv file.
	// Generate the monolithic stub-flags.csv file.
	bootDexJars := extractBootDexJarsFromHiddenAPIModules(ctx, hiddenAPIModules)
	bootDexJars := extractBootDexJarsFromModules(ctx, modules)
	stubFlags := hiddenAPISingletonPaths(ctx).stubFlags
	stubFlags := hiddenAPISingletonPaths(ctx).stubFlags
	rule := ruleToGenerateHiddenAPIStubFlagsFile(ctx, stubFlags, bootDexJars, input)
	rule := ruleToGenerateHiddenAPIStubFlagsFile(ctx, stubFlags, bootDexJars, input)
	rule.Build("platform-bootclasspath-monolithic-hiddenapi-stub-flags", "monolithic hidden API stub flags")
	rule.Build("platform-bootclasspath-monolithic-hiddenapi-stub-flags", "monolithic hidden API stub flags")


	// Extract the classes jars from the contents.
	// Extract the classes jars from the contents.
	classesJars := extractClassJarsFromHiddenAPIModules(ctx, hiddenAPIModules)
	classesJars := extractClassesJarsFromModules(modules)


	// Generate the annotation-flags.csv file from all the module annotations.
	// Generate the annotation-flags.csv file from all the module annotations.
	annotationFlags := android.PathForModuleOut(ctx, "hiddenapi-monolithic", "annotation-flags.csv")
	annotationFlags := android.PathForModuleOut(ctx, "hiddenapi-monolithic", "annotation-flags.csv")