diff --git a/java/java.go b/java/java.go index 7ef55c97e..7a4255745 100644 --- a/java/java.go +++ b/java/java.go @@ -579,6 +579,7 @@ var ( certificateTag = dependencyTag{name: "certificate"} instrumentationForTag = dependencyTag{name: "instrumentation_for"} usesLibTag = dependencyTag{name: "uses-library"} + extraLintCheckTag = dependencyTag{name: "extra-lint-check"} ) func IsLibDepTag(depTag blueprint.DependencyTag) bool { @@ -690,6 +691,8 @@ func (j *Module) AvailableFor(what string) bool { func (j *Module) deps(ctx android.BottomUpMutatorContext) { if ctx.Device() { + j.linter.deps(ctx) + sdkDep := decodeSdkDep(ctx, sdkContext(j)) if sdkDep.useDefaultLibs { ctx.AddVariationDependencies(nil, bootClasspathTag, config.DefaultBootclasspathLibraries...) diff --git a/java/lint.go b/java/lint.go index 441e110cd..fac9a1983 100644 --- a/java/lint.go +++ b/java/lint.go @@ -42,6 +42,9 @@ type LintProperties struct { // Checks that should be skipped. Disabled_checks []string + + // Modules that provide extra lint checks + Extra_check_modules []string } } @@ -76,6 +79,14 @@ func (l *linter) enabled() bool { return BoolDefault(l.properties.Lint.Enabled, true) } +func (l *linter) deps(ctx android.BottomUpMutatorContext) { + if !l.enabled() { + return + } + + ctx.AddFarVariationDependencies(ctx.Config().BuildOSCommonTarget.Variations(), extraLintCheckTag, l.properties.Lint.Extra_check_modules...) +} + func (l *linter) writeLintProjectXML(ctx android.ModuleContext, rule *android.RuleBuilder) (projectXMLPath, configXMLPath, cacheDir android.WritablePath, deps android.Paths) { @@ -179,6 +190,16 @@ func (l *linter) lint(ctx android.ModuleContext) { return } + extraLintCheckModules := ctx.GetDirectDepsWithTag(extraLintCheckTag) + for _, extraLintCheckModule := range extraLintCheckModules { + if dep, ok := extraLintCheckModule.(Dependency); ok { + l.extraLintCheckJars = append(l.extraLintCheckJars, dep.ImplementationAndResourcesJars()...) + } else { + ctx.PropertyErrorf("lint.extra_check_modules", + "%s is not a java module", ctx.OtherModuleName(extraLintCheckModule)) + } + } + rule := android.NewRuleBuilder() if l.manifest == nil {