diff options
Diffstat (limited to 'sdk/sdk.go')
-rw-r--r-- | sdk/sdk.go | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/sdk/sdk.go b/sdk/sdk.go index dabdf851e..cb5a6053d 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -312,7 +312,7 @@ func RegisterPreDepsMutators(ctx android.RegisterMutatorsContext) { ctx.BottomUp("SdkMemberInterVersion", memberInterVersionMutator).Parallel() } -// RegisterPostDepshMutators registers post-deps mutators to support modules implementing SdkAware +// RegisterPostDepsMutators registers post-deps mutators to support modules implementing SdkAware // interface and the sdk module type. This function has been made public to be called by tests // outside of the sdk package func RegisterPostDepsMutators(ctx android.RegisterMutatorsContext) { @@ -431,23 +431,31 @@ func sdkDepsReplaceMutator(mctx android.BottomUpMutatorContext) { } } -// Step 6: ensure that the dependencies from outside of the APEX are all from the required SDKs +// Step 6: ensure that the dependencies outside of the APEX are all from the required SDKs func sdkRequirementsMutator(mctx android.TopDownMutatorContext) { if m, ok := mctx.Module().(interface { - DepIsInSameApex(ctx android.BaseModuleContext, dep android.Module) bool - RequiredSdks() android.SdkRefs + android.DepIsInSameApex + android.RequiredSdks }); ok { requiredSdks := m.RequiredSdks() if len(requiredSdks) == 0 { return } mctx.VisitDirectDeps(func(dep android.Module) { - if mctx.OtherModuleDependencyTag(dep) == android.DefaultsDepTag { + tag := mctx.OtherModuleDependencyTag(dep) + if tag == android.DefaultsDepTag { // dependency to defaults is always okay return } - // If the dep is from outside of the APEX, but is not in any of the + // Ignore the dependency from the unversioned member to any versioned members as an + // apex that depends on the unversioned member will not also be depending on a versioned + // member. + if _, ok := tag.(sdkMemberVersionedDepTag); ok { + return + } + + // If the dep is outside of the APEX, but is not in any of the // required SDKs, we know that the dep is a violation. if sa, ok := dep.(android.SdkAware); ok { if !m.DepIsInSameApex(mctx, dep) && !requiredSdks.Contains(sa.ContainingSdk()) { |