Clarify error message for bootclasspath whitelist.
Before this CL, the build could fail with error messages such as:
Error: out/target/common/obj/JAVA_LIBRARIES/core-oj_intermediates/classes.jar
contains class file jdk/internal/HotSpotIntrinsicCandidate.class, which is not
in the whitelist
This error message was only moderately helpful because it left a few
questions unanswered or misled ("Whitelist for what?", "Where does the
whitelist live?", "Is it a whitelist of class files or of packages?").
This CL clarifies that:
- it's a whitelist of packages allowed on the bootclasspath,
- where it lives (currently
build/make/core/tasks/check_boot_jars/package_whitelist.txt)
which makes the error message more actionable.
Test: manually checked that the error message now looks okay.
Bug: 17434570
Change-Id: I2f52a5e2eb532bc4945bedf9811de5857f67a9a3
diff --git a/core/tasks/check_boot_jars/check_boot_jars.py b/core/tasks/check_boot_jars/check_boot_jars.py
index 1b4540c..9d71553 100755
--- a/core/tasks/check_boot_jars/check_boot_jars.py
+++ b/core/tasks/check_boot_jars/check_boot_jars.py
@@ -39,7 +39,7 @@
return True
-def CheckJar(jar):
+def CheckJar(whitelist_path, jar):
"""Check a jar file.
"""
# Get the list of files inside the jar file.
@@ -55,8 +55,9 @@
package_name = package_name.replace('/', '.')
# Skip class without a package name
if package_name and not whitelist_re.match(package_name):
- print >> sys.stderr, ('Error: %s contains class file %s, which is not in the whitelist'
- % (jar, f))
+ print >> sys.stderr, ('Error: %s contains class file %s, whose package name %s is not '
+ 'in the whitelist %s of packages allowed on the bootclasspath.'
+ % (jar, f, package_name, whitelist_path))
return False
return True
@@ -65,13 +66,14 @@
if len(argv) < 2:
print __doc__
return 1
+ whitelist_path = argv[0]
- if not LoadWhitelist(argv[0]):
+ if not LoadWhitelist(whitelist_path):
return 1
passed = True
for jar in argv[1:]:
- if not CheckJar(jar):
+ if not CheckJar(whitelist_path, jar):
passed = False
if not passed:
return 1