提交 6e5776c2 编写于 作者: A alanb

8026398: Can't load jdk.Exported, ClassNotFoundException

Reviewed-by: chegar, mchung
上级 6aa59228
...@@ -173,6 +173,12 @@ class JarMetaIndex { ...@@ -173,6 +173,12 @@ class JarMetaIndex {
*/ */
private HashMap<String, HashSet<String>> knownPrefixMap = new HashMap<>(); private HashMap<String, HashSet<String>> knownPrefixMap = new HashMap<>();
/**
* Special value for the HashSet to indicate that there are classes in
* the top-level package.
*/
private static final String TOP_LEVEL = "TOP";
/* /*
* A class for mapping package prefixes to the number of * A class for mapping package prefixes to the number of
* levels of package elements to include. * levels of package elements to include.
...@@ -212,7 +218,7 @@ class JarMetaIndex { ...@@ -212,7 +218,7 @@ class JarMetaIndex {
/* /*
* We add maximum 5 second level entries to "sun", "java" and * We add maximum 5 second level entries to "sun", "jdk", "java" and
* "javax" entries. Tune this parameter to get a balance on the * "javax" entries. Tune this parameter to get a balance on the
* cold start and footprint. * cold start and footprint.
*/ */
...@@ -223,6 +229,7 @@ class JarMetaIndex { ...@@ -223,6 +229,7 @@ class JarMetaIndex {
JarMetaIndex(String fileName) throws IOException { JarMetaIndex(String fileName) throws IOException {
jar = new JarFile(fileName); jar = new JarFile(fileName);
knownPrefixMap.put("sun", new HashSet<String>()); knownPrefixMap.put("sun", new HashSet<String>());
knownPrefixMap.put("jdk", new HashSet<String>());
knownPrefixMap.put("java", new HashSet<String>()); knownPrefixMap.put("java", new HashSet<String>());
knownPrefixMap.put("javax", new HashSet<String>()); knownPrefixMap.put("javax", new HashSet<String>());
} }
...@@ -336,12 +343,12 @@ class JarMetaIndex { ...@@ -336,12 +343,12 @@ class JarMetaIndex {
return false; return false;
} }
String secondPkgElement = name.substring(firstSlashIndex + 1,
name.indexOf("/",
firstSlashIndex + 1));
/* Add the second level package name to the corresponding hashset. */ /* Add the second level package name to the corresponding hashset. */
if (secondPkgElement != null) { int secondSlashIndex = name.indexOf("/", firstSlashIndex+1);
if (secondSlashIndex == -1) {
pkgSet.add(TOP_LEVEL);
} else {
String secondPkgElement = name.substring(firstSlashIndex+1, secondSlashIndex);
pkgSet.add(secondPkgElement); pkgSet.add(secondPkgElement);
} }
...@@ -368,8 +375,9 @@ class JarMetaIndex { ...@@ -368,8 +375,9 @@ class JarMetaIndex {
if (setSize == 0) { if (setSize == 0) {
continue; continue;
} }
else if (setSize > JarMetaIndex.MAX_PKGS_WITH_KNOWN_PREFIX) { if (setSize > JarMetaIndex.MAX_PKGS_WITH_KNOWN_PREFIX ||
indexSet.add(key + "/"); pkgSetStartsWithKey.contains(TOP_LEVEL)) {
indexSet.add(key + "/");
} else { } else {
/* If the set contains less than MAX_PKGS_WITH_KNOWN_PREFIX, add /* If the set contains less than MAX_PKGS_WITH_KNOWN_PREFIX, add
* them to the indexSet of the MetaIndex object. * them to the indexSet of the MetaIndex object.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册