Merge "Support source code cross-referencing for C++ and Java"
This commit is contained in:
42
java/java.go
42
java/java.go
@@ -50,6 +50,7 @@ func init() {
|
||||
android.RegisterModuleType("dex_import", DexImportFactory)
|
||||
|
||||
android.RegisterSingletonType("logtags", LogtagsSingleton)
|
||||
android.RegisterSingletonType("kythe_java_extract", kytheExtractJavaFactory)
|
||||
}
|
||||
|
||||
// TODO:
|
||||
@@ -343,6 +344,9 @@ type Module struct {
|
||||
|
||||
hiddenAPI
|
||||
dexpreopter
|
||||
|
||||
// list of the xref extraction files
|
||||
kytheFiles android.Paths
|
||||
}
|
||||
|
||||
func (j *Module) OutputFiles(tag string) (android.Paths, error) {
|
||||
@@ -383,6 +387,10 @@ type SrcDependency interface {
|
||||
CompiledSrcJars() android.Paths
|
||||
}
|
||||
|
||||
type xref interface {
|
||||
XrefJavaFiles() android.Paths
|
||||
}
|
||||
|
||||
func (j *Module) CompiledSrcs() android.Paths {
|
||||
return j.compiledJavaSrcs
|
||||
}
|
||||
@@ -391,6 +399,10 @@ func (j *Module) CompiledSrcJars() android.Paths {
|
||||
return j.compiledSrcJars
|
||||
}
|
||||
|
||||
func (j *Module) XrefJavaFiles() android.Paths {
|
||||
return j.kytheFiles
|
||||
}
|
||||
|
||||
var _ SrcDependency = (*Module)(nil)
|
||||
|
||||
func InitJavaModule(module android.DefaultableModule, hod android.HostOrDeviceSupported) {
|
||||
@@ -1139,6 +1151,12 @@ func (j *Module) compile(ctx android.ModuleContext, aaptSrcJar android.Path) {
|
||||
TransformJavaToClasses(ctx, classes, -1, uniqueSrcFiles, srcJars, flags, extraJarDeps)
|
||||
jars = append(jars, classes)
|
||||
}
|
||||
if ctx.Config().EmitXrefRules() {
|
||||
extractionFile := android.PathForModuleOut(ctx, ctx.ModuleName()+".kzip")
|
||||
emitXrefRule(ctx, extractionFile, uniqueSrcFiles, srcJars, flags, extraJarDeps, "xref")
|
||||
j.kytheFiles = append(j.kytheFiles, extractionFile)
|
||||
|
||||
}
|
||||
if ctx.Failed() {
|
||||
return
|
||||
}
|
||||
@@ -2213,6 +2231,30 @@ func DefaultsFactory(props ...interface{}) android.Module {
|
||||
return module
|
||||
}
|
||||
|
||||
func kytheExtractJavaFactory() android.Singleton {
|
||||
return &kytheExtractJavaSingleton{}
|
||||
}
|
||||
|
||||
type kytheExtractJavaSingleton struct {
|
||||
}
|
||||
|
||||
func (ks *kytheExtractJavaSingleton) GenerateBuildActions(ctx android.SingletonContext) {
|
||||
var xrefTargets android.Paths
|
||||
ctx.VisitAllModules(func(module android.Module) {
|
||||
if javaModule, ok := module.(xref); ok {
|
||||
xrefTargets = append(xrefTargets, javaModule.XrefJavaFiles()...)
|
||||
}
|
||||
})
|
||||
// TODO(asmundak): perhaps emit a rule to output a warning if there were no xrefTargets
|
||||
if len(xrefTargets) > 0 {
|
||||
ctx.Build(pctx, android.BuildParams{
|
||||
Rule: blueprint.Phony,
|
||||
Output: android.PathForPhony(ctx, "xref_java"),
|
||||
Inputs: xrefTargets,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
var Bool = proptools.Bool
|
||||
var BoolDefault = proptools.BoolDefault
|
||||
var String = proptools.String
|
||||
|
Reference in New Issue
Block a user