From b0addafd93409e7a9a04a126cd76a543364b2252 Mon Sep 17 00:00:00 2001 From: Sasha Smundak Date: Tue, 16 Feb 2021 10:39:40 -0800 Subject: [PATCH] Limit the number of the Java source files in a single compilation unit KYTHE_JAVA_SOURCE_BATCH_SIZE environment variable controls this setting. The limit is 1000 if this variable is not set. Fixes: 179932118 Test: run prebuilts/build-tools/build-prebuilts.sh, use it to build kzips, check Change-Id: I9ad57dfd1d2c2dce5cff755b1bd61cf933420bd3 --- android/config.go | 20 ++++++++++++++++++++ build_kzip.bash | 4 +++- java/builder.go | 3 +++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/android/config.go b/android/config.go index 50e39d7e9..6170f34b4 100644 --- a/android/config.go +++ b/android/config.go @@ -24,6 +24,7 @@ import ( "os" "path/filepath" "runtime" + "strconv" "strings" "sync" @@ -911,6 +912,25 @@ func (c *config) XrefCuEncoding() string { return "json" } +// XrefCuJavaSourceMax returns the maximum number of the Java source files +// in a single compilation unit +const xrefJavaSourceFileMaxDefault = "1000" + +func (c Config) XrefCuJavaSourceMax() string { + v := c.Getenv("KYTHE_JAVA_SOURCE_BATCH_SIZE") + if v == "" { + return xrefJavaSourceFileMaxDefault + } + if _, err := strconv.ParseUint(v, 0, 0); err != nil { + fmt.Fprintf(os.Stderr, + "bad KYTHE_JAVA_SOURCE_BATCH_SIZE value: %s, will use %s", + err, xrefJavaSourceFileMaxDefault) + return xrefJavaSourceFileMaxDefault + } + return v + +} + func (c *config) EmitXrefRules() bool { return c.XrefCorpusName() != "" } diff --git a/build_kzip.bash b/build_kzip.bash index 0018ea9b2..956472332 100755 --- a/build_kzip.bash +++ b/build_kzip.bash @@ -7,14 +7,16 @@ # BUILD_NUMBER build number, used to generate unique ID (will use UUID if not set) # DIST_DIR where the resulting all.kzip will be placed # KYTHE_KZIP_ENCODING proto or json (proto is default) +# KYTHE_JAVA_SOURCE_BATCH_SIZE maximum number of the Java source files in a compilation unit # OUT_DIR output directory (out if not specified}) # TARGET_BUILD_VARIANT variant, e.g., `userdebug` # TARGET_PRODUCT target device name, e.g., 'aosp_blueline' # XREF_CORPUS source code repository URI, e.g., 'android.googlesource.com/platform/superproject' : ${BUILD_NUMBER:=$(uuidgen)} +: ${KYTHE_JAVA_SOURCE_BATCH_SIZE:=500} : ${KYTHE_KZIP_ENCODING:=proto} -export KYTHE_KZIP_ENCODING +export KYTHE_JAVA_SOURCE_BATCH_SIZE KYTHE_KZIP_ENCODING # The extraction might fail for some source files, so run with -k and then check that # sufficiently many files were generated. diff --git a/java/builder.go b/java/builder.go index 22a891ae1..33206ceeb 100644 --- a/java/builder.go +++ b/java/builder.go @@ -80,6 +80,8 @@ var ( func(ctx android.PackageVarContext) string { return ctx.Config().XrefCorpusName() }) _ = pctx.VariableFunc("kytheCuEncoding", func(ctx android.PackageVarContext) string { return ctx.Config().XrefCuEncoding() }) + _ = pctx.VariableFunc("kytheCuJavaSourceMax", + func(ctx android.PackageVarContext) string { return ctx.Config().XrefCuJavaSourceMax() }) _ = pctx.SourcePathVariable("kytheVnames", "build/soong/vnames.json") // Run it with -add-opens=java.base/java.nio=ALL-UNNAMED to avoid JDK9's warning about // "Illegal reflective access by com.google.protobuf.Utf8$UnsafeProcessor ... @@ -93,6 +95,7 @@ var ( `KYTHE_CORPUS=${kytheCorpus} ` + `KYTHE_VNAMES=${kytheVnames} ` + `KYTHE_KZIP_ENCODING=${kytheCuEncoding} ` + + `KYTHE_JAVA_SOURCE_BATCH_SIZE=${kytheCuJavaSourceMax} ` + `${config.SoongJavacWrapper} ${config.JavaCmd} ` + `--add-opens=java.base/java.nio=ALL-UNNAMED ` + `-jar ${config.JavaKytheExtractorJar} ` +