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

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

Merge "Remove hiddenAPI.primary field" into sc-dev

parents 09df8096 c9e52dbc
Loading
Loading
Loading
Loading
+0 −50
Original line number Diff line number Diff line
@@ -30,18 +30,6 @@ type hiddenAPI struct {
	// that information encoded within it.
	active bool

	// Identifies the active module variant which will be used as the source of hiddenapi information.
	//
	// A class may be compiled into a number of different module variants each of which will need the
	// hiddenapi information encoded into it and so will be marked as active. However, only one of
	// them must be used as a source of information by hiddenapi otherwise it will end up with
	// duplicate entries. That module will have primary=true.
	//
	// Note, that modules <x>-hiddenapi that provide additional annotation information for module <x>
	// that is on the bootclasspath are marked as primary=true as they are the primary source of that
	// annotation information.
	primary bool

	// The path to the dex jar that is in the boot class path. If this is nil then the associated
	// module is not a boot jar, but could be one of the <x>-hiddenapi modules that provide additional
	// annotations for the <x> boot dex jar but which do not actually provide a boot dex jar
@@ -113,44 +101,6 @@ func (h *hiddenAPI) initHiddenAPI(ctx android.ModuleContext, dexJar, classesJar
	// bootclassloader. If information is gathered for modules not on the list then that will cause
	// failures in the CtsHiddenApiBlocklist... tests.
	h.active = isModuleInBootClassPath(ctx, module)
	if !h.active {
		// The rest of the properties will be ignored if active is false.
		return
	}

	// Determine whether this module is the primary module or not.
	primary := true

	// A prebuilt module is only primary if it is preferred and conversely a source module is only
	// primary if it has not been replaced by a prebuilt module.
	if pi, ok := module.(android.PrebuiltInterface); ok {
		if p := pi.Prebuilt(); p != nil {
			primary = p.UsePrebuilt()
		}
	} else {
		// A source module that has been replaced by a prebuilt can never be the primary module.
		if module.IsReplacedByPrebuilt() {
			if ctx.HasProvider(android.ApexInfoProvider) {
				// The source module is in an APEX but the prebuilt module on which it depends is not in an
				// APEX and so is not the one that will actually be used for hidden API processing. That
				// means it is not possible to check to see if it is a suitable replacement so just assume
				// that it is.
				primary = false
			} else {
				ctx.VisitDirectDepsWithTag(android.PrebuiltDepTag, func(prebuilt android.Module) {
					if h, ok := prebuilt.(hiddenAPIIntf); ok && h.bootDexJar() != nil {
						primary = false
					} else {
						ctx.ModuleErrorf(
							"hiddenapi has determined that the source module %q should be ignored as it has been"+
								" replaced by the prebuilt module %q but unfortunately it does not provide a"+
								" suitable boot dex jar", ctx.ModuleName(), ctx.OtherModuleName(prebuilt))
					}
				})
			}
		}
	}
	h.primary = primary
}

func isModuleInBootClassPath(ctx android.BaseModuleContext, module android.Module) bool {