< prev index next >
src/java.base/share/classes/com/sun/java/util/jar/pack/PackageReader.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -1191,22 +1191,26 @@
// look for constant pool entries:
cls.visitRefs(VRM_CLASSIC, cpRefs);
ArrayList<BootstrapMethodEntry> bsms = new ArrayList<>();
- /*
- * BootstrapMethod(BSMs) are added here before InnerClasses(ICs),
- * so as to ensure the order. Noting that the BSMs may be
- * removed if they are not found in the CP, after the ICs expansion.
- */
- cls.addAttribute(Package.attrBootstrapMethodsEmpty.canonicalInstance());
-
// flesh out the local constant pool
ConstantPool.completeReferencesIn(cpRefs, true, bsms);
+ // remove the attr previously set, otherwise add the bsm and
+ // references as required
+ if (!bsms.isEmpty()) {
+ cls.addAttribute(Package.attrBootstrapMethodsEmpty.canonicalInstance());
+ cpRefs.add(Package.getRefString("BootstrapMethods"));
+ Collections.sort(bsms);
+ cls.setBootstrapMethods(bsms);
+ }
+
// Now that we know all our local class references,
// compute the InnerClasses attribute.
+ // An InnerClasses attribute usually gets added here,
+ // although it might already have been present.
int changed = cls.expandLocalICs();
if (changed != 0) {
if (changed > 0) {
// Just visit the expanded InnerClasses attr.
@@ -1219,20 +1223,10 @@
// flesh out the local constant pool, again
ConstantPool.completeReferencesIn(cpRefs, true, bsms);
}
- // remove the attr previously set, otherwise add the bsm and
- // references as required
- if (bsms.isEmpty()) {
- cls.attributes.remove(Package.attrBootstrapMethodsEmpty.canonicalInstance());
- } else {
- cpRefs.add(Package.getRefString("BootstrapMethods"));
- Collections.sort(bsms);
- cls.setBootstrapMethods(bsms);
- }
-
// construct a local constant pool
int numDoubles = 0;
for (Entry e : cpRefs) {
if (e.isDoubleWord()) numDoubles++;
}
< prev index next >