Merge "Check that API is up-to-date when building java_sdk_library"
This commit is contained in:
commit
54e0bb61f0
1 changed files with 84 additions and 77 deletions
|
@ -697,87 +697,16 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
|
||||
zipSyncCleanupCmd(rule, srcJarDir)
|
||||
|
||||
rule.Build("metalava", "metalava merged")
|
||||
|
||||
if apiCheckEnabled(ctx, d.properties.Check_api.Current, "current") {
|
||||
d.generateCheckCurrentCheckedInApiIsUpToDateBuildRules(ctx)
|
||||
|
||||
if len(d.Javadoc.properties.Out) > 0 {
|
||||
ctx.PropertyErrorf("out", "out property may not be combined with check_api")
|
||||
}
|
||||
|
||||
apiFile := android.PathForModuleSrc(ctx, String(d.properties.Check_api.Current.Api_file))
|
||||
removedApiFile := android.PathForModuleSrc(ctx, String(d.properties.Check_api.Current.Removed_api_file))
|
||||
baselineFile := android.OptionalPathForModuleSrc(ctx, d.properties.Check_api.Current.Baseline_file)
|
||||
|
||||
if baselineFile.Valid() {
|
||||
ctx.PropertyErrorf("baseline_file", "current API check can't have a baseline file. (module %s)", ctx.ModuleName())
|
||||
}
|
||||
|
||||
d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "metalava", "check_current_api.timestamp")
|
||||
|
||||
rule := android.NewRuleBuilder(pctx, ctx)
|
||||
|
||||
// Diff command line.
|
||||
// -F matches the closest "opening" line, such as "package android {"
|
||||
// and " public class Intent {".
|
||||
diff := `diff -u -F '{ *$'`
|
||||
|
||||
rule.Command().Text("( true")
|
||||
rule.Command().
|
||||
Text(diff).
|
||||
Input(apiFile).Input(d.apiFile)
|
||||
|
||||
rule.Command().
|
||||
Text(diff).
|
||||
Input(removedApiFile).Input(d.removedApiFile)
|
||||
|
||||
msg := fmt.Sprintf(`\n******************************\n`+
|
||||
`You have tried to change the API from what has been previously approved.\n\n`+
|
||||
`To make these errors go away, you have two choices:\n`+
|
||||
` 1. You can add '@hide' javadoc comments (and remove @SystemApi/@TestApi/etc)\n`+
|
||||
` to the new methods, etc. shown in the above diff.\n\n`+
|
||||
` 2. You can update current.txt and/or removed.txt by executing the following command:\n`+
|
||||
` m %s-update-current-api\n\n`+
|
||||
` To submit the revised current.txt to the main Android repository,\n`+
|
||||
` you will need approval.\n`+
|
||||
`******************************\n`, ctx.ModuleName())
|
||||
|
||||
rule.Command().
|
||||
Text("touch").Output(d.checkCurrentApiTimestamp).
|
||||
Text(") || (").
|
||||
Text("echo").Flag("-e").Flag(`"` + msg + `"`).
|
||||
Text("; exit 38").
|
||||
Text(")")
|
||||
|
||||
rule.Build("metalavaCurrentApiCheck", "check current API")
|
||||
|
||||
d.updateCurrentApiTimestamp = android.PathForModuleOut(ctx, "metalava", "update_current_api.timestamp")
|
||||
|
||||
// update API rule
|
||||
rule = android.NewRuleBuilder(pctx, ctx)
|
||||
|
||||
rule.Command().Text("( true")
|
||||
|
||||
rule.Command().
|
||||
Text("cp").Flag("-f").
|
||||
Input(d.apiFile).Flag(apiFile.String())
|
||||
|
||||
rule.Command().
|
||||
Text("cp").Flag("-f").
|
||||
Input(d.removedApiFile).Flag(removedApiFile.String())
|
||||
|
||||
msg = "failed to update public API"
|
||||
|
||||
rule.Command().
|
||||
Text("touch").Output(d.updateCurrentApiTimestamp).
|
||||
Text(") || (").
|
||||
Text("echo").Flag("-e").Flag(`"` + msg + `"`).
|
||||
Text("; exit 38").
|
||||
Text(")")
|
||||
|
||||
rule.Build("metalavaCurrentApiUpdate", "update current API")
|
||||
// Make sure that whenever the API stubs are generated that the current checked in API files are
|
||||
// checked to make sure that they are up-to-date.
|
||||
cmd.Validation(d.checkCurrentApiTimestamp)
|
||||
}
|
||||
|
||||
rule.Build("metalava", "metalava merged")
|
||||
|
||||
if String(d.properties.Check_nullability_warnings) != "" {
|
||||
if d.nullabilityWarningsFile == nil {
|
||||
ctx.PropertyErrorf("check_nullability_warnings",
|
||||
|
@ -814,6 +743,84 @@ func (d *Droidstubs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
|||
}
|
||||
}
|
||||
|
||||
func (d *Droidstubs) generateCheckCurrentCheckedInApiIsUpToDateBuildRules(ctx android.ModuleContext) {
|
||||
if len(d.Javadoc.properties.Out) > 0 {
|
||||
ctx.PropertyErrorf("out", "out property may not be combined with check_api")
|
||||
}
|
||||
|
||||
apiFile := android.PathForModuleSrc(ctx, String(d.properties.Check_api.Current.Api_file))
|
||||
removedApiFile := android.PathForModuleSrc(ctx, String(d.properties.Check_api.Current.Removed_api_file))
|
||||
baselineFile := android.OptionalPathForModuleSrc(ctx, d.properties.Check_api.Current.Baseline_file)
|
||||
|
||||
if baselineFile.Valid() {
|
||||
ctx.PropertyErrorf("baseline_file", "current API check can't have a baseline file. (module %s)", ctx.ModuleName())
|
||||
}
|
||||
|
||||
d.checkCurrentApiTimestamp = android.PathForModuleOut(ctx, "metalava", "check_current_api.timestamp")
|
||||
|
||||
rule := android.NewRuleBuilder(pctx, ctx)
|
||||
|
||||
// Diff command line.
|
||||
// -F matches the closest "opening" line, such as "package android {"
|
||||
// and " public class Intent {".
|
||||
diff := `diff -u -F '{ *$'`
|
||||
|
||||
rule.Command().Text("( true")
|
||||
rule.Command().
|
||||
Text(diff).
|
||||
Input(apiFile).Input(d.apiFile)
|
||||
|
||||
rule.Command().
|
||||
Text(diff).
|
||||
Input(removedApiFile).Input(d.removedApiFile)
|
||||
|
||||
msg := fmt.Sprintf(`\n******************************\n`+
|
||||
`You have tried to change the API from what has been previously approved.\n\n`+
|
||||
`To make these errors go away, you have two choices:\n`+
|
||||
` 1. You can add '@hide' javadoc comments (and remove @SystemApi/@TestApi/etc)\n`+
|
||||
` to the new methods, etc. shown in the above diff.\n\n`+
|
||||
` 2. You can update current.txt and/or removed.txt by executing the following command:\n`+
|
||||
` m %s-update-current-api\n\n`+
|
||||
` To submit the revised current.txt to the main Android repository,\n`+
|
||||
` you will need approval.\n`+
|
||||
`******************************\n`, ctx.ModuleName())
|
||||
|
||||
rule.Command().
|
||||
Text("touch").Output(d.checkCurrentApiTimestamp).
|
||||
Text(") || (").
|
||||
Text("echo").Flag("-e").Flag(`"` + msg + `"`).
|
||||
Text("; exit 38").
|
||||
Text(")")
|
||||
|
||||
rule.Build("metalavaCurrentApiCheck", "check current API")
|
||||
|
||||
d.updateCurrentApiTimestamp = android.PathForModuleOut(ctx, "metalava", "update_current_api.timestamp")
|
||||
|
||||
// update API rule
|
||||
rule = android.NewRuleBuilder(pctx, ctx)
|
||||
|
||||
rule.Command().Text("( true")
|
||||
|
||||
rule.Command().
|
||||
Text("cp").Flag("-f").
|
||||
Input(d.apiFile).Flag(apiFile.String())
|
||||
|
||||
rule.Command().
|
||||
Text("cp").Flag("-f").
|
||||
Input(d.removedApiFile).Flag(removedApiFile.String())
|
||||
|
||||
msg = "failed to update public API"
|
||||
|
||||
rule.Command().
|
||||
Text("touch").Output(d.updateCurrentApiTimestamp).
|
||||
Text(") || (").
|
||||
Text("echo").Flag("-e").Flag(`"` + msg + `"`).
|
||||
Text("; exit 38").
|
||||
Text(")")
|
||||
|
||||
rule.Build("metalavaCurrentApiUpdate", "update current API")
|
||||
}
|
||||
|
||||
func StubsDefaultsFactory() android.Module {
|
||||
module := &DocDefaults{}
|
||||
|
||||
|
|
Loading…
Reference in a new issue