Merge "Add "contents" property to systemserverclasspath_fragment." into sc-dev

This commit is contained in:
Paul Duffin 2021-05-18 12:19:09 +00:00 committed by Android (Google) Code Review
commit 64816e613d
2 changed files with 52 additions and 7 deletions

View File

@ -17,6 +17,7 @@ package java
import (
"android/soong/android"
"android/soong/dexpreopt"
"github.com/google/blueprint"
)
func init() {
@ -70,16 +71,30 @@ type systemServerClasspathModule struct {
android.ModuleBase
ClasspathFragmentBase
properties systemServerClasspathFragmentProperties
}
type systemServerClasspathFragmentProperties struct {
// The contents of this systemserverclasspath_fragment, could be either java_library, or java_sdk_library.
//
// The order of this list matters as it is the order that is used in the SYSTEMSERVERCLASSPATH.
Contents []string
}
func systemServerClasspathFactory() android.Module {
m := &systemServerClasspathModule{}
m.AddProperties(&m.properties)
initClasspathFragment(m, SYSTEMSERVERCLASSPATH)
android.InitAndroidArchModule(m, android.DeviceSupported, android.MultilibCommon)
return m
}
func (s *systemServerClasspathModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if len(s.properties.Contents) == 0 {
ctx.PropertyErrorf("contents", "empty contents are not allowed")
}
s.classpathFragmentBase().generateClasspathProtoBuildActions(ctx, configuredJarListToClasspathJars(ctx, s.ClasspathFragmentToConfiguredJarList(ctx)))
}
@ -87,3 +102,22 @@ func (s *systemServerClasspathModule) ClasspathFragmentToConfiguredJarList(ctx a
// TODO(satayev): populate with actual content
return android.EmptyConfiguredJarList()
}
type systemServerClasspathFragmentContentDependencyTag struct {
blueprint.BaseDependencyTag
}
// The tag used for the dependency between the systemserverclasspath_fragment module and its contents.
var systemServerClasspathFragmentContentDepTag = systemServerClasspathFragmentContentDependencyTag{}
func IsSystemServerClasspathFragmentContentDepTag(tag blueprint.DependencyTag) bool {
return tag == systemServerClasspathFragmentContentDepTag
}
func (s *systemServerClasspathModule) ComponentDepsMutator(ctx android.BottomUpMutatorContext) {
module := ctx.Module()
for _, name := range s.properties.Contents {
ctx.AddDependency(module, systemServerClasspathFragmentContentDepTag, name)
}
}

View File

@ -20,13 +20,13 @@ import (
"android/soong/android"
)
var prepareForTestWithSystemserverClasspath = android.GroupFixturePreparers(
var prepareForTestWithSystemServerClasspath = android.GroupFixturePreparers(
PrepareForTestWithJavaDefaultModules,
)
func TestSystemserverClasspathVariant(t *testing.T) {
func TestPlatformSystemserverClasspathVariant(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForTestWithSystemserverClasspath,
prepareForTestWithSystemServerClasspath,
android.FixtureWithRootAndroidBp(`
platform_systemserverclasspath {
name: "platform-systemserverclasspath",
@ -38,9 +38,9 @@ func TestSystemserverClasspathVariant(t *testing.T) {
android.AssertIntEquals(t, "expect 1 variant", 1, len(variants))
}
func TestSystemserverClasspath_ClasspathFragmentPaths(t *testing.T) {
func TestPlatformSystemserverClasspath_ClasspathFragmentPaths(t *testing.T) {
result := android.GroupFixturePreparers(
prepareForTestWithSystemserverClasspath,
prepareForTestWithSystemServerClasspath,
android.FixtureWithRootAndroidBp(`
platform_systemserverclasspath {
name: "platform-systemserverclasspath",
@ -53,9 +53,9 @@ func TestSystemserverClasspath_ClasspathFragmentPaths(t *testing.T) {
android.AssertPathRelativeToTopEquals(t, "install filepath", "out/soong/target/product/test_device/system/etc/classpaths", p.ClasspathFragmentBase.installDirPath)
}
func TestSystemserverClasspathModule_AndroidMkEntries(t *testing.T) {
func TestPlatformSystemserverClasspathModule_AndroidMkEntries(t *testing.T) {
preparer := android.GroupFixturePreparers(
prepareForTestWithSystemserverClasspath,
prepareForTestWithSystemServerClasspath,
android.FixtureWithRootAndroidBp(`
platform_systemserverclasspath {
name: "platform-systemserverclasspath",
@ -95,3 +95,14 @@ func TestSystemserverClasspathModule_AndroidMkEntries(t *testing.T) {
}
})
}
func TestSystemserverclasspathFragmentWithoutContents(t *testing.T) {
prepareForTestWithSystemServerClasspath.
ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
`\Qempty contents are not allowed\E`)).
RunTestWithBp(t, `
systemserverclasspath_fragment {
name: "systemserverclasspath-fragment",
}
`)
}