--- a/jdk/make/common/shared/Defs-java.gmk Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/make/common/shared/Defs-java.gmk Thu Jan 06 18:05:56 2011 -0800
@@ -155,7 +155,7 @@
"-Xbootclasspath/p:$(JAVAC_JAR)" \
-jar $(JAVAC_JAR) $(JAVACFLAGS)
JAVAH_CMD = $(BOOT_JAVA_CMD) \
- "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
+ "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \
-jar $(JAVAH_JAR) $(JAVAHFLAGS)
JAVADOC_CMD = $(BOOT_JAVA_CMD) \
"-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
--- a/jdk/src/share/bin/java.c Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/bin/java.c Thu Jan 06 18:05:56 2011 -0800
@@ -158,8 +158,9 @@
* Running Java code in primordial thread caused many problems. We will
* create a new thread to invoke JVM. See 6316197 for more information.
*/
-static jlong threadStackSize = 0; /* stack size of the new thread */
-static jlong heapSize = 0; /* heap size */
+static jlong threadStackSize = 0; /* stack size of the new thread */
+static jlong maxHeapSize = 0; /* max heap size */
+static jlong initialHeapSize = 0; /* inital heap size */
int JNICALL JavaMain(void * args); /* entry point */
@@ -381,7 +382,7 @@
if (showSettings != NULL) {
ShowSettings(env, showSettings);
- CHECK_EXCEPTION_LEAVE(0);
+ CHECK_EXCEPTION_LEAVE(1);
}
/* If the user specified neither a class name nor a JAR file */
if (printXUsage || printUsage || (jarfile == 0 && classname == 0)) {
@@ -689,7 +690,14 @@
if (JLI_StrCCmp(str, "-Xmx") == 0) {
jlong tmp;
if (parse_size(str + 4, &tmp)) {
- heapSize = tmp;
+ maxHeapSize = tmp;
+ }
+ }
+
+ if (JLI_StrCCmp(str, "-Xms") == 0) {
+ jlong tmp;
+ if (parse_size(str + 4, &tmp)) {
+ initialHeapSize = tmp;
}
}
}
@@ -1506,12 +1514,13 @@
jstring joptString;
NULL_CHECK(cls = FindBootStrapClass(env, "sun/launcher/LauncherHelper"));
NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
- "showSettings", "(ZLjava/lang/String;JJZ)V"));
+ "showSettings", "(ZLjava/lang/String;JJJZ)V"));
joptString = (*env)->NewStringUTF(env, optString);
(*env)->CallStaticVoidMethod(env, cls, showSettingsID,
JNI_TRUE,
joptString,
- (jlong)heapSize,
+ (jlong)initialHeapSize,
+ (jlong)maxHeapSize,
(jlong)threadStackSize,
ServerClassMachine());
}
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/AdaptiveCoding.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/AdaptiveCoding.java Thu Jan 06 18:05:56 2011 -0800
@@ -29,13 +29,14 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Adaptive coding.
* See the section "Adaptive Encodings" in the Pack200 spec.
* @author John Rose
*/
-class AdaptiveCoding implements Constants, CodingMethod {
+class AdaptiveCoding implements CodingMethod {
CodingMethod headCoding;
int headLength;
CodingMethod tailCoding;
@@ -147,7 +148,6 @@
}
if (KX == KX_MAX) return Integer.MAX_VALUE;
KX += 1;
- int unit2 = 1 << (KX * KX_LG2BASE);
int mask2 = KB_MAX << (KX * KX_LG2BASE);
K1 |= (mask & ~mask2);
K1 += unit;
@@ -250,7 +250,7 @@
return m.toString();
}
public String toString() {
- StringBuffer res = new StringBuffer(20);
+ StringBuilder res = new StringBuilder(20);
AdaptiveCoding run = this;
res.append("run(");
for (;;) {
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java Thu Jan 06 18:05:56 2011 -0800
@@ -36,6 +36,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Represents an attribute in a class-file.
@@ -44,7 +45,7 @@
* attribute layouts.
* @author John Rose
*/
-class Attribute implements Comparable, Constants {
+class Attribute implements Comparable {
// Attribute instance fields.
Layout def; // the name and format of this attr
@@ -103,7 +104,6 @@
return this.def.compareTo(that.def);
}
- private static final byte[] noBytes = {};
private static final Map<List<Attribute>, List<Attribute>> canonLists = new HashMap<>();
private static final Map<Layout, Attribute> attributes = new HashMap<>();
private static final Map<Layout, Attribute> standardDefs = new HashMap<>();
@@ -112,7 +112,7 @@
// are used by trimToSize, in order to reduce footprint
// of some common cases. (Note that Code attributes are
// always zero size.)
- public static List getCanonList(List<Attribute> al) {
+ public static List<Attribute> getCanonList(List<Attribute> al) {
synchronized (canonLists) {
List<Attribute> cl = canonLists.get(al);
if (cl == null) {
@@ -465,7 +465,9 @@
return ConstantPool.getUtf8Entry(name());
}
- public boolean isEmpty() { return layout == ""; }
+ public boolean isEmpty() {
+ return layout.isEmpty();
+ }
public Layout(int ctype, String name, String layout) {
this.ctype = ctype;
@@ -479,19 +481,19 @@
} else {
String[] bodies = splitBodies(layout);
// Make the callables now, so they can be linked immediately.
- Element[] elems = new Element[bodies.length];
- this.elems = elems;
- for (int i = 0; i < elems.length; i++) {
+ Element[] lelems = new Element[bodies.length];
+ this.elems = lelems;
+ for (int i = 0; i < lelems.length; i++) {
Element ce = this.new Element();
ce.kind = EK_CBLE;
ce.removeBand();
ce.bandIndex = NO_BAND_INDEX;
ce.layout = bodies[i];
- elems[i] = ce;
+ lelems[i] = ce;
}
// Next fill them in.
- for (int i = 0; i < elems.length; i++) {
- Element ce = elems[i];
+ for (int i = 0; i < lelems.length; i++) {
+ Element ce = lelems[i];
ce.body = tokenizeLayout(this, i, bodies[i]);
}
//System.out.println(Arrays.asList(elems));
@@ -525,11 +527,12 @@
}
public boolean equals(Object x) {
- return x instanceof Layout && equals((Layout)x);
+ return ( x != null) && ( x.getClass() == Layout.class ) &&
+ equals((Layout)x);
}
public boolean equals(Layout that) {
- return this.name == that.name
- && this.layout == that.layout
+ return this.name.equals(that.name)
+ && this.layout.equals(that.layout)
&& this.ctype == that.ctype;
}
public int hashCode() {
@@ -589,14 +592,14 @@
return str;
}
private String stringForDebug() {
- Element[] body = this.body;
+ Element[] lbody = this.body;
switch (kind) {
case EK_CALL:
- body = null;
+ lbody = null;
break;
case EK_CASE:
if (flagTest(EF_BACK))
- body = null;
+ lbody = null;
break;
}
return layout
@@ -604,7 +607,7 @@
+ "<"+ (flags==0?"":""+flags)+kind+len
+ (refKind==0?"":""+refKind) + ">"
+ (value==0?"":"("+value+")")
- + (body==null?"": ""+Arrays.asList(body));
+ + (lbody==null?"": ""+Arrays.asList(lbody));
}
}
@@ -613,16 +616,19 @@
}
static private final Element[] noElems = {};
public Element[] getCallables() {
- if (hasCallables())
- return elems;
- else
+ if (hasCallables()) {
+ Element[] nelems = Arrays.copyOf(elems, elems.length);
+ return nelems;
+ } else
return noElems; // no callables at all
}
public Element[] getEntryPoint() {
if (hasCallables())
return elems[0].body; // body of first callable
- else
- return elems; // no callables; whole body
+ else {
+ Element[] nelems = Arrays.copyOf(elems, elems.length);
+ return nelems; // no callables; whole body
+ }
}
/** Return a sequence of tokens from the given attribute bytes.
@@ -674,7 +680,7 @@
}
}
- void visitRefs(Holder holder, int mode, final Collection refs) {
+ void visitRefs(Holder holder, int mode, final Collection<Entry> refs) {
if (mode == VRM_CLASSIC) {
refs.add(getNameRef());
}
@@ -720,7 +726,7 @@
*/
static public
String normalizeLayoutString(String layout) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
for (int i = 0, len = layout.length(); i < len; ) {
char ch = layout.charAt(i++);
if (ch <= ' ') {
@@ -832,14 +838,14 @@
*/
static //private
Layout.Element[] tokenizeLayout(Layout self, int curCble, String layout) {
- ArrayList<Layout.Element> col = new ArrayList<>(layout.length());
+ List<Layout.Element> col = new ArrayList<>(layout.length());
tokenizeLayout(self, curCble, layout, col);
Layout.Element[] res = new Layout.Element[col.size()];
col.toArray(res);
return res;
}
static //private
- void tokenizeLayout(Layout self, int curCble, String layout, ArrayList<Layout.Element> col) {
+ void tokenizeLayout(Layout self, int curCble, String layout, List<Layout.Element> col) {
boolean prevBCI = false;
for (int len = layout.length(), i = 0; i < len; ) {
int start = i;
@@ -897,7 +903,7 @@
case 'T': // union: 'T' any_int union_case* '(' ')' '[' body ']'
kind = EK_UN;
i = tokenizeSInt(e, layout, i);
- ArrayList<Layout.Element> cases = new ArrayList<>();
+ List<Layout.Element> cases = new ArrayList<>();
for (;;) {
// Keep parsing cases until we hit the default case.
if (layout.charAt(i++) != '(')
@@ -1051,7 +1057,7 @@
}
static //private
String[] splitBodies(String layout) {
- ArrayList<String> bodies = new ArrayList<>();
+ List<String> bodies = new ArrayList<>();
// Parse several independent layout bodies: "[foo][bar]...[baz]"
for (int i = 0; i < layout.length(); i++) {
if (layout.charAt(i++) != '[')
@@ -1156,7 +1162,7 @@
String expandCaseDashNotation(String layout) {
int dash = findCaseDash(layout, 0);
if (dash < 0) return layout; // no dashes (the common case)
- StringBuffer result = new StringBuffer(layout.length() * 3);
+ StringBuilder result = new StringBuilder(layout.length() * 3);
int sofar = 0; // how far have we processed the layout?
for (;;) {
// for each dash, collect everything up to the dash
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java Thu Jan 06 18:05:56 2011 -0800
@@ -44,16 +44,17 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.jar.Pack200;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Define the structure and ordering of "bands" in a packed file.
* @author John Rose
*/
abstract
-class BandStructure implements Constants {
+class BandStructure {
static final int MAX_EFFORT = 9;
static final int MIN_EFFORT = 1;
static final int DEFAULT_EFFORT = 5;
@@ -251,18 +252,18 @@
null
};
- final private static HashMap basicCodingIndexes;
+ final private static Map<Coding, Integer> basicCodingIndexes;
static {
assert(basicCodings[_meta_default] == null);
assert(basicCodings[_meta_canon_min] != null);
assert(basicCodings[_meta_canon_max] != null);
- HashMap map = new HashMap();
+ Map<Coding, Integer> map = new HashMap<>();
for (int i = 0; i < basicCodings.length; i++) {
Coding c = basicCodings[i];
if (c == null) continue;
assert(i >= _meta_canon_min);
assert(i <= _meta_canon_max);
- map.put(c, new Integer(i));
+ map.put(c, i);
}
basicCodingIndexes = map;
}
@@ -270,12 +271,12 @@
return i < basicCodings.length ? basicCodings[i] : null;
}
public static int indexOf(Coding c) {
- Integer i = (Integer) basicCodingIndexes.get(c);
+ Integer i = basicCodingIndexes.get(c);
if (i == null) return 0;
return i.intValue();
}
public static Coding[] getBasicCodings() {
- return (Coding[]) basicCodings.clone();
+ return basicCodings.clone();
}
protected byte[] bandHeaderBytes; // used for input only
@@ -687,7 +688,6 @@
}
bandCoding.writeArrayTo(out, values, 0, length);
if (out == outputCounter) {
- long len1 = outputCounter.getCount();
assert(outputSize == outputCounter.getCount() - len0)
: (outputSize+" != "+outputCounter.getCount()+"-"+len0);
}
@@ -1050,8 +1050,8 @@
// Bootstrap support for CPRefBands. These are needed to record
// intended CP indexes, before the CP has been created.
- private ArrayList allKQBands = new ArrayList();
- private ArrayList needPredefIndex = new ArrayList();
+ private final List<CPRefBand> allKQBands = new ArrayList<>();
+ private List<Object[]> needPredefIndex = new ArrayList<>();
int encodeRef(Entry e, Index ix) {
@@ -1078,9 +1078,9 @@
&& this instanceof PackageWriter) {
// Twist the random state based on my first file.
// This sends each segment off in a different direction.
- List classes = ((PackageWriter)this).pkg.classes;
+ List<Package.Class> classes = ((PackageWriter)this).pkg.classes;
if (!classes.isEmpty()) {
- Package.Class cls = (Package.Class) classes.get(0);
+ Package.Class cls = classes.get(0);
codingChooser.addStressSeed(cls.getName().hashCode());
}
}
@@ -1619,8 +1619,7 @@
/** Given CP indexes, distribute tag-specific indexes to bands. */
protected void setBandIndexes() {
// Handle prior calls to setBandIndex:
- for (Iterator i = needPredefIndex.iterator(); i.hasNext(); ) {
- Object[] need = (Object[]) i.next();
+ for (Object[] need : needPredefIndex) {
CPRefBand b = (CPRefBand) need[0];
Byte which = (Byte) need[1];
b.setIndex(getCPIndex(which.byteValue()));
@@ -1633,7 +1632,7 @@
}
protected void setBandIndex(CPRefBand b, byte which) {
- Object[] need = { b, new Byte(which) };
+ Object[] need = { b, Byte.valueOf(which) };
if (which == CONSTANT_Literal) {
// I.e., attribute layouts KQ (no null) or KQN (null ok).
allKQBands.add(b);
@@ -1645,7 +1644,7 @@
}
}
- protected void setConstantValueIndex(com.sun.java.util.jar.pack.Package.Class.Field f) {
+ protected void setConstantValueIndex(Field f) {
Index ix = null;
if (f != null) {
byte tag = f.getLiteralTag();
@@ -1655,8 +1654,7 @@
assert(ix != null);
}
// Typically, allKQBands is the singleton of field_ConstantValue_KQ.
- for (Iterator i = allKQBands.iterator(); i.hasNext(); ) {
- CPRefBand xxx_KQ = (CPRefBand) i.next();
+ for (CPRefBand xxx_KQ : allKQBands) {
xxx_KQ.setIndex(ix);
}
}
@@ -1688,7 +1686,7 @@
protected int attrClassFileVersionMask;
// Mapping from Attribute.Layout to Band[] (layout element bands).
- protected HashMap attrBandTable = new HashMap();
+ protected Map<Attribute.Layout, Band[]> attrBandTable = new HashMap<>();
// Well-known attributes:
protected final Attribute.Layout attrCodeEmpty;
@@ -1697,15 +1695,18 @@
protected final Attribute.Layout attrConstantValue;
// Mapping from Attribute.Layout to Integer (inverse of attrDefs)
- HashMap attrIndexTable = new HashMap();
+ Map<Attribute.Layout, Integer> attrIndexTable = new HashMap<>();
// Mapping from attribute index (<32 are flag bits) to attributes.
- protected ArrayList[] attrDefs = new ArrayList[ATTR_CONTEXT_LIMIT];
+ protected List<List<Attribute.Layout>> attrDefs =
+ new FixedList<>(ATTR_CONTEXT_LIMIT);
{
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
assert(attrIndexLimit[i] == 0);
attrIndexLimit[i] = 32; // just for the sake of predefs.
- attrDefs[i] = new ArrayList(Collections.nCopies(attrIndexLimit[i], null));
+ attrDefs.set(i, new ArrayList<>(Collections.nCopies(
+ attrIndexLimit[i], (Attribute.Layout)null)));
+
}
// Add predefined attribute definitions:
@@ -1867,9 +1868,10 @@
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
assert(attrIndexLimit[i] == 0); // decide on it now!
attrIndexLimit[i] = (haveFlagsHi(i)? 63: 32);
- assert(attrDefs[i].size() == 32); // all predef indexes are <32
- int addMore = attrIndexLimit[i] - attrDefs[i].size();
- attrDefs[i].addAll(Collections.nCopies(addMore, null));
+ List<Attribute.Layout> defList = attrDefs.get(i);
+ assert(defList.size() == 32); // all predef indexes are <32
+ int addMore = attrIndexLimit[i] - defList.size();
+ defList.addAll(Collections.nCopies(addMore, (Attribute.Layout) null));
}
}
@@ -1890,13 +1892,13 @@
return testBit(archiveOptions, mask);
}
- protected ArrayList getPredefinedAttrs(int ctype) {
+ protected List getPredefinedAttrs(int ctype) {
assert(attrIndexLimit[ctype] != 0);
- ArrayList res = new ArrayList(attrIndexLimit[ctype]);
+ List<Attribute.Layout> res = new ArrayList<>(attrIndexLimit[ctype]);
// Remove nulls and non-predefs.
for (int ai = 0; ai < attrIndexLimit[ctype]; ai++) {
if (testBit(attrDefSeen[ctype], 1L<<ai)) continue;
- Attribute.Layout def = (Attribute.Layout) attrDefs[ctype].get(ai);
+ Attribute.Layout def = attrDefs.get(ctype).get(ai);
if (def == null) continue; // unused flag bit
assert(isPredefinedAttr(ctype, ai));
res.add(def);
@@ -1910,7 +1912,7 @@
if (ai >= attrIndexLimit[ctype]) return false;
// If the bit is set, it was explicitly def'd.
if (testBit(attrDefSeen[ctype], 1L<<ai)) return false;
- return (attrDefs[ctype].get(ai) != null);
+ return (attrDefs.get(ctype).get(ai) != null);
}
protected void adjustSpecialAttrMasks() {
@@ -2050,8 +2052,8 @@
System.out.println("Removing predefined "+ATTR_CONTEXT_NAME[ctype]+
" attribute on bit "+index);
}
- List defList = attrDefs[ctype];
- Attribute.Layout def = (Attribute.Layout) defList.get(index);
+ List<Attribute.Layout> defList = attrDefs.get(ctype);
+ Attribute.Layout def = defList.get(index);
assert(def != null);
defList.set(index, null);
attrIndexTable.put(def, null);
@@ -2059,7 +2061,7 @@
assert(index < 64);
attrDefSeen[ctype] &= ~(1L<<index);
attrFlagMask[ctype] &= ~(1L<<index);
- Band[] ab = (Band[]) attrBandTable.get(def);
+ Band[] ab = attrBandTable.get(def);
for (int j = 0; j < ab.length; j++) {
ab[j].doneWithUnusedBand();
}
@@ -2085,9 +2087,8 @@
long defSeen = attrDefSeen[ctype];
// Note: attrDefSeen is always a subset of attrFlagMask.
assert((defSeen & ~attrFlagMask[ctype]) == 0);
- for (int i = 0; i < attrDefs[ctype].size(); i++) {
- Attribute.Layout def = (Attribute.Layout)
- attrDefs[ctype].get(i);
+ for (int i = 0; i < attrDefs.get(ctype).size(); i++) {
+ Attribute.Layout def = attrDefs.get(ctype).get(i);
if (def == null) continue; // unused flag bit
if (def.bandCount == 0) continue; // empty attr
if (i < attrIndexLimit[ctype] && !testBit(defSeen, 1L<<i)) {
@@ -2102,7 +2103,7 @@
Band[] newAB = makeNewAttributeBands(pfx, def,
xxx_attr_bands);
assert(newAB.length == def.bandCount);
- Band[] prevAB = (Band[]) attrBandTable.put(def, newAB);
+ Band[] prevAB = attrBandTable.put(def, newAB);
if (prevAB != null) {
// We won't be using these predefined bands.
for (int j = 0; j < prevAB.length; j++) {
@@ -2212,14 +2213,14 @@
protected int setAttributeLayoutIndex(Attribute.Layout def, int index) {
int ctype = def.ctype;
assert(ATTR_INDEX_OVERFLOW <= index && index < attrIndexLimit[ctype]);
- List defList = attrDefs[ctype];
+ List<Attribute.Layout> defList = attrDefs.get(ctype);
if (index == ATTR_INDEX_OVERFLOW) {
// Overflow attribute.
index = defList.size();
defList.add(def);
if (verbose > 0)
Utils.log.info("Adding new attribute at "+def +": "+index);
- attrIndexTable.put(def, new Integer(index));
+ attrIndexTable.put(def, index);
return index;
}
@@ -2240,7 +2241,7 @@
// Remove index binding of any previous fixed attr.
attrIndexTable.put(defList.get(index), null);
defList.set(index, def);
- attrIndexTable.put(def, new Integer(index));
+ attrIndexTable.put(def, index);
return index;
}
@@ -2361,7 +2362,7 @@
////////////////////////////////////////////////////////////////////
static int nextSeqForDebug;
- static File dumpDir;
+ static File dumpDir = null;
static OutputStream getDumpStream(Band b, String ext) throws IOException {
return getDumpStream(b.name, b.seqForDebug, ext, b);
}
@@ -2512,19 +2513,19 @@
+", "+cstr+", "+ixS+"),");
}
- private HashMap prevForAssertMap;
+ private Map<Band, Band> prevForAssertMap;
// DEBUG ONLY: Record something about the band order.
boolean notePrevForAssert(Band b, Band p) {
if (prevForAssertMap == null)
- prevForAssertMap = new HashMap();
+ prevForAssertMap = new HashMap<>();
prevForAssertMap.put(b, p);
return true;
}
// DEBUG ONLY: Validate next input band.
private boolean assertReadyToReadFrom(Band b, InputStream in) throws IOException {
- Band p = (Band) prevForAssertMap.get(b);
+ Band p = prevForAssertMap.get(b);
// Any previous band must be done reading before this one starts.
if (p != null && phaseCmp(p.phase(), DISBURSE_PHASE) < 0) {
Utils.log.warning("Previous band not done reading.");
@@ -2536,19 +2537,21 @@
String name = b.name;
if (optDebugBands && !name.startsWith("(")) {
// Verify synchronization between reader & writer:
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
int ch;
while ((ch = in.read()) > 0)
buf.append((char)ch);
String inName = buf.toString();
if (!inName.equals(name)) {
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("Expected "+name+" but read: ");
inName += (char)ch;
- while (inName.length() < 10)
- inName += (char)in.read();
- for (int i = 0; i < inName.length(); i++)
+ while (inName.length() < 10) {
+ inName += (char) in.read();
+ }
+ for (int i = 0; i < inName.length(); i++) {
sb.append(inName.charAt(i));
+ }
Utils.log.warning(sb.toString());
return false;
}
@@ -2573,7 +2576,7 @@
// DEBUG ONLY: Maybe write a debugging cookie to next output band.
private boolean assertReadyToWriteTo(Band b, OutputStream out) throws IOException {
- Band p = (Band) prevForAssertMap.get(b);
+ Band p = prevForAssertMap.get(b);
// Any previous band must be done writing before this one starts.
if (p != null && phaseCmp(p.phase(), DONE_PHASE) < 0) {
Utils.log.warning("Previous band not done writing.");
@@ -2654,7 +2657,7 @@
protected static Object[] realloc(Object[] a) {
return realloc(a, Math.max(10, a.length*2));
}
- static private int[] noInts = {};
+
protected static int[] realloc(int[] a, int len) {
if (len == 0) return noInts;
if (a == null) return new int[len];
@@ -2665,7 +2668,7 @@
protected static int[] realloc(int[] a) {
return realloc(a, Math.max(10, a.length*2));
}
- static private byte[] noBytes = {};
+
protected static byte[] realloc(byte[] a, int len) {
if (len == 0) return noBytes;
if (a == null) return new byte[len];
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java Thu Jan 06 18:05:56 2011 -0800
@@ -38,19 +38,20 @@
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Reader for a class file that is being incorporated into a package.
* @author John Rose
*/
-class ClassReader implements Constants {
+class ClassReader {
int verbose;
Package pkg;
Class cls;
long inPos;
DataInputStream in;
- Map attrDefs;
+ Map<Attribute.Layout, Attribute> attrDefs;
Map attrCommands;
String unknownAttrCommand = "error";;
@@ -77,7 +78,7 @@
});
}
- public void setAttrDefs(Map attrDefs) {
+ public void setAttrDefs(Map<Attribute.Layout, Attribute> attrDefs) {
this.attrDefs = attrDefs;
}
@@ -211,27 +212,23 @@
break;
case CONSTANT_Integer:
{
- Comparable val = new Integer(in.readInt());
- cpMap[i] = ConstantPool.getLiteralEntry(val);
+ cpMap[i] = ConstantPool.getLiteralEntry(in.readInt());
}
break;
case CONSTANT_Float:
{
- Comparable val = new Float(in.readFloat());
- cpMap[i] = ConstantPool.getLiteralEntry(val);
+ cpMap[i] = ConstantPool.getLiteralEntry(in.readFloat());
}
break;
case CONSTANT_Long:
{
- Comparable val = new Long(in.readLong());
- cpMap[i] = ConstantPool.getLiteralEntry(val);
+ cpMap[i] = ConstantPool.getLiteralEntry(in.readLong());
cpMap[++i] = null;
}
break;
case CONSTANT_Double:
{
- Comparable val = new Double(in.readDouble());
- cpMap[i] = ConstantPool.getLiteralEntry(val);
+ cpMap[i] = ConstantPool.getLiteralEntry(in.readDouble());
cpMap[++i] = null;
}
break;
@@ -353,17 +350,18 @@
if (attrCommands != null) {
Object lkey = Attribute.keyForLookup(ctype, name);
String cmd = (String) attrCommands.get(lkey);
- if (cmd == "pass") {
- String message = "passing attribute bitwise in "+h;
- throw new Attribute.FormatException(message, ctype, name,
- cmd);
- } else if (cmd == "error") {
- String message = "attribute not allowed in "+h;
- throw new Attribute.FormatException(message, ctype, name,
- cmd);
- } else if (cmd == "strip") {
- skip(length, name+" attribute in "+h);
- continue;
+ if (cmd != null) {
+ switch (cmd) {
+ case "pass":
+ String message1 = "passing attribute bitwise in " + h;
+ throw new Attribute.FormatException(message1, ctype, name, cmd);
+ case "error":
+ String message2 = "attribute not allowed in " + h;
+ throw new Attribute.FormatException(message2, ctype, name, cmd);
+ case "strip":
+ skip(length, name + " attribute in " + h);
+ continue;
+ }
}
}
// Find canonical instance of the requested attribute.
@@ -408,7 +406,7 @@
String message = "unsupported StackMap variant in "+h;
throw new Attribute.FormatException(message, ctype, name,
"pass");
- } else if (unknownAttrCommand == "strip") {
+ } else if ("strip".equals(unknownAttrCommand)) {
// Skip the unknown attribute.
skip(length, "unknown "+name+" attribute in "+h);
continue;
@@ -422,7 +420,7 @@
a.layout() == Package.attrInnerClassesEmpty) {
// These are hardwired.
long pos0 = inPos;
- if (a.name() == "Code") {
+ if ("Code".equals(a.name())) {
Class.Method m = (Class.Method) h;
m.code = new Code(m);
try {
@@ -471,7 +469,7 @@
void readInnerClasses(Class cls) throws IOException {
int nc = readUnsignedShort();
- ArrayList ics = new ArrayList(nc);
+ ArrayList<InnerClass> ics = new ArrayList<>(nc);
for (int i = 0; i < nc; i++) {
InnerClass ic =
new InnerClass(readClassRef(),
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassWriter.java Thu Jan 06 18:05:56 2011 -0800
@@ -38,12 +38,12 @@
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
-
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Writer for a class file that is incorporated into a package.
* @author John Rose
*/
-class ClassWriter implements Constants {
+class ClassWriter {
int verbose;
Package pkg;
@@ -196,8 +196,7 @@
return;
}
writeShort(h.attributes.size());
- for (Iterator i = h.attributes.iterator(); i.hasNext(); ) {
- Attribute a = (Attribute) i.next();
+ for (Attribute a : h.attributes) {
a.finishRefs(cpIndex);
writeRef(a.getNameRef());
if (a.layout() == Package.attrCodeEmpty ||
@@ -207,7 +206,7 @@
assert(out != bufOut);
buf.reset();
out = bufOut;
- if (a.name() == "Code") {
+ if ("Code".equals(a.name())) {
Class.Method m = (Class.Method) h;
writeCode(m.code);
} else {
@@ -246,10 +245,9 @@
}
void writeInnerClasses(Class cls) throws IOException {
- List ics = cls.getInnerClasses();
+ List<InnerClass> ics = cls.getInnerClasses();
writeShort(ics.size());
- for (Iterator i = ics.iterator(); i.hasNext(); ) {
- InnerClass ic = (InnerClass) i.next();
+ for (InnerClass ic : ics) {
writeRef(ic.thisClass);
writeRef(ic.outerClass);
writeRef(ic.name);
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Code.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Code.java Thu Jan 06 18:05:56 2011 -0800
@@ -29,12 +29,13 @@
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collection;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Represents a chunk of bytecodes.
* @author John Rose
*/
-class Code extends Attribute.Holder implements Constants {
+class Code extends Attribute.Holder {
Class.Method m;
public Code(Class.Method m) {
@@ -141,15 +142,12 @@
super.trimToSize();
}
- protected void visitRefs(int mode, Collection refs) {
+ protected void visitRefs(int mode, Collection<ConstantPool.Entry> refs) {
int verbose = getPackage().verbose;
if (verbose > 2)
System.out.println("Reference scan "+this);
Class cls = thisClass();
- Package pkg = cls.getPackage();
- for (int i = 0; i < handler_class.length; i++) {
- refs.add(handler_class[i]);
- }
+ refs.addAll(Arrays.asList(handler_class));
if (fixups != null) {
fixups.visitRefs(refs);
} else {
@@ -196,11 +194,8 @@
map[mapLen] = (short)(PClimit + Short.MIN_VALUE);
return map;
} else {
- int[] map = new int[mapLen+1];
- for (int i = 0; i < mapLen; i++) {
- map[i] = (int) insnMap[i];
- }
- map[mapLen] = (int) PClimit;
+ int[] map = Arrays.copyOf(insnMap, mapLen + 1);
+ map[mapLen] = PClimit;
return map;
}
}
@@ -220,10 +215,7 @@
}
} else {
int[] map = (int[]) map0;
- imap = new int[map.length-1];
- for (int i = 0; i < imap.length; i++) {
- imap[i] = map[i];
- }
+ imap = Arrays.copyOfRange(map, 0, map.length - 1);
}
return imap;
}
@@ -266,7 +258,7 @@
} else {
int[] map = (int[]) map0;
len = map.length;
- i = Arrays.binarySearch(map, (int)bci);
+ i = Arrays.binarySearch(map, bci);
}
assert(i != -1);
assert(i != 0);
@@ -322,7 +314,7 @@
len = map.length;
if (bciCode < len)
return map[bciCode];
- i = Arrays.binarySearch(map, (int)bciCode);
+ i = Arrays.binarySearch(map, bciCode);
if (i < 0) i = -i-1;
int key = bciCode-len;
for (;; i--) {
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Coding.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Coding.java Thu Jan 06 18:05:56 2011 -0800
@@ -29,14 +29,15 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
-
+import java.util.Map;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Define the conversions between sequences of small integers and raw bytes.
* This is a schema of encodings which incorporates varying lengths,
* varying degrees of length variability, and varying amounts of signed-ness.
* @author John Rose
*/
-class Coding implements Constants, Comparable, CodingMethod, Histogram.BitMetric {
+class Coding implements Comparable, CodingMethod, Histogram.BitMetric {
/*
Coding schema for single integers, parameterized by (B,H,S):
@@ -191,7 +192,9 @@
if (S == 0 || range >= (long)1<<32)
return saturate32(range-1);
long maxPos = range-1;
- while (isNegativeCode(maxPos, S)) --maxPos;
+ while (isNegativeCode(maxPos, S)) {
+ --maxPos;
+ }
if (maxPos < 0) return -1; // No positive codings at all.
int smax = decodeSign32(maxPos, S);
// check for 32-bit wraparound:
@@ -213,9 +216,10 @@
if (S == 0) {
return 0;
}
- int Smask = (1<<S)-1;
long maxNeg = range-1;
- while (!isNegativeCode(maxNeg, S)) --maxNeg;
+ while (!isNegativeCode(maxNeg, S))
+ --maxNeg;
+
if (maxNeg < 0) return 0; // No negative codings at all.
return decodeSign32(maxNeg, S);
}
@@ -395,12 +399,12 @@
return (del<<14)+(S<<11)+(B<<8)+(H<<0);
}
- private static HashMap codeMap;
+ private static Map<Coding, Coding> codeMap;
private static synchronized Coding of(int B, int H, int S, int del) {
- if (codeMap == null) codeMap = new HashMap();
+ if (codeMap == null) codeMap = new HashMap<>();
Coding x0 = new Coding(B, H, S, del);
- Coding x1 = (Coding) codeMap.get(x0);
+ Coding x1 = codeMap.get(x0);
if (x1 == null) codeMap.put(x0, x1 = x0);
return x1;
}
@@ -462,6 +466,7 @@
// %%% use byte[] buffer
for (int i = start; i < end; i++)
a[i] = readFrom(in);
+
for (int dstep = 0; dstep < del; dstep++) {
long state = 0;
for (int i = start; i < end; i++) {
@@ -750,14 +755,14 @@
if (len == 0) return true;
if (isFullRange()) return true;
// Calculate max, min:
- int max = values[start];
- int min = max;
+ int lmax = values[start];
+ int lmin = lmax;
for (int i = 1; i < len; i++) {
int value = values[start+i];
- if (max < value) max = value;
- if (min > value) min = value;
+ if (lmax < value) lmax = value;
+ if (lmin > value) lmin = value;
}
- return canRepresent(min, max);
+ return canRepresent(lmin, lmax);
}
public double getBitLength(int value) { // implements BitMetric
@@ -800,21 +805,20 @@
//return Coding.of(B, H, S).getLength(deltas, 0, len);
values = deltas;
start = 0;
- end = values.length;
}
int sum = len; // at least 1 byte per
// add extra bytes for extra-long values
for (int n = 1; n <= B; n++) {
// what is the coding interval [min..max] for n bytes?
- int max = byteMax[n-1];
- int min = byteMin[n-1];
+ int lmax = byteMax[n-1];
+ int lmin = byteMin[n-1];
int longer = 0; // count of guys longer than n bytes
for (int i = 0; i < len; i++) {
int value = values[start+i];
if (value >= 0) {
- if (value > max) longer++;
+ if (value > lmax) longer++;
} else {
- if (value < min) longer++;
+ if (value < lmin) longer++;
}
}
if (longer == 0) break; // no more passes needed
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/CodingChooser.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/CodingChooser.java Thu Jan 06 18:05:56 2011 -0800
@@ -34,15 +34,16 @@
import java.util.Iterator;
import java.util.List;
import java.util.Random;
+import java.util.Set;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
-
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Heuristic chooser of basic encodings.
* Runs "zip" to measure the apparent information content after coding.
* @author John Rose
*/
-class CodingChooser implements Constants {
+class CodingChooser {
int verbose;
int effort;
boolean optUseHistogram = true;
@@ -124,10 +125,10 @@
= !p200.getBoolean(Utils.COM_PREFIX+"no.population.coding");
this.optUseAdaptiveCoding
= !p200.getBoolean(Utils.COM_PREFIX+"no.adaptive.coding");
- int stress
+ int lstress
= p200.getInteger(Utils.COM_PREFIX+"stress.coding");
- if (stress != 0)
- this.stress = new Random(stress);
+ if (lstress != 0)
+ this.stress = new Random(lstress);
}
this.effort = effort;
@@ -376,9 +377,9 @@
" fewer bytes than regular "+regular+
"; win="+pct(zipSize1-bestZipSize, zipSize1));
}
- CodingMethod bestMethod = this.bestMethod;
+ CodingMethod lbestMethod = this.bestMethod;
reset(null, 0, 0); // for GC
- return bestMethod;
+ return lbestMethod;
}
CodingMethod choose(int[] values, int start, int end, Coding regular) {
return choose(values, start, end, regular, null);
@@ -742,9 +743,9 @@
// Steps 1/2/3 are interdependent, and may be iterated.
// Steps 4 and 5 may be decided independently afterward.
int[] LValuesCoded = PopulationCoding.LValuesCoded;
- ArrayList bestFits = new ArrayList();
- ArrayList fullFits = new ArrayList();
- ArrayList longFits = new ArrayList();
+ List<Coding> bestFits = new ArrayList<>();
+ List<Coding> fullFits = new ArrayList<>();
+ List<Coding> longFits = new ArrayList<>();
final int PACK_TO_MAX_S = 1;
if (bestPopFVC <= 255) {
bestFits.add(BandStructure.BYTE1);
@@ -776,16 +777,16 @@
}
}
// interleave all B greater than bestB with best and full fits
- for (Iterator i = bestFits.iterator(); i.hasNext(); ) {
- Coding c = (Coding) i.next();
+ for (Iterator<Coding> i = bestFits.iterator(); i.hasNext(); ) {
+ Coding c = i.next();
if (c.B() > bestB) {
i.remove();
longFits.add(0, c);
}
}
}
- ArrayList allFits = new ArrayList();
- for (Iterator i = bestFits.iterator(),
+ List<Coding> allFits = new ArrayList<>();
+ for (Iterator<Coding> i = bestFits.iterator(),
j = fullFits.iterator(),
k = longFits.iterator();
i.hasNext() || j.hasNext() || k.hasNext(); ) {
@@ -812,8 +813,7 @@
}
if (verbose > 3)
Utils.log.info("allFits: "+allFits);
- for (Iterator i = allFits.iterator(); i.hasNext(); ) {
- Coding tc = (Coding) i.next();
+ for (Coding tc : allFits) {
boolean packToMax = false;
if (tc.S() == PACK_TO_MAX_S) {
// Kludge: setS(PACK_TO_MAX_S) means packToMax here.
@@ -910,7 +910,7 @@
" tc="+pop.tokenCoding+
" uc="+pop.unfavoredCoding);
//pop.hist.print("pop-hist", null, System.out);
- StringBuffer sb = new StringBuffer();
+ StringBuilder sb = new StringBuilder();
sb.append("fv = {");
for (int i = 1; i <= fVlen; i++) {
if ((i % 10) == 0)
@@ -949,20 +949,20 @@
// run occupies too much space. ("Too much" means, say 5% more
// than the average integer size of the band as a whole.)
// Try to find a better coding for those segments.
- int start = this.start;
- int end = this.end;
- int[] values = this.values;
- int len = end-start;
+ int lstart = this.start;
+ int lend = this.end;
+ int[] lvalues = this.values;
+ int len = lend-lstart;
if (plainCoding.isDelta()) {
- values = getDeltas(0,0); //%%% not quite right!
- start = 0;
- end = values.length;
+ lvalues = getDeltas(0,0); //%%% not quite right!
+ lstart = 0;
+ lend = lvalues.length;
}
int[] sizes = new int[len+1];
int fillp = 0;
int totalSize = 0;
- for (int i = start; i < end; i++) {
- int val = values[i];
+ for (int i = lstart; i < lend; i++) {
+ int val = lvalues[i];
sizes[fillp++] = totalSize;
int size = plainCoding.getLength(val);
assert(size < Integer.MAX_VALUE);
@@ -1013,22 +1013,23 @@
double[] fuzzes = new double[meshes.length];
for (int i = 0; i < meshes.length; i++) {
int mesh = meshes[i];
- double fuzz;
+ double lfuzz;
if (mesh < 10)
- fuzz = sizeFuzz3;
+ lfuzz = sizeFuzz3;
else if (mesh < 100)
- fuzz = sizeFuzz2;
+ lfuzz = sizeFuzz2;
else
- fuzz = sizeFuzz;
- fuzzes[i] = fuzz;
- threshes[i] = BAND_HEADER + (int)Math.ceil(mesh * avgSize * fuzz);
+ lfuzz = sizeFuzz;
+ fuzzes[i] = lfuzz;
+ threshes[i] = BAND_HEADER + (int)Math.ceil(mesh * avgSize * lfuzz);
}
if (verbose > 1) {
System.out.print("tryAdaptiveCoding ["+len+"]"+
" avgS="+avgSize+" fuzz="+sizeFuzz+
" meshes: {");
- for (int i = 0; i < meshes.length; i++)
- System.out.print(" "+meshes[i]+"("+threshes[i]+")");
+ for (int i = 0; i < meshes.length; i++) {
+ System.out.print(" " + meshes[i] + "(" + threshes[i] + ")");
+ }
Utils.log.info(" }");
}
if (runHelper == null) {
@@ -1229,20 +1230,19 @@
Histogram hist = getValueHistogram();
int fVlen = stressLen(hist.getTotalLength());
if (fVlen == 0) return coding;
- List popvals = new ArrayList();
+ List<Integer> popvals = new ArrayList<>();
if (stress.nextBoolean()) {
// Build the population from the value list.
- HashSet popset = new HashSet();
+ Set<Integer> popset = new HashSet<>();
for (int i = start; i < end; i++) {
- Integer val = new Integer(values[i]);
- if (popset.add(val)) popvals.add(val);
+ if (popset.add(values[i])) popvals.add(values[i]);
}
} else {
int[][] matrix = hist.getMatrix();
for (int mrow = 0; mrow < matrix.length; mrow++) {
int[] row = matrix[mrow];
for (int mcol = 1; mcol < row.length; mcol++) {
- popvals.add(new Integer(row[mcol]));
+ popvals.add(row[mcol]);
}
}
}
@@ -1269,7 +1269,7 @@
fVlen = popvals.size();
int[] fvals = new int[1+fVlen];
for (int i = 0; i < fVlen; i++) {
- fvals[1+i] = ((Integer)popvals.get(i)).intValue();
+ fvals[1+i] = (popvals.get(i)).intValue();
}
PopulationCoding pop = new PopulationCoding();
pop.setFavoredValues(fvals, fVlen);
@@ -1283,13 +1283,13 @@
}
}
if (pop.tokenCoding == null) {
- int min = fvals[1], max = min;
+ int lmin = fvals[1], lmax = lmin;
for (int i = 2; i <= fVlen; i++) {
int val = fvals[i];
- if (min > val) min = val;
- if (max < val) max = val;
+ if (lmin > val) lmin = val;
+ if (lmax < val) lmax = val;
}
- pop.tokenCoding = stressCoding(min, max);
+ pop.tokenCoding = stressCoding(lmin, lmax);
}
computePopSizePrivate(pop, valueCoding, valueCoding);
@@ -1310,13 +1310,13 @@
try {
assert(!disableRunCoding);
disableRunCoding = true; // temporary, while I decide spans
- int[] allValues = (int[]) values.clone();
+ int[] allValues = values.clone();
CodingMethod result = null;
int scan = this.end;
- int start = this.start;
- for (int split; scan > start; scan = split) {
+ int lstart = this.start;
+ for (int split; scan > lstart; scan = split) {
int thisspan;
- int rand = (scan - start < 100)? -1: stress.nextInt();
+ int rand = (scan - lstart < 100)? -1: stress.nextInt();
if ((rand & 7) != 0) {
thisspan = (spanlen==1? spanlen: stressLen(spanlen-1)+1);
} else {
@@ -1325,7 +1325,7 @@
int KB = (rand >>>= 3) & AdaptiveCoding.KB_MAX;
for (;;) {
thisspan = AdaptiveCoding.decodeK(KX, KB);
- if (thisspan <= scan - start) break;
+ if (thisspan <= scan - lstart) break;
// Try smaller and smaller codings:
if (KB != AdaptiveCoding.KB_DEFAULT)
KB = AdaptiveCoding.KB_DEFAULT;
@@ -1335,11 +1335,13 @@
//System.out.println("KX="+KX+" KB="+KB+" K="+thisspan);
assert(AdaptiveCoding.isCodableLength(thisspan));
}
- if (thisspan > scan - start) thisspan = scan - start;
- while (!AdaptiveCoding.isCodableLength(thisspan)) --thisspan;
+ if (thisspan > scan - lstart) thisspan = scan - lstart;
+ while (!AdaptiveCoding.isCodableLength(thisspan)) {
+ --thisspan;
+ }
split = scan - thisspan;
assert(split < scan);
- assert(split >= start);
+ assert(split >= lstart);
// Choose a coding for the span [split..scan).
CodingMethod sc = choose(allValues, split, scan, plainCoding);
if (result == null) {
@@ -1420,7 +1422,7 @@
case StreamTokenizer.TT_EOF:
throw new NoSuchElementException();
case StreamTokenizer.TT_NUMBER:
- return new Integer((int) in.nval);
+ return Integer.valueOf((int) in.nval);
default:
assert(false);
return null;
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java Thu Jan 06 18:05:56 2011 -0800
@@ -33,13 +33,14 @@
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Representation of constant pool entries and indexes.
* @author John Rose
*/
abstract
-class ConstantPool implements Constants {
+class ConstantPool {
private ConstantPool() {} // do not instantiate
static int verbose() {
@@ -155,9 +156,6 @@
return null;
}
- public boolean sameTagAs(Object o) {
- return (o instanceof Entry) && ((Entry)o).tag == tag;
- }
public boolean eq(Entry that) { // same reference
assert(that != null);
return this == that || this.equals(that);
@@ -219,9 +217,9 @@
return value.hashCode();
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
// Use reference equality of interned strings:
- return ((Utf8Entry)o).value == value;
+ return (o != null && o.getClass() == Utf8Entry.class
+ && ((Utf8Entry) o).value.equals(value));
}
public int compareTo(Object o) {
int x = superCompareTo(o);
@@ -275,8 +273,9 @@
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
- return (((NumberEntry)o).value).equals(value);
+ return (o != null && o.getClass() == NumberEntry.class
+ && ((NumberEntry) o).value.equals(value));
+
}
public int compareTo(Object o) {
int x = superCompareTo(o);
@@ -310,8 +309,8 @@
return ref.hashCode() + tag;
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
- return ((StringEntry)o).ref.eq(ref);
+ return (o != null && o.getClass() == StringEntry.class &&
+ ((StringEntry)o).ref.eq(ref));
}
public int compareTo(Object o) {
int x = superCompareTo(o);
@@ -342,8 +341,8 @@
hashCode(); // force computation of valueHash
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
- return ((ClassEntry)o).ref.eq(ref);
+ return (o != null && o.getClass() == ClassEntry.class
+ && ((ClassEntry) o).ref.eq(ref));
}
public int compareTo(Object o) {
int x = superCompareTo(o);
@@ -380,7 +379,9 @@
return (nameRef.hashCode() + (hc2 << 8)) ^ hc2;
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
+ if (o == null || o.getClass() != DescriptorEntry.class) {
+ return false;
+ }
DescriptorEntry that = (DescriptorEntry)o;
return this.nameRef.eq(that.nameRef)
&& this.typeRef.eq(that.typeRef);
@@ -439,7 +440,9 @@
hashCode(); // force computation of valueHash
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
+ if (o == null || o.getClass() != MemberEntry.class) {
+ return false;
+ }
MemberEntry that = (MemberEntry)o;
return this.classRef.eq(that.classRef)
&& this.descRef.eq(that.descRef);
@@ -511,8 +514,8 @@
}
public boolean equals(Object o) {
- if (!sameTagAs(o)) return false;
- return ((SignatureEntry)o).value == value;
+ return (o != null && o.getClass() == SignatureEntry.class &&
+ ((SignatureEntry)o).value.equals(value));
}
public int compareTo(Object o) {
int x = superCompareTo(o);
@@ -724,7 +727,7 @@
protected static final ClassEntry[] noClassRefs = {};
/** An Index is a mapping between CP entries and small integers. */
- public static
+ public static final
class Index extends AbstractList {
protected String debugName;
protected Entry[] cpMap;
@@ -894,7 +897,7 @@
}
public static
- Index makeIndex(String debugName, Collection cpMapList) {
+ Index makeIndex(String debugName, Collection<Entry> cpMapList) {
return new Index(debugName, cpMapList);
}
@@ -916,7 +919,7 @@
public static
Index[] partition(Index ix, int[] keys) {
// %%% Should move this into class Index.
- ArrayList<List<Entry>> parts = new ArrayList<>();
+ List<List<Entry>> parts = new ArrayList<>();
Entry[] cpMap = ix.cpMap;
assert(keys.length == cpMap.length);
for (int i = 0; i < keys.length; i++) {
@@ -1094,12 +1097,12 @@
// Inverse of getOverloadingIndex
public MemberEntry getOverloadingForIndex(byte tag, ClassEntry classRef, String name, int which) {
- assert(name == name.intern());
+ assert(name.equals(name.intern()));
Index ix = getMemberIndex(tag, classRef);
int ord = 0;
for (int i = 0; i < ix.cpMap.length; i++) {
MemberEntry e = (MemberEntry) ix.cpMap[i];
- if (e.descRef.nameRef.stringValue() == name) {
+ if (e.descRef.nameRef.stringValue().equals(name)) {
if (ord == which) return e;
ord++;
}
@@ -1133,10 +1136,10 @@
public static
void completeReferencesIn(Set<Entry> cpRefs, boolean flattenSigs) {
cpRefs.remove(null);
- for (ListIterator work =
- new ArrayList(cpRefs).listIterator(cpRefs.size());
+ for (ListIterator<Entry> work =
+ new ArrayList<>(cpRefs).listIterator(cpRefs.size());
work.hasPrevious(); ) {
- Entry e = (Entry) work.previous();
+ Entry e = work.previous();
work.remove(); // pop stack
assert(e != null);
if (flattenSigs && e.tag == CONSTANT_Signature) {
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java Thu Jan 06 18:05:56 2011 -0800
@@ -32,7 +32,10 @@
* Shared constants
* @author John Rose
*/
-interface Constants {
+class Constants {
+
+ private Constants(){}
+
public final static int JAVA_MAGIC = 0xCAFEBABE;
/*
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Driver.java Thu Jan 06 18:05:56 2011 -0800
@@ -59,12 +59,11 @@
ResourceBundle.getBundle("com.sun.java.util.jar.pack.DriverResource");
public static void main(String[] ava) throws IOException {
- ArrayList<String> av = new ArrayList<>(Arrays.asList(ava));
+ List<String> av = new ArrayList<>(Arrays.asList(ava));
boolean doPack = true;
boolean doUnpack = false;
boolean doRepack = false;
- boolean doForceRepack = false;
boolean doZip = true;
String logFile = null;
String verboseProp = Utils.DEBUG_VERBOSE;
@@ -72,17 +71,20 @@
{
// Non-standard, undocumented "--unpack" switch enables unpack mode.
String arg0 = av.isEmpty() ? "" : av.get(0);
- if (arg0.equals("--pack")) {
+ switch (arg0) {
+ case "--pack":
av.remove(0);
- } else if (arg0.equals("--unpack")) {
+ break;
+ case "--unpack":
av.remove(0);
doPack = false;
doUnpack = true;
+ break;
}
}
// Collect engine properties here:
- HashMap<String,String> engProps = new HashMap<>();
+ Map<String,String> engProps = new HashMap<>();
engProps.put(verboseProp, System.getProperty(verboseProp));
String optionMap;
@@ -96,7 +98,7 @@
}
// Collect argument properties here:
- HashMap<String,String> avProps = new HashMap<>();
+ Map<String,String> avProps = new HashMap<>();
try {
for (;;) {
String state = parseCommandOptions(av, optionMap, avProps);
@@ -146,7 +148,7 @@
}
// See if there is any other action to take.
- if (state == "--config-file=") {
+ if ("--config-file=".equals(state)) {
String propFile = av.remove(0);
InputStream propIn = new FileInputStream(propFile);
Properties fileProps = new Properties();
@@ -157,10 +159,10 @@
for (Map.Entry<Object,Object> me : fileProps.entrySet()) {
engProps.put((String) me.getKey(), (String) me.getValue());
}
- } else if (state == "--version") {
+ } else if ("--version".equals(state)) {
System.out.println(MessageFormat.format(RESOURCE.getString(DriverResource.VERSION), Driver.class.getName(), "1.31, 07/05/05"));
return;
- } else if (state == "--help") {
+ } else if ("--help".equals(state)) {
printUsage(doPack, true, System.out);
System.exit(1);
return;
@@ -178,14 +180,20 @@
// Deal with remaining non-engine properties:
for (String opt : avProps.keySet()) {
String val = avProps.get(opt);
- if (opt == "--repack") {
- doRepack = true;
- } else if (opt == "--no-gzip") {
- doZip = (val == null);
- } else if (opt == "--log-file=") {
- logFile = val;
- } else {
- throw new InternalError(MessageFormat.format(RESOURCE.getString(DriverResource.BAD_OPTION), opt, avProps.get(opt)));
+ switch (opt) {
+ case "--repack":
+ doRepack = true;
+ break;
+ case "--no-gzip":
+ doZip = (val == null);
+ break;
+ case "--log-file=":
+ logFile = val;
+ break;
+ default:
+ throw new InternalError(MessageFormat.format(
+ RESOURCE.getString(DriverResource.BAD_OPTION),
+ opt, avProps.get(opt)));
}
}
@@ -219,7 +227,9 @@
if (packfile.toLowerCase().endsWith(".pack") ||
packfile.toLowerCase().endsWith(".pac") ||
packfile.toLowerCase().endsWith(".gz")) {
- System.err.println(MessageFormat.format(RESOURCE.getString(DriverResource.BAD_REPACK_OUTPUT),packfile));
+ System.err.println(MessageFormat.format(
+ RESOURCE.getString(DriverResource.BAD_REPACK_OUTPUT),
+ packfile));
printUsage(doPack, false, System.err);
System.exit(2);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/FixedList.java Thu Jan 06 18:05:56 2011 -0800
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2010, 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
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.sun.java.util.jar.pack;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+/*
+ * @author ksrini
+ */
+
+/*
+ * This class provides an ArrayList implementation which has a fixed size,
+ * thus all the operations which modifies the size have been rendered
+ * inoperative. This essentially allows us to use generified array
+ * lists in lieu of arrays.
+ */
+final class FixedList<E> implements List<E> {
+
+ private final ArrayList<E> flist;
+
+ protected FixedList(int capacity) {
+ flist = new ArrayList<>(capacity);
+ // initialize the list to null
+ for (int i = 0 ; i < capacity ; i++) {
+ flist.add(null);
+ }
+ }
+ @Override
+ public int size() {
+ return flist.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return flist.isEmpty();
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return flist.contains(o);
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return flist.iterator();
+ }
+
+ @Override
+ public Object[] toArray() {
+ return flist.toArray();
+ }
+
+ @Override
+ public <T> T[] toArray(T[] a) {
+ return flist.toArray(a);
+ }
+
+ @Override
+ public boolean add(E e) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public boolean remove(Object o) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public boolean containsAll(Collection<?> c) {
+ return flist.containsAll(c);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends E> c) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public boolean addAll(int index, Collection<? extends E> c) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public boolean removeAll(Collection<?> c) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public boolean retainAll(Collection<?> c) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public void clear() throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public E get(int index) {
+ return flist.get(index);
+ }
+
+ @Override
+ public E set(int index, E element) {
+ return flist.set(index, element);
+ }
+
+ @Override
+ public void add(int index, E element) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public E remove(int index) throws UnsupportedOperationException {
+ throw new UnsupportedOperationException("operation not permitted");
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return flist.indexOf(o);
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return flist.lastIndexOf(o);
+ }
+
+ @Override
+ public ListIterator<E> listIterator() {
+ return flist.listIterator();
+ }
+
+ @Override
+ public ListIterator<E> listIterator(int index) {
+ return flist.listIterator(index);
+ }
+
+ @Override
+ public List<E> subList(int fromIndex, int toIndex) {
+ return flist.subList(fromIndex, toIndex);
+ }
+
+ @Override
+ public String toString() {
+ return "FixedList{" + "plist=" + flist + '}';
+ }
+}
+
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Fixups.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Fixups.java Thu Jan 06 18:05:56 2011 -0800
@@ -42,7 +42,7 @@
*
* @author John Rose
*/
-class Fixups extends AbstractCollection implements Constants {
+final class Fixups extends AbstractCollection {
byte[] bytes; // the subject of the relocations
int head; // desc locating first reloc
int tail; // desc locating last reloc
@@ -99,7 +99,7 @@
}
}
- public void visitRefs(Collection refs) {
+ public void visitRefs(Collection<Entry> refs) {
for (int i = 0; i < size; i++) {
refs.add(entries[i]);
}
@@ -124,6 +124,7 @@
return bytes;
}
+ @SuppressWarnings("unchecked")
public void setBytes(byte[] newBytes) {
if (bytes == newBytes) return;
ArrayList old = null;
@@ -278,7 +279,7 @@
return new Fixup(nextDesc(), entries[thisIndex]);
}
int nextDesc() {
- int thisIndex = index++;
+ index++;
int thisDesc = next;
if (index < size) {
// Fetch next desc eagerly, in case this fixup gets finalized.
@@ -310,6 +311,7 @@
public boolean add(Object fixup) {
return add((Fixup) fixup);
}
+ @SuppressWarnings("unchecked")
public boolean addAll(Collection c) {
if (c instanceof Fixups) {
// Use knowledge of Itr structure to avoid building little structs.
@@ -420,7 +422,7 @@
// Iterate over all the references in this set of fixups.
public static
- void visitRefs(Object fixups, Collection refs) {
+ void visitRefs(Object fixups, Collection<Entry> refs) {
if (fixups == null) {
} else if (!(fixups instanceof Fixups)) {
// Special convention; see above.
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Histogram.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Histogram.java Thu Jan 06 18:05:56 2011 -0800
@@ -34,7 +34,7 @@
* Histogram derived from an integer array of events (int[]).
* @author John Rose
*/
-class Histogram {
+final class Histogram {
// Compact histogram representation: 4 bytes per distinct value,
// plus 5 words per distinct count.
protected final int[][] matrix; // multi-row matrix {{counti,valueij...}}
@@ -304,7 +304,7 @@
public
String[] getRowTitles(String name) {
int totalUnique = getTotalLength();
- int totalWeight = getTotalWeight();
+ int ltotalWeight = getTotalWeight();
String[] histTitles = new String[matrix.length];
int cumWeight = 0;
int cumUnique = 0;
@@ -314,7 +314,7 @@
int weight = getRowWeight(i);
cumWeight += weight;
cumUnique += unique;
- long wpct = ((long)cumWeight * 100 + totalWeight/2) / totalWeight;
+ long wpct = ((long)cumWeight * 100 + ltotalWeight/2) / ltotalWeight;
long upct = ((long)cumUnique * 100 + totalUnique/2) / totalUnique;
double len = getRowBitLength(i);
assert(0.1 > Math.abs(len - getBitLength(matrix[i][1])));
@@ -346,14 +346,14 @@
public
void print(String name, String[] histTitles, PrintStream out) {
int totalUnique = getTotalLength();
- int totalWeight = getTotalWeight();
+ int ltotalWeight = getTotalWeight();
double tlen = getBitLength();
- double avgLen = tlen / totalWeight;
- double avg = (double) totalWeight / totalUnique;
+ double avgLen = tlen / ltotalWeight;
+ double avg = (double) ltotalWeight / totalUnique;
String title = (name
+" len="+round(tlen,10)
+" avgLen="+round(avgLen,10)
- +" weight("+totalWeight+")"
+ +" weight("+ltotalWeight+")"
+" unique["+totalUnique+"]"
+" avgWeight("+round(avg,100)+")");
if (histTitles == null) {
@@ -363,9 +363,9 @@
StringBuffer buf = new StringBuffer();
for (int i = 0; i < matrix.length; i++) {
buf.setLength(0);
- buf.append(" "+histTitles[i]+" {");
+ buf.append(" ").append(histTitles[i]).append(" {");
for (int j = 1; j < matrix[i].length; j++) {
- buf.append(" "+matrix[i][j]);
+ buf.append(" ").append(matrix[i][j]);
}
buf.append(" }");
out.println(buf);
@@ -603,7 +603,7 @@
private static
int[] maybeSort(int[] values) {
if (!isSorted(values, 0, false)) {
- values = (int[]) values.clone();
+ values = values.clone();
Arrays.sort(values);
}
return values;
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java Thu Jan 06 18:05:56 2011 -0800
@@ -26,13 +26,15 @@
package com.sun.java.util.jar.pack;
import java.io.IOException;
+import java.util.Arrays;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* A parsed bytecode instruction.
* Provides accessors to various relevant bits.
* @author John Rose
*/
-class Instruction implements Constants {
+class Instruction {
protected byte[] bytes; // bytecodes
protected int pc; // location of this instruction
protected int bc; // opcode of this instruction
@@ -91,8 +93,8 @@
/** A fake instruction at this pc whose next() will be at nextpc. */
public Instruction forceNextPC(int nextpc) {
- int length = nextpc - pc;
- return new Instruction(bytes, pc, -1, -1, length);
+ int llength = nextpc - pc;
+ return new Instruction(bytes, pc, -1, -1, llength);
}
public static Instruction at(byte[] bytes, int pc) {
@@ -315,12 +317,24 @@
}
}
- /** Two insns are equal if they have the same bytes. */
+ /** Two instructions are equal if they have the same bytes. */
public boolean equals(Object o) {
- return (o instanceof Instruction) && equals((Instruction)o);
+ return (o != null) && (o.getClass() == Instruction.class)
+ && equals((Instruction) o);
+ }
+
+ public int hashCode() {
+ int hash = 3;
+ hash = 11 * hash + Arrays.hashCode(this.bytes);
+ hash = 11 * hash + this.pc;
+ hash = 11 * hash + this.bc;
+ hash = 11 * hash + this.w;
+ hash = 11 * hash + this.length;
+ return hash;
}
public boolean equals(Instruction that) {
+ if (this.pc != that.pc) return false;
if (this.bc != that.bc) return false;
if (this.w != that.w) return false;
if (this.length != that.length) return false;
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java Thu Jan 06 18:05:56 2011 -0800
@@ -170,8 +170,8 @@
void run(InputStream inRaw, JarOutputStream jstream,
ByteBuffer presetInput) throws IOException {
- BufferedInputStream in = new BufferedInputStream(inRaw);
- this.in = in; // for readInputFn to see
+ BufferedInputStream in0 = new BufferedInputStream(inRaw);
+ this.in = in0; // for readInputFn to see
_verbose = _props.getInteger(Utils.DEBUG_VERBOSE);
// Fix for BugId: 4902477, -unpack.modification.time = 1059010598000
// TODO eliminate and fix in unpack.cpp
@@ -224,7 +224,7 @@
if (_verbose > 0)
Utils.log.info("bytes consumed = "+consumed);
if (presetInput == null &&
- !Utils.isPackMagic(Utils.readMagic(in))) {
+ !Utils.isPackMagic(Utils.readMagic(in0))) {
break;
}
if (_verbose > 0 ) {
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Package.java Thu Jan 06 18:05:56 2011 -0800
@@ -52,12 +52,13 @@
import java.util.Map;
import java.util.Set;
import java.util.jar.JarFile;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Define the main data structure transmitted by pack/unpack.
* @author John Rose
*/
-class Package implements Constants {
+class Package {
int verbose;
{
PropMap pmap = Utils.currentPropMap();
@@ -109,9 +110,9 @@
public static final Attribute.Layout attrCodeEmpty;
public static final Attribute.Layout attrInnerClassesEmpty;
public static final Attribute.Layout attrSourceFileSpecial;
- public static final Map attrDefs;
+ public static final Map<Attribute.Layout, Attribute> attrDefs;
static {
- HashMap<Layout, Attribute> ad = new HashMap<>(3);
+ Map<Layout, Attribute> ad = new HashMap<>(3);
attrCodeEmpty = Attribute.define(ad, ATTR_CONTEXT_METHOD,
"Code", "").layout();
attrInnerClassesEmpty = Attribute.define(ad, ATTR_CONTEXT_CLASS,
@@ -130,8 +131,7 @@
*/
int getHighestClassVersion() {
int res = 0; // initial low value
- for (Iterator i = classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : classes) {
int ver = cls.getVersion();
if (res < ver) res = ver;
}
@@ -187,7 +187,7 @@
return classes;
}
- public
+ public final
class Class extends Attribute.Holder implements Comparable {
public Package getPackage() { return Package.this; }
@@ -232,8 +232,8 @@
initFile(newStub(classFile));
}
- List getFields() { return fields == null ? noFields : fields; }
- List getMethods() { return methods == null ? noMethods : methods; }
+ List<Field> getFields() { return fields == null ? noFields : fields; }
+ List<Method> getMethods() { return methods == null ? noMethods : methods; }
public String getName() {
return thisClass.stringValue();
@@ -264,7 +264,7 @@
if (olda == null)
return; // no SourceFile attr.
String obvious = getObviousSourceFile();
- ArrayList ref = new ArrayList(1);
+ List<Entry> ref = new ArrayList<>(1);
olda.visitRefs(this, VRM_PACKAGE, ref);
Utf8Entry sfName = (Utf8Entry) ref.get(0);
Attribute a = olda;
@@ -322,7 +322,7 @@
}
public void setInnerClasses(Collection<InnerClass> ics) {
- innerClasses = (ics == null) ? null : new ArrayList<InnerClass>(ics);
+ innerClasses = (ics == null) ? null : new ArrayList<>(ics);
// Edit the attribute list, if necessary.
Attribute a = getAttribute(attrInnerClassesEmpty);
if (innerClasses != null && a == null)
@@ -341,7 +341,7 @@
* with that of Package.this.allInnerClasses.
*/
public List<InnerClass> computeGloballyImpliedICs() {
- HashSet<Entry> cpRefs = new HashSet<>();
+ Set<Entry> cpRefs = new HashSet<>();
{ // This block temporarily displaces this.innerClasses.
ArrayList<InnerClass> innerClassesSaved = innerClasses;
innerClasses = null; // ignore for the moment
@@ -350,7 +350,7 @@
}
ConstantPool.completeReferencesIn(cpRefs, true);
- HashSet<Entry> icRefs = new HashSet<>();
+ Set<Entry> icRefs = new HashSet<>();
for (Entry e : cpRefs) {
// Restrict cpRefs to InnerClasses entries only.
if (!(e instanceof ClassEntry)) continue;
@@ -390,7 +390,7 @@
List<InnerClass> impliedICs = computeGloballyImpliedICs();
List<InnerClass> actualICs = getInnerClasses();
if (actualICs == null)
- actualICs = Collections.EMPTY_LIST;
+ actualICs = Collections.emptyList();
// Symmetric difference is calculated from I, A like this:
// diff = (I+A) - (I*A)
@@ -409,7 +409,7 @@
// Diff is A since I is empty.
}
// (I*A) is non-trivial
- HashSet<InnerClass> center = new HashSet<>(actualICs);
+ Set<InnerClass> center = new HashSet<>(actualICs);
center.retainAll(new HashSet<>(impliedICs));
impliedICs.addAll(actualICs);
impliedICs.removeAll(center);
@@ -443,7 +443,7 @@
} else if (actualICs == null) {
// No local IC attribute, even though some are implied.
// Signal with trivial attribute.
- localICs = Collections.EMPTY_LIST;
+ localICs = Collections.emptyList();
} else {
// Transmit a non-empty diff, which will create
// a local ICs attribute.
@@ -588,7 +588,7 @@
}
public void strip(String attrName) {
- if (attrName == "Code")
+ if ("Code".equals(attrName))
code = null;
if (code != null)
code.strip(attrName);
@@ -622,7 +622,7 @@
}
public void strip(String attrName) {
- if (attrName == "InnerClass")
+ if ("InnerClass".equals(attrName))
innerClasses = null;
for (int isM = 0; isM <= 1; isM++) {
ArrayList members = (isM == 0) ? fields : methods;
@@ -639,9 +639,7 @@
if (verbose > 2) Utils.log.fine("visitRefs "+this);
refs.add(thisClass);
refs.add(superClass);
- for (int i = 0; i < interfaces.length; i++) {
- refs.add(interfaces[i]);
- }
+ refs.addAll(Arrays.asList(interfaces));
for (int isM = 0; isM <= 1; isM++) {
ArrayList members = (isM == 0) ? fields : methods;
if (members == null) continue;
@@ -741,7 +739,7 @@
}
public List<File> getClassStubs() {
- ArrayList<File> classStubs = new ArrayList<>(classes.size());
+ List<File> classStubs = new ArrayList<>(classes.size());
for (Class cls : classes) {
assert(cls.file.isClassStub());
classStubs.add(cls.file);
@@ -749,8 +747,7 @@
return classStubs;
}
- public
- class File implements Comparable {
+ public final class File implements Comparable {
String nameString; // true name of this file
Utf8Entry name;
int modtime = NO_MODTIME;
@@ -792,8 +789,10 @@
// The nameString is the key. Ignore other things.
// (Note: The name might be "", in the case of a trivial class stub.)
public boolean equals(Object o) {
+ if (o == null || (o.getClass() != File.class))
+ return false;
File that = (File)o;
- return that.nameString == this.nameString;
+ return that.nameString.equals(this.nameString);
}
public int hashCode() {
return nameString.hashCode();
@@ -816,9 +815,9 @@
return getFileName(null);
}
public java.io.File getFileName(java.io.File parent) {
- String name = this.nameString;
+ String lname = this.nameString;
//if (name.startsWith("./")) name = name.substring(2);
- String fname = name.replace('/', java.io.File.separatorChar);
+ String fname = lname.replace('/', java.io.File.separatorChar);
return new java.io.File(parent, fname);
}
@@ -834,7 +833,7 @@
}
public long getFileLength() {
long len = 0;
- if (prepend == null && append == null) return 0;
+ if (prepend == null || append == null) return 0;
for (Iterator i = prepend.iterator(); i.hasNext(); ) {
byte[] block = (byte[]) i.next();
len += block.length;
@@ -843,7 +842,7 @@
return len;
}
public void writeTo(OutputStream out) throws IOException {
- if (prepend == null && append == null) return;
+ if (prepend == null || append == null) return;
for (Iterator i = prepend.iterator(); i.hasNext(); ) {
byte[] block = (byte[]) i.next();
out.write(block);
@@ -859,8 +858,8 @@
}
public InputStream getInputStream() {
InputStream in = new ByteArrayInputStream(append.toByteArray());
- if (prepend.size() == 0) return in;
- ArrayList<InputStream> isa = new ArrayList<>(prepend.size()+1);
+ if (prepend.isEmpty()) return in;
+ List<InputStream> isa = new ArrayList<>(prepend.size()+1);
for (Iterator i = prepend.iterator(); i.hasNext(); ) {
byte[] bytes = (byte[]) i.next();
isa.add(new ByteArrayInputStream(bytes));
@@ -897,11 +896,11 @@
}
// Is there a globally declared table of inner classes?
- ArrayList<InnerClass> allInnerClasses = new ArrayList<>();
- HashMap<ClassEntry, InnerClass> allInnerClassesByThis;
+ List<InnerClass> allInnerClasses = new ArrayList<>();
+ Map<ClassEntry, InnerClass> allInnerClassesByThis;
public
- List getAllInnerClasses() {
+ List<InnerClass> getAllInnerClasses() {
return allInnerClasses;
}
@@ -955,16 +954,17 @@
if (parse == null) return false;
String pkgOuter = parse[0];
//String number = parse[1];
- String name = parse[2];
+ String lname = parse[2];
String haveName = (this.name == null) ? null : this.name.stringValue();
String haveOuter = (outerClass == null) ? null : outerClass.stringValue();
- boolean predictable = (name == haveName && pkgOuter == haveOuter);
+ boolean lpredictable = (lname == haveName && pkgOuter == haveOuter);
//System.out.println("computePredictable => "+predictable);
- return predictable;
+ return lpredictable;
}
public boolean equals(Object o) {
- if (o == null) return false;
+ if (o == null || o.getClass() != InnerClass.class)
+ return false;
InnerClass that = (InnerClass)o;
return eq(this.thisClass, that.thisClass)
&& eq(this.outerClass, that.outerClass)
@@ -999,7 +999,7 @@
// Helper for building InnerClasses attributes.
static private
- void visitInnerClassRefs(Collection innerClasses, int mode, Collection<Entry> refs) {
+ void visitInnerClassRefs(Collection<InnerClass> innerClasses, int mode, Collection<Entry> refs) {
if (innerClasses == null) {
return; // no attribute; nothing to do
}
@@ -1008,8 +1008,7 @@
}
if (innerClasses.size() > 0) {
// Count the entries themselves:
- for (Iterator i = innerClasses.iterator(); i.hasNext(); ) {
- InnerClass c = (InnerClass) i.next();
+ for (InnerClass c : innerClasses) {
c.visitRefs(mode, refs);
}
}
@@ -1117,43 +1116,43 @@
// what is one of { Debug, Compile, Constant, Exceptions, InnerClasses }
if (verbose > 0)
Utils.log.info("Stripping "+what.toLowerCase()+" data and attributes...");
- if (what == "Debug") {
- strip("SourceFile");
- strip("LineNumberTable");
- strip("LocalVariableTable");
- strip("LocalVariableTypeTable");
- }
- if (what == "Compile") {
- // Keep the inner classes normally.
- // Although they have no effect on execution,
- // the Reflection API exposes them, and JCK checks them.
- // NO: // strip("InnerClasses");
- strip("Deprecated");
- strip("Synthetic");
- }
- if (what == "Exceptions") {
- // Keep the exceptions normally.
- // Although they have no effect on execution,
- // the Reflection API exposes them, and JCK checks them.
- strip("Exceptions");
- }
- if (what == "Constant") {
- stripConstantFields();
+ switch (what) {
+ case "Debug":
+ strip("SourceFile");
+ strip("LineNumberTable");
+ strip("LocalVariableTable");
+ strip("LocalVariableTypeTable");
+ break;
+ case "Compile":
+ // Keep the inner classes normally.
+ // Although they have no effect on execution,
+ // the Reflection API exposes them, and JCK checks them.
+ // NO: // strip("InnerClasses");
+ strip("Deprecated");
+ strip("Synthetic");
+ break;
+ case "Exceptions":
+ // Keep the exceptions normally.
+ // Although they have no effect on execution,
+ // the Reflection API exposes them, and JCK checks them.
+ strip("Exceptions");
+ break;
+ case "Constant":
+ stripConstantFields();
+ break;
}
}
public void trimToSize() {
classes.trimToSize();
- for (Iterator i = classes.iterator(); i.hasNext(); ) {
- Class c = (Class)i.next();
+ for (Class c : classes) {
c.trimToSize();
}
files.trimToSize();
}
public void strip(String attrName) {
- for (Iterator i = classes.iterator(); i.hasNext(); ) {
- Class c = (Class)i.next();
+ for (Class c : classes) {
c.strip(attrName);
}
}
@@ -1166,10 +1165,9 @@
}
public void stripConstantFields() {
- for (Iterator i = classes.iterator(); i.hasNext(); ) {
- Class c = (Class) i.next();
- for (Iterator j = c.fields.iterator(); j.hasNext(); ) {
- Class.Field f = (Class.Field) j.next();
+ for (Class c : classes) {
+ for (Iterator<Class.Field> j = c.fields.iterator(); j.hasNext(); ) {
+ Class.Field f = j.next();
if (Modifier.isFinal(f.flags)
// do not strip non-static finals:
&& Modifier.isStatic(f.flags)
@@ -1189,8 +1187,7 @@
c.visitRefs(mode, refs);
}
if (mode != VRM_CLASSIC) {
- for (Iterator i = files.iterator(); i.hasNext(); ) {
- File f = (File)i.next();
+ for (File f : files) {
f.visitRefs(mode, refs);
}
visitInnerClassRefs(allInnerClasses, mode, refs);
@@ -1202,6 +1199,7 @@
// compress better. It also moves classes to the end of the
// file order. It also removes JAR directory entries, which
// are useless.
+ @SuppressWarnings("unchecked")
void reorderFiles(boolean keepClassOrder, boolean stripDirectories) {
// First reorder the classes, if that is allowed.
if (!keepClassOrder) {
@@ -1214,9 +1212,9 @@
// modtimes and options are not transmitted, and the stub files
// for class files do not need to be transmitted at all.
// Also
- List stubs = getClassStubs();
- for (Iterator i = files.iterator(); i.hasNext(); ) {
- File file = (File) i.next();
+ List<File> stubs = getClassStubs();
+ for (Iterator<File> i = files.iterator(); i.hasNext(); ) {
+ File file = i.next();
if (file.isClassStub() ||
(stripDirectories && file.isDirectory())) {
i.remove();
@@ -1259,8 +1257,8 @@
void trimStubs() {
// Restore enough non-trivial stubs to carry the needed class modtimes.
- for (ListIterator i = files.listIterator(files.size()); i.hasPrevious(); ) {
- File file = (File) i.previous();
+ for (ListIterator<File> i = files.listIterator(files.size()); i.hasPrevious(); ) {
+ File file = i.previous();
if (!file.isTrivialClassStub()) {
if (verbose > 1)
Utils.log.fine("Keeping last non-trivial "+file);
@@ -1309,7 +1307,7 @@
// Use this before writing the class files.
void ensureAllClassFiles() {
- HashSet<File> fileSet = new HashSet<>(files);
+ Set<File> fileSet = new HashSet<>(files);
for (Class cls : classes) {
// Add to the end of ths list:
if (!fileSet.contains(cls.file))
@@ -1317,8 +1315,8 @@
}
}
- static final List noObjects = Arrays.asList(new Object[0]);
- static final List noFields = Arrays.asList(new Class.Field[0]);
- static final List noMethods = Arrays.asList(new Class.Method[0]);
- static final List noInnerClasses = Arrays.asList(new InnerClass[0]);
+ static final List<Object> noObjects = Arrays.asList(new Object[0]);
+ static final List<Class.Field> noFields = Arrays.asList(new Class.Field[0]);
+ static final List<Class.Method> noMethods = Arrays.asList(new Class.Method[0]);
+ static final List<InnerClass> noInnerClasses = Arrays.asList(new InnerClass[0]);
}
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java Thu Jan 06 18:05:56 2011 -0800
@@ -32,11 +32,28 @@
import com.sun.java.util.jar.pack.ConstantPool.MemberEntry;
import com.sun.java.util.jar.pack.ConstantPool.SignatureEntry;
import com.sun.java.util.jar.pack.ConstantPool.Utf8Entry;
-import java.io.*;
-import java.util.*;
import com.sun.java.util.jar.pack.Package.Class;
import com.sun.java.util.jar.pack.Package.File;
import com.sun.java.util.jar.pack.Package.InnerClass;
+import java.io.ByteArrayOutputStream;
+import java.io.EOFException;
+import java.io.PrintStream;
+import java.io.FilterInputStream;
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Reader for a package file.
@@ -418,7 +435,7 @@
cp_Int.readFrom(in);
for (int i = 0; i < cpMap.length; i++) {
int x = cp_Int.getInt(); // coding handles signs OK
- cpMap[i] = ConstantPool.getLiteralEntry(new Integer(x));
+ cpMap[i] = ConstantPool.getLiteralEntry(x);
}
cp_Int.doneDisbursing();
break;
@@ -428,7 +445,7 @@
for (int i = 0; i < cpMap.length; i++) {
int x = cp_Float.getInt();
float fx = Float.intBitsToFloat(x);
- cpMap[i] = ConstantPool.getLiteralEntry(new Float(fx));
+ cpMap[i] = ConstantPool.getLiteralEntry(fx);
}
cp_Float.doneDisbursing();
break;
@@ -444,7 +461,7 @@
long hi = cp_Long_hi.getInt();
long lo = cp_Long_lo.getInt();
long x = (hi << 32) + ((lo << 32) >>> 32);
- cpMap[i] = ConstantPool.getLiteralEntry(new Long(x));
+ cpMap[i] = ConstantPool.getLiteralEntry(x);
}
cp_Long_hi.doneDisbursing();
cp_Long_lo.doneDisbursing();
@@ -462,7 +479,7 @@
long lo = cp_Double_lo.getInt();
long x = (hi << 32) + ((lo << 32) >>> 32);
double dx = Double.longBitsToDouble(x);
- cpMap[i] = ConstantPool.getLiteralEntry(new Double(dx));
+ cpMap[i] = ConstantPool.getLiteralEntry(dx);
}
cp_Double_hi.doneDisbursing();
cp_Double_lo.doneDisbursing();
@@ -645,7 +662,7 @@
cp_Utf8_big_suffix.doneDisbursing();
}
- HashMap utf8Signatures; // Utf8Entry->SignatureEntry
+ Map<Utf8Entry, SignatureEntry> utf8Signatures;
void readSignatureBands(Entry[] cpMap) throws IOException {
// cp_Signature:
@@ -663,7 +680,7 @@
cp_Signature_classes.expectLength(getIntTotal(numSigClasses));
cp_Signature_classes.readFrom(in);
cp_Signature_classes.setIndex(getCPIndex(CONSTANT_Class));
- utf8Signatures = new HashMap();
+ utf8Signatures = new HashMap<>();
for (int i = 0; i < cpMap.length; i++) {
Utf8Entry formRef = (Utf8Entry) cp_Signature_form.getRef();
ClassEntry[] classRefs = new ClassEntry[numSigClasses[i]];
@@ -863,7 +880,7 @@
ic_name.expectLength(longICCount);
ic_name.readFrom(in);
ic_flags.resetForSecondPass();
- ArrayList icList = new ArrayList(numInnerClasses);
+ List<InnerClass> icList = new ArrayList<>(numInnerClasses);
for (int i = 0; i < numInnerClasses; i++) {
int flags = ic_flags.getInt();
boolean longForm = (flags & ACC_IC_LONG_FORM) != 0;
@@ -876,7 +893,7 @@
thisName = (Utf8Entry) ic_name.getRef();
} else {
String n = thisClass.stringValue();
- String[] parse = pkg.parseInnerClassName(n);
+ String[] parse = Package.parseInnerClassName(n);
assert(parse != null);
String pkgOuter = parse[0];
//String number = parse[1];
@@ -905,7 +922,7 @@
void readLocalInnerClasses(Class cls) throws IOException {
int nc = class_InnerClasses_N.getInt();
- ArrayList localICs = new ArrayList(nc);
+ List<InnerClass> localICs = new ArrayList<>(nc);
for (int i = 0; i < nc; i++) {
ClassEntry thisClass = (ClassEntry) class_InnerClasses_RC.getRef();
int flags = class_InnerClasses_F.getInt();
@@ -994,10 +1011,8 @@
return -1;
}
- Comparator entryOutputOrder = new Comparator() {
- public int compare(Object o0, Object o1) {
- Entry e0 = (Entry) o0;
- Entry e1 = (Entry) o1;
+ Comparator<Entry> entryOutputOrder = new Comparator<>() {
+ public int compare(Entry e0, Entry e1) {
int k0 = getOutputIndex(e0);
int k1 = getOutputIndex(e1);
if (k0 >= 0 && k1 >= 0)
@@ -1034,9 +1049,8 @@
}
Entry[] reconstructLocalCPMap(Class cls) {
- HashSet ldcRefs = (HashSet) ldcRefMap.get(cls);
- HashSet cpRefs = new HashSet();
- HashSet sigSet = new HashSet();
+ Set<Entry> ldcRefs = ldcRefMap.get(cls);
+ Set<Entry> cpRefs = new HashSet<>();
// look for constant pool entries:
cls.visitRefs(VRM_CLASSIC, cpRefs);
@@ -1064,8 +1078,7 @@
// construct a local constant pool
int numDoubles = 0;
- for (Iterator i = cpRefs.iterator(); i.hasNext(); ) {
- Entry e = (Entry) i.next();
+ for (Entry e : cpRefs) {
if (e.isDoubleWord()) numDoubles++;
assert(e.tag != CONSTANT_Signature) : (e);
}
@@ -1075,8 +1088,7 @@
// Add all ldc operands first.
if (ldcRefs != null) {
assert(cpRefs.containsAll(ldcRefs));
- for (Iterator i = ldcRefs.iterator(); i.hasNext(); ) {
- Entry e = (Entry) i.next();
+ for (Entry e : ldcRefs) {
cpMap[fillp++] = e;
}
assert(fillp == 1+ldcRefs.size());
@@ -1085,11 +1097,10 @@
}
// Next add all the two-byte references.
- HashSet wideRefs = cpRefs;
+ Set<Entry> wideRefs = cpRefs;
cpRefs = null; // do not use!
int narrowLimit = fillp;
- for (Iterator i = wideRefs.iterator(); i.hasNext(); ) {
- Entry e = (Entry) i.next();
+ for (Entry e : wideRefs) {
cpMap[fillp++] = e;
}
assert(fillp == narrowLimit+wideRefs.size());
@@ -1144,7 +1155,7 @@
method_descr.expectLength(totalNM);
if (verbose > 1) Utils.log.fine("expecting #fields="+totalNF+" and #methods="+totalNM+" in #classes="+numClasses);
- ArrayList fields = new ArrayList(totalNF);
+ List<Class.Field> fields = new ArrayList<>(totalNF);
field_descr.readFrom(in);
for (int i = 0; i < classes.length; i++) {
Class c = classes[i];
@@ -1160,7 +1171,7 @@
countAndReadAttrs(ATTR_CONTEXT_FIELD, fields);
fields = null; // release to GC
- ArrayList methods = new ArrayList(totalNM);
+ List<Class.Method> methods = new ArrayList<>(totalNM);
method_descr.readFrom(in);
for (int i = 0; i < classes.length; i++) {
Class c = classes[i];
@@ -1182,13 +1193,12 @@
}
Code[] allCodes;
- List codesWithFlags;
- HashMap ldcRefMap = new HashMap(); // HashMap<Class, HashSet<Entry>>
+ List<Code> codesWithFlags;
+ Map<Class, Set<Entry>> ldcRefMap = new HashMap<>();
- Code[] buildCodeAttrs(List methods) {
- ArrayList codes = new ArrayList(methods.size());
- for (Iterator i = methods.iterator(); i.hasNext(); ) {
- Class.Method m = (Class.Method) i.next();
+ Code[] buildCodeAttrs(List<Class.Method> methods) {
+ List<Code> codes = new ArrayList<>(methods.size());
+ for (Class.Method m : methods) {
if (m.getAttribute(attrCodeEmpty) != null) {
m.code = new Code(m);
codes.add(m.code);
@@ -1211,7 +1221,7 @@
boolean attrsOK = testBit(archiveOptions, AO_HAVE_ALL_CODE_FLAGS);
code_headers.expectLength(allCodes.length);
code_headers.readFrom(in);
- ArrayList longCodes = new ArrayList(allCodes.length / 10);
+ List<Code> longCodes = new ArrayList<>(allCodes.length / 10);
for (int i = 0; i < allCodes.length; i++) {
Code c = allCodes[i];
int sc = code_headers.getByte();
@@ -1238,8 +1248,7 @@
code_max_stack.readFrom(in);
code_max_na_locals.readFrom(in);
code_handler_count.readFrom(in);
- for (Iterator i = longCodes.iterator(); i.hasNext(); ) {
- Code c = (Code) i.next();
+ for (Code c : longCodes) {
c.setMaxStack( code_max_stack.getInt() );
c.setMaxNALocals( code_max_na_locals.getInt() );
c.setHandlerCount( code_handler_count.getInt() );
@@ -1386,8 +1395,9 @@
// Fetch the attribute layout definitions which govern the bands
// we are about to read.
- Attribute.Layout[] defs = new Attribute.Layout[attrDefs[ctype].size()];
- attrDefs[ctype].toArray(defs);
+ List<Attribute.Layout> defList = attrDefs.get(ctype);
+ Attribute.Layout[] defs = new Attribute.Layout[defList.size()];
+ defList.toArray(defs);
IntBand xxx_flags_hi = getAttrBand(xxx_attr_bands, AB_FLAGS_HI);
IntBand xxx_flags_lo = getAttrBand(xxx_attr_bands, AB_FLAGS_LO);
IntBand xxx_attr_count = getAttrBand(xxx_attr_bands, AB_ATTR_COUNT);
@@ -1450,7 +1460,7 @@
bits -= (1L<<ai);
nfa += 1;
}
- ArrayList ha = new ArrayList(nfa + noa);
+ List<Attribute> ha = new ArrayList<>(nfa + noa);
h.attributes = ha;
bits = attrBits; // iterate again
for (int ai = 0; bits != 0; ai++) {
@@ -1516,7 +1526,7 @@
if (predef != isPredefinedAttr(ctype, ai))
continue; // wrong pass
int totalCount = totalCounts[ai];
- Band[] ab = (Band[]) attrBandTable.get(def);
+ Band[] ab = attrBandTable.get(def);
if (def == attrInnerClassesEmpty) {
// Special case.
// Size the bands as if using the following layout:
@@ -1571,15 +1581,16 @@
ATTR_CONTEXT_NAME[ctype]+" attribute");
}
+ @SuppressWarnings("unchecked")
void readAttrs(int ctype, Collection holders) throws IOException {
// Decode band values into attributes.
- HashSet sawDefs = new HashSet();
+ Set<Attribute.Layout> sawDefs = new HashSet<>();
ByteArrayOutputStream buf = new ByteArrayOutputStream();
for (Iterator i = holders.iterator(); i.hasNext(); ) {
final Attribute.Holder h = (Attribute.Holder) i.next();
if (h.attributes == null) continue;
- for (ListIterator j = h.attributes.listIterator(); j.hasNext(); ) {
- Attribute a = (Attribute) j.next();
+ for (ListIterator<Attribute> j = h.attributes.listIterator(); j.hasNext(); ) {
+ Attribute a = j.next();
Attribute.Layout def = a.layout();
if (def.bandCount == 0) {
if (def == attrInnerClassesEmpty) {
@@ -1595,7 +1606,7 @@
if (isCV) setConstantValueIndex((Class.Field)h);
if (verbose > 2)
Utils.log.fine("read "+a+" in "+h);
- final Band[] ab = (Band[]) attrBandTable.get(def);
+ final Band[] ab = attrBandTable.get(def);
// Read one attribute of type def from ab into a byte array.
buf.reset();
Object fixups = a.unparse(new Attribute.ValueStream() {
@@ -1617,10 +1628,9 @@
}
// Mark the bands we just used as done disbursing.
- for (Iterator i = sawDefs.iterator(); i.hasNext(); ) {
- Attribute.Layout def = (Attribute.Layout) i.next();
+ for (Attribute.Layout def : sawDefs) {
if (def == null) continue; // unused index
- Band[] ab = (Band[]) attrBandTable.get(def);
+ Band[] ab = attrBandTable.get(def);
for (int j = 0; j < ab.length; j++) {
ab[j].doneDisbursing();
}
@@ -1778,7 +1788,7 @@
// scratch buffer for collecting code::
byte[] buf = new byte[1<<12];
// record of all switch opcodes (these are variable-length)
- ArrayList allSwitchOps = new ArrayList();
+ List<Integer> allSwitchOps = new ArrayList<>();
for (int k = 0; k < allCodes.length; k++) {
Code c = allCodes[k];
scanOneMethod:
@@ -1798,7 +1808,7 @@
case _tableswitch:
case _lookupswitch:
bc_case_count.expectMoreLength(1);
- allSwitchOps.add(new Integer(bc));
+ allSwitchOps.add(bc);
break;
case _iinc:
bc_local.expectMoreLength(1);
@@ -1866,8 +1876,8 @@
// To size instruction bands correctly, we need info on switches:
bc_case_count.readFrom(in);
- for (Iterator i = allSwitchOps.iterator(); i.hasNext(); ) {
- int bc = ((Integer)i.next()).intValue();
+ for (Integer i : allSwitchOps) {
+ int bc = i.intValue();
int caseCount = bc_case_count.getInt();
bc_label.expectMoreLength(1+caseCount); // default label + cases
bc_case_value.expectMoreLength(bc == _tableswitch ? 1 : caseCount);
@@ -1892,9 +1902,9 @@
Class curClass = code.thisClass();
- HashSet ldcRefSet = (HashSet) ldcRefMap.get(curClass);
+ Set<Entry> ldcRefSet = ldcRefMap.get(curClass);
if (ldcRefSet == null)
- ldcRefMap.put(curClass, ldcRefSet = new HashSet());
+ ldcRefMap.put(curClass, ldcRefSet = new HashSet<>());
ClassEntry thisClass = curClass.thisClass;
ClassEntry superClass = curClass.superClass;
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java Thu Jan 06 18:05:56 2011 -0800
@@ -45,10 +45,10 @@
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
import java.util.Map;
+import java.util.Set;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Writer for a package file.
@@ -111,12 +111,12 @@
}
}
- HashSet requiredEntries; // for the CP
- HashMap backCountTable; // for layout callables
+ Set<Entry> requiredEntries; // for the CP
+ Map<Attribute.Layout, int[]> backCountTable; // for layout callables
int[][] attrCounts; // count attr. occurences
void setup() {
- requiredEntries = new HashSet();
+ requiredEntries = new HashSet<>();
setArchiveOptions();
trimClassAttributes();
collectAttributeLayouts();
@@ -139,9 +139,7 @@
// Import defaults from package (deflate hint, etc.).
archiveOptions |= pkg.default_options;
- for (Iterator i = pkg.files.iterator(); i.hasNext(); ) {
- File file = (File) i.next();
-
+ for (File file : pkg.files) {
int modtime = file.modtime;
int options = file.options;
@@ -178,16 +176,15 @@
}
}
// Decide on default version number (majority rule).
- HashMap verCounts = new HashMap();
+ Map<Integer, int[]> verCounts = new HashMap<>();
int bestCount = 0;
int bestVersion = -1;
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : pkg.classes) {
int version = cls.getVersion();
- int[] var = (int[]) verCounts.get(new Integer(version));
+ int[] var = verCounts.get(version);
if (var == null) {
var = new int[1];
- verCounts.put(new Integer(version), var);
+ verCounts.put(version, var);
}
int count = (var[0] += 1);
//System.out.println("version="+version+" count="+count);
@@ -210,9 +207,7 @@
Package.versionStringOf(pkg.getHighestClassVersion()));
// Now add explicit pseudo-attrs. to classes with odd versions.
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
-
+ for (Class cls : pkg.classes) {
if (cls.getVersion() != bestVersion) {
Attribute a = makeClassFileVersionAttr(cls.minver, cls.majver);
if (verbose > 1) {
@@ -228,8 +223,7 @@
}
// Decide if we are transmitting a huge resource file:
- for (Iterator i = pkg.files.iterator(); i.hasNext(); ) {
- File file = (File) i.next();
+ for (File file : pkg.files) {
long len = file.getFileLength();
if (len != (int)len) {
archiveOptions |= AO_HAVE_FILE_SIZE_HI;
@@ -244,10 +238,8 @@
// we must declare unconditional presence of code flags.
int cost0 = 0;
int cost1 = 0;
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
- for (Iterator j = cls.getMethods().iterator(); j.hasNext(); ) {
- Class.Method m = (Class.Method) j.next();
+ for (Class cls : pkg.classes) {
+ for (Class.Method m : cls.getMethods()) {
if (m.code != null) {
if (m.code.attributeSize() == 0) {
// cost of a useless unconditional flags byte
@@ -352,7 +344,7 @@
archive_header_1.putInt(pkg.default_modtime);
archive_header_1.putInt(pkg.files.size());
} else {
- assert(pkg.files.size() == 0);
+ assert(pkg.files.isEmpty());
}
if (haveSpecial) {
@@ -697,8 +689,7 @@
boolean haveModtime = testBit(options, AO_HAVE_FILE_MODTIME);
boolean haveOptions = testBit(options, AO_HAVE_FILE_OPTIONS);
if (!haveOptions) {
- for (Iterator i = pkg.files.iterator(); i.hasNext(); ) {
- File file = (File) i.next();
+ for (File file : pkg.files) {
if (file.isClassStub()) {
haveOptions = true;
options |= AO_HAVE_FILE_OPTIONS;
@@ -711,9 +702,7 @@
options |= AO_HAVE_FILE_HEADERS;
archiveOptions = options;
}
-
- for (Iterator i = pkg.files.iterator(); i.hasNext(); ) {
- File file = (File) i.next();
+ for (File file : pkg.files) {
file_name.putRef(file.name);
long len = file.getFileLength();
file_size_lo.putInt((int)len);
@@ -731,22 +720,20 @@
Utils.log.info("Wrote "+numFiles+" resource files");
}
+ @SuppressWarnings("unchecked")
void collectAttributeLayouts() {
maxFlags = new int[ATTR_CONTEXT_LIMIT];
- allLayouts = new HashMap[ATTR_CONTEXT_LIMIT];
+ allLayouts = new FixedList<>(ATTR_CONTEXT_LIMIT);
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
- allLayouts[i] = new HashMap();
+ allLayouts.set(i, new HashMap<Attribute.Layout, int[]>());
}
// Collect maxFlags and allLayouts.
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : pkg.classes) {
visitAttributeLayoutsIn(ATTR_CONTEXT_CLASS, cls);
- for (Iterator j = cls.getFields().iterator(); j.hasNext(); ) {
- Class.Field f = (Class.Field) j.next();
+ for (Class.Field f : cls.getFields()) {
visitAttributeLayoutsIn(ATTR_CONTEXT_FIELD, f);
}
- for (Iterator j = cls.getMethods().iterator(); j.hasNext(); ) {
- Class.Method m = (Class.Method) j.next();
+ for (Class.Method m : cls.getMethods()) {
visitAttributeLayoutsIn(ATTR_CONTEXT_METHOD, m);
if (m.code != null) {
visitAttributeLayoutsIn(ATTR_CONTEXT_CODE, m.code);
@@ -755,7 +742,7 @@
}
// If there are many species of attributes, use 63-bit flags.
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
- int nl = allLayouts[i].size();
+ int nl = allLayouts.get(i).size();
boolean haveLongFlags = haveFlagsHi(i);
final int TOO_MANY_ATTRS = 32 /*int flag size*/
- 12 /*typical flag bits in use*/
@@ -781,7 +768,7 @@
}
// Collect counts for both predefs. and custom defs.
// Decide on custom, local attribute definitions.
- backCountTable = new HashMap();
+ backCountTable = new HashMap<>();
attrCounts = new int[ATTR_CONTEXT_LIMIT][];
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
// Now the remaining defs in allLayouts[i] need attr. indexes.
@@ -793,11 +780,12 @@
assert(attrIndexLimit[i] < 64); // all bits fit into a Java long
avHiBits &= (1L<<attrIndexLimit[i])-1;
int nextLoBit = 0;
- Map.Entry[] layoutsAndCounts = new Map.Entry[allLayouts[i].size()];
- allLayouts[i].entrySet().toArray(layoutsAndCounts);
+ Map<Attribute.Layout, int[]> defMap = allLayouts.get(i);
+ Map.Entry[] layoutsAndCounts = new Map.Entry[defMap.size()];
+ defMap.entrySet().toArray(layoutsAndCounts);
// Sort by count, most frequent first.
// Predefs. participate in this sort, though it does not matter.
- Arrays.sort(layoutsAndCounts, new Comparator() {
+ Arrays.sort(layoutsAndCounts, new Comparator<>() {
public int compare(Object o0, Object o1) {
Map.Entry e0 = (Map.Entry) o0;
Map.Entry e1 = (Map.Entry) o1;
@@ -814,7 +802,7 @@
Attribute.Layout def = (Attribute.Layout) e.getKey();
int count = ((int[])e.getValue())[0];
int index;
- Integer predefIndex = (Integer) attrIndexTable.get(def);
+ Integer predefIndex = attrIndexTable.get(def);
if (predefIndex != null) {
// The index is already set.
index = predefIndex.intValue();
@@ -872,29 +860,32 @@
// Scratch variables for processing attributes and flags.
int[] maxFlags;
- HashMap[] allLayouts;
+ List<Map<Attribute.Layout, int[]>> allLayouts;
void visitAttributeLayoutsIn(int ctype, Attribute.Holder h) {
// Make note of which flags appear in the class file.
// Set them in maxFlags.
maxFlags[ctype] |= h.flags;
- for (Iterator i = h.getAttributes().iterator(); i.hasNext(); ) {
- Attribute a = (Attribute) i.next();
+ for (Attribute a : h.getAttributes()) {
Attribute.Layout def = a.layout();
- int[] count = (int[]) allLayouts[ctype].get(def);
- if (count == null)
- allLayouts[ctype].put(def, count = new int[1]);
- if (count[0] < Integer.MAX_VALUE)
+ Map<Attribute.Layout, int[]> defMap = allLayouts.get(ctype);
+ int[] count = defMap.get(def);
+ if (count == null) {
+ defMap.put(def, count = new int[1]);
+ }
+ if (count[0] < Integer.MAX_VALUE) {
count[0] += 1;
+ }
}
}
Attribute.Layout[] attrDefsWritten;
+ @SuppressWarnings("unchecked")
void writeAttrDefs() throws IOException {
- ArrayList defList = new ArrayList();
+ List<Object[]> defList = new ArrayList<>();
for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
- int limit = attrDefs[i].size();
+ int limit = attrDefs.get(i).size();
for (int j = 0; j < limit; j++) {
int header = i; // ctype
if (j < attrIndexLimit[i]) {
@@ -906,9 +897,9 @@
continue;
}
}
- Attribute.Layout def = (Attribute.Layout) attrDefs[i].get(j);
- defList.add(new Object[]{ new Integer(header), def });
- assert(new Integer(j).equals(attrIndexTable.get(def)));
+ Attribute.Layout def = attrDefs.get(i).get(j);
+ defList.add(new Object[]{ Integer.valueOf(header), def });
+ assert(Integer.valueOf(j).equals(attrIndexTable.get(def)));
}
}
// Sort the new attr defs into some "natural" order.
@@ -934,10 +925,7 @@
attrDefsWritten = new Attribute.Layout[numAttrDefs];
PrintStream dump = !optDumpBands ? null
: new PrintStream(getDumpStream(attr_definition_headers, ".def"));
- int[] indexForDebug = new int[ATTR_CONTEXT_LIMIT];
- for (int i = 0; i < ATTR_CONTEXT_LIMIT; i++) {
- indexForDebug[i] = attrIndexLimit[i];
- }
+ int[] indexForDebug = Arrays.copyOf(attrIndexLimit, ATTR_CONTEXT_LIMIT);
for (int i = 0; i < defs.length; i++) {
int header = ((Integer)defs[i][0]).intValue();
Attribute.Layout def = (Attribute.Layout) defs[i][1];
@@ -953,7 +941,7 @@
if (debug) {
int hdrIndex = (header >> ADH_BIT_SHIFT) - ADH_BIT_IS_LSB;
if (hdrIndex < 0) hdrIndex = indexForDebug[def.ctype()]++;
- int realIndex = ((Integer) attrIndexTable.get(def)).intValue();
+ int realIndex = (attrIndexTable.get(def)).intValue();
assert(hdrIndex == realIndex);
}
if (dump != null) {
@@ -969,8 +957,8 @@
for (int ctype = 0; ctype < ATTR_CONTEXT_LIMIT; ctype++) {
MultiBand xxx_attr_bands = attrBands[ctype];
IntBand xxx_attr_calls = getAttrBand(xxx_attr_bands, AB_ATTR_CALLS);
- Attribute.Layout[] defs = new Attribute.Layout[attrDefs[ctype].size()];
- attrDefs[ctype].toArray(defs);
+ Attribute.Layout[] defs = new Attribute.Layout[attrDefs.get(ctype).size()];
+ attrDefs.get(ctype).toArray(defs);
for (boolean predef = true; ; predef = false) {
for (int ai = 0; ai < defs.length; ai++) {
Attribute.Layout def = defs[ai];
@@ -980,7 +968,7 @@
int totalCount = attrCounts[ctype][ai];
if (totalCount == 0)
continue; // irrelevant
- int[] bc = (int[]) backCountTable.get(def);
+ int[] bc = backCountTable.get(def);
for (int j = 0; j < bc.length; j++) {
if (bc[j] >= 0) {
int backCount = bc[j];
@@ -998,8 +986,7 @@
}
void trimClassAttributes() {
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : pkg.classes) {
// Replace "obvious" SourceFile attrs by null.
cls.minimizeSourceFile();
}
@@ -1008,14 +995,12 @@
void collectInnerClasses() {
// Capture inner classes, removing them from individual classes.
// Irregular inner classes must stay local, though.
- HashMap allICMap = new HashMap();
+ Map<ClassEntry, InnerClass> allICMap = new HashMap<>();
// First, collect a consistent global set.
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : pkg.classes) {
if (!cls.hasInnerClasses()) continue;
- for (Iterator j = cls.getInnerClasses().iterator(); j.hasNext(); ) {
- InnerClass ic = (InnerClass) j.next();
- InnerClass pic = (InnerClass) allICMap.put(ic.thisClass, ic);
+ for (InnerClass ic : cls.getInnerClasses()) {
+ InnerClass pic = allICMap.put(ic.thisClass, ic);
if (pic != null && !pic.equals(ic) && pic.predictable) {
// Different ICs. Choose the better to make global.
allICMap.put(pic.thisClass, pic);
@@ -1036,15 +1021,13 @@
// Next, empty out of every local set the consistent entries.
// Calculate whether there is any remaining need to have a local
// set, and whether it needs to be locked.
- for (Iterator i = pkg.classes.iterator(); i.hasNext(); ) {
- Class cls = (Class) i.next();
+ for (Class cls : pkg.classes) {
cls.minimizeLocalICs();
}
}
void writeInnerClasses() throws IOException {
- for (Iterator i = pkg.getAllInnerClasses().iterator(); i.hasNext(); ) {
- InnerClass ic = (InnerClass) i.next();
+ for (InnerClass ic : pkg.getAllInnerClasses()) {
int flags = ic.flags;
assert((flags & ACC_IC_LONG_FORM) == 0);
if (!ic.predictable) {
@@ -1064,10 +1047,9 @@
* local attribute. This is expected to be rare.
*/
void writeLocalInnerClasses(Class cls) throws IOException {
- List localICs = cls.getInnerClasses();
+ List<InnerClass> localICs = cls.getInnerClasses();
class_InnerClasses_N.putInt(localICs.size());
- for (Iterator i = localICs.iterator(); i.hasNext(); ) {
- InnerClass ic = (InnerClass) i.next();
+ for(InnerClass ic : localICs) {
class_InnerClasses_RC.putRef(ic.thisClass);
// Is it redundant with the global version?
if (ic.equals(pkg.getGlobalInnerClass(ic.thisClass))) {
@@ -1121,18 +1103,16 @@
}
void writeMembers(Class cls) throws IOException {
- List fields = cls.getFields();
+ List<Class.Field> fields = cls.getFields();
class_field_count.putInt(fields.size());
- for (Iterator i = fields.iterator(); i.hasNext(); ) {
- Class.Field f = (Class.Field) i.next();
+ for (Class.Field f : fields) {
field_descr.putRef(f.getDescriptor());
writeAttrs(ATTR_CONTEXT_FIELD, f, cls);
}
- List methods = cls.getMethods();
+ List<Class.Method> methods = cls.getMethods();
class_method_count.putInt(methods.size());
- for (Iterator i = methods.iterator(); i.hasNext(); ) {
- Class.Method m = (Class.Method) i.next();
+ for (Class.Method m : methods) {
method_descr.putRef(m.getDescriptor());
writeAttrs(ATTR_CONTEXT_METHOD, m, cls);
assert((m.code != null) == (m.getAttribute(attrCodeEmpty) != null));
@@ -1206,11 +1186,10 @@
long flagMask = attrFlagMask[ctype]; // which flags are attr bits?
long flagsToAdd = 0;
int overflowCount = 0;
- for (ListIterator j = h.attributes.listIterator(); j.hasNext(); ) {
- Attribute a = (Attribute) j.next();
+ for (Attribute a : h.attributes) {
Attribute.Layout def = a.layout();
- int index = ((Integer)attrIndexTable.get(def)).intValue();
- assert(attrDefs[ctype].get(index) == def);
+ int index = (attrIndexTable.get(def)).intValue();
+ assert(attrDefs.get(ctype).get(index) == def);
if (verbose > 3)
Utils.log.fine("add attr @"+index+" "+a+" in "+h);
if (index < attrIndexLimit[ctype] && testBit(flagMask, 1L<<index)) {
@@ -1239,10 +1218,10 @@
continue;
}
assert(a.fixups == null);
- final Band[] ab = (Band[]) attrBandTable.get(def);
+ final Band[] ab = attrBandTable.get(def);
assert(ab != null);
assert(ab.length == def.bandCount);
- final int[] bc = (int[]) backCountTable.get(def);
+ final int[] bc = backCountTable.get(def);
assert(bc != null);
assert(bc.length == def.getCallables().length);
// Write one attribute of type def into ab.
@@ -1306,7 +1285,7 @@
private int initOpVariant(Instruction i, Entry newClass) {
if (i.getBC() != _invokespecial) return -1;
MemberEntry ref = (MemberEntry) i.getCPRef(curCPMap);
- if (ref.descRef.nameRef.stringValue() != "<init>")
+ if ("<init>".equals(ref.descRef.nameRef.stringValue()) == false)
return -1;
ClassEntry refClass = ref.classRef;
if (refClass == curClass.thisClass)
@@ -1618,14 +1597,16 @@
String count = "" + codeHist[bc];
count = " ".substring(count.length()) + count;
String pct = "" + (codeHist[bc] * 10000 / totalBytes);
- while (pct.length() < 4) pct = "0" + pct;
+ while (pct.length() < 4) {
+ pct = "0" + pct;
+ }
pct = pct.substring(0, pct.length()-2) + "." + pct.substring(pct.length()-2);
hist[bc] = count + " " + pct + "% " + iname;
}
Arrays.sort(hist);
System.out.println("Bytecode histogram ["+totalBytes+"]");
for (int i = hist.length; --i >= 0; ) {
- if (hist[i] == "") continue;
+ if ("".equals(hist[i])) continue;
System.out.println(hist[i]);
}
for (int tag = 0; tag < ldcHist.length; tag++) {
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java Thu Jan 06 18:05:56 2011 -0800
@@ -69,7 +69,8 @@
* Get the set of options for the pack and unpack engines.
* @return A sorted association of option key strings to option values.
*/
- public SortedMap<String, String> properties() {
+ @SuppressWarnings("unchecked")
+ public SortedMap properties() {
return props;
}
@@ -155,8 +156,8 @@
// All the worker bees.....
-
// The packer worker.
+ @SuppressWarnings("unchecked")
private class DoPack {
final int verbose = props.getInteger(Utils.DEBUG_VERBOSE);
@@ -179,11 +180,11 @@
unknownAttrCommand = uaMode.intern();
}
- final HashMap attrDefs;
- final HashMap attrCommands;
+ final Map<Attribute.Layout, Attribute> attrDefs;
+ final Map<Attribute.Layout, String> attrCommands;
{
- HashMap attrDefs = new HashMap();
- HashMap attrCommands = new HashMap();
+ Map<Attribute.Layout, Attribute> lattrDefs = new HashMap<>();
+ Map<Attribute.Layout, String> lattrCommands = new HashMap<>();
String[] keys = {
Pack200.Packer.CLASS_ATTRIBUTE_PFX,
Pack200.Packer.FIELD_ATTRIBUTE_PFX,
@@ -198,8 +199,9 @@
};
for (int i = 0; i < ctypes.length; i++) {
String pfx = keys[i];
- Map<String, String> map = props.prefixMap(pfx);
- for (String key : map.keySet()) {
+ Map<Object, Object> map = props.prefixMap(pfx);
+ for (Object k : map.keySet()) {
+ String key = (String)k;
assert(key.startsWith(pfx));
String name = key.substring(pfx.length());
String layout = props.getProperty(key);
@@ -207,24 +209,18 @@
if (Pack200.Packer.STRIP.equals(layout) ||
Pack200.Packer.PASS.equals(layout) ||
Pack200.Packer.ERROR.equals(layout)) {
- attrCommands.put(lkey, layout.intern());
+ lattrCommands.put(lkey, layout.intern());
} else {
- Attribute.define(attrDefs, ctypes[i], name, layout);
+ Attribute.define(lattrDefs, ctypes[i], name, layout);
if (verbose > 1) {
Utils.log.fine("Added layout for "+Constants.ATTR_CONTEXT_NAME[i]+" attribute "+name+" = "+layout);
}
- assert(attrDefs.containsKey(lkey));
+ assert(lattrDefs.containsKey(lkey));
}
}
}
- if (attrDefs.size() > 0)
- this.attrDefs = attrDefs;
- else
- this.attrDefs = null;
- if (attrCommands.size() > 0)
- this.attrCommands = attrCommands;
- else
- this.attrCommands = null;
+ this.attrDefs = (lattrDefs.isEmpty()) ? null : lattrDefs;
+ this.attrCommands = (lattrCommands.isEmpty()) ? null : lattrCommands;
}
final boolean keepFileOrder
@@ -275,8 +271,8 @@
{
// Which class files will be passed through?
passFiles = props.getProperties(Pack200.Packer.PASS_FILE_PFX);
- for (ListIterator i = passFiles.listIterator(); i.hasNext(); ) {
- String file = (String) i.next();
+ for (ListIterator<String> i = passFiles.listIterator(); i.hasNext(); ) {
+ String file = i.next();
if (file == null) { i.remove(); continue; }
file = Utils.getJarEntryName(file); // normalize '\\' to '/'
if (file.endsWith("/"))
@@ -333,7 +329,7 @@
pkg.reset();
}
- class InFile {
+ final class InFile {
final String name;
final JarFile jf;
final JarEntry je;
@@ -596,8 +592,8 @@
// Package builder must have created a stub for each class.
assert(pkg.files.containsAll(pkg.getClassStubs()));
// Order of stubs in file list must agree with classes.
- List res = pkg.files;
- assert((res = new ArrayList(pkg.files))
+ List<Package.File> res = pkg.files;
+ assert((res = new ArrayList<>(pkg.files))
.retainAll(pkg.getClassStubs()) || true);
assert(res.equals(pkg.getClassStubs()));
}
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PopulationCoding.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PopulationCoding.java Thu Jan 06 18:05:56 2011 -0800
@@ -31,6 +31,8 @@
import java.io.OutputStream;
import java.util.Arrays;
import java.util.HashSet;
+import java.util.Set;
+import static com.sun.java.util.jar.pack.Constants.*;
/**
* Population-based coding.
@@ -38,7 +40,7 @@
* @author John Rose
*/
// This tactic alone reduces the final zipped rt.jar by about a percent.
-class PopulationCoding implements Constants, CodingMethod {
+class PopulationCoding implements CodingMethod {
Histogram vHist; // histogram of all values
int[] fValues; // list of favored values
int fVlen; // inclusive max index
@@ -62,8 +64,8 @@
}
}
public void setFavoredValues(int[] fValues) {
- int fVlen = fValues.length-1;
- setFavoredValues(fValues, fVlen);
+ int lfVlen = fValues.length-1;
+ setFavoredValues(fValues, lfVlen);
}
public void setHistogram(Histogram vHist) {
this.vHist = vHist;
@@ -103,7 +105,7 @@
if (tokenCoding instanceof Coding && fValues != null) {
Coding tc = (Coding) tokenCoding;
if (tc == fitTokenCoding(fVlen, tc.L()))
- this.L = tc.L();;
+ this.L = tc.L();
// Otherwise, it's a non-default coding.
}
}
@@ -217,13 +219,13 @@
}
private long[] makeSymtab() {
- long[] symtab = new long[fVlen];
+ long[] lsymtab = new long[fVlen];
for (int token = 1; token <= fVlen; token++) {
- symtab[token-1] = ((long)fValues[token] << 32) | token;
+ lsymtab[token-1] = ((long)fValues[token] << 32) | token;
}
// Index by value:
- Arrays.sort(symtab);
- return symtab;
+ Arrays.sort(lsymtab);
+ return lsymtab;
}
private Coding getTailCoding(CodingMethod c) {
@@ -302,12 +304,12 @@
}
int[] readFavoredValuesFrom(InputStream in, int maxForDebug) throws IOException {
- int[] fValues = new int[1000]; // realloc as needed
+ int[] lfValues = new int[1000]; // realloc as needed
// The set uniqueValuesForDebug records all favored values.
// As each new value is added, we assert that the value
// was not already in the set.
- HashSet uniqueValuesForDebug = null;
- assert((uniqueValuesForDebug = new HashSet()) != null);
+ Set<Integer> uniqueValuesForDebug = null;
+ assert((uniqueValuesForDebug = new HashSet<>()) != null);
int fillp = 1;
maxForDebug += fillp;
int min = Integer.MIN_VALUE; // farthest from the center
@@ -317,13 +319,14 @@
while (fcm instanceof AdaptiveCoding) {
AdaptiveCoding ac = (AdaptiveCoding) fcm;
int len = ac.headLength;
- while (fillp + len > fValues.length)
- fValues = BandStructure.realloc(fValues);
+ while (fillp + len > lfValues.length) {
+ lfValues = BandStructure.realloc(lfValues);
+ }
int newFillp = fillp + len;
- ac.headCoding.readArrayFrom(in, fValues, fillp, newFillp);
+ ac.headCoding.readArrayFrom(in, lfValues, fillp, newFillp);
while (fillp < newFillp) {
- int val = fValues[fillp++];
- assert(uniqueValuesForDebug.add(new Integer(val)));
+ int val = lfValues[fillp++];
+ assert(uniqueValuesForDebug.add(val));
assert(fillp <= maxForDebug);
last = val;
min = moreCentral(min, val);
@@ -344,10 +347,10 @@
state = val;
if (fillp > 1 && (val == last || val == min)) //|| val == min2
break;
- if (fillp == fValues.length)
- fValues = BandStructure.realloc(fValues);
- fValues[fillp++] = val;
- assert(uniqueValuesForDebug.add(new Integer(val)));
+ if (fillp == lfValues.length)
+ lfValues = BandStructure.realloc(lfValues);
+ lfValues[fillp++] = val;
+ assert(uniqueValuesForDebug.add(val));
assert(fillp <= maxForDebug);
last = val;
min = moreCentral(min, val);
@@ -358,17 +361,17 @@
int val = fc.readFrom(in);
if (fillp > 1 && (val == last || val == min)) //|| val == min2
break;
- if (fillp == fValues.length)
- fValues = BandStructure.realloc(fValues);
- fValues[fillp++] = val;
- assert(uniqueValuesForDebug.add(new Integer(val)));
+ if (fillp == lfValues.length)
+ lfValues = BandStructure.realloc(lfValues);
+ lfValues[fillp++] = val;
+ assert(uniqueValuesForDebug.add(val));
assert(fillp <= maxForDebug);
last = val;
min = moreCentral(min, val);
//min2 = moreCentral2(min2, val, min);
}
}
- return BandStructure.realloc(fValues, fillp);
+ return BandStructure.realloc(lfValues, fillp);
}
private static int moreCentral(int x, int y) {
@@ -478,7 +481,7 @@
boolean verbose
= (p200 != null &&
p200.getBoolean(Utils.COM_PREFIX+"verbose.pop"));
- StringBuffer res = new StringBuffer(100);
+ StringBuilder res = new StringBuilder(100);
res.append("pop(").append("fVlen=").append(fVlen);
if (verbose && fValues != null) {
res.append(" fV=[");
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PropMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003,2010 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2010, 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
@@ -34,8 +34,8 @@
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Comparator;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -46,36 +46,36 @@
/**
* Control block for publishing Pack200 options to the other classes.
*/
-class PropMap extends TreeMap {
- ArrayList _listeners = new ArrayList(1);
+
+final class PropMap implements SortedMap<Object, Object> {
+ private final TreeMap<Object, Object> theMap = new TreeMap<>();;
+ private final List<PropertyChangeListener> listenerList = new ArrayList<>(1);
void addListener(PropertyChangeListener listener) {
- _listeners.add(listener);
+ listenerList.add(listener);
}
void removeListener(PropertyChangeListener listener) {
- _listeners.remove(listener);
+ listenerList.remove(listener);
}
- void addListeners(ArrayList listeners) {
- _listeners.addAll(listeners);
+ void addListeners(ArrayList<PropertyChangeListener> listeners) {
+ listenerList.addAll(listeners);
}
- void removeListeners(ArrayList listeners) {
- _listeners.removeAll(listeners);
+ void removeListeners(ArrayList<PropertyChangeListener> listeners) {
+ listenerList.removeAll(listeners);
}
// Override:
public Object put(Object key, Object value) {
- Object oldValue = super.put(key, value);
- if (value != oldValue && _listeners.size() > 0) {
+ Object oldValue = theMap.put(key, value);
+ if (value != oldValue && !listenerList.isEmpty()) {
// Post the property change event.
PropertyChangeEvent event =
new PropertyChangeEvent(this, (String) key,
oldValue, value);
- for (Iterator i = _listeners.iterator(); i.hasNext(); ) {
- PropertyChangeListener listener =
- (PropertyChangeListener) i.next();
+ for (PropertyChangeListener listener : listenerList) {
listener.propertyChange(event);
}
}
@@ -85,7 +85,7 @@
// All this other stuff is private to the current package.
// Outide clients of Pack200 do not need to use it; they can
// get by with generic SortedMap functionality.
- private static Map defaultProps;
+ private static Map<Object, Object> defaultProps;
static {
Properties props = new Properties();
@@ -122,13 +122,12 @@
// Define certain attribute layouts by default.
// Do this after the previous props are put in place,
// to allow override if necessary.
+ InputStream propStr = null;
try {
String propFile = "intrinsic.properties";
- InputStream propStr = PackerImpl.class.getResourceAsStream(propFile);
+ propStr = PackerImpl.class.getResourceAsStream(propFile);
props.load(new BufferedInputStream(propStr));
- propStr.close();
- for (Iterator i = props.entrySet().iterator(); i.hasNext(); ) {
- Map.Entry e = (Map.Entry) i.next();
+ for (Map.Entry<Object, Object> e : props.entrySet()) {
String key = (String) e.getKey();
String val = (String) e.getValue();
if (key.startsWith("attribute.")) {
@@ -137,19 +136,25 @@
}
} catch (IOException ee) {
throw new RuntimeException(ee);
+ } finally {
+ try {
+ if (propStr != null) {
+ propStr.close();
+ }
+ } catch (IOException ignore) {}
}
- defaultProps = (new HashMap(props)); // shrink to fit
+ defaultProps = (new HashMap<>(props)); // shrink to fit
}
PropMap() {
- putAll(defaultProps);
+ theMap.putAll(defaultProps);
}
// Return a view of this map which includes only properties
// that begin with the given prefix. This is easy because
// the map is sorted, and has a subMap accessor.
- SortedMap prefixMap(String prefix) {
+ SortedMap<Object, Object> prefixMap(String prefix) {
int len = prefix.length();
if (len == 0)
return this;
@@ -174,8 +179,8 @@
// Get sequence of props for "prefix", and "prefix.*".
List getProperties(String prefix) {
- Collection values = prefixMap(prefix).values();
- ArrayList res = new ArrayList(values.size());
+ Collection<Object> values = prefixMap(prefix).values();
+ List<Object> res = new ArrayList<>(values.size());
res.addAll(values);
while (res.remove(null));
return res;
@@ -240,11 +245,97 @@
void list(PrintWriter out) {
out.println("#"+Utils.PACK_ZIP_ARCHIVE_MARKER_COMMENT+"[");
Set defaults = defaultProps.entrySet();
- for (Iterator i = entrySet().iterator(); i.hasNext(); ) {
- Map.Entry e = (Map.Entry) i.next();
+ for (Map.Entry e : theMap.entrySet()) {
if (defaults.contains(e)) continue;
out.println(" " + e.getKey() + " = " + e.getValue());
}
out.println("#]");
}
+
+ @Override
+ public int size() {
+ return theMap.size();
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return theMap.isEmpty();
+ }
+
+ @Override
+ public boolean containsKey(Object key) {
+ return theMap.containsKey(key);
+ }
+
+ @Override
+ public boolean containsValue(Object value) {
+ return theMap.containsValue(value);
+ }
+
+ @Override
+ public Object get(Object key) {
+ return theMap.get(key);
+ }
+
+ @Override
+ public Object remove(Object key) {
+ return theMap.remove(key);
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public void putAll(Map m) {
+ theMap.putAll(m);
+ }
+
+ @Override
+ public void clear() {
+ theMap.clear();
+ }
+
+ @Override
+ public Set<Object> keySet() {
+ return theMap.keySet();
+ }
+
+ @Override
+ public Collection<Object> values() {
+ return theMap.values();
+ }
+
+ @Override
+ public Set<Map.Entry<Object, Object>> entrySet() {
+ return theMap.entrySet();
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Comparator<Object> comparator() {
+ return (Comparator<Object>) theMap.comparator();
+ }
+
+ @Override
+ public SortedMap<Object, Object> subMap(Object fromKey, Object toKey) {
+ return theMap.subMap(fromKey, toKey);
+ }
+
+ @Override
+ public SortedMap<Object, Object> headMap(Object toKey) {
+ return theMap.headMap(toKey);
+ }
+
+ @Override
+ public SortedMap<Object, Object> tailMap(Object fromKey) {
+ return theMap.tailMap(fromKey);
+ }
+
+ @Override
+ public Object firstKey() {
+ return theMap.firstKey();
+ }
+
+ @Override
+ public Object lastKey() {
+ return theMap.lastKey();
+ }
}
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java Thu Jan 06 18:05:56 2011 -0800
@@ -34,7 +34,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashSet;
-import java.util.Iterator;
+import java.util.Set;
import java.util.SortedMap;
import java.util.TimeZone;
import java.util.jar.JarEntry;
@@ -81,7 +81,8 @@
* Get the set of options for the pack and unpack engines.
* @return A sorted association of option key strings to option values.
*/
- public SortedMap<String, String> properties() {
+ @SuppressWarnings("unchecked")
+ public SortedMap properties() {
return props;
}
@@ -225,9 +226,8 @@
props.setProperty(java.util.jar.Pack200.Unpacker.PROGRESS,"50");
pkg.ensureAllClassFiles();
// Now write out the files.
- HashSet<Package.Class> classesToWrite = new HashSet<>(pkg.getClasses());
- for (Iterator i = pkg.getFiles().iterator(); i.hasNext(); ) {
- Package.File file = (Package.File) i.next();
+ Set<Package.Class> classesToWrite = new HashSet<>(pkg.getClasses());
+ for (Package.File file : pkg.getFiles()) {
String name = file.nameString;
JarEntry je = new JarEntry(Utils.getJarEntryName(name));
boolean deflate;
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Utils.java Thu Jan 06 18:05:56 2011 -0800
@@ -297,7 +297,7 @@
(int)( (1.0 - ((double)ze.getCompressedSize()/(double)ze.getSize()))*100 )
: 0 ;
// Follow unzip -lv output
- return (long)ze.getSize() + "\t" + ze.getMethod()
+ return ze.getSize() + "\t" + ze.getMethod()
+ "\t" + ze.getCompressedSize() + "\t"
+ store + "%\t"
+ new Date(ze.getTime()) + "\t"
--- a/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/media/sound/DirectAudioDevice.java Thu Jan 06 18:05:56 2011 -0800
@@ -1393,8 +1393,11 @@
public void run() {
if (Printer.trace) Printer.trace(">>> DirectClip: run() threadID="+Thread.currentThread().getId());
while (thread != null) {
- if (!doIO) {
- synchronized(lock) {
+ // doIO is volatile, but we could check it, then get
+ // pre-empted while another thread changes doIO and notifies,
+ // before we wait (so we sleep in wait forever).
+ synchronized(lock) {
+ if (!doIO) {
try {
lock.wait();
} catch(InterruptedException ie) {}
--- a/jdk/src/share/classes/com/sun/script/javascript/RhinoScriptEngine.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/script/javascript/RhinoScriptEngine.java Thu Jan 06 18:05:56 2011 -0800
@@ -61,26 +61,43 @@
private ScriptEngineFactory factory;
private InterfaceImplementor implementor;
+ private static final int languageVersion = getLanguageVersion();
+ private static final int optimizationLevel = getOptimizationLevel();
static {
ContextFactory.initGlobal(new ContextFactory() {
protected Context makeContext() {
Context cx = super.makeContext();
+ cx.setLanguageVersion(languageVersion);
+ cx.setOptimizationLevel(optimizationLevel);
cx.setClassShutter(RhinoClassShutter.getInstance());
cx.setWrapFactory(RhinoWrapFactory.getInstance());
return cx;
}
-
- public boolean hasFeature(Context cx, int feature) {
- // we do not support E4X (ECMAScript for XML)!
- if (feature == Context.FEATURE_E4X) {
- return false;
- } else {
- return super.hasFeature(cx, feature);
- }
- }
});
}
+ private static final String RHINO_JS_VERSION = "rhino.js.version";
+ private static int getLanguageVersion() {
+ int version;
+ String tmp = java.security.AccessController.doPrivileged(
+ new sun.security.action.GetPropertyAction(RHINO_JS_VERSION));
+ if (tmp != null) {
+ version = Integer.parseInt((String)tmp);
+ } else {
+ version = Context.VERSION_1_8;
+ }
+ return version;
+ }
+
+ private static final String RHINO_OPT_LEVEL = "rhino.opt.level";
+ private static int getOptimizationLevel() {
+ int optLevel = -1;
+ // disable optimizer under security manager, for now.
+ if (System.getSecurityManager() == null) {
+ optLevel = Integer.getInteger(RHINO_OPT_LEVEL, -1);
+ }
+ return optLevel;
+ }
/**
* Creates a new instance of RhinoScriptEngine
@@ -333,6 +350,7 @@
return result instanceof Undefined ? null : result;
}
+ /*
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.out.println("No file specified");
@@ -347,4 +365,5 @@
engine.eval(r);
System.out.println(engine.get("x"));
}
+ */
}
--- a/jdk/src/share/classes/com/sun/script/javascript/RhinoScriptEngineFactory.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/script/javascript/RhinoScriptEngineFactory.java Thu Jan 06 18:05:56 2011 -0800
@@ -58,11 +58,11 @@
} else if (key.equals(ScriptEngine.ENGINE)) {
return "Mozilla Rhino";
} else if (key.equals(ScriptEngine.ENGINE_VERSION)) {
- return "1.6 release 2";
+ return "1.7 release 3 PRERELEASE";
} else if (key.equals(ScriptEngine.LANGUAGE)) {
return "ECMAScript";
} else if (key.equals(ScriptEngine.LANGUAGE_VERSION)) {
- return "1.6";
+ return "1.8";
} else if (key.equals("THREADING")) {
return "MULTITHREADED";
} else {
@@ -128,10 +128,12 @@
return ret;
}
+ /*
public static void main(String[] args) {
RhinoScriptEngineFactory fact = new RhinoScriptEngineFactory();
System.out.println(fact.getParameter(ScriptEngine.ENGINE_VERSION));
}
+ */
private static List<String> names;
private static List<String> mimeTypes;
--- a/jdk/src/share/classes/com/sun/script/javascript/RhinoTopLevel.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/script/javascript/RhinoTopLevel.java Thu Jan 06 18:05:56 2011 -0800
@@ -37,15 +37,6 @@
* @since 1.6
*/
public final class RhinoTopLevel extends ImporterTopLevel {
-
- // variables defined always to help Java access from JavaScript
- private static final String builtinVariables =
- "var com = Packages.com; \n" +
- "var edu = Packages.edu; \n" +
- "var javax = Packages.javax; \n" +
- "var net = Packages.net; \n" +
- "var org = Packages.org; \n";
-
RhinoTopLevel(Context cx, RhinoScriptEngine engine) {
super(cx);
this.engine = engine;
@@ -67,9 +58,6 @@
String names[] = { "bindings", "scope", "sync" };
defineFunctionProperties(names, RhinoTopLevel.class,
ScriptableObject.DONTENUM);
-
- // define built-in variables
- cx.evaluateString(this, builtinVariables, "<builtin>", 1, null);
}
/**
--- a/jdk/src/share/classes/com/sun/tools/script/shell/init.js Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/com/sun/tools/script/shell/init.js Thu Jan 06 18:05:56 2011 -0800
@@ -311,9 +311,9 @@
try {
engine.eval(reader);
} finally {
- engine.put(engine.FILENAME, oldFilename);
+ engine.put(engine.FILENAME, oldFilename);
+ streamClose(stream);
}
- streamClose(stream);
}
// file system utilities
--- a/jdk/src/share/classes/java/io/DeleteOnExitHook.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/DeleteOnExitHook.java Thu Jan 06 18:05:56 2011 -0800
@@ -34,7 +34,7 @@
*/
class DeleteOnExitHook {
- private static LinkedHashSet<String> files = new LinkedHashSet<String>();
+ private static LinkedHashSet<String> files = new LinkedHashSet<>();
static {
// DeleteOnExitHook must be the last shutdown hook to be invoked.
// Application shutdown hooks may add the first file to the
@@ -71,7 +71,7 @@
files = null;
}
- ArrayList<String> toBeDeleted = new ArrayList<String>(theFiles);
+ ArrayList<String> toBeDeleted = new ArrayList<>(theFiles);
// reverse the list to maintain previous jdk deletion order.
// Last in first deleted.
--- a/jdk/src/share/classes/java/io/File.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/File.java Thu Jan 06 18:05:56 2011 -0800
@@ -1067,7 +1067,7 @@
if ((names == null) || (filter == null)) {
return names;
}
- List<String> v = new ArrayList<String>();
+ List<String> v = new ArrayList<>();
for (int i = 0 ; i < names.length ; i++) {
if (filter.accept(this, names[i])) {
v.add(names[i]);
@@ -1158,7 +1158,7 @@
public File[] listFiles(FilenameFilter filter) {
String ss[] = list();
if (ss == null) return null;
- ArrayList<File> files = new ArrayList<File>();
+ ArrayList<File> files = new ArrayList<>();
for (String s : ss)
if ((filter == null) || filter.accept(this, s))
files.add(new File(s, this));
@@ -1195,7 +1195,7 @@
public File[] listFiles(FileFilter filter) {
String ss[] = list();
if (ss == null) return null;
- ArrayList<File> files = new ArrayList<File>();
+ ArrayList<File> files = new ArrayList<>();
for (String s : ss) {
File f = new File(s, this);
if ((filter == null) || filter.accept(f))
--- a/jdk/src/share/classes/java/io/FileInputStream.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/FileInputStream.java Thu Jan 06 18:05:56 2011 -0800
@@ -56,7 +56,7 @@
private volatile boolean closed = false;
private static final ThreadLocal<Boolean> runningFinalize =
- new ThreadLocal<Boolean>();
+ new ThreadLocal<>();
private static boolean isRunningFinalize() {
Boolean val;
--- a/jdk/src/share/classes/java/io/FileOutputStream.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/FileOutputStream.java Thu Jan 06 18:05:56 2011 -0800
@@ -69,7 +69,7 @@
private final Object closeLock = new Object();
private volatile boolean closed = false;
private static final ThreadLocal<Boolean> runningFinalize =
- new ThreadLocal<Boolean>();
+ new ThreadLocal<>();
private static boolean isRunningFinalize() {
Boolean val;
--- a/jdk/src/share/classes/java/io/FilePermission.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/FilePermission.java Thu Jan 06 18:05:56 2011 -0800
@@ -725,7 +725,7 @@
*/
public FilePermissionCollection() {
- perms = new ArrayList<Permission>();
+ perms = new ArrayList<>();
}
/**
@@ -830,7 +830,7 @@
// Don't call out.defaultWriteObject()
// Write out Vector
- Vector<Permission> permissions = new Vector<Permission>(perms.size());
+ Vector<Permission> permissions = new Vector<>(perms.size());
synchronized (this) {
permissions.addAll(perms);
}
@@ -853,7 +853,7 @@
// Get the one we want
Vector<Permission> permissions = (Vector<Permission>)gfields.get("permissions", null);
- perms = new ArrayList<Permission>(permissions.size());
+ perms = new ArrayList<>(permissions.size());
perms.addAll(permissions);
}
}
--- a/jdk/src/share/classes/java/io/ObjectInputStream.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/ObjectInputStream.java Thu Jan 06 18:05:56 2011 -0800
@@ -213,7 +213,7 @@
/** table mapping primitive type names to corresponding class objects */
private static final HashMap<String, Class<?>> primClasses
- = new HashMap<String, Class<?>>(8, 1.0F);
+ = new HashMap<>(8, 1.0F);
static {
primClasses.put("boolean", boolean.class);
primClasses.put("byte", byte.class);
@@ -229,11 +229,11 @@
private static class Caches {
/** cache of subclass security audit results */
static final ConcurrentMap<WeakClassKey,Boolean> subclassAudits =
- new ConcurrentHashMap<WeakClassKey,Boolean>();
+ new ConcurrentHashMap<>();
/** queue for WeakReferences to audited subclasses */
static final ReferenceQueue<Class<?>> subclassAuditsQueue =
- new ReferenceQueue<Class<?>>();
+ new ReferenceQueue<>();
}
/** filter stream for handling block data conversion */
--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Jan 06 18:05:56 2011 -0800
@@ -165,11 +165,11 @@
private static class Caches {
/** cache of subclass security audit results */
static final ConcurrentMap<WeakClassKey,Boolean> subclassAudits =
- new ConcurrentHashMap<WeakClassKey,Boolean>();
+ new ConcurrentHashMap<>();
/** queue for WeakReferences to audited subclasses */
static final ReferenceQueue<Class<?>> subclassAuditsQueue =
- new ReferenceQueue<Class<?>>();
+ new ReferenceQueue<>();
}
/** filter stream for handling block data conversion */
@@ -2413,7 +2413,7 @@
private final List<String> stack;
DebugTraceInfoStack() {
- stack = new ArrayList<String>();
+ stack = new ArrayList<>();
}
/**
--- a/jdk/src/share/classes/java/io/ObjectStreamClass.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/io/ObjectStreamClass.java Thu Jan 06 18:05:56 2011 -0800
@@ -84,18 +84,18 @@
private static class Caches {
/** cache mapping local classes -> descriptors */
static final ConcurrentMap<WeakClassKey,Reference<?>> localDescs =
- new ConcurrentHashMap<WeakClassKey,Reference<?>>();
+ new ConcurrentHashMap<>();
/** cache mapping field group/local desc pairs -> field reflectors */
static final ConcurrentMap<FieldReflectorKey,Reference<?>> reflectors =
- new ConcurrentHashMap<FieldReflectorKey,Reference<?>>();
+ new ConcurrentHashMap<>();
/** queue for WeakReferences to local classes */
private static final ReferenceQueue<Class<?>> localDescsQueue =
- new ReferenceQueue<Class<?>>();
+ new ReferenceQueue<>();
/** queue for WeakReferences to field reflectors keys */
private static final ReferenceQueue<Class<?>> reflectorsQueue =
- new ReferenceQueue<Class<?>>();
+ new ReferenceQueue<>();
}
/** class associated with this descriptor (if any) */
@@ -290,7 +290,7 @@
EntryFuture future = null;
if (entry == null) {
EntryFuture newEntry = new EntryFuture();
- Reference<?> newRef = new SoftReference<EntryFuture>(newEntry);
+ Reference<?> newRef = new SoftReference<>(newEntry);
do {
if (ref != null) {
Caches.localDescs.remove(key, ref);
@@ -329,7 +329,7 @@
entry = th;
}
if (future.set(entry)) {
- Caches.localDescs.put(key, new SoftReference<Object>(entry));
+ Caches.localDescs.put(key, new SoftReference<>(entry));
} else {
// nested lookup call already set future
entry = future.get();
@@ -1130,7 +1130,7 @@
private ClassDataSlot[] getClassDataLayout0()
throws InvalidClassException
{
- ArrayList<ClassDataSlot> slots = new ArrayList<ClassDataSlot>();
+ ArrayList<ClassDataSlot> slots = new ArrayList<>();
Class<?> start = cl, end = cl;
// locate closest non-serializable superclass
@@ -1566,7 +1566,7 @@
ObjectStreamField[] boundFields =
new ObjectStreamField[serialPersistentFields.length];
- Set<String> fieldNames = new HashSet<String>(serialPersistentFields.length);
+ Set<String> fieldNames = new HashSet<>(serialPersistentFields.length);
for (int i = 0; i < serialPersistentFields.length; i++) {
ObjectStreamField spf = serialPersistentFields[i];
@@ -1604,7 +1604,7 @@
*/
private static ObjectStreamField[] getDefaultSerialFields(Class<?> cl) {
Field[] clFields = cl.getDeclaredFields();
- ArrayList<ObjectStreamField> list = new ArrayList<ObjectStreamField>();
+ ArrayList<ObjectStreamField> list = new ArrayList<>();
int mask = Modifier.STATIC | Modifier.TRANSIENT;
for (int i = 0; i < clFields.length; i++) {
@@ -1855,8 +1855,8 @@
writeKeys = new long[nfields];
offsets = new int[nfields];
typeCodes = new char[nfields];
- ArrayList<Class<?>> typeList = new ArrayList<Class<?>>();
- Set<Long> usedKeys = new HashSet<Long>();
+ ArrayList<Class<?>> typeList = new ArrayList<>();
+ Set<Long> usedKeys = new HashSet<>();
for (int i = 0; i < nfields; i++) {
@@ -2092,7 +2092,7 @@
EntryFuture future = null;
if (entry == null) {
EntryFuture newEntry = new EntryFuture();
- Reference<?> newRef = new SoftReference<EntryFuture>(newEntry);
+ Reference<?> newRef = new SoftReference<>(newEntry);
do {
if (ref != null) {
Caches.reflectors.remove(key, ref);
@@ -2118,7 +2118,7 @@
entry = th;
}
future.set(entry);
- Caches.reflectors.put(key, new SoftReference<Object>(entry));
+ Caches.reflectors.put(key, new SoftReference<>(entry));
}
if (entry instanceof FieldReflector) {
--- a/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ApplicationShutdownHooks.java Thu Jan 06 18:05:56 2011 -0800
@@ -47,7 +47,7 @@
}
}
);
- hooks = new IdentityHashMap<Thread, Thread>();
+ hooks = new IdentityHashMap<>();
} catch (IllegalStateException e) {
// application shutdown hooks cannot be added if
// shutdown is in progress.
--- a/jdk/src/share/classes/java/lang/Character.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Character.java Thu Jan 06 18:05:56 2011 -0800
@@ -648,8 +648,7 @@
*/
public static final class UnicodeBlock extends Subset {
- private static Map<String, UnicodeBlock> map
- = new HashMap<String, UnicodeBlock>(256);
+ private static Map<String, UnicodeBlock> map = new HashMap<>(256);
/**
* Creates a UnicodeBlock with the given identifier name.
@@ -4178,7 +4177,7 @@
private static HashMap<String, Character.UnicodeScript> aliases;
static {
- aliases = new HashMap<String, UnicodeScript>(128);
+ aliases = new HashMap<>(128);
aliases.put("ARAB", ARABIC);
aliases.put("ARMI", IMPERIAL_ARAMAIC);
aliases.put("ARMN", ARMENIAN);
--- a/jdk/src/share/classes/java/lang/CharacterName.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/CharacterName.java Thu Jan 06 18:05:56 2011 -0800
@@ -81,7 +81,7 @@
} while (cpOff < cpEnd);
strPool = new byte[total - cpEnd];
dis.readFully(strPool);
- refStrPool = new SoftReference<byte[]>(strPool);
+ refStrPool = new SoftReference<>(strPool);
} catch (Exception x) {
throw new InternalError(x.getMessage());
} finally {
--- a/jdk/src/share/classes/java/lang/Class.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Class.java Thu Jan 06 18:05:56 2011 -0800
@@ -1306,7 +1306,7 @@
return java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction<Class<?>[]>() {
public Class[] run() {
- List<Class<?>> list = new ArrayList<Class<?>>();
+ List<Class<?>> list = new ArrayList<>();
Class<?> currentClass = Class.this;
while (currentClass != null) {
Class<?>[] members = currentClass.getDeclaredClasses();
@@ -2306,9 +2306,9 @@
res = Reflection.filterFields(this, getDeclaredFields0(publicOnly));
if (useCaches) {
if (publicOnly) {
- declaredPublicFields = new SoftReference<Field[]>(res);
+ declaredPublicFields = new SoftReference<>(res);
} else {
- declaredFields = new SoftReference<Field[]>(res);
+ declaredFields = new SoftReference<>(res);
}
}
return res;
@@ -2330,9 +2330,9 @@
// No cached value available; compute value recursively.
// Traverse in correct order for getField().
- List<Field> fields = new ArrayList<Field>();
+ List<Field> fields = new ArrayList<>();
if (traversedInterfaces == null) {
- traversedInterfaces = new HashSet<Class<?>>();
+ traversedInterfaces = new HashSet<>();
}
// Local fields
@@ -2358,7 +2358,7 @@
res = new Field[fields.size()];
fields.toArray(res);
if (useCaches) {
- publicFields = new SoftReference<Field[]>(res);
+ publicFields = new SoftReference<>(res);
}
return res;
}
@@ -2403,9 +2403,9 @@
}
if (useCaches) {
if (publicOnly) {
- publicConstructors = new SoftReference<Constructor<T>[]>(res);
+ publicConstructors = new SoftReference<>(res);
} else {
- declaredConstructors = new SoftReference<Constructor<T>[]>(res);
+ declaredConstructors = new SoftReference<>(res);
}
}
return res;
@@ -2440,9 +2440,9 @@
res = Reflection.filterMethods(this, getDeclaredMethods0(publicOnly));
if (useCaches) {
if (publicOnly) {
- declaredPublicMethods = new SoftReference<Method[]>(res);
+ declaredPublicMethods = new SoftReference<>(res);
} else {
- declaredMethods = new SoftReference<Method[]>(res);
+ declaredMethods = new SoftReference<>(res);
}
}
return res;
@@ -2598,7 +2598,7 @@
methods.compactAndTrim();
res = methods.getArray();
if (useCaches) {
- publicMethods = new SoftReference<Method[]>(res);
+ publicMethods = new SoftReference<>(res);
}
return res;
}
@@ -2977,7 +2977,7 @@
if (universe == null)
throw new IllegalArgumentException(
getName() + " is not an enum type");
- Map<String, T> m = new HashMap<String, T>(2 * universe.length);
+ Map<String, T> m = new HashMap<>(2 * universe.length);
for (T constant : universe)
m.put(((Enum<?>)constant).name(), constant);
enumConstantDirectory = m;
@@ -3090,7 +3090,7 @@
if (superClass == null) {
annotations = declaredAnnotations;
} else {
- annotations = new HashMap<Class<? extends Annotation>, Annotation>();
+ annotations = new HashMap<>();
superClass.initAnnotationsIfNecessary();
for (Map.Entry<Class<? extends Annotation>, Annotation> e : superClass.annotations.entrySet()) {
Class<? extends Annotation> annotationClass = e.getKey();
--- a/jdk/src/share/classes/java/lang/ClassLoader.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ClassLoader.java Thu Jan 06 18:05:56 2011 -0800
@@ -247,7 +247,7 @@
// The classes loaded by this class loader. The only purpose of this table
// is to keep the classes from being GC'ed until the loader is GC'ed.
- private final Vector<Class<?>> classes = new Vector<Class<?>>();
+ private final Vector<Class<?>> classes = new Vector<>();
// The "default" domain. Set as the default ProtectionDomain on newly
// created classes.
@@ -266,8 +266,7 @@
// The packages defined in this class loader. Each package name is mapped
// to its corresponding Package object.
// @GuardedBy("itself")
- private final HashMap<String, Package> packages =
- new HashMap<String, Package>();
+ private final HashMap<String, Package> packages = new HashMap<>();
private static Void checkCreateClassLoader() {
SecurityManager security = System.getSecurityManager();
@@ -280,16 +279,16 @@
private ClassLoader(Void unused, ClassLoader parent) {
this.parent = parent;
if (ParallelLoaders.isRegistered(this.getClass())) {
- parallelLockMap = new ConcurrentHashMap<String, Object>();
- package2certs = new ConcurrentHashMap<String, Certificate[]>();
+ parallelLockMap = new ConcurrentHashMap<>();
+ package2certs = new ConcurrentHashMap<>();
domains =
Collections.synchronizedSet(new HashSet<ProtectionDomain>());
assertionLock = new Object();
} else {
// no finer-grained lock; lock on the classloader instance
parallelLockMap = null;
- package2certs = new Hashtable<String, Certificate[]>();
- domains = new HashSet<ProtectionDomain>();
+ package2certs = new Hashtable<>();
+ domains = new HashSet<>();
assertionLock = this;
}
}
@@ -1182,7 +1181,7 @@
}
tmp[1] = findResources(name);
- return new CompoundEnumeration<URL>(tmp);
+ return new CompoundEnumeration<>(tmp);
}
/**
@@ -1657,7 +1656,7 @@
protected Package[] getPackages() {
Map<String, Package> map;
synchronized (packages) {
- map = new HashMap<String, Package>(packages);
+ map = new HashMap<>(packages);
}
Package[] pkgs;
if (parent != null) {
@@ -1764,20 +1763,17 @@
}
// All native library names we've loaded.
- private static Vector<String> loadedLibraryNames
- = new Vector<String>();
+ private static Vector<String> loadedLibraryNames = new Vector<>();
// Native libraries belonging to system classes.
private static Vector<NativeLibrary> systemNativeLibraries
- = new Vector<NativeLibrary>();
+ = new Vector<>();
// Native libraries associated with the class loader.
- private Vector<NativeLibrary> nativeLibraries
- = new Vector<NativeLibrary>();
+ private Vector<NativeLibrary> nativeLibraries = new Vector<>();
// native libraries being loaded/unloaded.
- private static Stack<NativeLibrary> nativeLibraryContext
- = new Stack<NativeLibrary>();
+ private static Stack<NativeLibrary> nativeLibraryContext = new Stack<>();
// The paths searched for libraries
private static String usr_paths[];
@@ -2101,8 +2097,8 @@
* them to empty maps, effectively ignoring any present settings.
*/
synchronized (assertionLock) {
- classAssertionStatus = new HashMap<String, Boolean>();
- packageAssertionStatus = new HashMap<String, Boolean>();
+ classAssertionStatus = new HashMap<>();
+ packageAssertionStatus = new HashMap<>();
defaultAssertionStatus = false;
}
}
@@ -2164,8 +2160,8 @@
private void initializeJavaAssertionMaps() {
// assert Thread.holdsLock(assertionLock);
- classAssertionStatus = new HashMap<String, Boolean>();
- packageAssertionStatus = new HashMap<String, Boolean>();
+ classAssertionStatus = new HashMap<>();
+ packageAssertionStatus = new HashMap<>();
AssertionStatusDirectives directives = retrieveDirectives();
for(int i = 0; i < directives.classes.length; i++)
--- a/jdk/src/share/classes/java/lang/Package.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Package.java Thu Jan 06 18:05:56 2011 -0800
@@ -588,16 +588,13 @@
}
// The map of loaded system packages
- private static Map<String, Package> pkgs
- = new HashMap<String, Package>(31);
+ private static Map<String, Package> pkgs = new HashMap<>(31);
// Maps each directory or zip file name to its corresponding url
- private static Map<String, URL> urls
- = new HashMap<String, URL>(10);
+ private static Map<String, URL> urls = new HashMap<>(10);
// Maps each code source url for a jar file to its manifest
- private static Map<String, Manifest> mans
- = new HashMap<String, Manifest>(10);
+ private static Map<String, Manifest> mans = new HashMap<>(10);
private static native String getSystemPackage0(String name);
private static native String[] getSystemPackages0();
--- a/jdk/src/share/classes/java/lang/ProcessBuilder.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/ProcessBuilder.java Thu Jan 06 18:05:56 2011 -0800
@@ -214,7 +214,7 @@
* @param command a string array containing the program and its arguments
*/
public ProcessBuilder(String... command) {
- this.command = new ArrayList<String>(command.length);
+ this.command = new ArrayList<>(command.length);
for (String arg : command)
this.command.add(arg);
}
@@ -251,7 +251,7 @@
* @return this process builder
*/
public ProcessBuilder command(String... command) {
- this.command = new ArrayList<String>(command.length);
+ this.command = new ArrayList<>(command.length);
for (String arg : command)
this.command.add(arg);
return this;
--- a/jdk/src/share/classes/java/lang/String.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/String.java Thu Jan 06 18:05:56 2011 -0800
@@ -2330,7 +2330,7 @@
int off = 0;
int next = 0;
boolean limited = limit > 0;
- ArrayList<String> list = new ArrayList<String>();
+ ArrayList<String> list = new ArrayList<>();
while ((next = indexOf(ch, off)) != -1) {
if (!limited || list.size() < limit - 1) {
list.add(substring(off, next));
--- a/jdk/src/share/classes/java/lang/StringCoding.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/StringCoding.java Thu Jan 06 18:05:56 2011 -0800
@@ -53,9 +53,9 @@
/** The cached coders for each thread */
private final static ThreadLocal<SoftReference<StringDecoder>> decoder =
- new ThreadLocal<SoftReference<StringDecoder>>();
+ new ThreadLocal<>();
private final static ThreadLocal<SoftReference<StringEncoder>> encoder =
- new ThreadLocal<SoftReference<StringEncoder>>();
+ new ThreadLocal<>();
private static boolean warnUnsupportedCharset = true;
@@ -67,7 +67,7 @@
}
private static <T> void set(ThreadLocal<SoftReference<T>> tl, T ob) {
- tl.set(new SoftReference<T>(ob));
+ tl.set(new SoftReference<>(ob));
}
// Trim the given byte array to the given length
--- a/jdk/src/share/classes/java/lang/Thread.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Thread.java Thu Jan 06 18:05:56 2011 -0800
@@ -1642,8 +1642,7 @@
// Get a snapshot of the list of all threads
Thread[] threads = getThreads();
StackTraceElement[][] traces = dumpThreads(threads);
- Map<Thread, StackTraceElement[]> m
- = new HashMap<Thread, StackTraceElement[]>(threads.length);
+ Map<Thread, StackTraceElement[]> m = new HashMap<>(threads.length);
for (int i = 0; i < threads.length; i++) {
StackTraceElement[] stackTrace = traces[i];
if (stackTrace != null) {
@@ -1664,11 +1663,11 @@
private static class Caches {
/** cache of subclass security audit results */
static final ConcurrentMap<WeakClassKey,Boolean> subclassAudits =
- new ConcurrentHashMap<WeakClassKey,Boolean>();
+ new ConcurrentHashMap<>();
/** queue for WeakReferences to audited subclasses */
static final ReferenceQueue<Class<?>> subclassAuditsQueue =
- new ReferenceQueue<Class<?>>();
+ new ReferenceQueue<>();
}
/**
--- a/jdk/src/share/classes/java/lang/Throwable.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/Throwable.java Thu Jan 06 18:05:56 2011 -0800
@@ -828,7 +828,7 @@
// Use the sentinel for a zero-length list
suppressed = SUPPRESSED_SENTINEL;
} else { // Copy Throwables to new list
- suppressed = new ArrayList<Throwable>(1);
+ suppressed = new ArrayList<>(1);
for (Throwable t : suppressedExceptions) {
// Enforce constraints on suppressed exceptions in
// case of corrupt or malicious stream.
@@ -911,7 +911,7 @@
return;
if (suppressedExceptions == SUPPRESSED_SENTINEL)
- suppressedExceptions = new ArrayList<Throwable>(1);
+ suppressedExceptions = new ArrayList<>(1);
assert suppressedExceptions != SUPPRESSED_SENTINEL;
--- a/jdk/src/share/classes/java/lang/management/ManagementFactory.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/management/ManagementFactory.java Thu Jan 06 18:05:56 2011 -0800
@@ -794,7 +794,7 @@
*/
public static List<Class<? extends PlatformManagedObject>> getAllPlatformMXBeanInterfaces() {
List<Class<? extends PlatformManagedObject>> result =
- new ArrayList<Class<? extends PlatformManagedObject>>();
+ new ArrayList<>();
for (PlatformComponent component: PlatformComponent.values()) {
result.add(component.getMXBeanInterface());
}
--- a/jdk/src/share/classes/java/lang/management/PlatformComponent.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/management/PlatformComponent.java Thu Jan 06 18:05:56 2011 -0800
@@ -267,7 +267,7 @@
List<T> getGcMXBeanList(Class<T> gcMXBeanIntf) {
List<GarbageCollectorMXBean> list =
ManagementFactoryHelper.getGarbageCollectorMXBeans();
- List<T> result = new ArrayList<T>(list.size());
+ List<T> result = new ArrayList<>(list.size());
for (GarbageCollectorMXBean m : list) {
if (gcMXBeanIntf.isInstance(m)) {
result.add(gcMXBeanIntf.cast(m));
@@ -330,7 +330,7 @@
}
private static Set<String> keyProperties(String... keyNames) {
- Set<String> set = new HashSet<String>();
+ Set<String> set = new HashSet<>();
set.add("type");
for (String s : keyNames) {
set.add(s);
@@ -364,7 +364,7 @@
List<T> getMXBeans(MBeanServerConnection mbs, Class<T> mxbeanInterface)
throws java.io.IOException
{
- List<T> result = new ArrayList<T>();
+ List<T> result = new ArrayList<>();
for (ObjectName on : getObjectNames(mbs)) {
result.add(ManagementFactory.
newPlatformMXBeanProxy(mbs,
--- a/jdk/src/share/classes/java/lang/reflect/Constructor.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/Constructor.java Thu Jan 06 18:05:56 2011 -0800
@@ -144,7 +144,7 @@
// which implicitly requires that new java.lang.reflect
// objects be fabricated for each reflective call on Class
// objects.)
- Constructor<T> res = new Constructor<T>(clazz,
+ Constructor<T> res = new Constructor<>(clazz,
parameterTypes,
exceptionTypes, modifiers, slot,
signature,
--- a/jdk/src/share/classes/java/lang/reflect/Proxy.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/Proxy.java Thu Jan 06 18:05:56 2011 -0800
@@ -232,7 +232,7 @@
/** maps a class loader to the proxy class cache for that loader */
private static Map<ClassLoader, Map<List<String>, Object>> loaderToCache
- = new WeakHashMap<ClassLoader, Map<List<String>, Object>>();
+ = new WeakHashMap<>();
/** marks that a particular proxy class is currently being generated */
private static Object pendingGenerationMarker = new Object();
@@ -356,7 +356,7 @@
String[] interfaceNames = new String[interfaces.length];
// for detecting duplicates
- Set<Class<?>> interfaceSet = new HashSet<Class<?>>();
+ Set<Class<?>> interfaceSet = new HashSet<>();
for (int i = 0; i < interfaces.length; i++) {
/*
@@ -413,7 +413,7 @@
synchronized (loaderToCache) {
cache = loaderToCache.get(loader);
if (cache == null) {
- cache = new HashMap<List<String>, Object>();
+ cache = new HashMap<>();
loaderToCache.put(loader, cache);
}
/*
--- a/jdk/src/share/classes/java/lang/reflect/ReflectAccess.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/lang/reflect/ReflectAccess.java Thu Jan 06 18:05:56 2011 -0800
@@ -84,7 +84,7 @@
byte[] annotations,
byte[] parameterAnnotations)
{
- return new Constructor<T>(declaringClass,
+ return new Constructor<>(declaringClass,
parameterTypes,
checkedExceptions,
modifiers,
--- a/jdk/src/share/classes/java/sql/DriverManager.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/sql/DriverManager.java Thu Jan 06 18:05:56 2011 -0800
@@ -364,7 +364,7 @@
* @return the list of JDBC Drivers loaded by the caller's class loader
*/
public static java.util.Enumeration<Driver> getDrivers() {
- java.util.Vector<Driver> result = new java.util.Vector<Driver>();
+ java.util.Vector<Driver> result = new java.util.Vector<>();
java.util.Vector drivers = null;
if (!initialized) {
--- a/jdk/src/share/classes/java/sql/Statement.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/sql/Statement.java Thu Jan 06 18:05:56 2011 -0800
@@ -577,7 +577,7 @@
*
* @see #addBatch
* @see DatabaseMetaData#supportsBatchUpdates
- * @since 1.3
+ * @since 1.2
*/
int[] executeBatch() throws SQLException;
--- a/jdk/src/share/classes/java/util/AbstractList.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/AbstractList.java Thu Jan 06 18:05:56 2011 -0800
@@ -482,8 +482,8 @@
*/
public List<E> subList(int fromIndex, int toIndex) {
return (this instanceof RandomAccess ?
- new RandomAccessSubList<E>(this, fromIndex, toIndex) :
- new SubList<E>(this, fromIndex, toIndex));
+ new RandomAccessSubList<>(this, fromIndex, toIndex) :
+ new SubList<>(this, fromIndex, toIndex));
}
// Comparison and hashing
@@ -747,7 +747,7 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new SubList<E>(this, fromIndex, toIndex);
+ return new SubList<>(this, fromIndex, toIndex);
}
private void rangeCheck(int index) {
@@ -776,6 +776,6 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new RandomAccessSubList<E>(this, fromIndex, toIndex);
+ return new RandomAccessSubList<>(this, fromIndex, toIndex);
}
}
--- a/jdk/src/share/classes/java/util/Arrays.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/Arrays.java Thu Jan 06 18:05:56 2011 -0800
@@ -2824,7 +2824,7 @@
* @return a list view of the specified array
*/
public static <T> List<T> asList(T... a) {
- return new ArrayList<T>(a);
+ return new ArrayList<>(a);
}
/**
--- a/jdk/src/share/classes/java/util/Collections.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/Collections.java Thu Jan 06 18:05:56 2011 -0800
@@ -1035,7 +1035,7 @@
* @return an unmodifiable view of the specified collection.
*/
public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) {
- return new UnmodifiableCollection<T>(c);
+ return new UnmodifiableCollection<>(c);
}
/**
@@ -1109,7 +1109,7 @@
* @return an unmodifiable view of the specified set.
*/
public static <T> Set<T> unmodifiableSet(Set<? extends T> s) {
- return new UnmodifiableSet<T>(s);
+ return new UnmodifiableSet<>(s);
}
/**
@@ -1141,7 +1141,7 @@
* @return an unmodifiable view of the specified sorted set.
*/
public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s) {
- return new UnmodifiableSortedSet<T>(s);
+ return new UnmodifiableSortedSet<>(s);
}
/**
@@ -1158,13 +1158,13 @@
public Comparator<? super E> comparator() {return ss.comparator();}
public SortedSet<E> subSet(E fromElement, E toElement) {
- return new UnmodifiableSortedSet<E>(ss.subSet(fromElement,toElement));
+ return new UnmodifiableSortedSet<>(ss.subSet(fromElement,toElement));
}
public SortedSet<E> headSet(E toElement) {
- return new UnmodifiableSortedSet<E>(ss.headSet(toElement));
+ return new UnmodifiableSortedSet<>(ss.headSet(toElement));
}
public SortedSet<E> tailSet(E fromElement) {
- return new UnmodifiableSortedSet<E>(ss.tailSet(fromElement));
+ return new UnmodifiableSortedSet<>(ss.tailSet(fromElement));
}
public E first() {return ss.first();}
@@ -1188,8 +1188,8 @@
*/
public static <T> List<T> unmodifiableList(List<? extends T> list) {
return (list instanceof RandomAccess ?
- new UnmodifiableRandomAccessList<T>(list) :
- new UnmodifiableList<T>(list));
+ new UnmodifiableRandomAccessList<>(list) :
+ new UnmodifiableList<>(list));
}
/**
@@ -1250,7 +1250,7 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new UnmodifiableList<E>(list.subList(fromIndex, toIndex));
+ return new UnmodifiableList<>(list.subList(fromIndex, toIndex));
}
/**
@@ -1267,7 +1267,7 @@
*/
private Object readResolve() {
return (list instanceof RandomAccess
- ? new UnmodifiableRandomAccessList<E>(list)
+ ? new UnmodifiableRandomAccessList<>(list)
: this);
}
}
@@ -1283,7 +1283,7 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new UnmodifiableRandomAccessList<E>(
+ return new UnmodifiableRandomAccessList<>(
list.subList(fromIndex, toIndex));
}
@@ -1296,7 +1296,7 @@
* deserialization.
*/
private Object writeReplace() {
- return new UnmodifiableList<E>(list);
+ return new UnmodifiableList<>(list);
}
}
@@ -1315,7 +1315,7 @@
* @return an unmodifiable view of the specified map.
*/
public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m) {
- return new UnmodifiableMap<K,V>(m);
+ return new UnmodifiableMap<>(m);
}
/**
@@ -1363,7 +1363,7 @@
public Set<Map.Entry<K,V>> entrySet() {
if (entrySet==null)
- entrySet = new UnmodifiableEntrySet<K,V>(m.entrySet());
+ entrySet = new UnmodifiableEntrySet<>(m.entrySet());
return entrySet;
}
@@ -1400,7 +1400,7 @@
return i.hasNext();
}
public Map.Entry<K,V> next() {
- return new UnmodifiableEntry<K,V>(i.next());
+ return new UnmodifiableEntry<>(i.next());
}
public void remove() {
throw new UnsupportedOperationException();
@@ -1411,7 +1411,7 @@
public Object[] toArray() {
Object[] a = c.toArray();
for (int i=0; i<a.length; i++)
- a[i] = new UnmodifiableEntry<K,V>((Map.Entry<K,V>)a[i]);
+ a[i] = new UnmodifiableEntry<>((Map.Entry<K,V>)a[i]);
return a;
}
@@ -1422,7 +1422,7 @@
Object[] arr = c.toArray(a.length==0 ? a : Arrays.copyOf(a, 0));
for (int i=0; i<arr.length; i++)
- arr[i] = new UnmodifiableEntry<K,V>((Map.Entry<K,V>)arr[i]);
+ arr[i] = new UnmodifiableEntry<>((Map.Entry<K,V>)arr[i]);
if (arr.length > a.length)
return (T[])arr;
@@ -1443,7 +1443,7 @@
if (!(o instanceof Map.Entry))
return false;
return c.contains(
- new UnmodifiableEntry<Object,Object>((Map.Entry<?,?>) o));
+ new UnmodifiableEntry<>((Map.Entry<?,?>) o));
}
/**
@@ -1517,7 +1517,7 @@
* @return an unmodifiable view of the specified sorted map.
*/
public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K, ? extends V> m) {
- return new UnmodifiableSortedMap<K,V>(m);
+ return new UnmodifiableSortedMap<>(m);
}
/**
@@ -1535,13 +1535,13 @@
public Comparator<? super K> comparator() {return sm.comparator();}
public SortedMap<K,V> subMap(K fromKey, K toKey) {
- return new UnmodifiableSortedMap<K,V>(sm.subMap(fromKey, toKey));
+ return new UnmodifiableSortedMap<>(sm.subMap(fromKey, toKey));
}
public SortedMap<K,V> headMap(K toKey) {
- return new UnmodifiableSortedMap<K,V>(sm.headMap(toKey));
+ return new UnmodifiableSortedMap<>(sm.headMap(toKey));
}
public SortedMap<K,V> tailMap(K fromKey) {
- return new UnmodifiableSortedMap<K,V>(sm.tailMap(fromKey));
+ return new UnmodifiableSortedMap<>(sm.tailMap(fromKey));
}
public K firstKey() {return sm.firstKey();}
@@ -1583,11 +1583,11 @@
* @return a synchronized view of the specified collection.
*/
public static <T> Collection<T> synchronizedCollection(Collection<T> c) {
- return new SynchronizedCollection<T>(c);
+ return new SynchronizedCollection<>(c);
}
static <T> Collection<T> synchronizedCollection(Collection<T> c, Object mutex) {
- return new SynchronizedCollection<T>(c, mutex);
+ return new SynchronizedCollection<>(c, mutex);
}
/**
@@ -1686,11 +1686,11 @@
* @return a synchronized view of the specified set.
*/
public static <T> Set<T> synchronizedSet(Set<T> s) {
- return new SynchronizedSet<T>(s);
+ return new SynchronizedSet<>(s);
}
static <T> Set<T> synchronizedSet(Set<T> s, Object mutex) {
- return new SynchronizedSet<T>(s, mutex);
+ return new SynchronizedSet<>(s, mutex);
}
/**
@@ -1754,7 +1754,7 @@
* @return a synchronized view of the specified sorted set.
*/
public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s) {
- return new SynchronizedSortedSet<T>(s);
+ return new SynchronizedSortedSet<>(s);
}
/**
@@ -1783,18 +1783,18 @@
public SortedSet<E> subSet(E fromElement, E toElement) {
synchronized (mutex) {
- return new SynchronizedSortedSet<E>(
+ return new SynchronizedSortedSet<>(
ss.subSet(fromElement, toElement), mutex);
}
}
public SortedSet<E> headSet(E toElement) {
synchronized (mutex) {
- return new SynchronizedSortedSet<E>(ss.headSet(toElement), mutex);
+ return new SynchronizedSortedSet<>(ss.headSet(toElement), mutex);
}
}
public SortedSet<E> tailSet(E fromElement) {
synchronized (mutex) {
- return new SynchronizedSortedSet<E>(ss.tailSet(fromElement),mutex);
+ return new SynchronizedSortedSet<>(ss.tailSet(fromElement),mutex);
}
}
@@ -1833,14 +1833,14 @@
*/
public static <T> List<T> synchronizedList(List<T> list) {
return (list instanceof RandomAccess ?
- new SynchronizedRandomAccessList<T>(list) :
- new SynchronizedList<T>(list));
+ new SynchronizedRandomAccessList<>(list) :
+ new SynchronizedList<>(list));
}
static <T> List<T> synchronizedList(List<T> list, Object mutex) {
return (list instanceof RandomAccess ?
- new SynchronizedRandomAccessList<T>(list, mutex) :
- new SynchronizedList<T>(list, mutex));
+ new SynchronizedRandomAccessList<>(list, mutex) :
+ new SynchronizedList<>(list, mutex));
}
/**
@@ -1903,7 +1903,7 @@
public List<E> subList(int fromIndex, int toIndex) {
synchronized (mutex) {
- return new SynchronizedList<E>(list.subList(fromIndex, toIndex),
+ return new SynchronizedList<>(list.subList(fromIndex, toIndex),
mutex);
}
}
@@ -1922,7 +1922,7 @@
*/
private Object readResolve() {
return (list instanceof RandomAccess
- ? new SynchronizedRandomAccessList<E>(list)
+ ? new SynchronizedRandomAccessList<>(list)
: this);
}
}
@@ -1944,7 +1944,7 @@
public List<E> subList(int fromIndex, int toIndex) {
synchronized (mutex) {
- return new SynchronizedRandomAccessList<E>(
+ return new SynchronizedRandomAccessList<>(
list.subList(fromIndex, toIndex), mutex);
}
}
@@ -1958,7 +1958,7 @@
* deserialization.
*/
private Object writeReplace() {
- return new SynchronizedList<E>(list);
+ return new SynchronizedList<>(list);
}
}
@@ -1990,7 +1990,7 @@
* @return a synchronized view of the specified map.
*/
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
- return new SynchronizedMap<K,V>(m);
+ return new SynchronizedMap<>(m);
}
/**
@@ -2051,7 +2051,7 @@
public Set<K> keySet() {
synchronized (mutex) {
if (keySet==null)
- keySet = new SynchronizedSet<K>(m.keySet(), mutex);
+ keySet = new SynchronizedSet<>(m.keySet(), mutex);
return keySet;
}
}
@@ -2059,7 +2059,7 @@
public Set<Map.Entry<K,V>> entrySet() {
synchronized (mutex) {
if (entrySet==null)
- entrySet = new SynchronizedSet<Map.Entry<K,V>>(m.entrySet(), mutex);
+ entrySet = new SynchronizedSet<>(m.entrySet(), mutex);
return entrySet;
}
}
@@ -2067,7 +2067,7 @@
public Collection<V> values() {
synchronized (mutex) {
if (values==null)
- values = new SynchronizedCollection<V>(m.values(), mutex);
+ values = new SynchronizedCollection<>(m.values(), mutex);
return values;
}
}
@@ -2129,7 +2129,7 @@
* @return a synchronized view of the specified sorted map.
*/
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m) {
- return new SynchronizedSortedMap<K,V>(m);
+ return new SynchronizedSortedMap<>(m);
}
@@ -2159,18 +2159,18 @@
public SortedMap<K,V> subMap(K fromKey, K toKey) {
synchronized (mutex) {
- return new SynchronizedSortedMap<K,V>(
+ return new SynchronizedSortedMap<>(
sm.subMap(fromKey, toKey), mutex);
}
}
public SortedMap<K,V> headMap(K toKey) {
synchronized (mutex) {
- return new SynchronizedSortedMap<K,V>(sm.headMap(toKey), mutex);
+ return new SynchronizedSortedMap<>(sm.headMap(toKey), mutex);
}
}
public SortedMap<K,V> tailMap(K fromKey) {
synchronized (mutex) {
- return new SynchronizedSortedMap<K,V>(sm.tailMap(fromKey),mutex);
+ return new SynchronizedSortedMap<>(sm.tailMap(fromKey),mutex);
}
}
@@ -2246,7 +2246,7 @@
*/
public static <E> Collection<E> checkedCollection(Collection<E> c,
Class<E> type) {
- return new CheckedCollection<E>(c, type);
+ return new CheckedCollection<>(c, type);
}
@SuppressWarnings("unchecked")
@@ -2378,7 +2378,7 @@
* @since 1.5
*/
public static <E> Set<E> checkedSet(Set<E> s, Class<E> type) {
- return new CheckedSet<E>(s, type);
+ return new CheckedSet<>(s, type);
}
/**
@@ -2424,7 +2424,7 @@
*/
public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s,
Class<E> type) {
- return new CheckedSortedSet<E>(s, type);
+ return new CheckedSortedSet<>(s, type);
}
/**
@@ -2484,8 +2484,8 @@
*/
public static <E> List<E> checkedList(List<E> list, Class<E> type) {
return (list instanceof RandomAccess ?
- new CheckedRandomAccessList<E>(list, type) :
- new CheckedList<E>(list, type));
+ new CheckedRandomAccessList<>(list, type) :
+ new CheckedList<>(list, type));
}
/**
@@ -2550,7 +2550,7 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new CheckedList<E>(list.subList(fromIndex, toIndex), type);
+ return new CheckedList<>(list.subList(fromIndex, toIndex), type);
}
}
@@ -2567,7 +2567,7 @@
}
public List<E> subList(int fromIndex, int toIndex) {
- return new CheckedRandomAccessList<E>(
+ return new CheckedRandomAccessList<>(
list.subList(fromIndex, toIndex), type);
}
}
@@ -2609,7 +2609,7 @@
public static <K, V> Map<K, V> checkedMap(Map<K, V> m,
Class<K> keyType,
Class<V> valueType) {
- return new CheckedMap<K,V>(m, keyType, valueType);
+ return new CheckedMap<>(m, keyType, valueType);
}
@@ -2677,15 +2677,14 @@
// - protection from malicious t
// - correct behavior if t is a concurrent map
Object[] entries = t.entrySet().toArray();
- List<Map.Entry<K,V>> checked =
- new ArrayList<Map.Entry<K,V>>(entries.length);
+ List<Map.Entry<K,V>> checked = new ArrayList<>(entries.length);
for (Object o : entries) {
Map.Entry<?,?> e = (Map.Entry<?,?>) o;
Object k = e.getKey();
Object v = e.getValue();
typeCheck(k, v);
checked.add(
- new AbstractMap.SimpleImmutableEntry<K,V>((K) k, (V) v));
+ new AbstractMap.SimpleImmutableEntry<>((K) k, (V) v));
}
for (Map.Entry<K,V> e : checked)
m.put(e.getKey(), e.getValue());
@@ -2695,7 +2694,7 @@
public Set<Map.Entry<K,V>> entrySet() {
if (entrySet==null)
- entrySet = new CheckedEntrySet<K,V>(m.entrySet(), valueType);
+ entrySet = new CheckedEntrySet<>(m.entrySet(), valueType);
return entrySet;
}
@@ -2810,7 +2809,7 @@
if (!(o instanceof Map.Entry))
return false;
return s.remove(new AbstractMap.SimpleImmutableEntry
- <Object, Object>((Map.Entry<?,?>)o));
+ <>((Map.Entry<?,?>)o));
}
public boolean removeAll(Collection<?> c) {
@@ -2843,7 +2842,7 @@
static <K,V,T> CheckedEntry<K,V,T> checkedEntry(Map.Entry<K,V> e,
Class<T> valueType) {
- return new CheckedEntry<K,V,T>(e, valueType);
+ return new CheckedEntry<>(e, valueType);
}
/**
@@ -2884,7 +2883,7 @@
if (!(o instanceof Map.Entry))
return false;
return e.equals(new AbstractMap.SimpleImmutableEntry
- <Object, Object>((Map.Entry<?,?>)o));
+ <>((Map.Entry<?,?>)o));
}
}
}
@@ -2927,7 +2926,7 @@
public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K, V> m,
Class<K> keyType,
Class<V> valueType) {
- return new CheckedSortedMap<K,V>(m, keyType, valueType);
+ return new CheckedSortedMap<>(m, keyType, valueType);
}
/**
@@ -2993,7 +2992,7 @@
private static class EmptyIterator<E> implements Iterator<E> {
static final EmptyIterator<Object> EMPTY_ITERATOR
- = new EmptyIterator<Object>();
+ = new EmptyIterator<>();
public boolean hasNext() { return false; }
public E next() { throw new NoSuchElementException(); }
@@ -3042,7 +3041,7 @@
implements ListIterator<E>
{
static final EmptyListIterator<Object> EMPTY_ITERATOR
- = new EmptyListIterator<Object>();
+ = new EmptyListIterator<>();
public boolean hasPrevious() { return false; }
public E previous() { throw new NoSuchElementException(); }
@@ -3078,7 +3077,7 @@
private static class EmptyEnumeration<E> implements Enumeration<E> {
static final EmptyEnumeration<Object> EMPTY_ENUMERATION
- = new EmptyEnumeration<Object>();
+ = new EmptyEnumeration<>();
public boolean hasMoreElements() { return false; }
public E nextElement() { throw new NoSuchElementException(); }
@@ -3090,7 +3089,7 @@
* @see #emptySet()
*/
@SuppressWarnings("unchecked")
- public static final Set EMPTY_SET = new EmptySet<Object>();
+ public static final Set EMPTY_SET = new EmptySet<>();
/**
* Returns the empty set (immutable). This set is serializable.
@@ -3150,7 +3149,7 @@
* @see #emptyList()
*/
@SuppressWarnings("unchecked")
- public static final List EMPTY_LIST = new EmptyList<Object>();
+ public static final List EMPTY_LIST = new EmptyList<>();
/**
* Returns the empty list (immutable). This list is serializable.
@@ -3224,7 +3223,7 @@
* @since 1.3
*/
@SuppressWarnings("unchecked")
- public static final Map EMPTY_MAP = new EmptyMap<Object,Object>();
+ public static final Map EMPTY_MAP = new EmptyMap<>();
/**
* Returns the empty map (immutable). This map is serializable.
@@ -3286,7 +3285,7 @@
* @return an immutable set containing only the specified object.
*/
public static <T> Set<T> singleton(T o) {
- return new SingletonSet<T>(o);
+ return new SingletonSet<>(o);
}
static <E> Iterator<E> singletonIterator(final E e) {
@@ -3339,7 +3338,7 @@
* @since 1.3
*/
public static <T> List<T> singletonList(T o) {
- return new SingletonList<T>(o);
+ return new SingletonList<>(o);
}
/**
@@ -3381,7 +3380,7 @@
* @since 1.3
*/
public static <K,V> Map<K,V> singletonMap(K key, V value) {
- return new SingletonMap<K,V>(key, value);
+ return new SingletonMap<>(key, value);
}
/**
@@ -3423,7 +3422,7 @@
public Set<Map.Entry<K,V>> entrySet() {
if (entrySet==null)
entrySet = Collections.<Map.Entry<K,V>>singleton(
- new SimpleImmutableEntry<K,V>(k, v));
+ new SimpleImmutableEntry<>(k, v));
return entrySet;
}
@@ -3455,7 +3454,7 @@
public static <T> List<T> nCopies(int n, T o) {
if (n < 0)
throw new IllegalArgumentException("List length = " + n);
- return new CopiesList<T>(n, o);
+ return new CopiesList<>(n, o);
}
/**
@@ -3529,7 +3528,7 @@
if (fromIndex > toIndex)
throw new IllegalArgumentException("fromIndex(" + fromIndex +
") > toIndex(" + toIndex + ")");
- return new CopiesList<E>(toIndex - fromIndex, element);
+ return new CopiesList<>(toIndex - fromIndex, element);
}
}
@@ -3595,7 +3594,7 @@
if (cmp instanceof ReverseComparator2)
return ((ReverseComparator2<T>)cmp).cmp;
- return new ReverseComparator2<T>(cmp);
+ return new ReverseComparator2<>(cmp);
}
/**
@@ -3674,7 +3673,7 @@
* @see ArrayList
*/
public static <T> ArrayList<T> list(Enumeration<T> e) {
- ArrayList<T> l = new ArrayList<T>();
+ ArrayList<T> l = new ArrayList<>();
while (e.hasMoreElements())
l.add(e.nextElement());
return l;
@@ -3819,7 +3818,7 @@
* @since 1.6
*/
public static <E> Set<E> newSetFromMap(Map<E, Boolean> map) {
- return new SetFromMap<E>(map);
+ return new SetFromMap<>(map);
}
/**
@@ -3883,7 +3882,7 @@
* @since 1.6
*/
public static <T> Queue<T> asLifoQueue(Deque<T> deque) {
- return new AsLIFOQueue<T>(deque);
+ return new AsLIFOQueue<>(deque);
}
/**
--- a/jdk/src/share/classes/java/util/EnumMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/EnumMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -499,7 +499,7 @@
int j = 0;
for (int i = 0; i < vals.length; i++)
if (vals[i] != null)
- a[j++] = new AbstractMap.SimpleEntry<K,V>(
+ a[j++] = new AbstractMap.SimpleEntry<>(
keyUniverse[i], unmaskNull(vals[i]));
return a;
}
--- a/jdk/src/share/classes/java/util/EnumSet.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/EnumSet.java Thu Jan 06 18:05:56 2011 -0800
@@ -110,9 +110,9 @@
throw new ClassCastException(elementType + " not an enum");
if (universe.length <= 64)
- return new RegularEnumSet<E>(elementType, universe);
+ return new RegularEnumSet<>(elementType, universe);
else
- return new JumboEnumSet<E>(elementType, universe);
+ return new JumboEnumSet<>(elementType, universe);
}
/**
@@ -430,7 +430,7 @@
}
Object writeReplace() {
- return new SerializationProxy<E>(this);
+ return new SerializationProxy<>(this);
}
// readObject method for the serialization proxy pattern
--- a/jdk/src/share/classes/java/util/Formatter.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/Formatter.java Thu Jan 06 18:05:56 2011 -0800
@@ -2490,7 +2490,7 @@
* Finds format specifiers in the format string.
*/
private FormatString[] parse(String s) {
- ArrayList<FormatString> al = new ArrayList<FormatString>();
+ ArrayList<FormatString> al = new ArrayList<>();
Matcher m = fsPattern.matcher(s);
for (int i = 0, len = s.length(); i < len; ) {
if (m.find(i)) {
--- a/jdk/src/share/classes/java/util/HashMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/HashMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -763,7 +763,7 @@
*/
void addEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
- table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
+ table[bucketIndex] = new Entry<>(hash, key, value, e);
if (size++ >= threshold)
resize(2 * table.length);
}
@@ -778,7 +778,7 @@
*/
void createEntry(int hash, K key, V value, int bucketIndex) {
Entry<K,V> e = table[bucketIndex];
- table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
+ table[bucketIndex] = new Entry<>(hash, key, value, e);
size++;
}
--- a/jdk/src/share/classes/java/util/HashSet.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/HashSet.java Thu Jan 06 18:05:56 2011 -0800
@@ -100,7 +100,7 @@
* default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
- map = new HashMap<E,Object>();
+ map = new HashMap<>();
}
/**
@@ -113,7 +113,7 @@
* @throws NullPointerException if the specified collection is null
*/
public HashSet(Collection<? extends E> c) {
- map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
+ map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
@@ -127,7 +127,7 @@
* than zero, or if the load factor is nonpositive
*/
public HashSet(int initialCapacity, float loadFactor) {
- map = new HashMap<E,Object>(initialCapacity, loadFactor);
+ map = new HashMap<>(initialCapacity, loadFactor);
}
/**
@@ -139,7 +139,7 @@
* than zero
*/
public HashSet(int initialCapacity) {
- map = new HashMap<E,Object>(initialCapacity);
+ map = new HashMap<>(initialCapacity);
}
/**
@@ -156,7 +156,7 @@
* than zero, or if the load factor is nonpositive
*/
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
- map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
+ map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
/**
--- a/jdk/src/share/classes/java/util/Hashtable.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/Hashtable.java Thu Jan 06 18:05:56 2011 -0800
@@ -455,7 +455,7 @@
// Creates the new entry.
Entry<K,V> e = tab[index];
- tab[index] = new Entry<K,V>(hash, key, value, e);
+ tab[index] = new Entry<>(hash, key, value, e);
count++;
return null;
}
@@ -579,7 +579,7 @@
if (count == 0) {
return Collections.emptyEnumeration();
} else {
- return new Enumerator<T>(type, false);
+ return new Enumerator<>(type, false);
}
}
@@ -587,7 +587,7 @@
if (count == 0) {
return Collections.emptyIterator();
} else {
- return new Enumerator<T>(type, true);
+ return new Enumerator<>(type, true);
}
}
@@ -929,7 +929,7 @@
}
// Creates the new entry.
Entry<K,V> e = tab[index];
- tab[index] = new Entry<K,V>(hash, key, value, e);
+ tab[index] = new Entry<>(hash, key, value, e);
count++;
}
@@ -950,7 +950,7 @@
}
protected Object clone() {
- return new Entry<K,V>(hash, key, value,
+ return new Entry<>(hash, key, value,
(next==null ? null : (Entry<K,V>) next.clone()));
}
--- a/jdk/src/share/classes/java/util/IdentityHashMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/IdentityHashMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -1134,7 +1134,7 @@
Object[] result = new Object[size];
Iterator<Map.Entry<K,V>> it = iterator();
for (int i = 0; i < size; i++)
- result[i] = new AbstractMap.SimpleEntry<K,V>(it.next());
+ result[i] = new AbstractMap.SimpleEntry<>(it.next());
return result;
}
@@ -1146,7 +1146,7 @@
.newInstance(a.getClass().getComponentType(), size);
Iterator<Map.Entry<K,V>> it = iterator();
for (int i = 0; i < size; i++)
- a[i] = (T) new AbstractMap.SimpleEntry<K,V>(it.next());
+ a[i] = (T) new AbstractMap.SimpleEntry<>(it.next());
if (a.length > size)
a[size] = null;
return a;
--- a/jdk/src/share/classes/java/util/JumboEnumSet.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/JumboEnumSet.java Thu Jan 06 18:05:56 2011 -0800
@@ -89,7 +89,7 @@
* @return an iterator over the elements contained in this set
*/
public Iterator<E> iterator() {
- return new EnumSetIterator<E>();
+ return new EnumSetIterator<>();
}
private class EnumSetIterator<E extends Enum<E>> implements Iterator<E> {
--- a/jdk/src/share/classes/java/util/LinkedHashMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/LinkedHashMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -237,7 +237,7 @@
* the chain.
*/
void init() {
- header = new Entry<K,V>(-1, null, null, null);
+ header = new Entry<>(-1, null, null, null);
header.before = header.after = header;
}
@@ -438,7 +438,7 @@
*/
void createEntry(int hash, K key, V value, int bucketIndex) {
HashMap.Entry<K,V> old = table[bucketIndex];
- Entry<K,V> e = new Entry<K,V>(hash, key, value, old);
+ Entry<K,V> e = new Entry<>(hash, key, value, old);
table[bucketIndex] = e;
e.addBefore(header);
size++;
--- a/jdk/src/share/classes/java/util/LinkedList.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/LinkedList.java Thu Jan 06 18:05:56 2011 -0800
@@ -122,7 +122,7 @@
*/
private void linkFirst(E e) {
final Node<E> f = first;
- final Node<E> newNode = new Node<E>(null, e, f);
+ final Node<E> newNode = new Node<>(null, e, f);
first = newNode;
if (f == null)
last = newNode;
@@ -137,7 +137,7 @@
*/
void linkLast(E e) {
final Node<E> l = last;
- final Node<E> newNode = new Node<E>(l, e, null);
+ final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
@@ -153,7 +153,7 @@
void linkBefore(E e, Node<E> succ) {
// assert succ != null;
final Node<E> pred = succ.prev;
- final Node<E> newNode = new Node<E>(pred, e, succ);
+ final Node<E> newNode = new Node<>(pred, e, succ);
succ.prev = newNode;
if (pred == null)
first = newNode;
@@ -419,7 +419,7 @@
for (Object o : a) {
@SuppressWarnings("unchecked") E e = (E) o;
- Node<E> newNode = new Node<E>(pred, e, null);
+ Node<E> newNode = new Node<>(pred, e, null);
if (pred == null)
first = newNode;
else
--- a/jdk/src/share/classes/java/util/ListResourceBundle.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/ListResourceBundle.java Thu Jan 06 18:05:56 2011 -0800
@@ -187,7 +187,7 @@
return;
Object[][] contents = getContents();
- HashMap<String,Object> temp = new HashMap<String,Object>(contents.length);
+ HashMap<String,Object> temp = new HashMap<>(contents.length);
for (int i = 0; i < contents.length; ++i) {
// key must be non-null String, value must be non-null
String key = (String) contents[i][0];
--- a/jdk/src/share/classes/java/util/PriorityQueue.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/PriorityQueue.java Thu Jan 06 18:05:56 2011 -0800
@@ -538,7 +538,7 @@
cursor--;
else {
if (forgetMeNot == null)
- forgetMeNot = new ArrayDeque<E>();
+ forgetMeNot = new ArrayDeque<>();
forgetMeNot.add(moved);
}
} else if (lastRetElt != null) {
--- a/jdk/src/share/classes/java/util/Properties.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/Properties.java Thu Jan 06 18:05:56 2011 -0800
@@ -1011,7 +1011,7 @@
* @since 1.6
*/
public Set<String> stringPropertyNames() {
- Hashtable<String, String> h = new Hashtable<String, String>();
+ Hashtable<String, String> h = new Hashtable<>();
enumerateStringProperties(h);
return h.keySet();
}
--- a/jdk/src/share/classes/java/util/RegularEnumSet.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/RegularEnumSet.java Thu Jan 06 18:05:56 2011 -0800
@@ -71,7 +71,7 @@
* @return an iterator over the elements contained in this set
*/
public Iterator<E> iterator() {
- return new EnumSetIterator<E>();
+ return new EnumSetIterator<>();
}
private class EnumSetIterator<E extends Enum<E>> implements Iterator<E> {
--- a/jdk/src/share/classes/java/util/ServiceLoader.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/ServiceLoader.java Thu Jan 06 18:05:56 2011 -0800
@@ -191,7 +191,7 @@
private ClassLoader loader;
// Cached providers, in instantiation order
- private LinkedHashMap<String,S> providers = new LinkedHashMap<String,S>();
+ private LinkedHashMap<String,S> providers = new LinkedHashMap<>();
// The current lazy-lookup iterator
private LazyIterator lookupIterator;
@@ -291,7 +291,7 @@
{
InputStream in = null;
BufferedReader r = null;
- ArrayList<String> names = new ArrayList<String>();
+ ArrayList<String> names = new ArrayList<>();
try {
in = u.openStream();
r = new BufferedReader(new InputStreamReader(in, "utf-8"));
@@ -463,7 +463,7 @@
public static <S> ServiceLoader<S> load(Class<S> service,
ClassLoader loader)
{
- return new ServiceLoader<S>(service, loader);
+ return new ServiceLoader<>(service, loader);
}
/**
--- a/jdk/src/share/classes/java/util/TimSort.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/TimSort.java Thu Jan 06 18:05:56 2011 -0800
@@ -196,7 +196,7 @@
* extending short natural runs to minRun elements, and merging runs
* to maintain stack invariant.
*/
- TimSort<T> ts = new TimSort<T>(a, c);
+ TimSort<T> ts = new TimSort<>(a, c);
int minRun = minRunLength(nRemaining);
do {
// Identify next run
--- a/jdk/src/share/classes/java/util/TreeMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/TreeMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -533,7 +533,7 @@
// throw NullPointerException
//
// compare(key, key); // type check
- root = new Entry<K,V>(key, value, null);
+ root = new Entry<>(key, value, null);
size = 1;
modCount++;
return null;
@@ -569,7 +569,7 @@
return t.setValue(value);
} while (t != null);
}
- Entry<K,V> e = new Entry<K,V>(key, value, parent);
+ Entry<K,V> e = new Entry<>(key, value, parent);
if (cmp < 0)
parent.left = e;
else
@@ -1069,14 +1069,14 @@
}
public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive) {
- return new KeySet<E>(m.subMap(fromElement, fromInclusive,
+ return new KeySet<>(m.subMap(fromElement, fromInclusive,
toElement, toInclusive));
}
public NavigableSet<E> headSet(E toElement, boolean inclusive) {
- return new KeySet<E>(m.headMap(toElement, inclusive));
+ return new KeySet<>(m.headMap(toElement, inclusive));
}
public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
- return new KeySet<E>(m.tailMap(fromElement, inclusive));
+ return new KeySet<>(m.tailMap(fromElement, inclusive));
}
public SortedSet<E> subSet(E fromElement, E toElement) {
return subSet(fromElement, true, toElement, false);
@@ -1205,7 +1205,7 @@
*/
static <K,V> Map.Entry<K,V> exportEntry(TreeMap.Entry<K,V> e) {
return (e == null) ? null :
- new AbstractMap.SimpleImmutableEntry<K,V>(e);
+ new AbstractMap.SimpleImmutableEntry<>(e);
}
/**
@@ -2406,7 +2406,7 @@
value = (defaultVal != null ? defaultVal : (V) str.readObject());
}
- Entry<K,V> middle = new Entry<K,V>(key, value, null);
+ Entry<K,V> middle = new Entry<>(key, value, null);
// color nodes in non-full bottommost level red
if (level == redLevel)
--- a/jdk/src/share/classes/java/util/TreeSet.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/TreeSet.java Thu Jan 06 18:05:56 2011 -0800
@@ -138,7 +138,7 @@
* ordering} of the elements will be used.
*/
public TreeSet(Comparator<? super E> comparator) {
- this(new TreeMap<E,Object>(comparator));
+ this(new TreeMap<>(comparator));
}
/**
@@ -195,7 +195,7 @@
* @since 1.6
*/
public NavigableSet<E> descendingSet() {
- return new TreeSet<E>(m.descendingMap());
+ return new TreeSet<>(m.descendingMap());
}
/**
@@ -322,7 +322,7 @@
*/
public NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
E toElement, boolean toInclusive) {
- return new TreeSet<E>(m.subMap(fromElement, fromInclusive,
+ return new TreeSet<>(m.subMap(fromElement, fromInclusive,
toElement, toInclusive));
}
@@ -335,7 +335,7 @@
* @since 1.6
*/
public NavigableSet<E> headSet(E toElement, boolean inclusive) {
- return new TreeSet<E>(m.headMap(toElement, inclusive));
+ return new TreeSet<>(m.headMap(toElement, inclusive));
}
/**
@@ -347,7 +347,7 @@
* @since 1.6
*/
public NavigableSet<E> tailSet(E fromElement, boolean inclusive) {
- return new TreeSet<E>(m.tailMap(fromElement, inclusive));
+ return new TreeSet<>(m.tailMap(fromElement, inclusive));
}
/**
@@ -477,7 +477,7 @@
throw new InternalError();
}
- clone.m = new TreeMap<E,Object>(m);
+ clone.m = new TreeMap<>(m);
return clone;
}
@@ -524,9 +524,9 @@
// Create backing TreeMap
TreeMap<E,Object> tm;
if (c==null)
- tm = new TreeMap<E,Object>();
+ tm = new TreeMap<>();
else
- tm = new TreeMap<E,Object>(c);
+ tm = new TreeMap<>(c);
m = tm;
// Read in size
--- a/jdk/src/share/classes/java/util/WeakHashMap.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/WeakHashMap.java Thu Jan 06 18:05:56 2011 -0800
@@ -171,7 +171,7 @@
/**
* Reference queue for cleared WeakEntries
*/
- private final ReferenceQueue<Object> queue = new ReferenceQueue<Object>();
+ private final ReferenceQueue<Object> queue = new ReferenceQueue<>();
/**
* The number of times this WeakHashMap has been structurally modified.
@@ -439,7 +439,7 @@
modCount++;
Entry<K,V> e = tab[i];
- tab[i] = new Entry<K,V>(k, value, queue, h, e);
+ tab[i] = new Entry<>(k, value, queue, h, e);
if (++size >= threshold)
resize(tab.length * 2);
return null;
@@ -955,10 +955,9 @@
}
private List<Map.Entry<K,V>> deepCopy() {
- List<Map.Entry<K,V>> list =
- new ArrayList<Map.Entry<K,V>>(size());
+ List<Map.Entry<K,V>> list = new ArrayList<>(size());
for (Map.Entry<K,V> e : this)
- list.add(new AbstractMap.SimpleEntry<K,V>(e));
+ list.add(new AbstractMap.SimpleEntry<>(e));
return list;
}
--- a/jdk/src/share/classes/java/util/jar/Pack200.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/jar/Pack200.java Thu Jan 06 18:05:56 2011 -0800
@@ -732,14 +732,14 @@
private synchronized static Object newInstance(String prop) {
String implName = "(unknown)";
try {
- Class impl = (prop == PACK_PROVIDER)? packerImpl: unpackerImpl;
+ Class impl = (PACK_PROVIDER.equals(prop))? packerImpl: unpackerImpl;
if (impl == null) {
// The first time, we must decide which class to use.
implName = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction(prop,""));
if (implName != null && !implName.equals(""))
impl = Class.forName(implName);
- else if (prop == PACK_PROVIDER)
+ else if (PACK_PROVIDER.equals(prop))
impl = com.sun.java.util.jar.pack.PackerImpl.class;
else
impl = com.sun.java.util.jar.pack.UnpackerImpl.class;
--- a/jdk/src/share/classes/java/util/logging/FileHandler.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/FileHandler.java Thu Jan 06 18:05:56 2011 -0800
@@ -127,7 +127,7 @@
private FileOutputStream lockStream;
private File files[];
private static final int MAX_LOCKS = 100;
- private static java.util.HashMap<String, String> locks = new java.util.HashMap<String, String>();
+ private static java.util.HashMap<String, String> locks = new java.util.HashMap<>();
// A metered stream is a subclass of OutputStream that
// (a) forwards all its output to a target stream
--- a/jdk/src/share/classes/java/util/logging/Level.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/Level.java Thu Jan 06 18:05:56 2011 -0800
@@ -59,7 +59,7 @@
*/
public class Level implements java.io.Serializable {
- private static java.util.ArrayList<Level> known = new java.util.ArrayList<Level>();
+ private static java.util.ArrayList<Level> known = new java.util.ArrayList<>();
private static String defaultBundle = "sun.util.logging.resources.logging";
/**
--- a/jdk/src/share/classes/java/util/logging/LogManager.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/LogManager.java Thu Jan 06 18:05:56 2011 -0800
@@ -156,8 +156,7 @@
private final static Level defaultLevel = Level.INFO;
// Table of named Loggers that maps names to Loggers.
- private Hashtable<String,LoggerWeakRef> namedLoggers =
- new Hashtable<String,LoggerWeakRef>();
+ private Hashtable<String,LoggerWeakRef> namedLoggers = new Hashtable<>();
// Tree of named Loggers
private LogNode root = new LogNode(null);
private Logger rootLogger;
@@ -422,7 +421,7 @@
// loggerRefQueue holds LoggerWeakRef objects for Logger objects
// that have been GC'ed.
private final ReferenceQueue<Logger> loggerRefQueue
- = new ReferenceQueue<Logger>();
+ = new ReferenceQueue<>();
// Package-level inner class.
// Helper class for managing WeakReferences to Logger objects.
@@ -672,7 +671,7 @@
name = "";
}
if (node.children == null) {
- node.children = new HashMap<String,LogNode>();
+ node.children = new HashMap<>();
}
LogNode child = node.children.get(head);
if (child == null) {
@@ -856,7 +855,7 @@
}
hands = hands.trim();
int ix = 0;
- Vector<String> result = new Vector<String>();
+ Vector<String> result = new Vector<>();
while (ix < hands.length()) {
int end = ix;
while (end < hands.length()) {
--- a/jdk/src/share/classes/java/util/logging/LogRecord.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/LogRecord.java Thu Jan 06 18:05:56 2011 -0800
@@ -85,8 +85,7 @@
private static final AtomicInteger nextThreadId
= new AtomicInteger(MIN_SEQUENTIAL_THREAD_ID);
- private static final ThreadLocal<Integer> threadIds
- = new ThreadLocal<Integer>();
+ private static final ThreadLocal<Integer> threadIds = new ThreadLocal<>();
/**
* @serial Logging message level
--- a/jdk/src/share/classes/java/util/logging/Logger.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/Logger.java Thu Jan 06 18:05:56 2011 -0800
@@ -170,7 +170,7 @@
private LogManager manager;
private String name;
private final CopyOnWriteArrayList<Handler> handlers =
- new CopyOnWriteArrayList<Handler>();
+ new CopyOnWriteArrayList<>();
private String resourceBundleName;
private volatile boolean useParentHandlers = true;
private volatile Filter filter;
@@ -1420,13 +1420,13 @@
// Set our new parent.
parent = newParent;
if (parent.kids == null) {
- parent.kids = new ArrayList<LogManager.LoggerWeakRef>(2);
+ parent.kids = new ArrayList<>(2);
}
if (ref == null) {
// we didn't have a previous parent
ref = manager.new LoggerWeakRef(this);
}
- ref.setParentRef(new WeakReference<Logger>(parent));
+ ref.setParentRef(new WeakReference<>(parent));
parent.kids.add(ref);
// As a result of the reparenting, the effective level
--- a/jdk/src/share/classes/java/util/logging/Logging.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/logging/Logging.java Thu Jan 06 18:05:56 2011 -0800
@@ -56,7 +56,7 @@
public List<String> getLoggerNames() {
Enumeration loggers = logManager.getLoggerNames();
- ArrayList<String> array = new ArrayList<String>();
+ ArrayList<String> array = new ArrayList<>();
for (; loggers.hasMoreElements();) {
array.add((String) loggers.nextElement());
--- a/jdk/src/share/classes/java/util/prefs/AbstractPreferences.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/prefs/AbstractPreferences.java Thu Jan 06 18:05:56 2011 -0800
@@ -155,8 +155,7 @@
* All known unremoved children of this node. (This "cache" is consulted
* prior to calling childSpi() or getChild().
*/
- private Map<String, AbstractPreferences> kidCache
- = new HashMap<String, AbstractPreferences>();
+ private Map<String, AbstractPreferences> kidCache = new HashMap<>();
/**
* This field is used to keep track of whether or not this node has
@@ -713,7 +712,7 @@
if (removed)
throw new IllegalStateException("Node has been removed.");
- Set<String> s = new TreeSet<String>(kidCache.keySet());
+ Set<String> s = new TreeSet<>(kidCache.keySet());
for (String kid : childrenNamesSpi())
s.add(kid);
return s.toArray(EMPTY_STRING_ARRAY);
@@ -1442,8 +1441,7 @@
* event delivery from preference activity, greatly simplifying
* locking and reducing opportunity for deadlock.
*/
- private static final List<EventObject> eventQueue
- = new LinkedList<EventObject>();
+ private static final List<EventObject> eventQueue = new LinkedList<>();
/**
* These two classes are used to distinguish NodeChangeEvents on
--- a/jdk/src/share/classes/java/util/regex/Pattern.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/regex/Pattern.java Thu Jan 06 18:05:56 2011 -0800
@@ -1068,7 +1068,7 @@
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0;
- ArrayList<String> matchList = new ArrayList<String>();
+ ArrayList<String> matchList = new ArrayList<>();
Matcher m = matcher(input);
// Add segments before each match found
@@ -1566,7 +1566,7 @@
Map<String, Integer> namedGroups() {
if (namedGroups == null)
- namedGroups = new HashMap<String, Integer>(2);
+ namedGroups = new HashMap<>(2);
return namedGroups;
}
@@ -5309,7 +5309,7 @@
}
private static final HashMap<String, CharPropertyFactory> map
- = new HashMap<String, CharPropertyFactory>();
+ = new HashMap<>();
static {
// Unicode character property aliases, defined in
--- a/jdk/src/share/classes/java/util/zip/Inflater.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/zip/Inflater.java Thu Jan 06 18:05:56 2011 -0800
@@ -382,6 +382,12 @@
throw new NullPointerException("Inflater has been closed");
}
+ boolean ended() {
+ synchronized (zsRef) {
+ return zsRef.address() == 0;
+ }
+ }
+
private native static void initIDs();
private native static long init(boolean nowrap);
private native static void setDictionary(long addr, byte[] b, int off,
--- a/jdk/src/share/classes/java/util/zip/ZipFile.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/zip/ZipFile.java Thu Jan 06 18:05:56 2011 -0800
@@ -424,6 +424,8 @@
*/
private void releaseInflater(Inflater inf) {
synchronized (inflaters) {
+ if (inf.ended())
+ return;
inf.reset();
inflaters.add(inf);
}
@@ -543,7 +545,7 @@
if (streams.size() !=0) {
Set<InputStream> copy = streams;
- streams = new HashSet<InputStream>();
+ streams = new HashSet<>();
for (InputStream is: copy)
is.close();
}
--- a/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Thu Jan 06 18:05:56 2011 -0800
@@ -52,8 +52,8 @@
}
private XEntry current;
- private Vector<XEntry> xentries = new Vector<XEntry>();
- private HashSet<String> names = new HashSet<String>();
+ private Vector<XEntry> xentries = new Vector<>();
+ private HashSet<String> names = new HashSet<>();
private CRC32 crc = new CRC32();
private long written = 0;
private long locoff = 0;
--- a/jdk/src/share/classes/javax/net/ssl/X509ExtendedTrustManager.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/javax/net/ssl/X509ExtendedTrustManager.java Thu Jan 06 18:05:56 2011 -0800
@@ -63,7 +63,7 @@
* should be "RSA". Checking is case-sensitive.
* <p>
* If the <code>socket</code> parameter is an instance of
- * {@link javax.net.SSLSocket}, and the endpoint identification
+ * {@link javax.net.ssl.SSLSocket}, and the endpoint identification
* algorithm of the <code>SSLParameters</code> is non-empty, to prevent
* man-in-the-middle attacks, the address that the <code>socket</code>
* connected to should be checked against the peer's identity presented
@@ -71,7 +71,7 @@
* identification algorithm.
* <p>
* If the <code>socket</code> parameter is an instance of
- * {@link javax.net.SSLSocket}, and the algorithm constraints of the
+ * {@link javax.net.ssl.SSLSocket}, and the algorithm constraints of the
* <code>SSLParameters</code> is non-null, for every certificate in the
* certification path, fields such as subject public key, the signature
* algorithm, key usage, extended key usage, etc. need to conform to the
@@ -88,8 +88,8 @@
* @throws CertificateException if the certificate chain is not trusted
* by this TrustManager
*
- * @see SSLParameters#getEndpointIdentificationProtocol
- * @see SSLParameters#setEndpointIdentificationProtocol(String)
+ * @see SSLParameters#getEndpointIdentificationAlgorithm
+ * @see SSLParameters#setEndpointIdentificationAlgorithm(String)
* @see SSLParameters#getAlgorithmConstraints
* @see SSLParameters#setAlgorithmConstraints(AlgorithmConstraints)
*/
@@ -111,7 +111,7 @@
* certificate is used. Checking is case-sensitive.
* <p>
* If the <code>socket</code> parameter is an instance of
- * {@link javax.net.SSLSocket}, and the endpoint identification
+ * {@link javax.net.ssl.SSLSocket}, and the endpoint identification
* algorithm of the <code>SSLParameters</code> is non-empty, to prevent
* man-in-the-middle attacks, the address that the <code>socket</code>
* connected to should be checked against the peer's identity presented
@@ -119,7 +119,7 @@
* identification algorithm.
* <p>
* If the <code>socket</code> parameter is an instance of
- * {@link javax.net.SSLSocket}, and the algorithm constraints of the
+ * {@link javax.net.ssl.SSLSocket}, and the algorithm constraints of the
* <code>SSLParameters</code> is non-null, for every certificate in the
* certification path, fields such as subject public key, the signature
* algorithm, key usage, extended key usage, etc. need to conform to the
@@ -136,8 +136,8 @@
* @throws CertificateException if the certificate chain is not trusted
* by this TrustManager
*
- * @see SSLParameters#getEndpointIdentificationProtocol
- * @see SSLParameters#setEndpointIdentificationProtocol(String)
+ * @see SSLParameters#getEndpointIdentificationAlgorithm
+ * @see SSLParameters#setEndpointIdentificationAlgorithm(String)
* @see SSLParameters#getAlgorithmConstraints
* @see SSLParameters#setAlgorithmConstraints(AlgorithmConstraints)
*/
@@ -177,8 +177,8 @@
* @throws CertificateException if the certificate chain is not trusted
* by this TrustManager
*
- * @see SSLParameters#getEndpointIdentificationProtocol
- * @see SSLParameters#setEndpointIdentificationProtocol(String)
+ * @see SSLParameters#getEndpointIdentificationAlgorithm
+ * @see SSLParameters#setEndpointIdentificationAlgorithm(String)
* @see SSLParameters#getAlgorithmConstraints
* @see SSLParameters#setAlgorithmConstraints(AlgorithmConstraints)
*/
@@ -223,8 +223,8 @@
* @throws CertificateException if the certificate chain is not trusted
* by this TrustManager
*
- * @see SSLParameters#getEndpointIdentificationProtocol
- * @see SSLParameters#setEndpointIdentificationProtocol(String)
+ * @see SSLParameters#getEndpointIdentificationAlgorithm
+ * @see SSLParameters#setEndpointIdentificationAlgorithm(String)
* @see SSLParameters#getAlgorithmConstraints
* @see SSLParameters#setAlgorithmConstraints(AlgorithmConstraints)
*/
--- a/jdk/src/share/classes/sun/io/Converters.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/io/Converters.java Thu Jan 06 18:05:56 2011 -0800
@@ -120,7 +120,7 @@
private static Class<?> cache(int type, Object encoding, Class<?> c) {
SoftReference<Object[]>[] srs = classCache[type];
- srs[CACHE_SIZE - 1] = new SoftReference<Object[]>(new Object[] { c, encoding });
+ srs[CACHE_SIZE - 1] = new SoftReference<>(new Object[] { c, encoding });
moveToFront(srs, CACHE_SIZE - 1);
return c;
}
--- a/jdk/src/share/classes/sun/launcher/LauncherHelper.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/launcher/LauncherHelper.java Thu Jan 06 18:05:56 2011 -0800
@@ -45,15 +45,18 @@
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
-import java.math.MathContext;
import java.math.RoundingMode;
import java.util.ResourceBundle;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.util.Locale.Category;
import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
@@ -73,11 +76,6 @@
private static final String PROP_SETTINGS = "Property settings:";
private static final String LOCALE_SETTINGS = "Locale settings:";
- private static final long K = 1024;
- private static final long M = K * K;
- private static final long G = M * K;
- private static final long T = G * K;
-
private static synchronized ResourceBundle getLauncherResourceBundle() {
if (javarb == null) {
javarb = ResourceBundle.getBundle(defaultBundleName);
@@ -96,14 +94,20 @@
* optionFlag: specifies which options to print default is all other
* possible values are vm, properties, locale.
*
+ * initialHeapSize: in bytes, as set by the launcher, a zero-value indicates
+ * this code should determine this value, using a suitable method or
+ * the line could be omitted.
+ *
* maxHeapSize: in bytes, as set by the launcher, a zero-value indicates
* this code should determine this value, using a suitable method.
*
* stackSize: in bytes, as set by the launcher, a zero-value indicates
- * this code determine this value, using a suitable method.
+ * this code determine this value, using a suitable method or omit the
+ * line entirely.
*/
static void showSettings(boolean printToStderr, String optionFlag,
- long maxHeapSize, long stackSize, boolean isServer) {
+ long initialHeapSize, long maxHeapSize, long stackSize,
+ boolean isServer) {
PrintStream ostream = (printToStderr) ? System.err : System.out;
String opts[] = optionFlag.split(":");
@@ -112,7 +116,8 @@
: "all";
switch (optStr) {
case "vm":
- printVmSettings(ostream, maxHeapSize, stackSize, isServer);
+ printVmSettings(ostream, initialHeapSize, maxHeapSize,
+ stackSize, isServer);
break;
case "properties":
printProperties(ostream);
@@ -121,7 +126,8 @@
printLocale(ostream);
break;
default:
- printVmSettings(ostream, maxHeapSize, stackSize, isServer);
+ printVmSettings(ostream, initialHeapSize, maxHeapSize,
+ stackSize, isServer);
printProperties(ostream);
printLocale(ostream);
break;
@@ -131,18 +137,25 @@
/*
* prints the main vm settings subopt/section
*/
- private static void printVmSettings(PrintStream ostream, long maxHeapSize,
+ private static void printVmSettings(PrintStream ostream,
+ long initialHeapSize, long maxHeapSize,
long stackSize, boolean isServer) {
ostream.println(VM_SETTINGS);
if (stackSize != 0L) {
- ostream.println(INDENT + "Stack Size: " + scaleValue(stackSize));
+ ostream.println(INDENT + "Stack Size: " +
+ SizePrefix.scaleValue(stackSize));
+ }
+ if (initialHeapSize != 0L) {
+ ostream.println(INDENT + "Min. Heap Size: " +
+ SizePrefix.scaleValue(initialHeapSize));
}
if (maxHeapSize != 0L) {
- ostream.println(INDENT + "Max. Heap Size: " + scaleValue(maxHeapSize));
+ ostream.println(INDENT + "Max. Heap Size: " +
+ SizePrefix.scaleValue(maxHeapSize));
} else {
ostream.println(INDENT + "Max. Heap Size (Estimated): "
- + scaleValue(Runtime.getRuntime().maxMemory()));
+ + SizePrefix.scaleValue(Runtime.getRuntime().maxMemory()));
}
ostream.println(INDENT + "Ergonomics Machine Class: "
+ ((isServer) ? "server" : "client"));
@@ -152,28 +165,6 @@
}
/*
- * scale the incoming values to a human readable form, represented as
- * K, M, G and T, see java.c parse_size for the scaled values and
- * suffixes.
- */
-
- private static String scaleValue(double v) {
- MathContext mc2 = new MathContext(3, RoundingMode.HALF_EVEN);
-
- if (v >= K && v < M) {
- return (new BigDecimal(v / K, mc2)).toPlainString() + "K";
- } else if (v >= M && v < G) {
- return (new BigDecimal(v / M, mc2)).toPlainString() + "M";
- } else if (v >= G && v < T) {
- return (new BigDecimal(v / G, mc2)).toPlainString() + "G";
- } else if (v >= T) {
- return (new BigDecimal(v / T, mc2)).toPlainString() + "T";
- } else {
- return String.format("%.0f", v);
- }
- }
-
- /*
* prints the properties subopt/section
*/
private static void printProperties(PrintStream ostream) {
@@ -196,16 +187,17 @@
String key, String value) {
ostream.print(INDENT + key + " = ");
if (key.equals("line.separator")) {
- byte[] bytes = value.getBytes();
- for (byte b : bytes) {
+ for (byte b : value.getBytes()) {
switch (b) {
case 0xd:
- ostream.print("CR ");
+ ostream.print("\\r ");
break;
case 0xa:
- ostream.print("LF ");
+ ostream.print("\\n ");
break;
default:
+ // print any bizzare line separators in hex, but really
+ // shouldn't happen.
ostream.printf("0x%02X", b & 0xff);
break;
}
@@ -217,15 +209,14 @@
ostream.println(value);
return;
}
- // pretty print the path values as a list
String[] values = value.split(System.getProperty("path.separator"));
- int len = values.length;
- for (int i = 0 ; i < len ; i++) {
- if (i == 0) { // first line treated specially
- ostream.println(values[i]);
+ boolean first = true;
+ for (String s : values) {
+ if (first) { // first line treated specially
+ ostream.println(s);
+ first = false;
} else { // following lines prefix with indents
- ostream.print(INDENT + INDENT);
- ostream.println(values[i]);
+ ostream.println(INDENT + INDENT + s);
}
}
}
@@ -236,21 +227,35 @@
private static void printLocale(PrintStream ostream) {
Locale locale = Locale.getDefault();
ostream.println(LOCALE_SETTINGS);
- ostream.println(INDENT + "default locale = " + locale.getDisplayLanguage());
+ ostream.println(INDENT + "default locale = " +
+ locale.getDisplayLanguage());
+ ostream.println(INDENT + "default display locale = " +
+ Locale.getDefault(Category.DISPLAY).getDisplayName());
+ ostream.println(INDENT + "default format locale = " +
+ Locale.getDefault(Category.FORMAT).getDisplayName());
printLocales(ostream);
ostream.println();
}
private static void printLocales(PrintStream ostream) {
- Locale[] locales = Locale.getAvailableLocales();
- final int len = locales == null ? 0 : locales.length;
+ Locale[] tlocales = Locale.getAvailableLocales();
+ final int len = tlocales == null ? 0 : tlocales.length;
if (len < 1 ) {
return;
}
+ // Locale does not implement Comparable so we convert it to String
+ // and sort it for pretty printing.
+ Set<String> sortedSet = new TreeSet<>();
+ for (Locale l : tlocales) {
+ sortedSet.add(l.toString());
+ }
+
ostream.print(INDENT + "available locales = ");
- final int last = len - 1 ;
- for (int i = 0; i < last ; i++) {
- ostream.print(locales[i]);
+ Iterator<String> iter = sortedSet.iterator();
+ final int last = len - 1;
+ for (int i = 0 ; iter.hasNext() ; i++) {
+ String s = iter.next();
+ ostream.print(s);
if (i != last) {
ostream.print(", ");
}
@@ -260,7 +265,42 @@
ostream.print(INDENT + INDENT);
}
}
- ostream.println(locales[last]);
+ }
+
+ private enum SizePrefix {
+
+ KILO(1024, "K"),
+ MEGA(1024 * 1024, "M"),
+ GIGA(1024 * 1024 * 1024, "G"),
+ TERA(1024L * 1024L * 1024L * 1024L, "T");
+ long size;
+ String abbrev;
+
+ SizePrefix(long size, String abbrev) {
+ this.size = size;
+ this.abbrev = abbrev;
+ }
+
+ private static String scale(long v, SizePrefix prefix) {
+ return BigDecimal.valueOf(v).divide(BigDecimal.valueOf(prefix.size),
+ 2, RoundingMode.HALF_EVEN).toPlainString() + prefix.abbrev;
+ }
+ /*
+ * scale the incoming values to a human readable form, represented as
+ * K, M, G and T, see java.c parse_size for the scaled values and
+ * suffixes. The lowest possible scaled value is Kilo.
+ */
+ static String scaleValue(long v) {
+ if (v < MEGA.size) {
+ return scale(v, KILO);
+ } else if (v < GIGA.size) {
+ return scale(v, MEGA);
+ } else if (v < TERA.size) {
+ return scale(v, GIGA);
+ } else {
+ return scale(v, TERA);
+ }
+ }
}
/**
--- a/jdk/src/share/classes/sun/security/jgss/krb5/CipherHelper.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/CipherHelper.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2010, 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
@@ -710,29 +710,21 @@
* where HMAC is on {16-byte confounder | plaintext | 16-byte token_header}
* HMAC is not encrypted; it is appended at the end.
*/
- void encryptData(WrapToken_v2 token, byte[] confounder, byte[] tokenHeader,
- byte[] plaintext, int start, int len, int key_usage, OutputStream os)
- throws GSSException, IOException {
+ byte[] encryptData(WrapToken_v2 token, byte[] confounder, byte[] tokenHeader,
+ byte[] plaintext, int start, int len, int key_usage)
+ throws GSSException {
- byte[] ctext = null;
switch (etype) {
- case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96:
- ctext = aes128Encrypt(confounder, tokenHeader,
- plaintext, start, len, key_usage);
- break;
- case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
- ctext = aes256Encrypt(confounder, tokenHeader,
- plaintext, start, len, key_usage);
- break;
- default:
- throw new GSSException(GSSException.FAILURE, -1,
- "Unsupported etype: " + etype);
+ case EncryptedData.ETYPE_AES128_CTS_HMAC_SHA1_96:
+ return aes128Encrypt(confounder, tokenHeader,
+ plaintext, start, len, key_usage);
+ case EncryptedData.ETYPE_AES256_CTS_HMAC_SHA1_96:
+ return aes256Encrypt(confounder, tokenHeader,
+ plaintext, start, len, key_usage);
+ default:
+ throw new GSSException(GSSException.FAILURE, -1,
+ "Unsupported etype: " + etype);
}
-
- // Krb5Token.debug("EncryptedData = " +
- // Krb5Token.getHexBytes(ctext) + "\n");
- // Write to stream
- os.write(ctext);
}
void encryptData(WrapToken token, byte[] confounder, byte[] plaintext,
--- a/jdk/src/share/classes/sun/security/jgss/krb5/MessageToken_v2.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/MessageToken_v2.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2010, 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
@@ -26,42 +26,40 @@
package sun.security.jgss.krb5;
import org.ietf.jgss.*;
-import sun.security.jgss.*;
-import sun.security.krb5.*;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.io.ByteArrayInputStream;
-import java.security.GeneralSecurityException;
+import java.io.ByteArrayOutputStream;
import java.security.MessageDigest;
+import java.util.Arrays;
/**
* This class is a base class for new GSS token definitions, as defined
- * in draft-ietf-krb-wg-gssapi-cfx-07.txt, that pertain to per-message
- * GSS-API calls. Conceptually GSS-API has two types of per-message tokens:
- * WrapToken and MicToken. They differ in the respect that a WrapToken
- * carries additional plaintext or ciphertext application data besides
- * just the sequence number and checksum. This class encapsulates the
- * commonality in the structure of the WrapToken and the MicToken.
- * This structure can be represented as:
+ * in RFC 4121, that pertain to per-message GSS-API calls. Conceptually
+ * GSS-API has two types of per-message tokens: WrapToken and MicToken.
+ * They differ in the respect that a WrapToken carries additional plaintext
+ * or ciphertext application data besides just the sequence number and
+ * checksum. This class encapsulates the commonality in the structure of
+ * the WrapToken and the MicToken. This structure can be represented as:
* <p>
* <pre>
- * Wrap Tokens
+ * Wrap Tokens
*
* Octet no Name Description
* ---------------------------------------------------------------
* 0..1 TOK_ID Identification field. Tokens emitted by
- * GSS_Wrap() contain the the hex value 05 04
- * expressed in big endian order in this field.
+ * GSS_Wrap() contain the hex value 05 04
+ * expressed in big-endian order in this field.
* 2 Flags Attributes field, as described in section
* 4.2.2.
* 3 Filler Contains the hex value FF.
- * 4..5 EC Contains the "extra count" field, in big
+ * 4..5 EC Contains the "extra count" field, in big-
* endian order as described in section 4.2.3.
* 6..7 RRC Contains the "right rotation count" in big
* endian order, as described in section 4.2.5.
* 8..15 SND_SEQ Sequence number field in clear text,
- * expressed in big endian order.
+ * expressed in big-endian order.
* 16..last Data Encrypted data for Wrap tokens with
* confidentiality, or plaintext data followed
* by the checksum for Wrap tokens without
@@ -73,67 +71,82 @@
* -----------------------------------------------------------------
* 0..1 TOK_ID Identification field. Tokens emitted by
* GSS_GetMIC() contain the hex value 04 04
- * expressed in big endian order in this field.
+ * expressed in big-endian order in this field.
* 2 Flags Attributes field, as described in section
* 4.2.2.
* 3..7 Filler Contains five octets of hex value FF.
* 8..15 SND_SEQ Sequence number field in clear text,
- * expressed in big endian order.
+ * expressed in big-endian order.
* 16..last SGN_CKSUM Checksum of the "to-be-signed" data and
* octet 0..15, as described in section 4.2.4.
*
* </pre>
* <p>
+ * This class is the super class of WrapToken_v2 and MicToken_v2. The token's
+ * header (bytes[0..15]) and data (byte[16..]) are saved in tokenHeader and
+ * tokenData fields. Since there is no easy way to find out the exact length
+ * of a WrapToken_v2 token from any header info, in the case of reading from
+ * stream, we read all available() bytes into the token.
+ * <p>
+ * All read actions are performed in this super class. On the write part, the
+ * super class only write the tokenHeader, and the content writing is inside
+ * child classes.
*
* @author Seema Malkani
*/
abstract class MessageToken_v2 extends Krb5Token {
+ protected static final int TOKEN_HEADER_SIZE = 16;
private static final int TOKEN_ID_POS = 0;
private static final int TOKEN_FLAG_POS = 2;
private static final int TOKEN_EC_POS = 4;
private static final int TOKEN_RRC_POS = 6;
- // token header size
- static final int TOKEN_HEADER_SIZE = 16;
-
- private int tokenId = 0;
- private int seqNumber;
-
- // EC and RRC fields
- private int ec = 0;
- private int rrc = 0;
-
- private boolean confState = true;
- private boolean initiator = true;
+ /**
+ * The size of the random confounder used in a WrapToken.
+ */
+ protected static final int CONFOUNDER_SIZE = 16;
- byte[] confounder = null;
- byte[] checksum = null;
-
- private int key_usage = 0;
- private byte[] seqNumberData = null;
-
- private MessageTokenHeader tokenHeader = null;
-
- /* cipher instance used by the corresponding GSSContext */
- CipherHelper cipherHelper = null;
-
- // draft-ietf-krb-wg-gssapi-cfx-07
+ // RFC 4121, key usage values
static final int KG_USAGE_ACCEPTOR_SEAL = 22;
static final int KG_USAGE_ACCEPTOR_SIGN = 23;
static final int KG_USAGE_INITIATOR_SEAL = 24;
static final int KG_USAGE_INITIATOR_SIGN = 25;
- // draft-ietf-krb-wg-gssapi-cfx-07
+ // RFC 4121, Flags Field
private static final int FLAG_SENDER_IS_ACCEPTOR = 1;
private static final int FLAG_WRAP_CONFIDENTIAL = 2;
private static final int FLAG_ACCEPTOR_SUBKEY = 4;
private static final int FILLER = 0xff;
+ private MessageTokenHeader tokenHeader = null;
+
+ // Common field
+ private int tokenId = 0;
+ private int seqNumber;
+ protected byte[] tokenData; // content of token, without the header
+ protected int tokenDataLen;
+
+ // Key usage number for crypto action
+ private int key_usage = 0;
+
+ // EC and RRC fields, WrapToken only
+ private int ec = 0;
+ private int rrc = 0;
+
+ // Checksum. Always in MicToken, might be in WrapToken
+ byte[] checksum = null;
+
+ // Context properties
+ private boolean confState = true;
+ private boolean initiator = true;
+
+ /* cipher instance used by the corresponding GSSContext */
+ CipherHelper cipherHelper = null;
+
/**
- * Constructs a MessageToken from a byte array. If there are more bytes
- * in the array than needed, the extra bytes are simply ignroed.
+ * Constructs a MessageToken from a byte array.
*
* @param tokenId the token id that should be contained in this token as
* it is read.
@@ -156,7 +169,9 @@
/**
* Constructs a MessageToken from an InputStream. Bytes will be read on
* demand and the thread might block if there are not enough bytes to
- * complete the token.
+ * complete the token. Please note there is no accurate way to find out
+ * the size of a token, but we try our best to make sure there is
+ * enough bytes to construct one.
*
* @param tokenId the token id that should be contained in this token as
* it is read.
@@ -186,25 +201,58 @@
: KG_USAGE_ACCEPTOR_SIGN);
}
- // Read checksum
- int tokenLen = is.available();
- byte[] data = new byte[tokenLen];
- readFully(is, data);
- checksum = new byte[cipherHelper.getChecksumLength()];
- System.arraycopy(data, tokenLen-cipherHelper.getChecksumLength(),
- checksum, 0, cipherHelper.getChecksumLength());
- // debug("\nLeaving MessageToken.Cons\n");
+ int minSize = 0; // minimal size for token data
+ if (tokenId == Krb5Token.WRAP_ID_v2 && prop.getPrivacy()) {
+ minSize = CONFOUNDER_SIZE +
+ TOKEN_HEADER_SIZE + cipherHelper.getChecksumLength();
+ } else {
+ minSize = cipherHelper.getChecksumLength();
+ }
- // validate EC for Wrap tokens without confidentiality
- if (!prop.getPrivacy() &&
- (tokenId == Krb5Token.WRAP_ID_v2)) {
- if (checksum.length != ec) {
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(tokenId) + ":" + "EC incorrect!");
+ // Read token data
+ if (tokenId == Krb5Token.MIC_ID_v2) {
+ // The only case we can precisely predict the token data length
+ tokenDataLen = minSize;
+ tokenData = new byte[minSize];
+ readFully(is, tokenData);
+ } else {
+ tokenDataLen = is.available();
+ if (tokenDataLen >= minSize) { // read in one shot
+ tokenData = new byte[tokenDataLen];
+ readFully(is, tokenData);
+ } else {
+ byte[] tmp = new byte[minSize];
+ readFully(is, tmp);
+ // Hope while blocked in the read above, more data would
+ // come and is.available() below contains the whole token.
+ int more = is.available();
+ tokenDataLen = minSize + more;
+ tokenData = Arrays.copyOf(tmp, tokenDataLen);
+ readFully(is, tokenData, minSize, more);
}
}
+ if (tokenId == Krb5Token.WRAP_ID_v2) {
+ // Does non-confidential data needs a rotate?
+ rotate();
+ }
+ if (tokenId == Krb5Token.MIC_ID_v2 ||
+ (tokenId == Krb5Token.WRAP_ID_v2 && !prop.getPrivacy())) {
+ // Read checksum
+ int chkLen = cipherHelper.getChecksumLength();
+ checksum = new byte[chkLen];
+ System.arraycopy(tokenData, tokenDataLen-chkLen,
+ checksum, 0, chkLen);
+
+ // validate EC for Wrap tokens without confidentiality
+ if (tokenId == Krb5Token.WRAP_ID_v2 && !prop.getPrivacy()) {
+ if (chkLen != ec) {
+ throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
+ getTokenName(tokenId) + ":" + "EC incorrect!");
+ }
+ }
+ }
} catch (IOException e) {
throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
getTokenName(tokenId) + ":" + e.getMessage());
@@ -263,8 +311,7 @@
prop.setPrivacy(false);
}
- // Create a new gss token header as defined in
- // draft-ietf-krb-wg-gssapi-cfx-07
+ // Create a new gss token header as defined in RFC 4121
tokenHeader = new MessageTokenHeader(tokenId,
prop.getPrivacy(), true);
// debug("\n\t Message Header = " +
@@ -326,50 +373,21 @@
* Rotate bytes as per the "RRC" (Right Rotation Count) received.
* Our implementation does not do any rotates when sending, only
* when receiving, we rotate left as per the RRC count, to revert it.
- *
- * @return true if bytes are rotated
*/
- public boolean rotate_left(byte[] in_bytes, int tokenOffset,
- byte[] out_bytes, int bufsize) {
-
- int offset = 0;
- // debug("\nRotate left: (before rotation) in_bytes = [ " +
- // getHexBytes(in_bytes, tokenOffset, bufsize) + "]");
- if (rrc > 0) {
- if (bufsize == 0) {
- return false;
- }
- rrc = rrc % (bufsize - TOKEN_HEADER_SIZE);
- if (rrc == 0) {
- return false;
- }
+ private void rotate() {
+ if (rrc % tokenDataLen != 0) {
+ rrc = rrc % tokenDataLen;
+ byte[] newBytes = new byte[tokenDataLen];
- // if offset is not zero
- if (tokenOffset > 0) {
- offset += tokenOffset;
- }
-
- // copy the header
- System.arraycopy(in_bytes, offset, out_bytes, 0, TOKEN_HEADER_SIZE);
- offset += TOKEN_HEADER_SIZE;
+ System.arraycopy(tokenData, rrc, newBytes, 0, tokenDataLen-rrc);
+ System.arraycopy(tokenData, 0, newBytes, tokenDataLen-rrc, rrc);
- // copy rest of the bytes
- System.arraycopy(in_bytes, offset+rrc, out_bytes,
- TOKEN_HEADER_SIZE, bufsize-TOKEN_HEADER_SIZE-rrc);
-
- // copy the bytes specified by rrc count
- System.arraycopy(in_bytes, offset, out_bytes,
- bufsize-TOKEN_HEADER_SIZE-rrc, rrc);
-
- // debug("\nRotate left: (after rotation) out_bytes = [ " +
- // getHexBytes(out_bytes, 0, bufsize) + "]");
- return true;
+ tokenData = newBytes;
}
- return false;
}
public final int getSequenceNumber() {
- return (readBigEndian(seqNumberData, 0, 4));
+ return seqNumber;
}
/**
@@ -444,44 +462,25 @@
this.cipherHelper = context.getCipherHelper(null);
// debug("In MessageToken.Cons");
-
- // draft-ietf-krb-wg-gssapi-cfx-07
- this.tokenId = tokenId;
}
/**
- * Encodes a GSSHeader and this token onto an OutputStream.
+ * Encodes a MessageTokenHeader onto an OutputStream.
*
* @param os the OutputStream to which this should be written
- * @throws GSSException if an error occurs while writing to the OutputStream
+ * @throws IOException is an error occurs while writing to the OutputStream
*/
- public void encode(OutputStream os) throws IOException, GSSException {
- // debug("Writing tokenHeader " + getHexBytes(tokenHeader.getBytes());
- // (16 bytes of token header that includes sequence Number)
+ protected void encodeHeader(OutputStream os) throws IOException {
tokenHeader.encode(os);
- // debug("Writing checksum: " + getHexBytes(checksum));
- if (tokenId == MIC_ID_v2) {
- os.write(checksum);
- }
}
/**
- * Obtains the size of this token. Note that this excludes the size of
- * the GSSHeader.
- * @return token size
+ * Encodes a MessageToken_v2 onto an OutputStream.
+ *
+ * @param os the OutputStream to which this should be written
+ * @throws IOException is an error occurs while encoding the token
*/
- protected int getKrb5TokenSize() throws GSSException {
- return getTokenSize();
- }
-
- protected final int getTokenSize() throws GSSException {
- return (TOKEN_HEADER_SIZE + cipherHelper.getChecksumLength());
- }
-
- protected static final int getTokenSize(CipherHelper ch)
- throws GSSException {
- return (TOKEN_HEADER_SIZE + ch.getChecksumLength());
- }
+ public abstract void encode(OutputStream os) throws IOException;
protected final byte[] getTokenHeader() {
return (tokenHeader.getBytes());
@@ -493,45 +492,14 @@
/**
* This inner class represents the initial portion of the message token.
- * It constitutes the first 16 bytes of the message token:
- * <pre>
- * Wrap Tokens
- *
- * Octet no Name Description
- * ---------------------------------------------------------------
- * 0..1 TOK_ID Identification field. Tokens emitted by
- * GSS_Wrap() contain the the hex value 05 04
- * expressed in big endian order in this field.
- * 2 Flags Attributes field, as described in section
- * 4.2.2.
- * 3 Filler Contains the hex value FF.
- * 4..5 EC Contains the "extra count" field, in big
- * endian order as described in section 4.2.3.
- * 6..7 RRC Contains the "right rotation count" in big
- * endian order, as described in section 4.2.5.
- * 8..15 SND_SEQ Sequence number field in clear text,
- * expressed in big endian order.
- *
- * MIC Tokens
- *
- * Octet no Name Description
- * -----------------------------------------------------------------
- * 0..1 TOK_ID Identification field. Tokens emitted by
- * GSS_GetMIC() contain the hex value 04 04
- * expressed in big endian order in this field.
- * 2 Flags Attributes field, as described in section
- * 4.2.2.
- * 3..7 Filler Contains five octets of hex value FF.
- * 8..15 SND_SEQ Sequence number field in clear text,
- * expressed in big endian order.
- * </pre>
+ * It constitutes the first 16 bytes of the message token.
*/
class MessageTokenHeader {
private int tokenId;
private byte[] bytes = new byte[TOKEN_HEADER_SIZE];
- // new token header draft-ietf-krb-wg-gssapi-cfx-07
+ // Writes a new token header
public MessageTokenHeader(int tokenId, boolean conf,
boolean have_acceptor_subkey) throws GSSException {
@@ -542,16 +510,15 @@
// Flags (Note: MIT impl requires subkey)
int flags = 0;
- flags = ((initiator ? 0 : FLAG_SENDER_IS_ACCEPTOR) |
+ flags = (initiator ? 0 : FLAG_SENDER_IS_ACCEPTOR) |
((conf && tokenId != MIC_ID_v2) ?
FLAG_WRAP_CONFIDENTIAL : 0) |
- (have_acceptor_subkey ? FLAG_ACCEPTOR_SUBKEY : 0));
+ (have_acceptor_subkey ? FLAG_ACCEPTOR_SUBKEY : 0);
bytes[2] = (byte) flags;
// filler
bytes[3] = (byte) FILLER;
- // EC and RRC fields
if (tokenId == WRAP_ID_v2) {
// EC field
bytes[4] = (byte) 0;
@@ -560,21 +527,19 @@
bytes[6] = (byte) 0;
bytes[7] = (byte) 0;
} else if (tokenId == MIC_ID_v2) {
- // octets of filler FF
+ // more filler for MicToken
for (int i = 4; i < 8; i++) {
bytes[i] = (byte) FILLER;
}
}
- // Calculate SND_SEQ
- seqNumberData = new byte[8];
- writeBigEndian(seqNumber, seqNumberData, 4);
- System.arraycopy(seqNumberData, 0, bytes, 8, 8);
+ // Calculate SND_SEQ, only write 4 bytes from the 12th position
+ writeBigEndian(seqNumber, bytes, 12);
}
/**
- * Constructs a MessageTokenHeader by reading it from an InputStream
- * and sets the appropriate confidentiality and quality of protection
+ * Reads a MessageTokenHeader from an InputStream and sets the
+ * appropriate confidentiality and quality of protection
* values in a MessageProp structure.
*
* @param is the InputStream to read from
@@ -588,15 +553,23 @@
readFully(is, bytes, 0, TOKEN_HEADER_SIZE);
tokenId = readInt(bytes, TOKEN_ID_POS);
+ // validate Token ID
+ if (tokenId != tokId) {
+ throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
+ getTokenName(tokenId) + ":" + "Defective Token ID!");
+ }
+
/*
* Validate new GSS TokenHeader
*/
- // valid acceptor_flag is set
+
+ // valid acceptor_flag
+ // If I am initiator, the received token should have ACCEPTOR on
int acceptor_flag = (initiator ? FLAG_SENDER_IS_ACCEPTOR : 0);
int flag = bytes[TOKEN_FLAG_POS] & FLAG_SENDER_IS_ACCEPTOR;
- if (!(flag == acceptor_flag)) {
+ if (flag != acceptor_flag) {
throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(tokenId) + ":" + "Acceptor Flag Missing!");
+ getTokenName(tokenId) + ":" + "Acceptor Flag Error!");
}
// check for confidentiality
@@ -608,21 +581,20 @@
prop.setPrivacy(false);
}
- // validate Token ID
- if (tokenId != tokId) {
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(tokenId) + ":" + "Defective Token ID!");
- }
+ if (tokenId == WRAP_ID_v2) {
+ // validate filler
+ if ((bytes[3] & 0xff) != FILLER) {
+ throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
+ getTokenName(tokenId) + ":" + "Defective Token Filler!");
+ }
- // validate filler
- if ((bytes[3] & 0xff) != FILLER) {
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(tokenId) + ":" + "Defective Token Filler!");
- }
+ // read EC field
+ ec = readBigEndian(bytes, TOKEN_EC_POS, 2);
- // validate next 4 bytes of filler for MIC tokens
- if (tokenId == MIC_ID_v2) {
- for (int i = 4; i < 8; i++) {
+ // read RRC field
+ rrc = readBigEndian(bytes, TOKEN_RRC_POS, 2);
+ } else if (tokenId == MIC_ID_v2) {
+ for (int i = 3; i < 8; i++) {
if ((bytes[i] & 0xff) != FILLER) {
throw new GSSException(GSSException.DEFECTIVE_TOKEN,
-1, getTokenName(tokenId) + ":" +
@@ -631,18 +603,11 @@
}
}
- // read EC field
- ec = readBigEndian(bytes, TOKEN_EC_POS, 2);
-
- // read RRC field
- rrc = readBigEndian(bytes, TOKEN_RRC_POS, 2);
-
// set default QOP
prop.setQOP(0);
// sequence number
- seqNumberData = new byte[8];
- System.arraycopy(bytes, 8, seqNumberData, 0, 8);
+ seqNumber = readBigEndian(bytes, 0, 8);
}
/**
--- a/jdk/src/share/classes/sun/security/jgss/krb5/MicToken_v2.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/MicToken_v2.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2010, 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
@@ -29,12 +29,11 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
/**
* This class represents the new format of GSS MIC tokens, as specified
- * in draft-ietf-krb-wg-gssapi-cfx-07.txt
+ * in RFC 4121
*
* MIC tokens = { 16-byte token-header | HMAC }
* where HMAC is on { plaintext | 16-byte token-header }
@@ -48,12 +47,11 @@
byte[] tokenBytes, int tokenOffset, int tokenLen,
MessageProp prop) throws GSSException {
super(Krb5Token.MIC_ID_v2, context,
- tokenBytes, tokenOffset, tokenLen, prop);
+ tokenBytes, tokenOffset, tokenLen, prop);
}
- public MicToken_v2(Krb5Context context,
- InputStream is, MessageProp prop)
- throws GSSException {
+ public MicToken_v2(Krb5Context context, InputStream is, MessageProp prop)
+ throws GSSException {
super(Krb5Token.MIC_ID_v2, context, is, prop);
}
@@ -64,7 +62,6 @@
}
public void verify(InputStream data) throws GSSException {
-
byte[] dataBytes = null;
try {
dataBytes = new byte[data.available()];
@@ -79,7 +76,7 @@
public MicToken_v2(Krb5Context context, MessageProp prop,
byte[] data, int pos, int len)
- throws GSSException {
+ throws GSSException {
super(Krb5Token.MIC_ID_v2, context);
// debug("Application data to MicToken verify is [" +
@@ -89,7 +86,7 @@
}
public MicToken_v2(Krb5Context context, MessageProp prop, InputStream data)
- throws GSSException, IOException {
+ throws GSSException, IOException {
super(Krb5Token.MIC_ID_v2, context);
byte[] dataBytes = new byte[data.available()];
@@ -101,22 +98,21 @@
genSignAndSeqNumber(prop, dataBytes, 0, dataBytes.length);
}
- public int encode(byte[] outToken, int offset)
- throws IOException, GSSException {
-
- // Token is small
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- super.encode(bos);
- byte[] token = bos.toByteArray();
- System.arraycopy(token, 0, outToken, offset, token.length);
- return token.length;
- }
-
- public byte[] encode() throws IOException, GSSException {
-
+ public byte[] encode() throws IOException {
// XXX Fine tune this initial size
ByteArrayOutputStream bos = new ByteArrayOutputStream(50);
encode(bos);
return bos.toByteArray();
}
+
+ public int encode(byte[] outToken, int offset) throws IOException {
+ byte[] token = encode();
+ System.arraycopy(token, 0, outToken, offset, token.length);
+ return token.length;
+ }
+
+ public void encode(OutputStream os) throws IOException {
+ encodeHeader(os);
+ os.write(checksum);
+ }
}
--- a/jdk/src/share/classes/sun/security/jgss/krb5/WrapToken.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/WrapToken.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2010, 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
@@ -27,14 +27,11 @@
import org.ietf.jgss.*;
import sun.security.jgss.*;
-import java.security.GeneralSecurityException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import sun.security.krb5.Confounder;
-import sun.security.krb5.KrbException;
/**
* This class represents a token emitted by the GSSContext.wrap()
@@ -336,24 +333,29 @@
// debug("\t\tNo encryption was performed by peer.\n");
readFully(is, confounder);
- // Data is always a multiple of 8 with this GSS Mech
- // Copy all but last block as they are
- int numBlocks = (dataSize - CONFOUNDER_SIZE)/8 - 1;
- int offset = dataBufOffset;
- for (int i = 0; i < numBlocks; i++) {
- readFully(is, dataBuf, offset, 8);
- offset += 8;
- }
+ if (cipherHelper.isArcFour()) {
+ padding = pads[1];
+ readFully(is, dataBuf, dataBufOffset, dataSize-CONFOUNDER_SIZE-1);
+ } else {
+ // Data is always a multiple of 8 with this GSS Mech
+ // Copy all but last block as they are
+ int numBlocks = (dataSize - CONFOUNDER_SIZE)/8 - 1;
+ int offset = dataBufOffset;
+ for (int i = 0; i < numBlocks; i++) {
+ readFully(is, dataBuf, offset, 8);
+ offset += 8;
+ }
- byte[] finalBlock = new byte[8];
- readFully(is, finalBlock);
+ byte[] finalBlock = new byte[8];
+ readFully(is, finalBlock);
- int padSize = finalBlock[7];
- padding = pads[padSize];
+ int padSize = finalBlock[7];
+ padding = pads[padSize];
- // debug("\t\tPadding applied was: " + padSize + "\n");
- System.arraycopy(finalBlock, 0, dataBuf, offset,
- finalBlock.length - padSize);
+ // debug("\t\tPadding applied was: " + padSize + "\n");
+ System.arraycopy(finalBlock, 0, dataBuf, offset,
+ finalBlock.length - padSize);
+ }
}
} catch (IOException e) {
throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
--- a/jdk/src/share/classes/sun/security/jgss/krb5/WrapToken_v2.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/jgss/krb5/WrapToken_v2.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2010, 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
@@ -27,66 +27,30 @@
import org.ietf.jgss.*;
import sun.security.jgss.*;
-import java.security.GeneralSecurityException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
-import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.util.Arrays;
import sun.security.krb5.Confounder;
-import sun.security.krb5.KrbException;
/**
- * This class represents the new format of GSS tokens, as specified in
- * draft-ietf-krb-wg-gssapi-cfx-07.txt, emitted by the GSSContext.wrap()
- * call. It is a MessageToken except that it also contains plaintext or
- * encrypted data at the end. A WrapToken has certain other rules that are
- * peculiar to it and different from a MICToken, which is another type of
- * MessageToken. All data in a WrapToken is prepended by a random counfounder
- * of 16 bytes. Thus, all application data is replaced by
- * (confounder || data || tokenHeader || checksum).
+ * This class represents the new format of GSS tokens, as specified in RFC
+ * 4121, emitted by the GSSContext.wrap() call. It is a MessageToken except
+ * that it also contains plaintext or encrypted data at the end. A WrapToken
+ * has certain other rules that are peculiar to it and different from a
+ * MICToken, which is another type of MessageToken. All data in a WrapToken is
+ * prepended by a random confounder of 16 bytes. Thus, all application data
+ * is replaced by (confounder || data || tokenHeader || checksum).
*
* @author Seema Malkani
*/
class WrapToken_v2 extends MessageToken_v2 {
- /**
- * The size of the random confounder used in a WrapToken.
- */
- static final int CONFOUNDER_SIZE = 16;
-
- /*
- * A token may come in either in an InputStream or as a
- * byte[]. Store a reference to it in either case and process
- * it's data only later when getData() is called and
- * decryption/copying is needed to be done. Note that JCE can
- * decrypt both from a byte[] and from an InputStream.
- */
- private boolean readTokenFromInputStream = true;
- private InputStream is = null;
- private byte[] tokenBytes = null;
- private int tokenOffset = 0;
- private int tokenLen = 0;
-
- /*
- * Application data may come from an InputStream or from a
- * byte[]. However, it will always be stored and processed as a
- * byte[] since
- * (a) the MessageDigest class only accepts a byte[] as input and
- * (b) It allows writing to an OuputStream via a CipherOutputStream.
- */
- private byte[] dataBytes = null;
- private int dataOffset = 0;
- private int dataLen = 0;
-
- // the len of the token data:
- // (confounder || data || tokenHeader || checksum)
- private int dataSize = 0;
// Accessed by CipherHelper
byte[] confounder = null;
- private boolean privacy = false;
- private boolean initiator = true;
+ private final boolean privacy;
/**
* Constructs a WrapToken from token bytes obtained from the
@@ -104,30 +68,9 @@
byte[] tokenBytes, int tokenOffset, int tokenLen,
MessageProp prop) throws GSSException {
- // Just parse the MessageToken part first
super(Krb5Token.WRAP_ID_v2, context,
tokenBytes, tokenOffset, tokenLen, prop);
- this.readTokenFromInputStream = false;
-
- // rotate token bytes as per RRC
- byte[] new_tokenBytes = new byte[tokenLen];
- if (rotate_left(tokenBytes, tokenOffset, new_tokenBytes, tokenLen)) {
- this.tokenBytes = new_tokenBytes;
- this.tokenOffset = 0;
- } else {
- this.tokenBytes = tokenBytes;
- this.tokenOffset = tokenOffset;
- }
-
- // Will need the token bytes again when extracting data
- this.tokenLen = tokenLen;
this.privacy = prop.getPrivacy();
-
- dataSize = tokenLen - TOKEN_HEADER_SIZE;
-
- // save initiator
- this.initiator = context.isInitiator();
-
}
/**
@@ -145,27 +88,8 @@
InputStream is, MessageProp prop)
throws GSSException {
- // Just parse the MessageToken part first
super(Krb5Token.WRAP_ID_v2, context, is, prop);
-
- // Will need the token bytes again when extracting data
- this.is = is;
this.privacy = prop.getPrivacy();
-
- // get the token length
- try {
- this.tokenLen = is.available();
- } catch (IOException e) {
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(getTokenId())
- + ": " + e.getMessage());
- }
-
- // data size
- dataSize = tokenLen - TOKEN_HEADER_SIZE;
-
- // save initiator
- this.initiator = context.isInitiator();
}
/**
@@ -177,13 +101,9 @@
*/
public byte[] getData() throws GSSException {
- byte[] temp = new byte[dataSize];
+ byte[] temp = new byte[tokenDataLen];
int len = getData(temp, 0);
- // len obtained is after removing confounder, tokenHeader and HMAC
-
- byte[] retVal = new byte[len];
- System.arraycopy(temp, 0, retVal, 0, retVal.length);
- return retVal;
+ return Arrays.copyOf(temp, len);
}
/**
@@ -200,69 +120,26 @@
public int getData(byte[] dataBuf, int dataBufOffset)
throws GSSException {
- if (readTokenFromInputStream)
- getDataFromStream(dataBuf, dataBufOffset);
- else
- getDataFromBuffer(dataBuf, dataBufOffset);
-
- int retVal = 0;
- if (privacy) {
- retVal = dataSize - confounder.length -
- TOKEN_HEADER_SIZE - cipherHelper.getChecksumLength();
- } else {
- retVal = dataSize - cipherHelper.getChecksumLength();
- }
- return retVal;
- }
-
- /**
- * Helper routine to obtain the application data transmitted in
- * this WrapToken. It is called if the WrapToken was constructed
- * with a byte array as input.
- * @param dataBuf the output buffer into which the data must be
- * written
- * @param dataBufOffset the offset at which to write the data
- * @throws GSSException if an error occurs while decrypting any
- * cipher text and checking for validity
- */
- private void getDataFromBuffer(byte[] dataBuf, int dataBufOffset)
- throws GSSException {
-
- int dataPos = tokenOffset + TOKEN_HEADER_SIZE;
- int data_length = 0;
-
- if (dataPos + dataSize > tokenOffset + tokenLen)
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- "Insufficient data in "
- + getTokenName(getTokenId()));
// debug("WrapToken cons: data is token is [" +
// getHexBytes(tokenBytes, tokenOffset, tokenLen) + "]\n");
- confounder = new byte[CONFOUNDER_SIZE];
// Do decryption if this token was privacy protected.
if (privacy) {
// decrypt data
- cipherHelper.decryptData(this, tokenBytes, dataPos, dataSize,
+ cipherHelper.decryptData(this, tokenData, 0, tokenDataLen,
dataBuf, dataBufOffset, getKeyUsage());
- /*
- debug("\t\tDecrypted data is [" +
- getHexBytes(confounder) + " " +
- getHexBytes(dataBuf, dataBufOffset,
- dataSize - CONFOUNDER_SIZE) +
- "]\n");
- */
- data_length = dataSize - CONFOUNDER_SIZE -
- TOKEN_HEADER_SIZE - cipherHelper.getChecksumLength();
+ return tokenDataLen - CONFOUNDER_SIZE -
+ TOKEN_HEADER_SIZE - cipherHelper.getChecksumLength();
} else {
// Token data is in cleartext
- debug("\t\tNo encryption was performed by peer.\n");
+ // debug("\t\tNo encryption was performed by peer.\n");
// data
- data_length = dataSize - cipherHelper.getChecksumLength();
- System.arraycopy(tokenBytes, dataPos,
+ int data_length = tokenDataLen - cipherHelper.getChecksumLength();
+ System.arraycopy(tokenData, 0,
dataBuf, dataBufOffset,
data_length);
// debug("\t\tData is: " + getHexBytes(dataBuf, data_length));
@@ -274,95 +151,26 @@
throw new GSSException(GSSException.BAD_MIC, -1,
"Corrupt checksum in Wrap token");
}
+ return data_length;
}
}
/**
- * Helper routine to obtain the application data transmitted in
- * this WrapToken. It is called if the WrapToken was constructed
- * with an Inputstream.
- * @param dataBuf the output buffer into which the data must be
- * written
- * @param dataBufOffset the offset at which to write the data
- * @throws GSSException if an error occurs while decrypting any
- * cipher text and checking for validity
+ * Writes a WrapToken_v2 object
*/
- private void getDataFromStream(byte[] dataBuf, int dataBufOffset)
- throws GSSException {
-
- int data_length = 0;
- // Don't check the token length. Data will be read on demand from
- // the InputStream.
- // debug("WrapToken cons: data will be read from InputStream.\n");
-
- confounder = new byte[CONFOUNDER_SIZE];
-
- try {
- // Do decryption if this token was privacy protected.
- if (privacy) {
-
- cipherHelper.decryptData(this, is, dataSize,
- dataBuf, dataBufOffset, getKeyUsage());
-
- /*
- debug("\t\tDecrypted data is [" +
- getHexBytes(confounder) + " " +
- getHexBytes(dataBuf, dataBufOffset,
- dataSize - CONFOUNDER_SIZE) +
- "]\n");
- */
- data_length = dataSize - CONFOUNDER_SIZE -
- TOKEN_HEADER_SIZE - cipherHelper.getChecksumLength();
- } else {
-
- // Token data is in cleartext
- debug("\t\tNo encryption was performed by peer.\n");
- readFully(is, confounder);
-
- // read the data
- data_length = dataSize - cipherHelper.getChecksumLength();
- readFully(is, dataBuf, dataBufOffset, data_length);
-
- /*
- * Make sure checksum is not corrupt
- */
- if (!verifySign(dataBuf, dataBufOffset, data_length)) {
- throw new GSSException(GSSException.BAD_MIC, -1,
- "Corrupt checksum in Wrap token");
- }
- }
- } catch (IOException e) {
- throw new GSSException(GSSException.DEFECTIVE_TOKEN, -1,
- getTokenName(getTokenId())
- + ": " + e.getMessage());
- }
-
- }
-
-
public WrapToken_v2(Krb5Context context, MessageProp prop,
byte[] dataBytes, int dataOffset, int dataLen)
- throws GSSException {
+ throws GSSException {
super(Krb5Token.WRAP_ID_v2, context);
confounder = Confounder.bytes(CONFOUNDER_SIZE);
- dataSize = confounder.length + dataLen + TOKEN_HEADER_SIZE +
- cipherHelper.getChecksumLength();
- this.dataBytes = dataBytes;
- this.dataOffset = dataOffset;
- this.dataLen = dataLen;
-
- // save initiator
- this.initiator = context.isInitiator();
-
// debug("\nWrapToken cons: data to wrap is [" +
// getHexBytes(confounder) + " " +
// getHexBytes(dataBytes, dataOffset, dataLen) + "]\n");
- genSignAndSeqNumber(prop,
- dataBytes, dataOffset, dataLen);
+ genSignAndSeqNumber(prop, dataBytes, dataOffset, dataLen);
/*
* If the application decides to ask for privacy when the context
@@ -374,110 +182,42 @@
prop.setPrivacy(false);
privacy = prop.getPrivacy();
- }
- public void encode(OutputStream os) throws IOException, GSSException {
-
- super.encode(os);
-
- // debug("\n\nWriting data: [");
if (!privacy) {
-
// Wrap Tokens (without confidentiality) =
// { 16 byte token_header | plaintext | 12-byte HMAC }
// where HMAC is on { plaintext | token_header }
- // calculate checksum
- byte[] checksum = getChecksum(dataBytes, dataOffset, dataLen);
-
- // data
- // debug(" " + getHexBytes(dataBytes, dataOffset, dataLen));
- os.write(dataBytes, dataOffset, dataLen);
-
- // write HMAC
- // debug(" " + getHexBytes(checksum,
- // cipherHelper.getChecksumLength()));
- os.write(checksum);
-
+ tokenData = new byte[dataLen + checksum.length];
+ System.arraycopy(dataBytes, dataOffset, tokenData, 0, dataLen);
+ System.arraycopy(checksum, 0, tokenData, dataLen, checksum.length);
} else {
-
// Wrap Tokens (with confidentiality) =
// { 16 byte token_header |
// Encrypt(16-byte confounder | plaintext | token_header) |
// 12-byte HMAC }
- cipherHelper.encryptData(this, confounder, getTokenHeader(),
- dataBytes, dataOffset, dataLen, getKeyUsage(), os);
-
+ tokenData = cipherHelper.encryptData(this, confounder, getTokenHeader(),
+ dataBytes, dataOffset, dataLen, getKeyUsage());
}
- // debug("]\n");
}
- public byte[] encode() throws IOException, GSSException {
- // XXX Fine tune this initial size
- ByteArrayOutputStream bos = new ByteArrayOutputStream(dataSize + 50);
+ public void encode(OutputStream os) throws IOException {
+ encodeHeader(os);
+ os.write(tokenData);
+ }
+
+ public byte[] encode() throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream(
+ MessageToken_v2.TOKEN_HEADER_SIZE + tokenData.length);
encode(bos);
return bos.toByteArray();
}
- public int encode(byte[] outToken, int offset)
- throws IOException, GSSException {
-
- int retVal = 0;
-
- // Token header is small
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- super.encode(bos);
- byte[] header = bos.toByteArray();
- System.arraycopy(header, 0, outToken, offset, header.length);
- offset += header.length;
-
- // debug("WrapToken.encode: Writing data: [");
- if (!privacy) {
-
- // Wrap Tokens (without confidentiality) =
- // { 16 byte token_header | plaintext | 12-byte HMAC }
- // where HMAC is on { plaintext | token_header }
-
- // calculate checksum
- byte[] checksum = getChecksum(dataBytes, dataOffset, dataLen);
-
- // data
- // debug(" " + getHexBytes(dataBytes, dataOffset, dataLen));
- System.arraycopy(dataBytes, dataOffset, outToken, offset,
- dataLen);
- offset += dataLen;
-
- // write HMAC
- // debug(" " + getHexBytes(checksum,
- // cipherHelper.getChecksumLength()));
- System.arraycopy(checksum, 0, outToken, offset,
- cipherHelper.getChecksumLength());
-
- retVal = header.length + dataLen + cipherHelper.getChecksumLength();
- } else {
-
- // Wrap Tokens (with confidentiality) =
- // { 16 byte token_header |
- // Encrypt(16-byte confounder | plaintext | token_header) |
- // 12-byte HMAC }
- int cLen = cipherHelper.encryptData(this, confounder,
- getTokenHeader(), dataBytes, dataOffset, dataLen,
- outToken, offset, getKeyUsage());
-
- retVal = header.length + cLen;
- // debug(getHexBytes(outToken, offset, dataSize));
- }
-
- // debug("]\n");
-
- // %%% assume that plaintext length == ciphertext len
- return retVal;
-
- }
-
- protected int getKrb5TokenSize() throws GSSException {
- return (getTokenSize() + dataSize);
+ public int encode(byte[] outToken, int offset) throws IOException {
+ byte[] token = encode();
+ System.arraycopy(token, 0, outToken, offset, token.length);
+ return token.length;
}
// This implementation is way to conservative. And it certainly
@@ -485,6 +225,7 @@
static int getSizeLimit(int qop, boolean confReq, int maxTokenSize,
CipherHelper ch) throws GSSException {
return (GSSHeader.getMaxMechTokenSize(OID, maxTokenSize) -
- (getTokenSize(ch) + CONFOUNDER_SIZE) - 8 /* safety */);
+ (TOKEN_HEADER_SIZE + ch.getChecksumLength() + CONFOUNDER_SIZE)
+ - 8 /* safety */);
}
}
--- a/jdk/src/share/classes/sun/security/pkcs11/Config.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/pkcs11/Config.java Thu Jan 06 18:05:56 2011 -0800
@@ -343,6 +343,7 @@
st.wordChars('{', '{'); // need {} for property subst
st.wordChars('}', '}');
st.wordChars('*', '*');
+ st.wordChars('~', '~');
// XXX check ASCII table and add all other characters except special
// special: #="(),
--- a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Thu Jan 06 18:05:56 2011 -0800
@@ -395,6 +395,8 @@
}
} catch (PKCS11Exception e) {
throw new ProviderException("Cancel failed", e);
+ } finally {
+ reset();
}
}
@@ -408,12 +410,18 @@
if (session == null) {
session = token.getOpSession();
}
- if (encrypt) {
- token.p11.C_EncryptInit(session.id(),
- new CK_MECHANISM(mechanism, iv), p11Key.keyID);
- } else {
- token.p11.C_DecryptInit(session.id(),
- new CK_MECHANISM(mechanism, iv), p11Key.keyID);
+ try {
+ if (encrypt) {
+ token.p11.C_EncryptInit(session.id(),
+ new CK_MECHANISM(mechanism, iv), p11Key.keyID);
+ } else {
+ token.p11.C_DecryptInit(session.id(),
+ new CK_MECHANISM(mechanism, iv), p11Key.keyID);
+ }
+ } catch (PKCS11Exception ex) {
+ // release session when initialization failed
+ session = token.releaseSession(session);
+ throw ex;
}
bytesBuffered = 0;
padBufferLen = 0;
@@ -448,6 +456,16 @@
return result;
}
+ // reset the states to the pre-initialized values
+ private void reset() {
+ initialized = false;
+ bytesBuffered = 0;
+ padBufferLen = 0;
+ if (session != null) {
+ session = token.releaseSession(session);
+ }
+ }
+
// see JCE spec
protected byte[] engineUpdate(byte[] in, int inOfs, int inLen) {
try {
@@ -566,6 +584,7 @@
throw (ShortBufferException)
(new ShortBufferException().initCause(e));
}
+ reset();
throw new ProviderException("update() failed", e);
}
}
@@ -683,6 +702,7 @@
throw (ShortBufferException)
(new ShortBufferException().initCause(e));
}
+ reset();
throw new ProviderException("update() failed", e);
}
}
@@ -729,10 +749,7 @@
handleException(e);
throw new ProviderException("doFinal() failed", e);
} finally {
- initialized = false;
- bytesBuffered = 0;
- padBufferLen = 0;
- session = token.releaseSession(session);
+ reset();
}
}
@@ -806,9 +823,7 @@
handleException(e);
throw new ProviderException("doFinal() failed", e);
} finally {
- initialized = false;
- bytesBuffered = 0;
- session = token.releaseSession(session);
+ reset();
}
}
--- a/jdk/src/share/classes/sun/security/ssl/CipherSuite.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/ssl/CipherSuite.java Thu Jan 06 18:05:56 2011 -0800
@@ -577,14 +577,16 @@
final static MacAlg M_SHA256 = new MacAlg("SHA256", 32);
final static MacAlg M_SHA384 = new MacAlg("SHA384", 48);
- // PRFs (PseudoRandom Function) from TLS specifications.
- //
- // TLS 1.1- uses a single MD5/SHA1-based PRF algorithm for generating
- // the necessary material.
- //
- // In TLS 1.2+, all existing/known CipherSuites use SHA256, however
- // new Ciphersuites (e.g. RFC 5288) can define specific PRF hash
- // algorithms.
+ /**
+ * PRFs (PseudoRandom Function) from TLS specifications.
+ *
+ * TLS 1.1- uses a single MD5/SHA1-based PRF algorithm for generating
+ * the necessary material.
+ *
+ * In TLS 1.2+, all existing/known CipherSuites use SHA256, however
+ * new Ciphersuites (e.g. RFC 5288) can define specific PRF hash
+ * algorithms.
+ */
static enum PRF {
// PRF algorithms
@@ -862,8 +864,18 @@
add("SSL_NULL_WITH_NULL_NULL",
0x0000, 1, K_NULL, B_NULL, F);
- // Definition of the CipherSuites that are enabled by default.
- // They are listed in preference order, most preferred first.
+ /*
+ * Definition of the CipherSuites that are enabled by default.
+ * They are listed in preference order, most preferred first, using
+ * the following criteria:
+ * 1. Prefer the stronger buld cipher, in the order of AES_256,
+ * AES_128, RC-4, 3DES-EDE.
+ * 2. Prefer the stronger MAC algorithm, in the order of SHA384,
+ * SHA256, SHA, MD5.
+ * 3. Prefer the better performance of key exchange and digital
+ * signature algorithm, in the order of ECDHE-ECDSA, ECDHE-RSA,
+ * RSA, ECDH-ECDSA, ECDH-RSA, DHE-RSA, DHE-DSS.
+ */
int p = DEFAULT_SUITES_PRIORITY * 2;
// shorten names to fit the following table cleanly.
@@ -873,170 +885,185 @@
// ID Key Exchange Cipher A obs suprt PRF
// ====== ============ ========= = === ===== ========
- add("TLS_RSA_WITH_AES_128_CBC_SHA256",
- 0x003c, --p, K_RSA, B_AES_128, T, max, tls12, P_SHA256);
+ add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
+ 0xc024, --p, K_ECDHE_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
+ add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
+ 0xc028, --p, K_ECDHE_RSA, B_AES_256, T, max, tls12, P_SHA384);
add("TLS_RSA_WITH_AES_256_CBC_SHA256",
0x003d, --p, K_RSA, B_AES_256, T, max, tls12, P_SHA256);
- add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
- 0x0040, --p, K_DHE_DSS, B_AES_128, T, max, tls12, P_SHA256);
- add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
- 0x0067, --p, K_DHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
+ add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
+ 0xc026, --p, K_ECDH_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
+ add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
+ 0xc02a, --p, K_ECDH_RSA, B_AES_256, T, max, tls12, P_SHA384);
+ add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
+ 0x006b, --p, K_DHE_RSA, B_AES_256, T, max, tls12, P_SHA256);
add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA256",
0x006a, --p, K_DHE_DSS, B_AES_256, T, max, tls12, P_SHA256);
- add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA256",
- 0x006b, --p, K_DHE_RSA, B_AES_256, T, max, tls12, P_SHA256);
+
+ add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
+ 0xC00A, --p, K_ECDHE_ECDSA, B_AES_256, T);
+ add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
+ 0xC014, --p, K_ECDHE_RSA, B_AES_256, T);
+ add("TLS_RSA_WITH_AES_256_CBC_SHA",
+ 0x0035, --p, K_RSA, B_AES_256, T);
+ add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
+ 0xC005, --p, K_ECDH_ECDSA, B_AES_256, T);
+ add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
+ 0xC00F, --p, K_ECDH_RSA, B_AES_256, T);
+ add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
+ 0x0039, --p, K_DHE_RSA, B_AES_256, T);
+ add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
+ 0x0038, --p, K_DHE_DSS, B_AES_256, T);
add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
0xc023, --p, K_ECDHE_ECDSA, B_AES_128, T, max, tls12, P_SHA256);
- add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384",
- 0xc024, --p, K_ECDHE_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
+ add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
+ 0xc027, --p, K_ECDHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
+ add("TLS_RSA_WITH_AES_128_CBC_SHA256",
+ 0x003c, --p, K_RSA, B_AES_128, T, max, tls12, P_SHA256);
add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256",
0xc025, --p, K_ECDH_ECDSA, B_AES_128, T, max, tls12, P_SHA256);
- add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384",
- 0xc026, --p, K_ECDH_ECDSA, B_AES_256, T, max, tls12, P_SHA384);
- add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
- 0xc027, --p, K_ECDHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
- add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384",
- 0xc028, --p, K_ECDHE_RSA, B_AES_256, T, max, tls12, P_SHA384);
add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256",
0xc029, --p, K_ECDH_RSA, B_AES_128, T, max, tls12, P_SHA256);
- add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384",
- 0xc02a, --p, K_ECDH_RSA, B_AES_256, T, max, tls12, P_SHA384);
+ add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA256",
+ 0x0067, --p, K_DHE_RSA, B_AES_128, T, max, tls12, P_SHA256);
+ add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA256",
+ 0x0040, --p, K_DHE_DSS, B_AES_128, T, max, tls12, P_SHA256);
- add("SSL_RSA_WITH_RC4_128_MD5",
- 0x0004, --p, K_RSA, B_RC4_128, N);
- add("SSL_RSA_WITH_RC4_128_SHA",
- 0x0005, --p, K_RSA, B_RC4_128, N);
+ add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
+ 0xC009, --p, K_ECDHE_ECDSA, B_AES_128, T);
+ add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
+ 0xC013, --p, K_ECDHE_RSA, B_AES_128, T);
add("TLS_RSA_WITH_AES_128_CBC_SHA",
0x002f, --p, K_RSA, B_AES_128, T);
- add("TLS_RSA_WITH_AES_256_CBC_SHA",
- 0x0035, --p, K_RSA, B_AES_256, T);
-
- add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
- 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
add("TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA",
0xC004, --p, K_ECDH_ECDSA, B_AES_128, T);
- add("TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA",
- 0xC005, --p, K_ECDH_ECDSA, B_AES_256, T);
- add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
- 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
add("TLS_ECDH_RSA_WITH_AES_128_CBC_SHA",
0xC00E, --p, K_ECDH_RSA, B_AES_128, T);
- add("TLS_ECDH_RSA_WITH_AES_256_CBC_SHA",
- 0xC00F, --p, K_ECDH_RSA, B_AES_256, T);
+ add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
+ 0x0033, --p, K_DHE_RSA, B_AES_128, T);
+ add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
+ 0x0032, --p, K_DHE_DSS, B_AES_128, T);
add("TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
0xC007, --p, K_ECDHE_ECDSA, B_RC4_128, N);
- add("TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
- 0xC009, --p, K_ECDHE_ECDSA, B_AES_128, T);
- add("TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
- 0xC00A, --p, K_ECDHE_ECDSA, B_AES_256, T);
add("TLS_ECDHE_RSA_WITH_RC4_128_SHA",
0xC011, --p, K_ECDHE_RSA, B_RC4_128, N);
- add("TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
- 0xC013, --p, K_ECDHE_RSA, B_AES_128, T);
- add("TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
- 0xC014, --p, K_ECDHE_RSA, B_AES_256, T);
+ add("SSL_RSA_WITH_RC4_128_SHA",
+ 0x0005, --p, K_RSA, B_RC4_128, N);
+ add("TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
+ 0xC002, --p, K_ECDH_ECDSA, B_RC4_128, N);
+ add("TLS_ECDH_RSA_WITH_RC4_128_SHA",
+ 0xC00C, --p, K_ECDH_RSA, B_RC4_128, N);
- add("TLS_DHE_RSA_WITH_AES_128_CBC_SHA",
- 0x0033, --p, K_DHE_RSA, B_AES_128, T);
- add("TLS_DHE_RSA_WITH_AES_256_CBC_SHA",
- 0x0039, --p, K_DHE_RSA, B_AES_256, T);
- add("TLS_DHE_DSS_WITH_AES_128_CBC_SHA",
- 0x0032, --p, K_DHE_DSS, B_AES_128, T);
- add("TLS_DHE_DSS_WITH_AES_256_CBC_SHA",
- 0x0038, --p, K_DHE_DSS, B_AES_256, T);
-
+ add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
+ 0xC008, --p, K_ECDHE_ECDSA, B_3DES, T);
+ add("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
+ 0xC012, --p, K_ECDHE_RSA, B_3DES, T);
add("SSL_RSA_WITH_3DES_EDE_CBC_SHA",
0x000a, --p, K_RSA, B_3DES, T);
add("TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA",
0xC003, --p, K_ECDH_ECDSA, B_3DES, T);
add("TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA",
0xC00D, --p, K_ECDH_RSA, B_3DES, T);
- add("TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA",
- 0xC008, --p, K_ECDHE_ECDSA, B_3DES, T);
- add("TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA",
- 0xC012, --p, K_ECDHE_RSA, B_3DES, T);
add("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA",
0x0016, --p, K_DHE_RSA, B_3DES, T);
add("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA",
0x0013, --p, K_DHE_DSS, B_3DES, N);
+ add("SSL_RSA_WITH_RC4_128_MD5",
+ 0x0004, --p, K_RSA, B_RC4_128, N);
+
// Renegotiation protection request Signalling Cipher Suite Value (SCSV)
add("TLS_EMPTY_RENEGOTIATION_INFO_SCSV",
0x00ff, --p, K_SCSV, B_NULL, T);
- // Definition of the CipherSuites that are supported but not enabled
- // by default.
- // They are listed in preference order, preferred first.
+ /*
+ * Definition of the CipherSuites that are supported but not enabled
+ * by default.
+ * They are listed in preference order, preferred first, using the
+ * following criteria:
+ * 1. CipherSuites for KRB5 need additional KRB5 service
+ * configuration, and these suites are not common in practice,
+ * so we put KRB5 based cipher suites at the end of the supported
+ * list.
+ * 2. If a cipher suite has been obsoleted, we put it at the end of
+ * the list.
+ * 3. Prefer the stronger bulk cipher, in the order of AES_256,
+ * AES_128, RC-4, 3DES-EDE, DES, RC4_40, DES40, NULL.
+ * 4. Prefer the stronger MAC algorithm, in the order of SHA384,
+ * SHA256, SHA, MD5.
+ * 5. Prefer the better performance of key exchange and digital
+ * signature algorithm, in the order of ECDHE-ECDSA, ECDHE-RSA,
+ * RSA, ECDH-ECDSA, ECDH-RSA, DHE-RSA, DHE-DSS, anonymous.
+ */
p = DEFAULT_SUITES_PRIORITY;
- // weak single-DES cipher suites
+ add("TLS_DH_anon_WITH_AES_256_CBC_SHA256",
+ 0x006d, --p, K_DH_ANON, B_AES_256, N, max, tls12, P_SHA256);
+ add("TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
+ 0xC019, --p, K_ECDH_ANON, B_AES_256, T);
+ add("TLS_DH_anon_WITH_AES_256_CBC_SHA",
+ 0x003a, --p, K_DH_ANON, B_AES_256, N);
+
+ add("TLS_DH_anon_WITH_AES_128_CBC_SHA256",
+ 0x006c, --p, K_DH_ANON, B_AES_128, N, max, tls12, P_SHA256);
+ add("TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
+ 0xC018, --p, K_ECDH_ANON, B_AES_128, T);
+ add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
+ 0x0034, --p, K_DH_ANON, B_AES_128, N);
+
+ add("TLS_ECDH_anon_WITH_RC4_128_SHA",
+ 0xC016, --p, K_ECDH_ANON, B_RC4_128, N);
+ add("SSL_DH_anon_WITH_RC4_128_MD5",
+ 0x0018, --p, K_DH_ANON, B_RC4_128, N);
+
+ add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0xC017, --p, K_ECDH_ANON, B_3DES, T);
+ add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
+ 0x001b, --p, K_DH_ANON, B_3DES, N);
+
+ add("TLS_RSA_WITH_NULL_SHA256",
+ 0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256);
+ add("TLS_ECDHE_ECDSA_WITH_NULL_SHA",
+ 0xC006, --p, K_ECDHE_ECDSA, B_NULL, N);
+ add("TLS_ECDHE_RSA_WITH_NULL_SHA",
+ 0xC010, --p, K_ECDHE_RSA, B_NULL, N);
+ add("SSL_RSA_WITH_NULL_SHA",
+ 0x0002, --p, K_RSA, B_NULL, N);
+ add("TLS_ECDH_ECDSA_WITH_NULL_SHA",
+ 0xC001, --p, K_ECDH_ECDSA, B_NULL, N);
+ add("TLS_ECDH_RSA_WITH_NULL_SHA",
+ 0xC00B, --p, K_ECDH_RSA, B_NULL, N);
+ add("TLS_ECDH_anon_WITH_NULL_SHA",
+ 0xC015, --p, K_ECDH_ANON, B_NULL, N);
+ add("SSL_RSA_WITH_NULL_MD5",
+ 0x0001, --p, K_RSA, B_NULL, N);
+
+ // weak cipher suites obsoleted in TLS 1.2
add("SSL_RSA_WITH_DES_CBC_SHA",
0x0009, --p, K_RSA, B_DES, N, tls12);
add("SSL_DHE_RSA_WITH_DES_CBC_SHA",
0x0015, --p, K_DHE_RSA, B_DES, N, tls12);
add("SSL_DHE_DSS_WITH_DES_CBC_SHA",
0x0012, --p, K_DHE_DSS, B_DES, N, tls12);
-
- // Anonymous key exchange and the NULL ciphers
- add("SSL_RSA_WITH_NULL_MD5",
- 0x0001, --p, K_RSA, B_NULL, N);
- add("SSL_RSA_WITH_NULL_SHA",
- 0x0002, --p, K_RSA, B_NULL, N);
- add("TLS_RSA_WITH_NULL_SHA256",
- 0x003b, --p, K_RSA, B_NULL, N, max, tls12, P_SHA256);
-
- add("TLS_ECDH_ECDSA_WITH_NULL_SHA",
- 0xC001, --p, K_ECDH_ECDSA, B_NULL, N);
- add("TLS_ECDH_RSA_WITH_NULL_SHA",
- 0xC00B, --p, K_ECDH_RSA, B_NULL, N);
- add("TLS_ECDHE_ECDSA_WITH_NULL_SHA",
- 0xC006, --p, K_ECDHE_ECDSA, B_NULL, N);
- add("TLS_ECDHE_RSA_WITH_NULL_SHA",
- 0xC010, --p, K_ECDHE_RSA, B_NULL, N);
-
- add("SSL_DH_anon_WITH_RC4_128_MD5",
- 0x0018, --p, K_DH_ANON, B_RC4_128, N);
- add("TLS_DH_anon_WITH_AES_128_CBC_SHA",
- 0x0034, --p, K_DH_ANON, B_AES_128, N);
- add("TLS_DH_anon_WITH_AES_256_CBC_SHA",
- 0x003a, --p, K_DH_ANON, B_AES_256, N);
- add("SSL_DH_anon_WITH_3DES_EDE_CBC_SHA",
- 0x001b, --p, K_DH_ANON, B_3DES, N);
add("SSL_DH_anon_WITH_DES_CBC_SHA",
0x001a, --p, K_DH_ANON, B_DES, N, tls12);
- add("TLS_DH_anon_WITH_AES_128_CBC_SHA256",
- 0x006c, --p, K_DH_ANON, B_AES_128, N, max, tls12, P_SHA256);
- add("TLS_DH_anon_WITH_AES_256_CBC_SHA256",
- 0x006d, --p, K_DH_ANON, B_AES_256, N, max, tls12, P_SHA256);
-
- add("TLS_ECDH_anon_WITH_RC4_128_SHA",
- 0xC016, --p, K_ECDH_ANON, B_RC4_128, N);
- add("TLS_ECDH_anon_WITH_AES_128_CBC_SHA",
- 0xC018, --p, K_ECDH_ANON, B_AES_128, T);
- add("TLS_ECDH_anon_WITH_AES_256_CBC_SHA",
- 0xC019, --p, K_ECDH_ANON, B_AES_256, T);
- add("TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA",
- 0xC017, --p, K_ECDH_ANON, B_3DES, T);
-
+ // weak cipher suites obsoleted in TLS 1.1
+ add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
+ 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
add("SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
0x0017, --p, K_DH_ANON, B_RC4_40, N, tls11);
- add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
- 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
- add("TLS_ECDH_anon_WITH_NULL_SHA",
- 0xC015, --p, K_ECDH_ANON, B_NULL, N);
-
- add("SSL_RSA_EXPORT_WITH_RC4_40_MD5",
- 0x0003, --p, K_RSA_EXPORT, B_RC4_40, N, tls11);
add("SSL_RSA_EXPORT_WITH_DES40_CBC_SHA",
0x0008, --p, K_RSA_EXPORT, B_DES_40, N, tls11);
add("SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA",
0x0014, --p, K_DHE_RSA, B_DES_40, N, tls11);
add("SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA",
0x0011, --p, K_DHE_DSS, B_DES_40, N, tls11);
+ add("SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA",
+ 0x0019, --p, K_DH_ANON, B_DES_40, N, tls11);
// Supported Kerberos ciphersuites from RFC2712
add("TLS_KRB5_WITH_RC4_128_SHA",
--- a/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/ssl/ClientHandshaker.java Thu Jan 06 18:05:56 2011 -0800
@@ -381,8 +381,7 @@
mesgVersion);
}
- handshakeHash.protocolDetermined(
- mesgVersion.v >= ProtocolVersion.TLS12.v);
+ handshakeHash.protocolDetermined(mesgVersion);
// Set protocolVersion and propagate to SSLSocket and the
// Handshake streams
@@ -1223,7 +1222,7 @@
// not follow the spec that HandshakeHash.reset() can be only be
// called before protocolDetermined.
// if (maxProtocolVersion.v < ProtocolVersion.TLS12.v) {
- // handshakeHash.protocolDetermined(false);
+ // handshakeHash.protocolDetermined(maxProtocolVersion);
// }
// create the ClientHello message
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeHash.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/ssl/HandshakeHash.java Thu Jan 06 18:05:56 2011 -0800
@@ -49,27 +49,27 @@
*
* You need to obey these conventions when using this class:
*
- * 1. protocolDetermined(boolean isTLS12) should be called when the negotiated
+ * 1. protocolDetermined(version) should be called when the negotiated
* protocol version is determined.
*
* 2. Before protocolDetermined() is called, only update(), reset(),
* restrictCertificateVerifyAlgs(), setFinishedAlg(), and
* setCertificateVerifyAlg() can be called.
*
- * 3. After protocolDetermined(*) is called. reset() cannot be called.
+ * 3. After protocolDetermined() is called, reset() cannot be called.
*
- * 4. After protocolDetermined(false) is called, getFinishedHash() and
- * getCertificateVerifyHash() cannot be called. After protocolDetermined(true)
- * is called, getMD5Clone() and getSHAClone() cannot be called.
+ * 4. After protocolDetermined() is called, if the version is pre-TLS 1.2,
+ * getFinishedHash() and getCertificateVerifyHash() cannot be called. Otherwise,
+ * getMD5Clone() and getSHAClone() cannot be called.
*
* 5. getMD5Clone() and getSHAClone() can only be called after
- * protocolDetermined(false) is called.
+ * protocolDetermined() is called and version is pre-TLS 1.2.
*
* 6. getFinishedHash() and getCertificateVerifyHash() can only be called after
- * all protocolDetermined(true), setCertificateVerifyAlg() and setFinishedAlg()
- * have been called. If a CertificateVerify message is to be used, call
- * setCertificateVerifyAlg() with the hash algorithm as the argument.
- * Otherwise, you still must call setCertificateVerifyAlg(null) before
+ * all protocolDetermined(), setCertificateVerifyAlg() and setFinishedAlg()
+ * have been called and the version is TLS 1.2. If a CertificateVerify message
+ * is to be used, call setCertificateVerifyAlg() with the hash algorithm as the
+ * argument. Otherwise, you still must call setCertificateVerifyAlg(null) before
* calculating any hash value.
*
* Suggestions: Call protocolDetermined(), restrictCertificateVerifyAlgs(),
@@ -78,6 +78,7 @@
* Example:
* <pre>
* HandshakeHash hh = new HandshakeHash(...)
+ * hh.protocolDetermined(ProtocolVersion.TLS12);
* hh.update(clientHelloBytes);
* hh.setFinishedAlg("SHA-256");
* hh.update(serverHelloBytes);
@@ -161,12 +162,12 @@
}
- void protocolDetermined(boolean isTLS12) {
+ void protocolDetermined(ProtocolVersion pv) {
// Do not set again, will ignore
if (version != -1) return;
- version = isTLS12 ? 2 : 1;
+ version = pv.compareTo(ProtocolVersion.TLS12) >= 0 ? 2 : 1;
switch (version) {
case 1:
// initiate md5, sha and call update on saved array
@@ -310,91 +311,6 @@
throw new Error("BAD");
}
}
-
- ////////////////////////////////////////////////////////////////
- // TEST
- ////////////////////////////////////////////////////////////////
-
- public static void main(String[] args) throws Exception {
- Test t = new Test();
- t.test(null, "SHA-256");
- t.test("", "SHA-256");
- t.test("SHA-1", "SHA-256");
- t.test("SHA-256", "SHA-256");
- t.test("SHA-384", "SHA-256");
- t.test("SHA-512", "SHA-256");
- t.testSame("sha", "SHA-1");
- t.testSame("SHA", "SHA-1");
- t.testSame("SHA1", "SHA-1");
- t.testSame("SHA-1", "SHA-1");
- t.testSame("SHA256", "SHA-256");
- t.testSame("SHA-256", "SHA-256");
- }
-
- static class Test {
- void update(HandshakeHash hh, String s) {
- hh.update(s.getBytes(), 0, s.length());
- }
- static byte[] digest(String alg, String data) throws Exception {
- return MessageDigest.getInstance(alg).digest(data.getBytes());
- }
- static void equals(byte[] b1, byte[] b2) {
- if (!Arrays.equals(b1, b2)) {
- throw new RuntimeException("Bad");
- }
- }
- void testSame(String a, String a2) {
- System.out.println("testSame: " + a + " " + a2);
- if (!HandshakeHash.normalizeAlgName(a).equals(a2)) {
- throw new RuntimeException("Bad");
- }
- }
- /**
- * Special convention: when it's certain that CV will not be used at the
- * very beginning, use null as cvAlg. If known at a late stage, use "".
- */
- void test(String cvAlg, String finAlg) throws Exception {
- System.out.println("test: " + cvAlg + " " + finAlg);
- byte[] cv = null, f1, f2;
- HandshakeHash hh = new HandshakeHash(true, true, null);
- if (cvAlg == null) {
- hh.setCertificateVerifyAlg(cvAlg);
- }
-
- update(hh, "ClientHello,");
- hh.reset();
- update(hh, "ClientHellov2,");
- hh.setFinishedAlg(finAlg);
-
- // Useless calls
- hh.setFinishedAlg("SHA-1");
- hh.setFinishedAlg("SHA-512");
-
- update(hh, "More,");
- if (cvAlg != null) {
- if (cvAlg.isEmpty()) cvAlg = null;
- hh.setCertificateVerifyAlg(cvAlg);
- }
-
- // Useless calls
- hh.setCertificateVerifyAlg("SHA-1");
- hh.setCertificateVerifyAlg(null);
-
- hh.protocolDetermined(true);
-
- if (cvAlg != null) {
- cv = hh.getAllHandshakeMessages();
- equals(cv, "ClientHellov2,More,".getBytes());
- }
-
- update(hh, "FIN1,");
- f1 = hh.getFinishedHash();
- equals(f1, digest(finAlg, "ClientHellov2,More,FIN1,"));
- update(hh, "FIN2,");
- f2 = hh.getFinishedHash();
- equals(f2, digest(finAlg, "ClientHellov2,More,FIN1,FIN2,"));
- }
- }
}
/**
--- a/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/security/ssl/ServerHandshaker.java Thu Jan 06 18:05:56 2011 -0800
@@ -424,8 +424,7 @@
" not enabled or not supported");
}
- handshakeHash.protocolDetermined(
- selectedVersion.v >= ProtocolVersion.TLS12.v);
+ handshakeHash.protocolDetermined(selectedVersion);
setVersion(selectedVersion);
m1.protocolVersion = protocolVersion;
--- a/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/tools/jstat/resources/jstat_options Thu Jan 06 18:05:56 2011 -0800
@@ -589,7 +589,7 @@
}
column {
header "^S0CMX^" /* Survivor 0 Space Capacity - Maximum */
- data sun.gc.generation.0.space.1.capacity
+ data sun.gc.generation.0.space.1.maxCapacity
scale K
align right
width 8
@@ -597,7 +597,7 @@
}
column {
header "^S0C^" /* Survivor 0 Space Capacity - Current */
- data sun.gc.generation.0.space.1.maxCapacity
+ data sun.gc.generation.0.space.1.capacity
scale K
align right
width 8
--- a/jdk/src/share/classes/sun/util/logging/PlatformLogger.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/classes/sun/util/logging/PlatformLogger.java Thu Jan 06 18:05:56 2011 -0800
@@ -113,7 +113,7 @@
// Table of known loggers. Maps names to PlatformLoggers.
private static Map<String,WeakReference<PlatformLogger>> loggers =
- new HashMap<String,WeakReference<PlatformLogger>>();
+ new HashMap<>();
/**
* Returns a PlatformLogger of a given name.
@@ -126,7 +126,7 @@
}
if (log == null) {
log = new PlatformLogger(name);
- loggers.put(name, new WeakReference<PlatformLogger>(log));
+ loggers.put(name, new WeakReference<>(log));
}
return log;
}
@@ -488,7 +488,7 @@
*/
static class JavaLogger extends LoggerProxy {
private static final Map<Integer, Object> levelObjects =
- new HashMap<Integer, Object>();
+ new HashMap<>();
static {
if (LoggingSupport.isAvailable()) {
--- a/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/share/demo/jvmti/heapTracker/heapTracker.c Thu Jan 06 18:05:56 2011 -0800
@@ -340,7 +340,7 @@
}
/* Java Native Method for Object.<init> */
-static void
+static void JNICALL
HEAP_TRACKER_native_newobj(JNIEnv *env, jclass klass, jthread thread, jobject o)
{
TraceInfo *tinfo;
@@ -353,7 +353,7 @@
}
/* Java Native Method for newarray */
-static void
+static void JNICALL
HEAP_TRACKER_native_newarr(JNIEnv *env, jclass klass, jthread thread, jobject a)
{
TraceInfo *tinfo;
--- a/jdk/src/solaris/classes/java/lang/ProcessEnvironment.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/solaris/classes/java/lang/ProcessEnvironment.java Thu Jan 06 18:05:56 2011 -0800
@@ -68,7 +68,7 @@
// We cache the C environment. This means that subsequent calls
// to putenv/setenv from C will not be visible from Java code.
byte[][] environ = environ();
- theEnvironment = new HashMap<Variable,Value>(environ.length/2 + 3);
+ theEnvironment = new HashMap<>(environ.length/2 + 3);
// Read environment variables back to front,
// so that earlier variables override later ones.
for (int i = environ.length-1; i > 0; i-=2)
--- a/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/solaris/classes/java/util/prefs/FileSystemPreferences.java Thu Jan 06 18:05:56 2011 -0800
@@ -354,7 +354,7 @@
* log against that map. The resulting map is then written back
* to the disk.
*/
- final List<Change> changeLog = new ArrayList<Change>();
+ final List<Change> changeLog = new ArrayList<>();
/**
* Represents a change to a preference.
@@ -507,7 +507,7 @@
});
if (newNode) {
// These 2 things guarantee node will get wrtten at next flush/sync
- prefsCache = new TreeMap<String, String>();
+ prefsCache = new TreeMap<>();
nodeCreate = new NodeCreate();
changeLog.add(nodeCreate);
}
@@ -550,7 +550,7 @@
loadCache();
} catch(Exception e) {
// assert lastSyncTime == 0;
- prefsCache = new TreeMap<String, String>();
+ prefsCache = new TreeMap<>();
}
}
@@ -567,7 +567,7 @@
AccessController.doPrivileged(
new PrivilegedExceptionAction<Void>() {
public Void run() throws BackingStoreException {
- Map<String, String> m = new TreeMap<String, String>();
+ Map<String, String> m = new TreeMap<>();
long newLastSyncTime = 0;
try {
newLastSyncTime = prefsFile.lastModified();
@@ -581,7 +581,7 @@
prefsFile.renameTo( new File(
prefsFile.getParentFile(),
"IncorrectFormatPrefs.xml"));
- m = new TreeMap<String, String>();
+ m = new TreeMap<>();
} else if (e instanceof FileNotFoundException) {
getLogger().warning("Prefs file removed in background "
+ prefsFile.getPath());
@@ -646,7 +646,7 @@
return AccessController.doPrivileged(
new PrivilegedAction<String[]>() {
public String[] run() {
- List<String> result = new ArrayList<String>();
+ List<String> result = new ArrayList<>();
File[] dirContents = dir.listFiles();
if (dirContents != null) {
for (int i = 0; i < dirContents.length; i++)
@@ -794,7 +794,7 @@
} else if (lastSyncTime != 0 && !dir.exists()) {
// This node was removed in the background. Playback any changes
// against a virgin (empty) Map.
- prefsCache = new TreeMap<String, String>();
+ prefsCache = new TreeMap<>();
replayChanges();
}
if (!changeLog.isEmpty()) {
--- a/jdk/src/windows/classes/java/lang/ProcessEnvironment.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/windows/classes/java/lang/ProcessEnvironment.java Thu Jan 06 18:05:56 2011 -0800
@@ -250,8 +250,7 @@
envblock.substring(eql+1,end));
}
- theCaseInsensitiveEnvironment
- = new TreeMap<String,String>(nameComparator);
+ theCaseInsensitiveEnvironment = new TreeMap<>(nameComparator);
theCaseInsensitiveEnvironment.putAll(theEnvironment);
}
@@ -296,8 +295,7 @@
// Only for use by ProcessImpl.start()
String toEnvironmentBlock() {
// Sort Unicode-case-insensitively by name
- List<Map.Entry<String,String>> list
- = new ArrayList<Map.Entry<String,String>>(entrySet());
+ List<Map.Entry<String,String>> list = new ArrayList<>(entrySet());
Collections.sort(list, entryComparator);
StringBuilder sb = new StringBuilder(size()*30);
--- a/jdk/src/windows/native/java/net/Inet4AddressImpl.c Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/windows/native/java/net/Inet4AddressImpl.c Thu Jan 06 18:05:56 2011 -0800
@@ -559,8 +559,8 @@
if (timeout >= 0) {
optlen = sizeof(connect_rv);
- if (JVM_GetSockOpt(fd, SOL_SOCKET, SO_ERROR, (void*)&connect_rv,
- &optlen) <0) {
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&connect_rv,
+ &optlen) <0) {
connect_rv = WSAGetLastError();
}
--- a/jdk/src/windows/native/java/net/Inet6AddressImpl.c Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/src/windows/native/java/net/Inet6AddressImpl.c Thu Jan 06 18:05:56 2011 -0800
@@ -671,8 +671,8 @@
if (timeout >= 0) {
/* has connection been established? */
optlen = sizeof(connect_rv);
- if (JVM_GetSockOpt(fd, SOL_SOCKET, SO_ERROR, (void*)&connect_rv,
- &optlen) <0) {
+ if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&connect_rv,
+ &optlen) <0) {
connect_rv = WSAGetLastError();
}
--- a/jdk/test/java/awt/xembed/server/TestXEmbedServer.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/awt/xembed/server/TestXEmbedServer.java Thu Jan 06 18:05:56 2011 -0800
@@ -31,6 +31,9 @@
import java.awt.datatransfer.*;
public abstract class TestXEmbedServer {
+ // vertical position of server AND client windows
+ private static final int VERTICAL_POSITION = 200;
+
private static final Logger log = Logger.getLogger("test.xembed");
Frame f;
Canvas client;
@@ -161,10 +164,10 @@
dummy = new JFrame("Dummy");
dummy.getContentPane().add(new JButton("Button"));
dummy.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- dummy.setBounds(0, 0, 100, 100);
+ dummy.setBounds(0, VERTICAL_POSITION, 100, 100);
dummy.setVisible(true);
- f.setBounds(300, 0, 800, 300);
+ f.setBounds(300, VERTICAL_POSITION, 800, 300);
f.setVisible(true);
}
--- a/jdk/test/java/io/Serializable/NPEProvoker/NPEProvoker.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/io/Serializable/NPEProvoker/NPEProvoker.java Thu Jan 06 18:05:56 2011 -0800
@@ -56,7 +56,7 @@
public static void main(String[] args) {
System.err.println("\n Regression test for bug 6541870\n");
try {
- ArrayList<NPEProvoker> list = new ArrayList<NPEProvoker>();
+ ArrayList<NPEProvoker> list = new ArrayList<>();
list.add(new NPEProvoker());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
--- a/jdk/test/java/lang/instrument/ilib/Inject.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/lang/instrument/ilib/Inject.java Thu Jan 06 18:05:56 2011 -0800
@@ -107,7 +107,7 @@
class IndexedInjector implements TrackerInjector {
int counter = 0;
int tracker;
- List<Info> infoList = new ArrayList<Info>();
+ List<Info> infoList = new ArrayList<>();
public int stackSize(int currentSize) {
return currentSize + 1;
--- a/jdk/test/java/lang/instrument/ilib/InjectBytecodes.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/lang/instrument/ilib/InjectBytecodes.java Thu Jan 06 18:05:56 2011 -0800
@@ -50,7 +50,7 @@
private final Injector[] after = new Injector[256];
private final String className;
private final String methodName;
- private final Map<Integer,byte[]> snippets = new HashMap<Integer,byte[]>();
+ private final Map<Integer,byte[]> snippets = new HashMap<>();
private int pos;
private int newPos;
--- a/jdk/test/java/lang/reflect/Generics/TestPlainArrayNotGeneric.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/lang/reflect/Generics/TestPlainArrayNotGeneric.java Thu Jan 06 18:05:56 2011 -0800
@@ -103,7 +103,7 @@
}
}
- private static final Set<Type> checking = new HashSet<Type>();
+ private static final Set<Type> checking = new HashSet<>();
private static void check(Type t, String what) {
if (t == null || !checking.add(t))
--- a/jdk/test/java/util/Random/DistinctSeeds.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/util/Random/DistinctSeeds.java Thu Jan 06 18:05:56 2011 -0800
@@ -59,7 +59,7 @@
}
}
final int threadCount = 2;
- List<RandomCollector> collectors = new ArrayList<RandomCollector>();
+ List<RandomCollector> collectors = new ArrayList<>();
List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < threadCount; i++) {
RandomCollector r = new RandomCollector();
--- a/jdk/test/java/util/logging/ClassLoaderLeakTest.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/java/util/logging/ClassLoaderLeakTest.java Thu Jan 06 18:05:56 2011 -0800
@@ -89,7 +89,7 @@
MyClassLoader appClassLoader = new MyClassLoader(urls, "test0");
WeakReference<MyClassLoader> ref =
- new WeakReference<MyClassLoader>(appClassLoader);
+ new WeakReference<>(appClassLoader);
Thread appThread = new Thread(appsThreadGroup, launcher, "AppThread-0");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/zip/ZipFile/FinalizeZipFile.java Thu Jan 06 18:05:56 2011 -0800
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2010, 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 7007609 7009618
+ * @summary Check that ZipFile objects are always collected
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.util.Random;
+import java.util.zip.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class FinalizeZipFile {
+
+ private final static CountDownLatch finalizersDone = new CountDownLatch(3);
+
+ private static class InstrumentedZipFile extends ZipFile {
+
+ public InstrumentedZipFile(File f) throws Exception {
+ super(f);
+ System.out.printf("Using %s%n", f.getPath());
+ }
+ protected void finalize() throws IOException {
+ System.out.printf("Killing %s%n", getName());
+ super.finalize();
+ finalizersDone.countDown();
+ }
+ }
+
+ private static void makeGarbage() throws Throwable {
+ final Random rnd = new Random();
+ final String javaHome = System.getProperty("java.home");
+ // Create some ZipFiles.
+ // Find some .jar files in JDK's lib directory.
+ final File lib = new File(javaHome, "lib");
+ check(lib.isDirectory());
+ final File[] jars = lib.listFiles(
+ new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".jar");}});
+ check(jars.length > 1);
+
+ new InstrumentedZipFile(jars[rnd.nextInt(jars.length)]).close();
+ new InstrumentedZipFile(jars[rnd.nextInt(jars.length)]).close();
+
+ // Create a ZipFile and get an input stream from it
+ ZipFile zf = new InstrumentedZipFile(jars[rnd.nextInt(jars.length)]);
+ ZipEntry ze = zf.getEntry("META-INF/MANIFEST.MF");
+ InputStream is = zf.getInputStream(ze);
+ }
+
+ public static void realMain(String[] args) throws Throwable {
+ makeGarbage();
+
+ System.gc();
+ finalizersDone.await(5, TimeUnit.SECONDS);
+
+ // Not all ZipFiles were collected?
+ equal(finalizersDone.getCount(), 0L);
+ }
+
+ //--------------------- Infrastructure ---------------------------
+ static volatile int passed = 0, failed = 0;
+ static void pass() {passed++;}
+ static void fail() {failed++; Thread.dumpStack();}
+ static void fail(String msg) {System.out.println(msg); fail();}
+ static void unexpected(Throwable t) {failed++; t.printStackTrace();}
+ static void check(boolean cond) {if (cond) pass(); else fail();}
+ static void equal(Object x, Object y) {
+ if (x == null ? y == null : x.equals(y)) pass();
+ else fail(x + " not equal to " + y);}
+ public static void main(String[] args) throws Throwable {
+ try {realMain(args);} catch (Throwable t) {unexpected(t);}
+ System.out.printf("%nPassed = %d, failed = %d%n%n", passed, failed);
+ if (failed > 0) throw new AssertionError("Some tests failed");}
+}
+
--- a/jdk/test/javax/script/E4XErrorTest.java Thu Jan 06 18:03:25 2011 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2005, 2008, 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.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6346734 6705893
- * @summary We do *not* support E4X (ECMAScript for XML) in our
- * implementation. We want to throw error on XML literals
- * as early as possible rather than at "runtime" - i.e., when
- * engine looks for "XML" constructor.
- */
-
-import javax.script.*;
-import java.util.Locale;
-
-public class E4XErrorTest {
-
- public static void main(String[] args) throws Exception {
- ScriptEngineManager manager = new ScriptEngineManager();
- ScriptEngine jsengine = Helper.getJsEngine(manager);
- if (jsengine == null) {
- System.out.println("Warning: No js engine found; test vacuously passes.");
- return;
- }
-
- // The test below depends on the error message content
- // that is loaded from resource bundles. So, we force
- // English Locale to compare correct value..
- Locale.setDefault(Locale.US);
-
- try {
- jsengine.eval("var v = <html></html>;");
- } catch (ScriptException se) {
- String msg = se.getMessage();
- if (msg.indexOf("syntax error") == -1) {
- throw new RuntimeException("syntax error expected, got " +
- msg);
- }
- return;
- }
- // should not reach here.. exception should have been thrown.
- throw new RuntimeException("Huh! E4X is supported??");
- }
-}
--- a/jdk/test/javax/script/VersionTest.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/javax/script/VersionTest.java Thu Jan 06 18:05:56 2011 -0800
@@ -32,8 +32,8 @@
public class VersionTest {
- private static final String JS_LANG_VERSION = "1.6";
- private static final String JS_ENGINE_VERSION = "1.6 release 2";
+ private static final String JS_LANG_VERSION = "1.8";
+ private static final String JS_ENGINE_VERSION = "1.7 release 3 PRERELEASE";
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
--- a/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/sun/security/krb5/auto/BasicKrb5Test.java Thu Jan 06 18:05:56 2011 -0800
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2010, 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
@@ -25,6 +25,34 @@
* @test
* @bug 6706974
* @summary Add krb5 test infrastructure
+ * @run main/othervm BasicKrb5Test
+ * @run main/othervm BasicKrb5Test des-cbc-crc
+ * @run main/othervm BasicKrb5Test des-cbc-md5
+ * @run main/othervm BasicKrb5Test des3-cbc-sha1
+ * @run main/othervm BasicKrb5Test aes128-cts
+ * @run main/othervm BasicKrb5Test aes256-cts
+ * @run main/othervm BasicKrb5Test rc4-hmac
+ * @run main/othervm BasicKrb5Test -s
+ * @run main/othervm BasicKrb5Test des-cbc-crc -s
+ * @run main/othervm BasicKrb5Test des-cbc-md5 -s
+ * @run main/othervm BasicKrb5Test des3-cbc-sha1 -s
+ * @run main/othervm BasicKrb5Test aes128-cts -s
+ * @run main/othervm BasicKrb5Test aes256-cts -s
+ * @run main/othervm BasicKrb5Test rc4-hmac -s
+ * @run main/othervm BasicKrb5Test -C
+ * @run main/othervm BasicKrb5Test des-cbc-crc -C
+ * @run main/othervm BasicKrb5Test des-cbc-md5 -C
+ * @run main/othervm BasicKrb5Test des3-cbc-sha1 -C
+ * @run main/othervm BasicKrb5Test aes128-cts -C
+ * @run main/othervm BasicKrb5Test aes256-cts -C
+ * @run main/othervm BasicKrb5Test rc4-hmac -C
+ * @run main/othervm BasicKrb5Test -s -C
+ * @run main/othervm BasicKrb5Test des-cbc-crc -s -C
+ * @run main/othervm BasicKrb5Test des-cbc-md5 -s -C
+ * @run main/othervm BasicKrb5Test des3-cbc-sha1 -s -C
+ * @run main/othervm BasicKrb5Test aes128-cts -s -C
+ * @run main/othervm BasicKrb5Test aes256-cts -s -C
+ * @run main/othervm BasicKrb5Test rc4-hmac -s -C
*/
import org.ietf.jgss.GSSName;
@@ -39,6 +67,7 @@
*/
public class BasicKrb5Test {
+ private static boolean conf = true;
/**
* @param args empty or etype
*/
@@ -46,8 +75,10 @@
throws Exception {
String etype = null;
- if (args.length > 0) {
- etype = args[0];
+ for (String arg: args) {
+ if (arg.equals("-s")) Context.usingStream = true;
+ else if(arg.equals("-C")) conf = false;
+ else etype = arg;
}
// Creates and starts the KDC. This line must be put ahead of etype check
@@ -56,8 +87,9 @@
System.out.println("Testing etype " + etype);
if (etype != null && !EType.isSupported(Config.getInstance().getType(etype))) {
+ // aes256 is not enabled on all systems
System.out.println("Not supported.");
- System.exit(0);
+ return;
}
new BasicKrb5Test().go(OneKDC.SERVER, OneKDC.BACKEND);
@@ -71,6 +103,7 @@
c.startAsClient(server, GSSUtil.GSS_KRB5_MECH_OID);
c.x().requestCredDeleg(true);
+ c.x().requestConf(conf);
s.startAsServer(GSSUtil.GSS_KRB5_MECH_OID);
c.status();
@@ -90,6 +123,7 @@
s = null;
s2.startAsClient(backend, GSSUtil.GSS_KRB5_MECH_OID);
+ s2.x().requestConf(conf);
b.startAsServer(GSSUtil.GSS_KRB5_MECH_OID);
s2.status();
--- a/jdk/test/sun/security/krb5/auto/Context.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/sun/security/krb5/auto/Context.java Thu Jan 06 18:05:56 2011 -0800
@@ -42,7 +42,8 @@
import com.sun.security.jgss.ExtendedGSSContext;
import com.sun.security.jgss.InquireType;
import com.sun.security.jgss.AuthorizationDataEntry;
-import java.io.File;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
/**
* Context of a JGSS subject, encapsulating Subject and GSSContext.
@@ -78,6 +79,8 @@
private String name;
private GSSCredential cred; // see static method delegated().
+ static boolean usingStream = false;
+
private Context() {}
/**
@@ -365,7 +368,14 @@
public byte[] run(Context me, byte[] dummy) throws Exception {
System.out.println("wrap");
MessageProp p1 = new MessageProp(0, true);
- byte[] out = me.x.wrap(messageBytes, 0, messageBytes.length, p1);
+ byte[] out;
+ if (usingStream) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ me.x.wrap(new ByteArrayInputStream(messageBytes), os, p1);
+ out = os.toByteArray();
+ } else {
+ out = me.x.wrap(messageBytes, 0, messageBytes.length, p1);
+ }
System.out.println(printProp(p1));
return out;
}
@@ -375,27 +385,46 @@
@Override
public byte[] run(Context me, byte[] input) throws Exception {
MessageProp p1 = new MessageProp(0, true);
- byte[] bytes = me.x.unwrap(input, 0, input.length, p1);
+ byte[] bytes;
+ if (usingStream) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ me.x.unwrap(new ByteArrayInputStream(input), os, p1);
+ bytes = os.toByteArray();
+ } else {
+ bytes = me.x.unwrap(input, 0, input.length, p1);
+ }
if (!Arrays.equals(messageBytes, bytes))
throw new Exception("wrap/unwrap mismatch");
System.out.println("unwrap");
System.out.println(printProp(p1));
p1 = new MessageProp(0, true);
System.out.println("getMIC");
- bytes = me.x.getMIC(bytes, 0, bytes.length, p1);
+ if (usingStream) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ me.x.getMIC(new ByteArrayInputStream(messageBytes), os, p1);
+ bytes = os.toByteArray();
+ } else {
+ bytes = me.x.getMIC(messageBytes, 0, messageBytes.length, p1);
+ }
System.out.println(printProp(p1));
return bytes;
}
}, t);
+
// Re-unwrap should make p2.isDuplicateToken() returns true
s1.doAs(new Action() {
@Override
public byte[] run(Context me, byte[] input) throws Exception {
MessageProp p1 = new MessageProp(0, true);
System.out.println("verifyMIC");
- me.x.verifyMIC(input, 0, input.length,
- messageBytes, 0, messageBytes.length,
- p1);
+ if (usingStream) {
+ me.x.verifyMIC(new ByteArrayInputStream(input),
+ new ByteArrayInputStream(messageBytes), p1);
+ } else {
+ me.x.verifyMIC(input, 0, input.length,
+ messageBytes, 0, messageBytes.length,
+ p1);
+ }
System.out.println(printProp(p1));
return null;
}
@@ -416,7 +445,9 @@
sb.append(prop.isGapToken()?"gap, ":"");
sb.append(prop.isOldToken()?"old, ":"");
sb.append(prop.isUnseqToken()?"unseq, ":"");
- sb.append(prop.getMinorString()+ "(" + prop.getMinorStatus()+")");
+ if (prop.getMinorStatus() != 0) {
+ sb.append(prop.getMinorString()+ "(" + prop.getMinorStatus()+")");
+ }
return sb.toString();
}
@@ -442,7 +473,13 @@
return null;
} else {
System.out.println(c.name + " call initSecContext");
- return me.x.initSecContext(input, 0, input.length);
+ if (usingStream) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ me.x.initSecContext(new ByteArrayInputStream(input), os);
+ return os.size() == 0 ? null : os.toByteArray();
+ } else {
+ return me.x.initSecContext(input, 0, input.length);
+ }
}
}
}, t);
@@ -460,7 +497,13 @@
return null;
} else {
System.out.println(s.name + " called acceptSecContext");
- return me.x.acceptSecContext(input, 0, input.length);
+ if (usingStream) {
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ me.x.acceptSecContext(new ByteArrayInputStream(input), os);
+ return os.size() == 0 ? null : os.toByteArray();
+ } else {
+ return me.x.acceptSecContext(input, 0, input.length);
+ }
}
}
}, t);
--- a/jdk/test/sun/security/krb5/auto/basic.sh Thu Jan 06 18:03:25 2011 -0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-#
-# Copyright (c) 2008, 2009, 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.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# @test
-# @bug 6706974
-# @summary Add krb5 test infrastructure
-# @run shell/timeout=300 basic.sh
-#
-
-if [ "${TESTSRC}" = "" ] ; then
- TESTSRC="."
-fi
-if [ "${TESTJAVA}" = "" ] ; then
- echo "TESTJAVA not set. Test cannot execute."
- echo "FAILED!!!"
- exit 1
-fi
-
-# set platform-dependent variables
-OS=`uname -s`
-case "$OS" in
- Windows_* )
- FS="\\"
- SEP=";"
- ;;
- CYGWIN* )
- FS="/"
- SEP=";"
- ;;
- * )
- FS="/"
- SEP=":"
- ;;
-esac
-
-${TESTJAVA}${FS}bin${FS}javac -XDignore.symbol.file -d . \
- ${TESTSRC}${FS}BasicKrb5Test.java \
- ${TESTSRC}${FS}KDC.java \
- ${TESTSRC}${FS}OneKDC.java \
- ${TESTSRC}${FS}Action.java \
- ${TESTSRC}${FS}Context.java \
- || exit 10
-
-# Add $TESTSRC to classpath so that customized nameservice can be used
-J="${TESTJAVA}${FS}bin${FS}java -cp $TESTSRC${SEP}. BasicKrb5Test"
-
-$J || exit 100
-$J des-cbc-crc || exit 1
-$J des-cbc-md5 || exit 3
-$J des3-cbc-sha1 || exit 16
-$J aes128-cts || exit 17
-$J aes256-cts || exit 18
-$J rc4-hmac || exit 23
-
-exit 0
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/Provider/ConfigShortPath.java Thu Jan 06 18:05:56 2011 -0800
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010, 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/**
+ * @test
+ * @bug 6581254
+ * @summary Allow "~" in config to support windows short path
+ * @author Valerie Peng
+ */
+
+import java.security.*;
+import java.io.*;
+
+public class ConfigShortPath {
+
+ public static void main(String[] args) {
+ String testSrc = System.getProperty("test.src", ".");
+ String configFile = testSrc + File.separator + "csp.cfg";
+ System.out.println("Testing against " + configFile);
+ try {
+ Provider p = new sun.security.pkcs11.SunPKCS11(configFile);
+ } catch (ProviderException pe) {
+ String cause = pe.getCause().getMessage();
+ if (cause.indexOf("Unexpected token") != -1) {
+ // re-throw to indicate test failure
+ throw pe;
+ }
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/pkcs11/Provider/csp.cfg Thu Jan 06 18:05:56 2011 -0800
@@ -0,0 +1,4 @@
+showInfo = false
+name = NSSTrust
+nssSecmodDirectory = C:/DOCUME~1/dtftest/LOCALS~1/Temp/Work/exec/jsn_7.0_int-7.0_nightly_sec_win_32_part2-2007-07-16-09-06-04-0209/dtftest.Windows_2003.x86/NSS//db
+nssLibraryDirectory = Y:/xml/CC_DTF/knight_ws/suites/jsn_7.0_int/security/tools/lib/nss/WINNT/
--- a/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/sun/tools/jstat/gcNewCapacityOutput1.awk Thu Jan 06 18:05:56 2011 -0800
@@ -4,7 +4,7 @@
# specific values.
#
# NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
-# 2176.0 7232.0 2176.0 64.0 192.0 192.0 64.0 6848.0 2048.0 1 0
+# 2176.0 7232.0 2176.0 192.0 64.0 192.0 64.0 6848.0 2048.0 1 0
BEGIN {
--- a/jdk/test/tools/launcher/Settings.java Thu Jan 06 18:03:25 2011 -0800
+++ b/jdk/test/tools/launcher/Settings.java Thu Jan 06 18:05:56 2011 -0800
@@ -74,8 +74,15 @@
static void runTestOptionDefault() throws IOException {
TestHelper.TestResult tr = null;
- tr = TestHelper.doExec(TestHelper.javaCmd, "-Xmx512m", "-Xss128k",
- "-XshowSettings", "-jar", testJar.getAbsolutePath());
+ tr = TestHelper.doExec(TestHelper.javaCmd, "-Xms64m", "-Xmx512m",
+ "-Xss128k", "-XshowSettings", "-jar", testJar.getAbsolutePath());
+ containsAllOptions(tr);
+ if (!tr.isOK()) {
+ System.out.println(tr.status);
+ throw new RuntimeException("test fails");
+ }
+ tr = TestHelper.doExec(TestHelper.javaCmd, "-Xms65536k", "-Xmx712m",
+ "-Xss122880", "-XshowSettings", "-jar", testJar.getAbsolutePath());
containsAllOptions(tr);
if (!tr.isOK()) {
System.out.println(tr.status);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/pack200/T7007157.java Thu Jan 06 18:05:56 2011 -0800
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2010, 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Map;
+import java.util.jar.JarFile;
+import java.util.jar.Pack200;
+/*
+ * @test
+ * @bug 7007157
+ * @summary make sure the strip command works on an attribute
+ * @compile -XDignore.symbol.file Utils.java T7007157.java
+ * @run main T7007157
+ * @author ksrini
+ */
+public class T7007157 {
+
+ public static void main(String... args) throws IOException {
+ File sdkHome = Utils.JavaSDK;
+ File testJar = new File(new File(sdkHome, "lib"), "tools.jar");
+ JarFile jarFile = new JarFile(testJar);
+ File packFile = new File("foo.pack");
+ Pack200.Packer packer = Pack200.newPacker();
+ Map<String, String> p = packer.properties();
+ // Take the time optimization vs. space
+ p.put(packer.EFFORT, "1"); // CAUTION: do not use 0.
+ // Make the memory consumption as effective as possible
+ p.put(packer.SEGMENT_LIMIT, "10000");
+ // ignore all JAR deflation requests to save time
+ p.put(packer.DEFLATE_HINT, packer.FALSE);
+ // save the file ordering of the original JAR
+ p.put(packer.KEEP_FILE_ORDER, packer.TRUE);
+ // strip the StackMapTables
+ p.put(packer.CODE_ATTRIBUTE_PFX + "StackMapTable", packer.STRIP);
+ FileOutputStream fos = null;
+ try {
+ // Write out to a jtreg scratch area
+ fos = new FileOutputStream(packFile);
+ // Call the packer
+ packer.pack(jarFile, fos);
+ } finally {
+ Utils.close(fos);
+ Utils.close(jarFile);
+ }
+ }
+}