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
This commit is contained in:
Tobias Thierer 2018-02-22 14:33:55 +00:00
parent 1d7d1eb65e
commit 7b179ae177
1 changed files with 7 additions and 5 deletions

View File

@ -39,7 +39,7 @@ def LoadWhitelist(filename):
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 @@ def CheckJar(jar):
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 @@ def main(argv):
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