aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/sdk_library.go28
-rwxr-xr-xscripts/gen-java-current-api-files.sh33
2 files changed, 61 insertions, 0 deletions
diff --git a/java/sdk_library.go b/java/sdk_library.go
index 6441c633..18866d57 100644
--- a/java/sdk_library.go
+++ b/java/sdk_library.go
@@ -675,6 +675,34 @@ func (module *SdkLibrary) createInternalModules(mctx android.TopDownMutatorConte
if module.sdkLibraryProperties.Api_packages == nil {
mctx.PropertyErrorf("api_packages", "java_sdk_library must specify api_packages")
}
+
+ missing_current_api := false
+
+ for _, scope := range []string{"", "system-", "test-"} {
+ for _, api := range []string{"current.txt", "removed.txt"} {
+ path := path.Join(mctx.ModuleDir(), "api", scope+api)
+ p := android.ExistentPathForSource(mctx, path)
+ if !p.Valid() {
+ mctx.ModuleErrorf("Current api file %#v doesn't exist", path)
+ missing_current_api = true
+ }
+ }
+ }
+
+ if missing_current_api {
+ script := "build/soong/scripts/gen-java-current-api-files.sh"
+ p := android.ExistentPathForSource(mctx, script)
+
+ if !p.Valid() {
+ panic(fmt.Sprintf("script file %s doesn't exist", script))
+ }
+
+ mctx.ModuleErrorf("One or more current api files are missing. "+
+ "You can update them by:\n"+
+ "%s %q && m update-api", script, mctx.ModuleDir())
+ return
+ }
+
// for public API stubs
module.createStubsLibrary(mctx, apiScopePublic)
module.createDocs(mctx, apiScopePublic)
diff --git a/scripts/gen-java-current-api-files.sh b/scripts/gen-java-current-api-files.sh
new file mode 100755
index 00000000..517d3916
--- /dev/null
+++ b/scripts/gen-java-current-api-files.sh
@@ -0,0 +1,33 @@
+#!/bin/bash -e
+
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [[ -z "$1" ]]; then
+ echo "usage: $0 <modulePath>" >&2
+ exit 1
+fi
+
+api_dir=$1/api
+
+mkdir -p "$api_dir"
+
+scopes=("" system- test-)
+apis=(current removed)
+
+for scope in "${scopes[@]}"; do
+ for api in "${apis[@]}"; do
+ touch "${api_dir}/${scope}${api}.txt"
+ done
+done