Merge "Fetch generated srcs from java libs for droiddoc."
This commit is contained in:
@@ -50,7 +50,7 @@ var neverallows = []*rule{
|
|||||||
because("the VNDK can never contain a library that is device dependent."),
|
because("the VNDK can never contain a library that is device dependent."),
|
||||||
neverallow().with("vndk.enabled", "true").without("owner", "").
|
neverallow().with("vndk.enabled", "true").without("owner", "").
|
||||||
because("a VNDK module can never have an owner."),
|
because("a VNDK module can never have an owner."),
|
||||||
neverallow().notIn("libcore").with("no_standard_libs", "true"),
|
neverallow().notIn("libcore", "development").with("no_standard_libs", "true"),
|
||||||
|
|
||||||
// TODO(b/67974785): always enforce the manifest
|
// TODO(b/67974785): always enforce the manifest
|
||||||
neverallow().
|
neverallow().
|
||||||
|
120
java/droiddoc.go
120
java/droiddoc.go
@@ -18,6 +18,7 @@ import (
|
|||||||
"android/soong/android"
|
"android/soong/android"
|
||||||
"android/soong/java/config"
|
"android/soong/java/config"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/google/blueprint"
|
"github.com/google/blueprint"
|
||||||
@@ -49,6 +50,8 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
android.RegisterModuleType("doc_defaults", DocDefaultsFactory)
|
||||||
|
|
||||||
android.RegisterModuleType("droiddoc", DroiddocFactory)
|
android.RegisterModuleType("droiddoc", DroiddocFactory)
|
||||||
android.RegisterModuleType("droiddoc_host", DroiddocHostFactory)
|
android.RegisterModuleType("droiddoc_host", DroiddocHostFactory)
|
||||||
android.RegisterModuleType("droiddoc_template", DroiddocTemplateFactory)
|
android.RegisterModuleType("droiddoc_template", DroiddocTemplateFactory)
|
||||||
@@ -63,22 +66,31 @@ type JavadocProperties struct {
|
|||||||
|
|
||||||
// list of directories rooted at the Android.bp file that will
|
// list of directories rooted at the Android.bp file that will
|
||||||
// be added to the search paths for finding source files when passing package names.
|
// be added to the search paths for finding source files when passing package names.
|
||||||
Local_sourcepaths []string `android:"arch_variant"`
|
Local_sourcepaths []string
|
||||||
|
|
||||||
// list of source files that should not be used to build the Java module.
|
// list of source files that should not be used to build the Java module.
|
||||||
// This is most useful in the arch/multilib variants to remove non-common files
|
// This is most useful in the arch/multilib variants to remove non-common files
|
||||||
// filegroup or genrule can be included within this property.
|
// filegroup or genrule can be included within this property.
|
||||||
Exclude_srcs []string `android:"arch_variant"`
|
Exclude_srcs []string `android:"arch_variant"`
|
||||||
|
|
||||||
// list of of java libraries that will be in the classpath.
|
// list of java libraries that will be in the classpath.
|
||||||
Libs []string `android:"arch_variant"`
|
Libs []string `android:"arch_variant"`
|
||||||
|
|
||||||
// don't build against the framework libraries (legacy-test, core-junit,
|
// don't build against the framework libraries (legacy-test, core-junit,
|
||||||
// ext, and framework for device targets)
|
// ext, and framework for device targets)
|
||||||
No_framework_libs *bool
|
No_framework_libs *bool
|
||||||
|
|
||||||
|
// the java library (in classpath) for documentation that provides java srcs and srcjars.
|
||||||
|
Srcs_lib *string
|
||||||
|
|
||||||
|
// the base dirs under srcs_lib will be scanned for java srcs.
|
||||||
|
Srcs_lib_whitelist_dirs []string
|
||||||
|
|
||||||
|
// the sub dirs under srcs_lib_whitelist_dirs will be scanned for java srcs.
|
||||||
|
Srcs_lib_whitelist_pkgs []string
|
||||||
|
|
||||||
// If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
|
// If set to false, don't allow this module(-docs.zip) to be exported. Defaults to true.
|
||||||
Installable *bool `android:"arch_variant"`
|
Installable *bool
|
||||||
|
|
||||||
// if not blank, set to the version of the sdk to compile against
|
// if not blank, set to the version of the sdk to compile against
|
||||||
Sdk_version *string `android:"arch_variant"`
|
Sdk_version *string `android:"arch_variant"`
|
||||||
@@ -86,37 +98,43 @@ type JavadocProperties struct {
|
|||||||
|
|
||||||
type DroiddocProperties struct {
|
type DroiddocProperties struct {
|
||||||
// directory relative to top of the source tree that contains doc templates files.
|
// directory relative to top of the source tree that contains doc templates files.
|
||||||
Custom_template *string `android:"arch_variant"`
|
Custom_template *string
|
||||||
|
|
||||||
// directories relative to top of the source tree which contains html/jd files.
|
// directories relative to top of the source tree which contains html/jd files.
|
||||||
Html_dirs []string `android:"arch_variant"`
|
Html_dirs []string
|
||||||
|
|
||||||
// set a value in the Clearsilver hdf namespace.
|
// set a value in the Clearsilver hdf namespace.
|
||||||
Hdf []string `android:"arch_variant"`
|
Hdf []string
|
||||||
|
|
||||||
// proofread file contains all of the text content of the javadocs concatenated into one file,
|
// proofread file contains all of the text content of the javadocs concatenated into one file,
|
||||||
// suitable for spell-checking and other goodness.
|
// suitable for spell-checking and other goodness.
|
||||||
Proofread_file *string `android:"arch_variant"`
|
Proofread_file *string
|
||||||
|
|
||||||
// a todo file lists the program elements that are missing documentation.
|
// a todo file lists the program elements that are missing documentation.
|
||||||
// At some point, this might be improved to show more warnings.
|
// At some point, this might be improved to show more warnings.
|
||||||
Todo_file *string `android:"arch_variant"`
|
Todo_file *string
|
||||||
|
|
||||||
|
// directory under current module source that provide additional resources (images).
|
||||||
|
Resourcesdir *string
|
||||||
|
|
||||||
|
// resources output directory under out/soong/.intermediates.
|
||||||
|
Resourcesoutdir *string
|
||||||
|
|
||||||
// local files that are used within user customized droiddoc options.
|
// local files that are used within user customized droiddoc options.
|
||||||
Arg_files []string `android:"arch_variant"`
|
Arg_files []string
|
||||||
|
|
||||||
// user customized droiddoc args.
|
// user customized droiddoc args.
|
||||||
// Available variables for substitution:
|
// Available variables for substitution:
|
||||||
//
|
//
|
||||||
// $(location <label>): the path to the arg_files with name <label>
|
// $(location <label>): the path to the arg_files with name <label>
|
||||||
Args *string `android:"arch_variant"`
|
Args *string
|
||||||
|
|
||||||
// names of the output files used in args that will be generated
|
// names of the output files used in args that will be generated
|
||||||
Out []string `android:"arch_variant"`
|
Out []string
|
||||||
|
|
||||||
// a list of files under current module source dir which contains known tags in Java sources.
|
// a list of files under current module source dir which contains known tags in Java sources.
|
||||||
// filegroup or genrule can be included within this property.
|
// filegroup or genrule can be included within this property.
|
||||||
Knowntags []string `android:"arch_variant"`
|
Knowntags []string
|
||||||
}
|
}
|
||||||
|
|
||||||
type Javadoc struct {
|
type Javadoc struct {
|
||||||
@@ -133,6 +151,12 @@ type Javadoc struct {
|
|||||||
stubsSrcJar android.WritablePath
|
stubsSrcJar android.WritablePath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *Javadoc) Srcs() android.Paths {
|
||||||
|
return android.Paths{j.stubsSrcJar}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ android.SourceFileProducer = (*Javadoc)(nil)
|
||||||
|
|
||||||
type Droiddoc struct {
|
type Droiddoc struct {
|
||||||
Javadoc
|
Javadoc
|
||||||
|
|
||||||
@@ -203,6 +227,17 @@ func (j *Javadoc) addDeps(ctx android.BottomUpMutatorContext) {
|
|||||||
android.ExtractSourcesDeps(ctx, j.properties.Exclude_srcs)
|
android.ExtractSourcesDeps(ctx, j.properties.Exclude_srcs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *Javadoc) genWhitelistPathPrefixes(whitelistPathPrefixes map[string]bool) {
|
||||||
|
for _, dir := range j.properties.Srcs_lib_whitelist_dirs {
|
||||||
|
for _, pkg := range j.properties.Srcs_lib_whitelist_pkgs {
|
||||||
|
prefix := filepath.Join(dir, pkg)
|
||||||
|
if _, found := whitelistPathPrefixes[prefix]; !found {
|
||||||
|
whitelistPathPrefixes[prefix] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
||||||
var deps deps
|
var deps deps
|
||||||
|
|
||||||
@@ -224,6 +259,24 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
|||||||
deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars()...)
|
deps.bootClasspath = append(deps.bootClasspath, dep.ImplementationJars()...)
|
||||||
case libTag:
|
case libTag:
|
||||||
deps.classpath = append(deps.classpath, dep.ImplementationJars()...)
|
deps.classpath = append(deps.classpath, dep.ImplementationJars()...)
|
||||||
|
if otherName == String(j.properties.Srcs_lib) {
|
||||||
|
srcs := dep.(SrcDependency).CompiledSrcs()
|
||||||
|
whitelistPathPrefixes := make(map[string]bool)
|
||||||
|
j.genWhitelistPathPrefixes(whitelistPathPrefixes)
|
||||||
|
for _, src := range srcs {
|
||||||
|
if _, ok := src.(android.WritablePath); ok { // generated sources
|
||||||
|
deps.srcs = append(deps.srcs, src)
|
||||||
|
} else { // select source path for documentation based on whitelist path prefixs.
|
||||||
|
for k, _ := range whitelistPathPrefixes {
|
||||||
|
if strings.HasPrefix(src.Rel(), k) {
|
||||||
|
deps.srcs = append(deps.srcs, src)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
deps.srcJars = append(deps.srcJars, dep.(SrcDependency).CompiledSrcJars()...)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
|
panic(fmt.Errorf("unknown dependency %q for %q", otherName, ctx.ModuleName()))
|
||||||
}
|
}
|
||||||
@@ -252,7 +305,10 @@ func (j *Javadoc) collectDeps(ctx android.ModuleContext) deps {
|
|||||||
|
|
||||||
// srcs may depend on some genrule output.
|
// srcs may depend on some genrule output.
|
||||||
j.srcJars = srcFiles.FilterByExt(".srcjar")
|
j.srcJars = srcFiles.FilterByExt(".srcjar")
|
||||||
|
j.srcJars = append(j.srcJars, deps.srcJars...)
|
||||||
|
|
||||||
j.srcFiles = srcFiles.FilterOutByExt(".srcjar")
|
j.srcFiles = srcFiles.FilterOutByExt(".srcjar")
|
||||||
|
j.srcFiles = append(j.srcFiles, deps.srcs...)
|
||||||
|
|
||||||
j.docZip = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"docs.zip")
|
j.docZip = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"docs.zip")
|
||||||
j.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")
|
j.stubsSrcJar = android.PathForModuleOut(ctx, ctx.ModuleName()+"-"+"stubs.srcjar")
|
||||||
@@ -428,6 +484,7 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
proofreadFile := android.PathForModuleOut(ctx, String(d.properties.Proofread_file))
|
proofreadFile := android.PathForModuleOut(ctx, String(d.properties.Proofread_file))
|
||||||
args = args + " -proofread " + proofreadFile.String()
|
args = args + " -proofread " + proofreadFile.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
if String(d.properties.Todo_file) != "" {
|
if String(d.properties.Todo_file) != "" {
|
||||||
// tricky part:
|
// tricky part:
|
||||||
// we should not compute full path for todo_file through PathForModuleOut().
|
// we should not compute full path for todo_file through PathForModuleOut().
|
||||||
@@ -435,6 +492,18 @@ func (d *Droiddoc) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||||||
args = args + " -todo " + String(d.properties.Todo_file)
|
args = args + " -todo " + String(d.properties.Todo_file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if String(d.properties.Resourcesdir) != "" {
|
||||||
|
// TODO: should we add files under resourcesDir to the implicits? It seems that
|
||||||
|
// resourcesDir is one sub dir of htmlDir
|
||||||
|
resourcesDir := android.PathForModuleSrc(ctx, String(d.properties.Resourcesdir))
|
||||||
|
args = args + " -resourcesdir " + resourcesDir.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
if String(d.properties.Resourcesoutdir) != "" {
|
||||||
|
// TODO: it seems -resourceoutdir reference/android/images/ didn't get generated anywhere.
|
||||||
|
args = args + " -resourcesoutdir " + String(d.properties.Resourcesoutdir)
|
||||||
|
}
|
||||||
|
|
||||||
implicits = append(implicits, d.Javadoc.srcJars...)
|
implicits = append(implicits, d.Javadoc.srcJars...)
|
||||||
|
|
||||||
opts := "-source 1.8 -J-Xmx1600m -J-XX:-OmitStackTraceInFastThrow -XDignore.symbol.file " +
|
opts := "-source 1.8 -J-Xmx1600m -J-XX:-OmitStackTraceInFastThrow -XDignore.symbol.file " +
|
||||||
@@ -503,3 +572,30 @@ func (d *DroiddocTemplate) GenerateAndroidBuildActions(ctx android.ModuleContext
|
|||||||
d.dir = path
|
d.dir = path
|
||||||
d.deps = ctx.Glob(path.Join(ctx, "**/*").String(), nil)
|
d.deps = ctx.Glob(path.Join(ctx, "**/*").String(), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Defaults
|
||||||
|
//
|
||||||
|
type DocDefaults struct {
|
||||||
|
android.ModuleBase
|
||||||
|
android.DefaultsModuleBase
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*DocDefaults) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DocDefaults) DepsMutator(ctx android.BottomUpMutatorContext) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func DocDefaultsFactory() android.Module {
|
||||||
|
module := &DocDefaults{}
|
||||||
|
|
||||||
|
module.AddProperties(
|
||||||
|
&JavadocProperties{},
|
||||||
|
&DroiddocProperties{},
|
||||||
|
)
|
||||||
|
|
||||||
|
android.InitDefaultsModule(module)
|
||||||
|
|
||||||
|
return module
|
||||||
|
}
|
||||||
|
35
java/java.go
35
java/java.go
@@ -283,6 +283,21 @@ type Dependency interface {
|
|||||||
AidlIncludeDirs() android.Paths
|
AidlIncludeDirs() android.Paths
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SrcDependency interface {
|
||||||
|
CompiledSrcs() android.Paths
|
||||||
|
CompiledSrcJars() android.Paths
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Module) CompiledSrcs() android.Paths {
|
||||||
|
return j.compiledJavaSrcs
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *Module) CompiledSrcJars() android.Paths {
|
||||||
|
return j.compiledSrcJars
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ SrcDependency = (*Module)(nil)
|
||||||
|
|
||||||
func InitJavaModule(module android.DefaultableModule, hod android.HostOrDeviceSupported) {
|
func InitJavaModule(module android.DefaultableModule, hod android.HostOrDeviceSupported) {
|
||||||
android.InitAndroidArchModule(module, hod, android.MultilibCommon)
|
android.InitAndroidArchModule(module, hod, android.MultilibCommon)
|
||||||
android.InitDefaultableModule(module)
|
android.InitDefaultableModule(module)
|
||||||
@@ -299,6 +314,7 @@ var (
|
|||||||
bootClasspathTag = dependencyTag{name: "bootclasspath"}
|
bootClasspathTag = dependencyTag{name: "bootclasspath"}
|
||||||
systemModulesTag = dependencyTag{name: "system modules"}
|
systemModulesTag = dependencyTag{name: "system modules"}
|
||||||
frameworkResTag = dependencyTag{name: "framework-res"}
|
frameworkResTag = dependencyTag{name: "framework-res"}
|
||||||
|
frameworkApkTag = dependencyTag{name: "framework-apk"}
|
||||||
kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"}
|
kotlinStdlibTag = dependencyTag{name: "kotlin-stdlib"}
|
||||||
proguardRaiseTag = dependencyTag{name: "proguard-raise"}
|
proguardRaiseTag = dependencyTag{name: "proguard-raise"}
|
||||||
)
|
)
|
||||||
@@ -459,6 +475,11 @@ func (j *Module) deps(ctx android.BottomUpMutatorContext) {
|
|||||||
if ctx.ModuleName() == "framework" {
|
if ctx.ModuleName() == "framework" {
|
||||||
ctx.AddDependency(ctx.Module(), frameworkResTag, "framework-res")
|
ctx.AddDependency(ctx.Module(), frameworkResTag, "framework-res")
|
||||||
}
|
}
|
||||||
|
if ctx.ModuleName() == "android_stubs_current" ||
|
||||||
|
ctx.ModuleName() == "android_system_stubs_current" ||
|
||||||
|
ctx.ModuleName() == "android_test_stubs_current" {
|
||||||
|
ctx.AddDependency(ctx.Module(), frameworkApkTag, "framework-res")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.AddDependency(ctx.Module(), libTag, j.properties.Libs...)
|
ctx.AddDependency(ctx.Module(), libTag, j.properties.Libs...)
|
||||||
@@ -544,6 +565,7 @@ type deps struct {
|
|||||||
staticHeaderJars android.Paths
|
staticHeaderJars android.Paths
|
||||||
staticJarResources android.Paths
|
staticJarResources android.Paths
|
||||||
aidlIncludeDirs android.Paths
|
aidlIncludeDirs android.Paths
|
||||||
|
srcs android.Paths
|
||||||
srcJars android.Paths
|
srcJars android.Paths
|
||||||
systemModules android.Path
|
systemModules android.Path
|
||||||
aidlPreprocess android.OptionalPath
|
aidlPreprocess android.OptionalPath
|
||||||
@@ -606,6 +628,18 @@ func (j *Module) collectDeps(ctx android.ModuleContext) deps {
|
|||||||
// generated by framework-res.apk
|
// generated by framework-res.apk
|
||||||
deps.srcJars = append(deps.srcJars, dep.(*AndroidApp).aaptSrcJar)
|
deps.srcJars = append(deps.srcJars, dep.(*AndroidApp).aaptSrcJar)
|
||||||
}
|
}
|
||||||
|
case frameworkApkTag:
|
||||||
|
if ctx.ModuleName() == "android_stubs_current" ||
|
||||||
|
ctx.ModuleName() == "android_system_stubs_current" ||
|
||||||
|
ctx.ModuleName() == "android_test_stubs_current" {
|
||||||
|
// framework stubs.jar need to depend on framework-res.apk, in order to pull the
|
||||||
|
// resource files out of there for aapt.
|
||||||
|
//
|
||||||
|
// Normally the package rule runs aapt, which includes the resource,
|
||||||
|
// but we're not running that in our package rule so just copy in the
|
||||||
|
// resource files here.
|
||||||
|
deps.staticJarResources = append(deps.staticJarResources, dep.(*AndroidApp).exportPackage)
|
||||||
|
}
|
||||||
case kotlinStdlibTag:
|
case kotlinStdlibTag:
|
||||||
deps.kotlinStdlib = dep.HeaderJars()
|
deps.kotlinStdlib = dep.HeaderJars()
|
||||||
default:
|
default:
|
||||||
@@ -895,6 +929,7 @@ func (j *Module) compile(ctx android.ModuleContext, extraSrcJars ...android.Path
|
|||||||
|
|
||||||
// static classpath jars have the resources in them, so the resource jars aren't necessary here
|
// static classpath jars have the resources in them, so the resource jars aren't necessary here
|
||||||
jars = append(jars, deps.staticJars...)
|
jars = append(jars, deps.staticJars...)
|
||||||
|
jars = append(jars, deps.staticJarResources...)
|
||||||
|
|
||||||
var manifest android.OptionalPath
|
var manifest android.OptionalPath
|
||||||
if j.properties.Manifest != nil {
|
if j.properties.Manifest != nil {
|
||||||
|
Reference in New Issue
Block a user