You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by qi...@apache.org on 2009/04/19 13:15:34 UTC
svn commit: r766448 [3/4] - in /harmony/enhanced/classlib/branches/java6: ./
depends/files/ depends/jars/icu4j_3.8/ depends/jars/icu4j_4.0/
depends/manifests/icu4j_3.8/META-INF/ depends/manifests/icu4j_4.0/
depends/manifests/icu4j_4.0/META-INF/ make/ m...
Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SocketChannelImpl.java Sun Apr 19 11:15:28 2009
@@ -47,6 +47,7 @@
import org.apache.harmony.luni.platform.INetworkSystem;
import org.apache.harmony.luni.platform.Platform;
import org.apache.harmony.luni.util.ErrorCodeException;
+import org.apache.harmony.luni.util.Msg;
import org.apache.harmony.nio.AddressUtil;
import org.apache.harmony.nio.internal.nls.Messages;
@@ -845,6 +846,81 @@
.booleanValue();
}
+ @Override
+ public void setKeepAlive(boolean value) throws SocketException {
+ checkOpen();
+ socketImpl.setOption(SocketOptions.SO_KEEPALIVE, value ? Boolean.TRUE
+ : Boolean.FALSE);
+ }
+
+ @Override
+ public void setOOBInline(boolean oobinline) throws SocketException {
+ checkOpen();
+ socketImpl.setOption(SocketOptions.SO_OOBINLINE, oobinline ? Boolean.TRUE
+ : Boolean.FALSE);
+ }
+
+ @Override
+ public synchronized void setReceiveBufferSize(int size)
+ throws SocketException {
+ checkOpen();
+ if (size < 1) {
+ throw new IllegalArgumentException(Msg.getString("K0035")); //$NON-NLS-1$
+ }
+ socketImpl
+ .setOption(SocketOptions.SO_RCVBUF, Integer.valueOf(size));
+ }
+
+ @Override
+ public void setReuseAddress(boolean reuse) throws SocketException {
+ checkOpen();
+ socketImpl.setOption(SocketOptions.SO_REUSEADDR, reuse ? Boolean.TRUE
+ : Boolean.FALSE);
+ }
+
+ @Override
+ public synchronized void setSendBufferSize(int size) throws SocketException {
+ checkOpen();
+ if (size < 1) {
+ throw new IllegalArgumentException(Msg.getString("K0035")); //$NON-NLS-1$
+ }
+ socketImpl.setOption(SocketOptions.SO_SNDBUF, Integer.valueOf(size));
+ }
+
+ @Override
+ public void setSoLinger(boolean on, int timeout) throws SocketException {
+ checkOpen();
+ if (on && timeout < 0) {
+ throw new IllegalArgumentException(Msg.getString("K0045")); //$NON-NLS-1$
+ }
+ int val = on ? (65535 < timeout ? 65535 : timeout) : -1;
+ socketImpl.setOption(SocketOptions.SO_LINGER, Integer.valueOf(val));
+ }
+
+ @Override
+ public synchronized void setSoTimeout(int timeout) throws SocketException {
+ checkOpen();
+ if (timeout < 0) {
+ throw new IllegalArgumentException(Msg.getString("K0036")); //$NON-NLS-1$
+ }
+ socketImpl.setOption(SocketOptions.SO_TIMEOUT, Integer.valueOf(timeout));
+ }
+
+ @Override
+ public void setTcpNoDelay(boolean on) throws SocketException {
+ checkOpen();
+ socketImpl.setOption(SocketOptions.TCP_NODELAY, Boolean.valueOf(on));
+ }
+
+ @Override
+ public void setTrafficClass(int value) throws SocketException {
+ checkOpen();
+ if (value < 0 || value > 255) {
+ throw new IllegalArgumentException();
+ }
+ socketImpl.setOption(SocketOptions.IP_TOS, Integer.valueOf(value));
+ }
+
/**
* @see java.net.Socket#getOutputStream()
*/
Modified: harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/nio/src/test/java/common/org/apache/harmony/nio/tests/java/nio/channels/SocketChannelTest.java Sun Apr 19 11:15:28 2009
@@ -3085,6 +3085,39 @@
}
}
+ public void testSocket_setOptions() throws IOException {
+ channel1.connect(localAddr1);
+ Socket socket = channel1.socket();
+
+ ByteBuffer buffer = ByteBuffer.wrap(new byte[] {1, 2, 3});
+ socket.setKeepAlive(true);
+ channel1.write(buffer);
+
+ socket.setOOBInline(true);
+ channel1.write(buffer);
+
+ socket.setReceiveBufferSize(100);
+ channel1.write(buffer);
+
+ socket.setReuseAddress(true);
+ channel1.write(buffer);
+
+ socket.setSendBufferSize(100);
+ channel1.write(buffer);
+
+ socket.setSoLinger(true, 100);
+ channel1.write(buffer);
+
+ socket.setSoTimeout(1000);
+ channel1.write(buffer);
+
+ socket.setTcpNoDelay(true);
+ channel1.write(buffer);
+
+ socket.setTrafficClass(10);
+ channel1.write(buffer);
+ }
+
class MockSocketChannel extends SocketChannel{
private boolean isWriteCalled = false;
Modified: harmony/enhanced/classlib/branches/java6/modules/nio_char/src/main/java/java/nio/charset/Charset.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/nio_char/src/main/java/java/nio/charset/Charset.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/nio_char/src/main/java/java/nio/charset/Charset.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/nio_char/src/main/java/java/nio/charset/Charset.java Sun Apr 19 11:15:28 2009
@@ -109,6 +109,8 @@
// cached Charset table
private final static HashMap<String, Charset> cachedCharsetTable = new HashMap<String, Charset>();
+ private static boolean inForNameInternal = false;
+
static {
/*
* Create built-in charset provider even if no privilege to access
@@ -322,6 +324,11 @@
*/
@SuppressWarnings("unchecked")
public static SortedMap<String, Charset> availableCharsets() {
+ // workaround: conflicted Charsets with icu4j 4.0
+ Charset.forName("TIS-620");
+ Charset.forName("windows-1258");
+ Charset.forName("cp856");
+ Charset.forName("cp922");
// Initialize the built-in charsets map cache if necessary
if (null == _builtInCharsets) {
synchronized (Charset.class) {
@@ -468,8 +475,10 @@
// examine each configuration file
while (e.hasMoreElements()) {
- cs = searchConfiguredCharsets(charsetName, contextClassLoader,
+ inForNameInternal = true;
+ cs = searchConfiguredCharsets(charsetName, contextClassLoader,
e.nextElement());
+ inForNameInternal = false;
if (null != cs) {
cacheCharset(cs);
return cs;
@@ -477,6 +486,8 @@
}
} catch (IOException ex) {
// Unexpected ClassLoader exception, ignore
+ } finally {
+ inForNameInternal = false;
}
return null;
}
@@ -485,13 +496,17 @@
* save charset into cachedCharsetTable
*/
private static void cacheCharset(Charset cs) {
- cachedCharsetTable.put(cs.name(), cs);
+ if (!cachedCharsetTable.containsKey(cs.name())){
+ cachedCharsetTable.put(cs.name(), cs);
+ }
Set<String> aliasesSet = cs.aliases();
if (null != aliasesSet) {
Iterator<String> iter = aliasesSet.iterator();
while (iter.hasNext()) {
String alias = iter.next();
- cachedCharsetTable.put(alias, cs);
+ if (!cachedCharsetTable.containsKey(alias)) {
+ cachedCharsetTable.put(alias, cs);
+ }
}
}
}
@@ -525,8 +540,32 @@
* If the specified charset name is illegal.
*/
public static boolean isSupported(String charsetName) {
- Charset cs = forNameInternal(charsetName);
- return (null != cs);
+ if (inForNameInternal == true) {
+ Charset cs = cachedCharsetTable.get(charsetName);
+ if (null != cs) {
+ return true;
+ }
+
+ if (null == charsetName) {
+ throw new IllegalArgumentException();
+ }
+ checkCharsetName(charsetName);
+
+ // Try built-in charsets
+ if (_builtInProvider == null) {
+ _builtInProvider = new CharsetProviderImpl();
+ }
+ cs = _builtInProvider.charsetForName(charsetName);
+ if (null != cs) {
+ cacheCharset(cs);
+ return true;
+ }
+ return false;
+ } else {
+ Charset cs = forNameInternal(charsetName);
+ return (null != cs);
+ }
+
}
/**
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Archive.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Archive.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Archive.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Archive.java Sun Apr 19 11:15:28 2009
@@ -28,6 +28,7 @@
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
+import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.GZIPOutputStream;
@@ -44,6 +45,7 @@
private long segmentLimit = 1000000;
private long currentSegmentSize;
private boolean stripDebug;
+ private int effort = 5;
public Archive(JarInputStream inputStream, OutputStream outputStream,
boolean gzip) throws IOException {
@@ -54,7 +56,12 @@
this.outputStream = new BufferedOutputStream(outputStream);
}
- public Archive(JarFile jarFile, OutputStream outputStream) {
+ public Archive(JarFile jarFile, OutputStream outputStream,
+ boolean gzip) throws IOException {
+
+ if (gzip) {
+ outputStream = new GZIPOutputStream(outputStream);
+ }
this.outputStream = new BufferedOutputStream(outputStream);
this.jarFile = jarFile;
inputStream = null;
@@ -64,6 +71,10 @@
segmentLimit = limit;
}
+ public void setEffort(int effort) {
+ this.effort = effort;
+ }
+
public void stripDebugAttributes() {
stripDebug = true;
}
@@ -71,66 +82,127 @@
public void pack() throws Pack200Exception, IOException {
List classes = new ArrayList();
List files = new ArrayList();
- Manifest manifest = jarFile != null ? jarFile.getManifest()
- : inputStream.getManifest();
- if (manifest != null) {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- manifest.write(baos);
- // TODO: Need to add this in some cases, but I'm not sure which at the moment
-// files.add(new File("META-INF", new byte[0], 0));
- files.add(new File("META-INF/MANIFEST.MF", baos.toByteArray(), 0));
- }
- if (inputStream != null) {
- JarEntry jarEntry = inputStream.getNextJarEntry();
- while (jarEntry != null) {
- boolean added = addJarEntry(jarEntry,
- new BufferedInputStream(inputStream), classes,
- files);
- if (!added) { // not added because segment has reached
- // maximum size
- if(classes.size() > 0 || files.size() > 0) {
- new Segment().pack(classes, files, outputStream, stripDebug);
+
+ if(effort == 0) {
+ doZeroEffortPack();
+ } else {
+
+ if (inputStream != null) {
+ Manifest manifest = jarFile != null ? jarFile.getManifest()
+ : inputStream.getManifest();
+ if (manifest != null) {
+ System.out.println("manifest exists");
+ System.out.println(manifest.toString());
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ manifest.write(baos);
+ files.add(new File("META-INF", new byte[0], 0));
+ files.add(new File("META-INF/MANIFEST.MF", baos.toByteArray(), 0));
+ }
+ JarEntry jarEntry = inputStream.getNextJarEntry();
+ while (jarEntry != null) {
+ if(jarEntry.getName().startsWith("META-INF")) {
+ System.out.println(jarEntry.getName());
+ }
+ boolean added = addJarEntry(jarEntry,
+ new BufferedInputStream(inputStream), classes,
+ files);
+ if (!added) { // not added because segment has reached
+ // maximum size
+ if(classes.size() > 0 || files.size() > 0) {
+ new Segment().pack(classes, files, outputStream, stripDebug, effort);
+ classes = new ArrayList();
+ files = new ArrayList();
+ currentSegmentSize = 0;
+ addJarEntry(jarEntry, new BufferedInputStream(inputStream), classes, files);
+ currentSegmentSize = 0; // ignore the size of the first entry for compatibility with the RI
+ }
+ } else if (segmentLimit == 0 && estimateSize(jarEntry) > 0) {
+ // create a new segment for each class unless size = 0
+ new Segment().pack(classes, files, outputStream, stripDebug, effort);
+ classes = new ArrayList();
+ files = new ArrayList();
+ }
+ jarEntry = inputStream.getNextJarEntry();
+ }
+ } else {
+ Enumeration jarEntries = jarFile.entries();
+ while (jarEntries.hasMoreElements()) {
+ JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
+ boolean added = addJarEntry(jarEntry, new BufferedInputStream(
+ jarFile.getInputStream(jarEntry)), classes, files);
+ if (!added) { // not added because segment has reached maximum
+ // size
+ new Segment().pack(classes, files, outputStream, stripDebug, effort);
classes = new ArrayList();
files = new ArrayList();
currentSegmentSize = 0;
- addJarEntry(jarEntry, new BufferedInputStream(inputStream), classes, files);
+ addJarEntry(jarEntry, new BufferedInputStream(jarFile
+ .getInputStream(jarEntry)), classes, files);
currentSegmentSize = 0; // ignore the size of the first entry for compatibility with the RI
+ } else if (segmentLimit == 0 && estimateSize(jarEntry) > 0) {
+ // create a new segment for each class unless size = 0
+ new Segment().pack(classes, files, outputStream, stripDebug, effort);
+ classes = new ArrayList();
+ files = new ArrayList();
}
- } else if (segmentLimit == 0 && estimateSize(jarEntry) > 0) {
- // create a new segment for each class unless size = 0
- new Segment().pack(classes, files, outputStream, stripDebug);
- classes = new ArrayList();
- files = new ArrayList();
}
- jarEntry = inputStream.getNextJarEntry();
}
+ if(classes.size() > 0 || files.size() > 0) {
+ new Segment().pack(classes, files, outputStream, stripDebug, effort);
+ }
+ outputStream.close();
+ }
+ }
+
+ private void doZeroEffortPack() throws IOException, Pack200Exception {
+ JarOutputStream jarOutputStream = new JarOutputStream(outputStream);
+ if(inputStream != null) {
+ JarInputStream jarInputStream;
+ if(!(inputStream instanceof JarInputStream)) {
+ jarInputStream = new JarInputStream(inputStream);
+ } else {
+ jarInputStream = inputStream;
+ }
+ Manifest manifest = jarInputStream.getManifest();
+ if (manifest != null) {
+ jarOutputStream.putNextEntry(new JarEntry("META-INF/"));
+ jarOutputStream.closeEntry();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ manifest.write(baos);
+ jarOutputStream.putNextEntry(new JarEntry("META-INF/MANIFEST.MF"));
+ jarOutputStream.write(baos.toByteArray());
+ jarOutputStream.closeEntry();
+ }
+ BufferedInputStream buff = new BufferedInputStream(jarInputStream);
+ JarEntry jarEntry;
+ while ((jarEntry = jarInputStream.getNextJarEntry()) != null) {
+ jarOutputStream.putNextEntry(jarEntry);
+ byte[] bytes = new byte[(int) jarEntry.getSize()];
+ int bytesRead = buff.read(bytes);
+ if(bytesRead != jarEntry.getSize()) {
+ throw new Pack200Exception("Error reading from input jar file");
+ }
+ jarOutputStream.write(bytes, 0, bytesRead);
+ jarOutputStream.closeEntry();
+ }
+ jarOutputStream.close();
} else {
Enumeration jarEntries = jarFile.entries();
while (jarEntries.hasMoreElements()) {
JarEntry jarEntry = (JarEntry) jarEntries.nextElement();
- boolean added = addJarEntry(jarEntry, new BufferedInputStream(
- jarFile.getInputStream(jarEntry)), classes, files);
- if (!added) { // not added because segment has reached maximum
- // size
- new Segment().pack(classes, files, outputStream, stripDebug);
- classes = new ArrayList();
- files = new ArrayList();
- currentSegmentSize = 0;
- addJarEntry(jarEntry, new BufferedInputStream(jarFile
- .getInputStream(jarEntry)), classes, files);
- currentSegmentSize = 0; // ignore the size of the first entry for compatibility with the RI
- } else if (segmentLimit == 0 && estimateSize(jarEntry) > 0) {
- // create a new segment for each class unless size = 0
- new Segment().pack(classes, files, outputStream, stripDebug);
- classes = new ArrayList();
- files = new ArrayList();
+ InputStream inStream = new BufferedInputStream(
+ jarFile.getInputStream(jarEntry));
+ jarOutputStream.putNextEntry(jarEntry);
+ byte[] bytes = new byte[16384];
+ int bytesRead = inStream.read(bytes);
+ while (bytesRead != -1) {
+ jarOutputStream.write(bytes, 0, bytesRead);
+ bytesRead = inStream.read(bytes);
}
+ jarOutputStream.closeEntry();
}
+ jarOutputStream.close();
}
- if(classes.size() > 0 || files.size() > 0) {
- new Segment().pack(classes, files, outputStream, stripDebug);
- }
- outputStream.close();
}
private boolean addJarEntry(JarEntry jarEntry, InputStream stream,
@@ -140,7 +212,8 @@
if (size > Integer.MAX_VALUE) {
throw new RuntimeException("Large Class!"); // TODO: Should probably allow this
} else if (size < 0) {
- throw new RuntimeException("Error: size for " + name + " is " + size);
+ size = 0;
+// throw new RuntimeException("Error: size for " + name + " is " + size);
}
if(segmentLimit != -1 && segmentLimit != 0) {
// -1 is a special case where only one segment is created and
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/AttributeDefinitionBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/AttributeDefinitionBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/AttributeDefinitionBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/AttributeDefinitionBands.java Sun Apr 19 11:15:28 2009
@@ -37,8 +37,6 @@
private final Map layouts = new HashMap();
- private final SegmentHeader segmentHeader;
-
private final Map classAttributes = new HashMap();
private final Map methodAttributes = new HashMap();
private final Map fieldAttributes = new HashMap();
@@ -49,8 +47,8 @@
private final CpBands cpBands;
private final Segment segment;
- public AttributeDefinitionBands(Segment segment) {
- this.segmentHeader = segment.getSegmentHeader();
+ public AttributeDefinitionBands(Segment segment, int effort) {
+ super(effort, segment.getSegmentHeader());
this.cpBands = segment.getCpBands();
this.segment = segment;
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BHSDCodec.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BHSDCodec.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BHSDCodec.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BHSDCodec.java Sun Apr 19 11:15:28 2009
@@ -441,6 +441,13 @@
}
/**
+ * @return the s
+ */
+ public int getS() {
+ return s;
+ }
+
+ /**
* @return the l
*/
public int getL() {
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BandSet.java Sun Apr 19 11:15:28 2009
@@ -23,6 +23,14 @@
public abstract class BandSet {
+ private final int effort;
+ protected final SegmentHeader segmentHeader;
+
+ public BandSet(int effort, SegmentHeader header) {
+ this.effort = effort;
+ this.segmentHeader = header;
+ }
+
public abstract void pack(OutputStream out) throws IOException, Pack200Exception;
public byte[] encodeScalar(int[] band, BHSDCodec codec) throws Pack200Exception {
@@ -34,7 +42,32 @@
}
public byte[] encodeBandInt(String name, int[] ints, BHSDCodec defaultCodec) throws Pack200Exception {
- // TODO non-default codecs
+ if(effort > 1 && (ints.length > 99 || effort == 9)) {
+ Codec betterCodec = lookForBetterCodec(name, ints, defaultCodec);
+ if(betterCodec != null) {
+ if(betterCodec instanceof BHSDCodec) {
+ int[] specifierBand = CodecEncoding.getSpecifier(betterCodec, defaultCodec);
+ int specifier = specifierBand[0];
+ if(specifierBand.length > 0) {
+ for (int i = 1; i < specifierBand.length; i++) {
+ segmentHeader.appendBandCodingSpecifier(specifierBand[i]);
+ }
+ }
+ byte[] specifierEncoded = defaultCodec.encode(new int[] {specifier});
+ byte[] rest = betterCodec.encode(ints);
+ byte[] band = new byte[specifierEncoded.length + rest.length];
+ System.arraycopy(specifierEncoded, 0, band, 0, specifierEncoded.length);
+ System.arraycopy(rest, 0, band, specifierEncoded.length, rest.length);
+ return band;
+ } else if (betterCodec instanceof PopulationCodec) {
+
+ } else if (betterCodec instanceof RunCodec) {
+
+ }
+ }
+ }
+
+ // If we get here then we've decided to use the default codec.
if(ints.length > 0) {
// System.out.println("encoding " + name + ", size = " + ints.length);
int first = ints[0];
@@ -63,6 +96,12 @@
return new byte[0];
}
+ private Codec lookForBetterCodec(String name, int[] ints,
+ BHSDCodec defaultCodec) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
public boolean isPredictableSourceFileName(String className, String sourceFileName) {
if (className.indexOf('.') != -1) {
className = className.substring(className.lastIndexOf('.') + 1);
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/BcBands.java Sun Apr 19 11:15:28 2009
@@ -33,7 +33,8 @@
private final CpBands cpBands;
private final Segment segment;
- public BcBands(CpBands cpBands, Segment segment) {
+ public BcBands(CpBands cpBands, Segment segment, int effort) {
+ super(effort, segment.getSegmentHeader());
this.cpBands = cpBands;
this.segment = segment;
}
@@ -61,7 +62,6 @@
private final List bcInitRef = new ArrayList();
private String currentClass;
- private String superClass;
private static final int MULTIANEWARRAY = 197;
private static final int ALOAD_0 = 42;
@@ -82,10 +82,6 @@
currentClass = name;
}
- public void setSuperClass(String superName) {
- superClass = superName;
- }
-
public void finaliseBands() {
bcThisField = getIndexInClass(bcThisField);
bcThisMethod = getIndexInClass(bcThisMethod);
@@ -229,7 +225,7 @@
}
public void visitIincInsn(int var, int increment) {
- if (increment > Byte.MAX_VALUE) {
+ if (var > 255 || increment > 255) {
byteCodeOffset += 6;
bcCodes.add(WIDE);
bcCodes.add(IINC);
@@ -427,7 +423,7 @@
public void visitVarInsn(int opcode, int var) {
// ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET
- if (var > Byte.MAX_VALUE) {
+ if (var > 255) {
byteCodeOffset += 4;
bcCodes.add(WIDE);
bcCodes.add(opcode);
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/ClassBands.java Sun Apr 19 11:15:28 2009
@@ -33,7 +33,6 @@
public class ClassBands extends BandSet {
- private final SegmentHeader header;
private final CpBands cpBands;
private final AttributeDefinitionBands attrBands;
@@ -116,9 +115,9 @@
private final Map classReferencesInnerClass = new HashMap();
- public ClassBands(Segment segment, int numClasses) {
+ public ClassBands(Segment segment, int numClasses, int effort) {
+ super(effort, segment.getSegmentHeader());
this.segment = segment;
- this.header = segment.getSegmentHeader();
this.cpBands = segment.getCpBands();
this.attrBands = segment.getAttrBands();
class_this = new CPClass[numClasses];
@@ -135,15 +134,15 @@
major_versions = new int[numClasses];
class_flags = new long[numClasses];
- class_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_CLASS, cpBands);
- class_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_CLASS, cpBands);
- field_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_FIELD, cpBands);
- field_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_FIELD, cpBands);
- method_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_METHOD, cpBands);
- method_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_METHOD, cpBands);
- method_RVPA_bands = new MetadataBandGroup("RVPA", MetadataBandGroup.CONTEXT_METHOD, cpBands);
- method_RIPA_bands = new MetadataBandGroup("RIPA", MetadataBandGroup.CONTEXT_METHOD, cpBands);
- method_AD_bands = new MetadataBandGroup("AD", MetadataBandGroup.CONTEXT_METHOD, cpBands);
+ class_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_CLASS, cpBands, segmentHeader, effort);
+ class_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_CLASS, cpBands, segmentHeader, effort);
+ field_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_FIELD, cpBands, segmentHeader, effort);
+ field_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_FIELD, cpBands, segmentHeader, effort);
+ method_RVA_bands = new MetadataBandGroup("RVA", MetadataBandGroup.CONTEXT_METHOD, cpBands, segmentHeader, effort);
+ method_RIA_bands = new MetadataBandGroup("RIA", MetadataBandGroup.CONTEXT_METHOD, cpBands, segmentHeader, effort);
+ method_RVPA_bands = new MetadataBandGroup("RVPA", MetadataBandGroup.CONTEXT_METHOD, cpBands, segmentHeader, effort);
+ method_RIPA_bands = new MetadataBandGroup("RIPA", MetadataBandGroup.CONTEXT_METHOD, cpBands, segmentHeader, effort);
+ method_AD_bands = new MetadataBandGroup("AD", MetadataBandGroup.CONTEXT_METHOD, cpBands, segmentHeader, effort);
}
private int index = 0;
@@ -236,7 +235,7 @@
}
public void finaliseBands() {
- int defaultMajorVersion = header.getDefaultMajorVersion();
+ int defaultMajorVersion = segmentHeader.getDefaultMajorVersion();
for (int i = 0; i < class_flags.length; i++) {
int major = major_versions[i];
if (major != defaultMajorVersion) {
@@ -433,7 +432,7 @@
private void writeFieldAttributeBands(OutputStream out) throws IOException,
Pack200Exception {
out.write(encodeFlags("field_flags", field_flags, Codec.UNSIGNED5,
- Codec.UNSIGNED5, header.have_field_flags_hi()));
+ Codec.UNSIGNED5, segmentHeader.have_field_flags_hi()));
// *field_attr_count :UNSIGNED5 [COUNT(1<<16,...)]
// *field_attr_indexes :UNSIGNED5 [SUM(*field_attr_count)]
out.write(encodeBandInt("field_attr_calls", field_attr_calls, Codec.UNSIGNED5));
@@ -448,7 +447,7 @@
private void writeMethodAttributeBands(OutputStream out)
throws IOException, Pack200Exception {
out.write(encodeFlags("method_flags", method_flags, Codec.UNSIGNED5,
- Codec.UNSIGNED5, header.have_method_flags_hi()));
+ Codec.UNSIGNED5, segmentHeader.have_method_flags_hi()));
// *method_attr_count :UNSIGNED5 [COUNT(1<<16,...)]
// *method_attr_indexes :UNSIGNED5 [SUM(*method_attr_count)]
out.write(encodeBandInt("method_attr_calls", method_attr_calls, Codec.UNSIGNED5));
@@ -468,7 +467,7 @@
private void writeClassAttributeBands(OutputStream out) throws IOException,
Pack200Exception {
out.write(encodeFlags("class_flags", class_flags, Codec.UNSIGNED5,
- Codec.UNSIGNED5, header.have_class_flags_hi()));
+ Codec.UNSIGNED5, segmentHeader.have_class_flags_hi()));
// *class_attr_count :UNSIGNED5 [COUNT(1<<16,...)]
// *class_attr_indexes :UNSIGNED5 [SUM(*class_attr_count)]
out.write(encodeBandInt("class_attr_calls", class_attr_calls, Codec.UNSIGNED5));
@@ -526,7 +525,7 @@
private void writeCodeAttributeBands(OutputStream out) throws IOException,
Pack200Exception {
out.write(encodeFlags("codeFlags", longListToArray(codeFlags),
- Codec.UNSIGNED5, Codec.UNSIGNED5, header.have_code_flags_hi()));
+ Codec.UNSIGNED5, Codec.UNSIGNED5, segmentHeader.have_code_flags_hi()));
// *code_attr_count :UNSIGNED5 [COUNT(1<<16,...)]
// *code_attr_indexes :UNSIGNED5 [SUM(*code_attr_count)]
@@ -947,7 +946,7 @@
public void addAnnotationDefault(List nameRU, List t, List values, List caseArrayN, List nestTypeRS, List nestNameRU, List nestPairN) {
method_AD_bands.addAnnotation(null, nameRU, t, values, caseArrayN, nestTypeRS, nestNameRU, nestPairN);
- Integer flag = (Integer) tempMethodFlags.remove(tempMethodFlags.size() - 1);
- tempMethodFlags.add(new Integer(flag.intValue() | (1<<25)));
+ Long flag = (Long) tempMethodFlags.remove(tempMethodFlags.size() - 1);
+ tempMethodFlags.add(new Long(flag.longValue() | (1<<25)));
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CodecEncoding.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CodecEncoding.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CodecEncoding.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CodecEncoding.java Sun Apr 19 11:15:28 2009
@@ -19,6 +19,7 @@
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@@ -215,12 +216,122 @@
}
public static int getSpecifierForDefaultCodec(BHSDCodec defaultCodec) {
+ return getSpecifier(defaultCodec, null)[0];
+ }
+
+ public static int[] getSpecifier(Codec codec, Codec defaultForBand) {
+ // lazy initialization
if(canonicalCodecsToSpecifiers == null) {
canonicalCodecsToSpecifiers = new HashMap();
for (int i = 0; i < canonicalCodec.length; i++) {
canonicalCodecsToSpecifiers.put(canonicalCodec[i], new Integer(i));
}
}
- return ((Integer)canonicalCodecsToSpecifiers.get(defaultCodec)).intValue();
+
+ if(canonicalCodecsToSpecifiers.containsKey(codec)) {
+ return new int[] {((Integer)canonicalCodecsToSpecifiers.get(codec)).intValue()};
+ } else if (codec instanceof BHSDCodec) {
+ // Cache these?
+ BHSDCodec bhsdCodec = (BHSDCodec)codec;
+ int[] specifiers = new int[3];
+ specifiers[0] = 116;
+ specifiers[1] = (bhsdCodec.isDelta() ? 1 : 0) + 2
+ * bhsdCodec.getS() + 8 * (bhsdCodec.getB()-1);
+ specifiers[2] = bhsdCodec.getH() - 1;
+ return specifiers;
+ } else if (codec instanceof RunCodec) {
+ RunCodec runCodec = (RunCodec) codec;
+ int k = runCodec.getK();
+ int kb;
+ int kx;
+ if(k <= 256) {
+ kb = 0;
+ kx = k - 1;
+ } else if (k <= 4096) {
+ kb = 1;
+ kx = k/16 - 1;
+ } else if (k <= 65536) {
+ kb = 2;
+ kx = k/256 - 1;
+ } else {
+ kb = 3;
+ kx = k/4096 - 1;
+ }
+ Codec aCodec = runCodec.getACodec();
+ Codec bCodec = runCodec.getBCodec();
+ int abDef = 0;
+ if(aCodec.equals(defaultForBand)) {
+ abDef = 1;
+ } else if (bCodec.equals(defaultForBand)) {
+ abDef = 2;
+ }
+ int first = 117 + kb + (kx==3 ? 0 : 4) + (8 * abDef);
+ int[] aSpecifier = abDef == 1 ? new int[0] : getSpecifier(aCodec, defaultForBand);
+ int[] bSpecifier = abDef == 2 ? new int[0] : getSpecifier(bCodec, defaultForBand);
+ int[] specifier = new int[1 + (kx==3 ? 0 : 1) + aSpecifier.length + bSpecifier.length];
+ specifier[0] = first;
+ int index = 1;
+ if(kx != 3) {
+ specifier[1] = kx;
+ index++;
+ }
+ for (int i = 0; i < aSpecifier.length; i++) {
+ specifier[index] = aSpecifier[i];
+ index++;
+ }
+ for (int i = 0; i < bSpecifier.length; i++) {
+ specifier[index] = bSpecifier[i];
+ index++;
+ }
+ return specifier;
+ } else if (codec instanceof PopulationCodec) {
+ PopulationCodec populationCodec = (PopulationCodec) codec;
+ Codec tokenCodec = populationCodec.getTokenCodec();
+ Codec favouredCodec = populationCodec.getFavouredCodec();
+ Codec unfavouredCodec = populationCodec.getUnfavouredCodec();
+ int fDef = favouredCodec.equals(defaultForBand) ? 1 : 0;
+ int uDef = unfavouredCodec.equals(defaultForBand) ? 1 : 0;
+ int tDefL = 0;
+ long[] favoured = populationCodec.getFavoured();
+ if(favoured != null) {
+ int k = favoured.length;
+ if(tokenCodec == Codec.BYTE1) {
+ tDefL = 1;
+ } else if (tokenCodec instanceof BHSDCodec) {
+ BHSDCodec tokenBHSD = (BHSDCodec) tokenCodec;
+ if(tokenBHSD.getS() == 0) {
+ int[] possibleLValues = new int[] {4, 8, 16, 32, 64, 128, 192, 224, 240, 248, 252};
+ int l = 256-tokenBHSD.getH();
+ int index = Arrays.binarySearch(possibleLValues, l);
+ if(index != -1) {
+ // TODO: check range is ok for ks
+ tDefL = index++;
+ }
+ }
+ }
+ }
+ int first = 141 + fDef + (2 * uDef) + (4 * tDefL);
+ int[] favouredSpecifier = fDef == 1 ? new int[0] : getSpecifier(favouredCodec, defaultForBand);
+ int[] tokenSpecifier = tDefL != 0 ? new int[0] : getSpecifier(tokenCodec, defaultForBand);
+ int[] unfavouredSpecifier = uDef == 1 ? new int[0] : getSpecifier(unfavouredCodec, defaultForBand);
+ int[] specifier = new int[1 + favouredSpecifier.length + unfavouredSpecifier.length + tokenSpecifier.length];
+ specifier[0] = first;
+ int index = 1;
+ for (int i = 0; i < favouredSpecifier.length; i++) {
+ specifier[index] = favouredSpecifier[i];
+ index++;
+ }
+ for (int i = 0; i < tokenSpecifier.length; i++) {
+ specifier[index] = tokenSpecifier[i];
+ index++;
+ }
+ for (int i = 0; i < unfavouredSpecifier.length; i++) {
+ specifier[index] = unfavouredSpecifier[i];
+ index++;
+ }
+ return specifier;
+ }
+
+ return null;
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/CpBands.java Sun Apr 19 11:15:28 2009
@@ -34,8 +34,6 @@
*/
public class CpBands extends BandSet {
- private final SegmentHeader segmentHeader;
-
// Don't need to include default attribute names in the constant pool bands
private final Set defaultAttributeNames = new HashSet();
@@ -64,8 +62,8 @@
private final Segment segment;
- public CpBands(Segment segment) {
- this.segmentHeader = segment.getSegmentHeader();
+ public CpBands(Segment segment, int effort) {
+ super(effort, segment.getSegmentHeader());
this.segment = segment;
defaultAttributeNames.add("AnnotationDefault");
defaultAttributeNames.add("RuntimeVisibleAnnotations");
@@ -409,6 +407,9 @@
}
public CPSignature getCPSignature(String signature) {
+ if(signature == null) {
+ return null;
+ }
CPSignature cpS = (CPSignature) stringsToCpSignature.get(signature);
if (cpS == null) {
List cpClasses = new ArrayList();
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/FileBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/FileBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/FileBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/FileBands.java Sun Apr 19 11:15:28 2009
@@ -24,7 +24,6 @@
public class FileBands extends BandSet {
- private final SegmentHeader segmentHeader;
private final CPUTF8[] fileName;
private int[] file_name;
private final long[] file_modtime;
@@ -33,8 +32,8 @@
private final byte[][] file_bits;
public FileBands(CpBands cpBands, SegmentHeader segmentHeader,
- List files) {
- this.segmentHeader = segmentHeader;
+ List files, int effort) {
+ super(effort, segmentHeader);
int size = files.size();
fileName = new CPUTF8[size];
file_modtime = new long[size];
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/IcBands.java Sun Apr 19 11:15:28 2009
@@ -29,14 +29,13 @@
public class IcBands extends BandSet {
private final Set innerClasses = new TreeSet();
- private final SegmentHeader segmentHeader;
private final CpBands cpBands;
private int bit16Count = 0;
private final Map outerToInner = new HashMap();
- public IcBands(SegmentHeader segmentHeader, CpBands cpBands) {
- this.segmentHeader = segmentHeader;
+ public IcBands(SegmentHeader segmentHeader, CpBands cpBands, int effort) {
+ super(effort, segmentHeader);
this.cpBands = cpBands;
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/MetadataBandGroup.java Sun Apr 19 11:15:28 2009
@@ -61,7 +61,8 @@
* Constructs a new MetadataBandGroup
* @param type - must be either AD, RVA, RIA, RVPA or RIPA.
*/
- public MetadataBandGroup(String type, int context, CpBands cpBands) {
+ public MetadataBandGroup(String type, int context, CpBands cpBands, SegmentHeader segmentHeader, int effort) {
+ super(effort, segmentHeader);
this.type = type;
this.cpBands = cpBands;
this.context = context;
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/PopulationCodec.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/PopulationCodec.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/PopulationCodec.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/PopulationCodec.java Sun Apr 19 11:15:28 2009
@@ -134,7 +134,7 @@
return favouredCodec;
}
- public Codec getUnvafouredCodec() {
+ public Codec getUnfavouredCodec() {
return unvafouredCodec;
}
@@ -147,4 +147,12 @@
// TODO Auto-generated method stub
return null;
}
+
+ public Codec getTokenCodec() {
+ return tokenCodec;
+ }
+
+ public int getL() {
+ return l;
+ }
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/RunCodec.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/RunCodec.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/RunCodec.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/RunCodec.java Sun Apr 19 11:15:28 2009
@@ -105,7 +105,7 @@
for (int i = 0; i < band.length; i++) {
boolean favouredValue = Arrays.binarySearch(favoured, band[i]) > -1;
Codec theCodec = favouredValue ? popCodec.getFavouredCodec()
- : popCodec.getUnvafouredCodec();
+ : popCodec.getUnfavouredCodec();
if (theCodec instanceof BHSDCodec
&& ((BHSDCodec) theCodec).isDelta()) {
BHSDCodec bhsd = (BHSDCodec) theCodec;
@@ -135,4 +135,16 @@
// TODO Auto-generated method stub
return null;
}
+
+ public int getK() {
+ return k;
+ }
+
+ public Codec getACodec() {
+ return aCodec;
+ }
+
+ public Codec getBCodec() {
+ return bCodec;
+ }
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/Segment.java Sun Apr 19 11:15:28 2009
@@ -44,19 +44,21 @@
private final SegmentMethodVisitor methodVisitor = new SegmentMethodVisitor();
private Pack200ClassReader currentClassReader;
private boolean stripDebug;
+ private int effort;
- public void pack(List classes, List files, OutputStream out, boolean stripDebug)
+ public void pack(List classes, List files, OutputStream out, boolean stripDebug, int effort)
throws IOException, Pack200Exception {
+ this.effort = effort;
this.stripDebug = stripDebug;
segmentHeader = new SegmentHeader();
segmentHeader.setFile_count(files.size());
segmentHeader.setHave_all_code_flags(!stripDebug);
- cpBands = new CpBands(this);
- attributeDefinitionBands = new AttributeDefinitionBands(this);
- icBands = new IcBands(segmentHeader, cpBands);
- classBands = new ClassBands(this, classes.size());
- bcBands = new BcBands(cpBands, this);
- fileBands = new FileBands(cpBands, segmentHeader, files);
+ cpBands = new CpBands(this, effort);
+ attributeDefinitionBands = new AttributeDefinitionBands(this, effort);
+ icBands = new IcBands(segmentHeader, cpBands, effort);
+ classBands = new ClassBands(this, classes.size(), effort);
+ bcBands = new BcBands(cpBands, this, effort);
+ fileBands = new FileBands(cpBands, segmentHeader, files, effort);
processClasses(classes);
@@ -89,7 +91,6 @@
public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
bcBands.setCurrentClass(name);
- bcBands.setSuperClass(superName);
segmentHeader.addMajorVersion(version);
classBands.addClass(version, access, name, signature, superName,
interfaces);
@@ -295,6 +296,9 @@
}
public void visit(String name, Object value) {
+ if (name == null) {
+ name = "";
+ }
nameRU.add(name);
values.add(value);
addTag(value);
@@ -326,6 +330,9 @@
public AnnotationVisitor visitAnnotation(String name, String desc) {
T.add("@");
+ if (name == null) {
+ name = "";
+ }
nameRU.add(name);
nestTypeRS.add(desc);
nestPairN.add(new Integer(0));
@@ -366,12 +373,18 @@
public AnnotationVisitor visitArray(String name) {
T.add("[");
+ if (name == null) {
+ name = "";
+ }
nameRU.add(name);
caseArrayN.add(new Integer(0));
return new AnnotationVisitor() {
public void visit(String name, Object value) {
Integer numCases = (Integer) caseArrayN.remove(caseArrayN.size() - 1);
caseArrayN.add(new Integer(numCases.intValue() + 1));
+ if (name == null) {
+ name = "";
+ }
nameRU.add(name);
values.add(value);
addTag(value);
@@ -388,13 +401,15 @@
}
public void visitEnd() {
- throw new RuntimeException("Not yet supported");
}
public void visitEnum(String name, String desc, String value) {
Integer numCases = (Integer) caseArrayN.remove(caseArrayN.size() - 1);
caseArrayN.add(new Integer(numCases.intValue() + 1));
T.add("e");
+ if(name == null) {
+ name = "";
+ }
nameRU.add(name);
values.add(desc);
values.add(value);
@@ -414,6 +429,9 @@
public void visitEnum(String name, String desc, String value) {
T.add("e");
+ if (name == null) {
+ name = "";
+ }
nameRU.add(name);
values.add(desc);
values.add(value);
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java Sun Apr 19 11:15:28 2009
@@ -24,6 +24,10 @@
*/
public class SegmentHeader extends BandSet {
+ public SegmentHeader() {
+ super(1, null); // Don't do anything special for the header
+ }
+
private static final int[] magic = { 0xCA, 0xFE, 0xD0, 0x0D };
private static final int archive_minver = 7;
private static final int archive_majver = 150;
@@ -44,7 +48,7 @@
private int cp_Imethod_count;
private int attribute_definition_count;
- private final byte[] band_headers = new byte[0];
+ private final IntList band_headers = new IntList();
private boolean have_all_code_flags = true; // true by default
@@ -80,13 +84,13 @@
writeArchiveSpecialCounts(out);
writeCpCounts(out);
writeClassCounts(out);
- if (band_headers.length > 0) {
- out.write(band_headers);
+ if (band_headers.size()> 0) {
+ out.write(encodeScalar(band_headers.toArray(), BHSDCodec.BYTE1));
}
}
private void calculateArchiveOptions() {
- if (attribute_definition_count > 0 || band_headers.length > 0) {
+ if (attribute_definition_count > 0 || band_headers.size() > 0) {
archive_options |= 1;
}
if (cp_Int_count > 0 || cp_Float_count > 0 || cp_Long_count > 0
@@ -288,10 +292,9 @@
private void writeArchiveSpecialCounts(OutputStream out)
throws IOException, Pack200Exception {
if ((archive_options & 1) > 0) { // have_special_formats
- out.write(encodeScalar(band_headers.length, Codec.UNSIGNED5));
- out
- .write(encodeScalar(attribute_definition_count,
- Codec.UNSIGNED5));
+ out.write(encodeScalar(band_headers.size(), Codec.UNSIGNED5));
+ out.write(encodeScalar(attribute_definition_count,
+ Codec.UNSIGNED5));
}
}
@@ -373,4 +376,8 @@
return have_all_code_flags;
}
+ public void appendBandCodingSpecifier(int specifier) {
+ band_headers.add(specifier);
+ }
+
}
\ No newline at end of file
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/unpack200/BandSet.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/unpack200/BandSet.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/unpack200/BandSet.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java/org/apache/harmony/unpack200/BandSet.java Sun Apr 19 11:15:28 2009
@@ -16,7 +16,6 @@
*/
package org.apache.harmony.unpack200;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
@@ -127,7 +126,7 @@
for (int i = 0; i < band.length; i++) {
boolean favouredValue = Arrays.binarySearch(favoured, band[i]) > -1;
Codec theCodec = favouredValue ? popCodec.getFavouredCodec()
- : popCodec.getUnvafouredCodec();
+ : popCodec.getUnfavouredCodec();
if (theCodec instanceof BHSDCodec
&& ((BHSDCodec) theCodec).isDelta()) {
BHSDCodec bhsd = (BHSDCodec) theCodec;
@@ -251,7 +250,7 @@
for (int i = 0; i < band.length; i++) {
boolean favouredValue = Arrays.binarySearch(favoured, band[i]) > -1;
Codec theCodec = favouredValue ? popCodec.getFavouredCodec()
- : popCodec.getUnvafouredCodec();
+ : popCodec.getUnfavouredCodec();
if (theCodec instanceof BHSDCodec
&& ((BHSDCodec) theCodec).isDelta()) {
BHSDCodec bhsd = (BHSDCodec) theCodec;
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java5/org/apache/harmony/unpack200/Pack200PackerAdapter.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java5/org/apache/harmony/unpack200/Pack200PackerAdapter.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java5/org/apache/harmony/unpack200/Pack200PackerAdapter.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/main/java5/org/apache/harmony/unpack200/Pack200PackerAdapter.java Sun Apr 19 11:15:28 2009
@@ -39,7 +39,7 @@
"Must specify both input and output streams");
completed(0);
try {
- new org.apache.harmony.pack200.Archive(file, out).pack();
+ new org.apache.harmony.pack200.Archive(file, out, true).pack();
} catch (Pack200Exception e) {
throw new IOException("Failed to pack Jar:" + String.valueOf(e));
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java Sun Apr 19 11:15:28 2009
@@ -28,7 +28,6 @@
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
-import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import junit.framework.TestCase;
@@ -39,14 +38,13 @@
public class ArchiveTest extends TestCase {
- JarInputStream in;
+ JarFile in;
OutputStream out;
File file;
public void testHelloWorld() throws IOException, Pack200Exception, URISyntaxException {
- in = new JarInputStream(
- Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/hw.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/hw.jar").toURI()));
file = File.createTempFile("helloworld", ".pack.gz");
out = new FileOutputStream(file);
new Archive(in, out, true).pack();
@@ -95,8 +93,8 @@
}
public void testSQL() throws IOException, Pack200Exception, URISyntaxException {
- in = new JarInputStream(Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/sqlUnpacked.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/sqlUnpacked.jar").toURI()));
file = File.createTempFile("sql", ".pack");
out = new FileOutputStream(file);
new Archive(in, out, false).pack();
@@ -121,9 +119,37 @@
compareFiles(jarFile, jarFile2);
}
+ public void testLargeClass() throws IOException, Pack200Exception, URISyntaxException {
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/largeClassUnpacked.jar")
+ .toURI()));
+ file = File.createTempFile("largeClass", ".pack");
+ out = new FileOutputStream(file);
+ new Archive(in, out, false).pack();
+ in.close();
+ out.close();
+
+ // now unpack
+ InputStream in2 = new FileInputStream(file);
+ File file2 = File.createTempFile("largeClassOut", ".jar");
+ JarOutputStream out2 = new JarOutputStream(new FileOutputStream(file2));
+ org.apache.harmony.unpack200.Archive archive = new org.apache.harmony.unpack200.Archive(in2, out2);
+ archive.unpack();
+ JarFile jarFile = new JarFile(file2);
+ file2.deleteOnExit();
+
+ File compareFile = new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/largeClassUnpacked.jar").toURI());
+ JarFile jarFile2 = new JarFile(compareFile);
+
+ assertEquals(jarFile2.size(), jarFile.size());
+
+ compareFiles(jarFile, jarFile2);
+ }
+
public void testJNDI() throws IOException, Pack200Exception, URISyntaxException {
- in = new JarInputStream(Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/jndi.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/jndi.jar").toURI()));
file = File.createTempFile("jndi", ".pack");
out = new FileOutputStream(file);
new Archive(in, out, false).pack();
@@ -144,11 +170,10 @@
compareFiles(jarFile, jarFile2);
}
- public void testSegmentLimits() throws IOException, Pack200Exception {
-
- in = new JarInputStream(
- Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/hw.jar"));
+ public void testSegmentLimits() throws IOException, Pack200Exception,
+ URISyntaxException {
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/hw.jar").toURI()));
file = File.createTempFile("helloworld", ".pack.gz");
out = new FileOutputStream(file);
Archive archive = new Archive(in, out, true);
@@ -157,9 +182,8 @@
in.close();
out.close();
- in = new JarInputStream(
- Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/hw.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/hw.jar").toURI()));
file = File.createTempFile("helloworld", ".pack.gz");
out = new FileOutputStream(file);
archive = new Archive(in, out, true);
@@ -168,9 +192,8 @@
in.close();
out.close();
- in = new JarInputStream(
- Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/hw.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/hw.jar").toURI()));
file = File.createTempFile("helloworld", ".pack.gz");
out = new FileOutputStream(file);
archive = new Archive(in, out, true);
@@ -181,8 +204,8 @@
}
public void testStripDebug() throws IOException, Pack200Exception, URISyntaxException {
- in = new JarInputStream(Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/sqlUnpacked.jar"));
+ in = new JarFile(new File(Archive.class
+ .getResource("/org/apache/harmony/pack200/tests/sqlUnpacked.jar").toURI()));
file = File.createTempFile("sql", ".pack");
out = new FileOutputStream(file);
Archive archive = new Archive(in, out, false);
@@ -211,9 +234,9 @@
public void testAnnotations() throws IOException, Pack200Exception,
URISyntaxException {
- in = new JarInputStream(
- Archive.class
- .getResourceAsStream("/org/apache/harmony/pack200/tests/annotationsUnpacked.jar"));
+ in = new JarFile(new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/annotationsUnpacked.jar")
+ .toURI()));
file = File.createTempFile("annotations", ".pack");
out = new FileOutputStream(file);
new Archive(in, out, false).pack();
@@ -235,6 +258,56 @@
compareFiles(jarFile, jarFile2);
}
+ public void testE0() throws Pack200Exception, IOException, URISyntaxException {
+ File f1 = new File(Archive.class.getResource(
+ "/org/apache/harmony/pack200/tests/jndi.jar").toURI());
+ in = new JarFile(f1);
+ file = File.createTempFile("jndiE0", ".pack");
+ out = new FileOutputStream(file);
+ Archive archive = new Archive(in, out, false);
+ archive.setEffort(0);
+ archive.pack();
+ in.close();
+ out.close();
+ compareFiles(new JarFile(f1), new JarFile(file));
+
+ }
+
+// public void testE0again() throws IOException, Pack200Exception, URISyntaxException {
+// JarInputStream inputStream = new JarInputStream(Archive.class.getResourceAsStream("/org/apache/harmony/pack200/tests/jndi.jar"));
+// file = File.createTempFile("jndiE0", ".pack");
+// out = new FileOutputStream(file);
+// Archive archive = new Archive(inputStream, out, false);
+// archive.setEffort(0);
+// archive.pack();
+// inputStream.close();
+// out.close();
+// in = new JarFile(new File(Archive.class.getResource(
+// "/org/apache/harmony/pack200/tests/jndi.jar").toURI()));
+// compareFiles(in, new JarFile(file));
+// }
+
+ public void testMultipleJars() throws URISyntaxException, IOException, Pack200Exception {
+ File folder = new File(Archive.class
+ .getResource("/org/apache/harmony/pack200/tests/jars").toURI());
+ String[] children = folder.list();
+ for (int i = 0; i < children.length; i++) {
+ if(children[i].endsWith(".jar") && !children[i].endsWith("Unpacked.jar")) {
+ File inputFile = new File(folder, children[i]);
+ in = new JarFile(inputFile);
+ file = File.createTempFile("temp", ".pack.gz");
+ out = new FileOutputStream(file);
+// System.out.println("packing " + children[i]);
+ new Archive(in, out, true).pack();
+ in.close();
+ out.close();
+
+ // unpack and compare
+
+ }
+ }
+ }
+
private void compareFiles(JarFile jarFile, JarFile jarFile2)
throws IOException {
Enumeration entries = jarFile.entries();
@@ -245,20 +318,25 @@
String name = entry.getName();
JarEntry entry2 = jarFile2.getJarEntry(name);
- assertNotNull(entry2);
- if(!name.equals("META-INF/MANIFEST.MF")) { // Manifests aren't necessarily byte-for-byte identical
+ assertNotNull("Missing Entry: " + name, entry2);
+ if (!name.equals("META-INF/MANIFEST.MF")) { // Manifests aren't
+ // necessarily
+ // byte-for-byte
+ // identical
InputStream ours = jarFile.getInputStream(entry);
InputStream expected = jarFile2.getInputStream(entry2);
- BufferedReader reader1 = new BufferedReader(new InputStreamReader(ours));
- BufferedReader reader2 = new BufferedReader(new InputStreamReader(
- expected));
+ BufferedReader reader1 = new BufferedReader(
+ new InputStreamReader(ours));
+ BufferedReader reader2 = new BufferedReader(
+ new InputStreamReader(expected));
String line1 = reader1.readLine();
String line2 = reader2.readLine();
int i = 1;
while (line1 != null || line2 != null) {
- assertEquals("Unpacked files differ for " + name, line2, line1);
+ assertEquals("Unpacked files differ for " + name, line2,
+ line1);
line1 = reader1.readLine();
line2 = reader2.readLine();
i++;
@@ -267,6 +345,8 @@
reader2.close();
}
}
+ jarFile.close();
+ jarFile2.close();
}
}
Modified: harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/CodecEncodingTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/CodecEncodingTest.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/CodecEncodingTest.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/CodecEncodingTest.java Sun Apr 19 11:15:28 2009
@@ -18,6 +18,7 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
@@ -27,9 +28,11 @@
import org.apache.harmony.pack200.Codec;
import org.apache.harmony.pack200.CodecEncoding;
import org.apache.harmony.pack200.Pack200Exception;
+import org.apache.harmony.pack200.PopulationCodec;
+import org.apache.harmony.pack200.RunCodec;
/**
- *
+ *
*/
public class CodecEncodingTest extends TestCase {
@@ -172,4 +175,137 @@
null).toString());
}
+ public void testGetSpecifier() throws IOException, Pack200Exception {
+ // Test canonical codecs
+ for (int i = 1; i <= 115; i++) {
+ assertEquals(i, CodecEncoding.getSpecifier(CodecEncoding.getCodec(i, null, null), null)[0]);
+ }
+
+ // Test a range of non-canonical codecs
+ Codec c1 = new BHSDCodec(2, 125, 0, 1);
+ int[] specifiers = CodecEncoding.getSpecifier(c1, null);
+ assertEquals(3, specifiers.length);
+ assertEquals(116, specifiers[0]);
+ byte[] bytes = new byte[] {(byte) specifiers[1], (byte) specifiers[2]};
+ InputStream in = new ByteArrayInputStream(bytes);
+ assertEquals(c1, CodecEncoding.getCodec(116, in, null));
+
+ c1 = new BHSDCodec(3, 125, 2, 1);
+ specifiers = CodecEncoding.getSpecifier(c1, null);
+ assertEquals(3, specifiers.length);
+ assertEquals(116, specifiers[0]);
+ bytes = new byte[] {(byte) specifiers[1], (byte) specifiers[2]};
+ in = new ByteArrayInputStream(bytes);
+ assertEquals(c1, CodecEncoding.getCodec(116, in, null));
+
+ c1 = new BHSDCodec(4, 125);
+ specifiers = CodecEncoding.getSpecifier(c1, null);
+ assertEquals(3, specifiers.length);
+ assertEquals(116, specifiers[0]);
+ bytes = new byte[] {(byte) specifiers[1], (byte) specifiers[2]};
+ in = new ByteArrayInputStream(bytes);
+ assertEquals(c1, CodecEncoding.getCodec(116, in, null));
+
+ c1 = new BHSDCodec(5, 125, 2, 0);
+ specifiers = CodecEncoding.getSpecifier(c1, null);
+ assertEquals(3, specifiers.length);
+ assertEquals(116, specifiers[0]);
+ bytes = new byte[] {(byte) specifiers[1], (byte) specifiers[2]};
+ in = new ByteArrayInputStream(bytes);
+ assertEquals(c1, CodecEncoding.getCodec(116, in, null));
+
+ c1 = new BHSDCodec(3, 5, 2, 1);
+ specifiers = CodecEncoding.getSpecifier(c1, null);
+ assertEquals(3, specifiers.length);
+ assertEquals(116, specifiers[0]);
+ bytes = new byte[] {(byte) specifiers[1], (byte) specifiers[2]};
+ in = new ByteArrayInputStream(bytes);
+ assertEquals(c1, CodecEncoding.getCodec(116, in, null));
+ }
+
+ public void testGetSpeciferForRunCodec() throws Pack200Exception, IOException {
+ RunCodec runCodec = new RunCodec(25, Codec.DELTA5, Codec.BYTE1);
+ int[] specifiers = CodecEncoding.getSpecifier(runCodec, null);
+ assertTrue(specifiers[0] > 116);
+ assertTrue(specifiers[0] < 141);
+ byte[] bytes = new byte[specifiers.length - 1];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) specifiers[i+1];
+ }
+ InputStream in = new ByteArrayInputStream(bytes);
+ RunCodec runCodec2 = (RunCodec) CodecEncoding.getCodec(specifiers[0], in, null);
+ assertEquals(runCodec.getK(), runCodec2.getK());
+ assertEquals(runCodec.getACodec(), runCodec2.getACodec());
+ assertEquals(runCodec.getBCodec(), runCodec2.getBCodec());
+
+ // One codec is the same as the default
+ runCodec = new RunCodec(4096, Codec.DELTA5, Codec.BYTE1);
+ specifiers = CodecEncoding.getSpecifier(runCodec, Codec.DELTA5);
+ assertTrue(specifiers[0] > 116);
+ assertTrue(specifiers[0] < 141);
+ bytes = new byte[specifiers.length - 1];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) specifiers[i+1];
+ }
+ in = new ByteArrayInputStream(bytes);
+ runCodec2 = (RunCodec) CodecEncoding.getCodec(specifiers[0], in, Codec.DELTA5);
+ assertEquals(runCodec.getK(), runCodec2.getK());
+ assertEquals(runCodec.getACodec(), runCodec2.getACodec());
+ assertEquals(runCodec.getBCodec(), runCodec2.getBCodec());
+
+ // Nested run codecs
+ runCodec = new RunCodec(64, Codec.SIGNED5, new RunCodec(25, Codec.UDELTA5, Codec.DELTA5));
+ specifiers = CodecEncoding.getSpecifier(runCodec, null);
+ assertTrue(specifiers[0] > 116);
+ assertTrue(specifiers[0] < 141);
+ bytes = new byte[specifiers.length - 1];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) specifiers[i+1];
+ }
+ in = new ByteArrayInputStream(bytes);
+ runCodec2 = (RunCodec) CodecEncoding.getCodec(specifiers[0], in, null);
+ assertEquals(runCodec.getK(), runCodec2.getK());
+ assertEquals(runCodec.getACodec(), runCodec2.getACodec());
+ RunCodec bCodec = (RunCodec) runCodec.getBCodec();
+ RunCodec bCodec2 = (RunCodec) runCodec2.getBCodec();
+ assertEquals(bCodec.getK(), bCodec2.getK());
+ assertEquals(bCodec.getACodec(), bCodec2.getACodec());
+ assertEquals(bCodec.getBCodec(), bCodec2.getBCodec());
+
+ // Nested with one the same as the default
+ runCodec = new RunCodec(64, Codec.SIGNED5, new RunCodec(25, Codec.UDELTA5, Codec.DELTA5));
+ specifiers = CodecEncoding.getSpecifier(runCodec, Codec.UDELTA5);
+ assertTrue(specifiers[0] > 116);
+ assertTrue(specifiers[0] < 141);
+ bytes = new byte[specifiers.length - 1];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) specifiers[i+1];
+ }
+ in = new ByteArrayInputStream(bytes);
+ runCodec2 = (RunCodec) CodecEncoding.getCodec(specifiers[0], in, Codec.UDELTA5);
+ assertEquals(runCodec.getK(), runCodec2.getK());
+ assertEquals(runCodec.getACodec(), runCodec2.getACodec());
+ bCodec = (RunCodec) runCodec.getBCodec();
+ bCodec2 = (RunCodec) runCodec2.getBCodec();
+ assertEquals(bCodec.getK(), bCodec2.getK());
+ assertEquals(bCodec.getACodec(), bCodec2.getACodec());
+ assertEquals(bCodec.getBCodec(), bCodec2.getBCodec());
+ }
+
+ public void testGetSpeciferForPopulationCodec() throws IOException, Pack200Exception {
+ PopulationCodec pCodec = new PopulationCodec(Codec.BYTE1, Codec.CHAR3, Codec.UNSIGNED5);
+ int[] specifiers = CodecEncoding.getSpecifier(pCodec, null);
+ assertTrue(specifiers[0] > 140);
+ assertTrue(specifiers[0] < 189);
+ byte[] bytes = new byte[specifiers.length - 1];
+ for (int i = 0; i < bytes.length; i++) {
+ bytes[i] = (byte) specifiers[i+1];
+ }
+ InputStream in = new ByteArrayInputStream(bytes);
+ PopulationCodec pCodec2 = (PopulationCodec) CodecEncoding.getCodec(specifiers[0], in, null);
+ assertEquals(pCodec.getFavouredCodec(), pCodec2.getFavouredCodec());
+ assertEquals(pCodec.getTokenCodec(), pCodec2.getTokenCodec());
+ assertEquals(pCodec.getUnfavouredCodec(), pCodec2.getUnfavouredCodec());
+ }
+
}
Modified: harmony/enhanced/classlib/branches/java6/modules/portlib/src/test/native/hyfile/shared/hyfile.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/portlib/src/test/native/hyfile/shared/hyfile.c?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/portlib/src/test/native/hyfile/shared/hyfile.c (original)
+++ harmony/enhanced/classlib/branches/java6/modules/portlib/src/test/native/hyfile/shared/hyfile.c Sun Apr 19 11:15:28 2009
@@ -518,7 +518,6 @@
}
offset = hyportLibrary->file_seek(hyportLibrary, fd, -193, HySeekEnd);
- printf(" offset = %d\n", offset);
if (offset != 7) {
Hytest_setErrMsg(hyportLibrary, "Output should be [%d] not [%d] (%s)\n",7,offset,HY_GET_CALLSITE());
hyportLibrary->file_close(hyportLibrary, fd);
@@ -676,7 +675,6 @@
}
length = hyportLibrary->file_length(hyportLibrary, tmpAbsolutePath);
- printf(" length = %d\n", length);
if (length != 200) {
Hytest_setErrMsg(hyportLibrary, "Output should be [%d] not [%d] (%s)\n",200,length,HY_GET_CALLSITE());
cleanup(*hyportLibrary);
@@ -922,7 +920,6 @@
}
time = hyportLibrary->file_lastmod (hyportLibrary, tmpAbsolutePath);
- printf(" last modify time = %I64d\n", time);
if (time == -1) {
Hytest_setErrMsg(hyportLibrary, "fail to get last modify time(%s)\n",HY_GET_CALLSITE());
cleanup(*hyportLibrary);
Modified: harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/AbstractPreferences.java Sun Apr 19 11:15:28 2009
@@ -79,11 +79,13 @@
Preferences sroot = Preferences.systemRoot();
try {
uroot.flush();
- } catch (BackingStoreException e) {//ignore
+ } catch (BackingStoreException e) {
+ // ignore
}
try {
sroot.flush();
- } catch (BackingStoreException e) {//ignore
+ } catch (BackingStoreException e) {
+ // ignore
}
}
});
@@ -402,13 +404,13 @@
if (key == null) {
throw new NullPointerException();
}
- String result;
+ String result = null;
synchronized (lock) {
checkState();
try {
result = getSpi(key);
} catch (Exception e) {
- result = null;
+ // ignored
}
}
return (result == null ? deflt : result);
@@ -419,9 +421,10 @@
String result = get(key, null);
if (result == null) {
return deflt;
- } else if (result.equalsIgnoreCase("true")) { //$NON-NLS-1$
+ }
+ if ("true".equalsIgnoreCase(result)) { //$NON-NLS-1$
return true;
- } else if (result.equalsIgnoreCase("false")) { //$NON-NLS-1$
+ } else if ("false".equalsIgnoreCase(result)) { //$NON-NLS-1$
return false;
} else {
return deflt;
@@ -437,17 +440,15 @@
if (svalue.length() == 0) {
return new byte[0];
}
- byte[] dres;
try {
byte[] bavalue = svalue.getBytes("US-ASCII"); //$NON-NLS-1$
if (bavalue.length % 4 != 0) {
return deflt;
}
- dres = Base64.decode(bavalue);
+ return Base64.decode(bavalue);
} catch (Exception e) {
- dres = deflt;
+ return deflt;
}
- return dres;
}
@Override
@@ -456,13 +457,11 @@
if (result == null) {
return deflt;
}
- double dres;
try {
- dres = Double.parseDouble(result);
+ return Double.parseDouble(result);
} catch (NumberFormatException e) {
- dres = deflt;
+ return deflt;
}
- return dres;
}
@Override
@@ -471,13 +470,11 @@
if (result == null) {
return deflt;
}
- float fres;
try {
- fres = Float.parseFloat(result);
+ return Float.parseFloat(result);
} catch (NumberFormatException e) {
- fres = deflt;
+ return deflt;
}
- return fres;
}
@Override
@@ -486,13 +483,11 @@
if (result == null) {
return deflt;
}
- int ires;
try {
- ires = Integer.parseInt(result);
+ return Integer.parseInt(result);
} catch (NumberFormatException e) {
- ires = deflt;
+ return deflt;
}
- return ires;
}
@Override
@@ -501,13 +496,11 @@
if (result == null) {
return deflt;
}
- long lres;
try {
- lres = Long.parseLong(result);
+ return Long.parseLong(result);
} catch (NumberFormatException e) {
- lres = deflt;
+ return deflt;
}
- return lres;
}
@Override
@@ -546,24 +539,22 @@
startNode = this;
}
}
- Preferences result = null;
try {
- result = startNode.nodeImpl(name, true);
+ return startNode.nodeImpl(name, true);
} catch (BackingStoreException e) {
- //should not happen
+ // should not happen
+ return null;
}
- return result;
}
private void validateName(String name) {
if (name.endsWith("/") && name.length() > 1) { //$NON-NLS-1$
// prefs.6=Name cannot end with '/'\!
- throw new IllegalArgumentException(Messages.getString("prefs.6")); //$NON-NLS-1$
+ throw new IllegalArgumentException(Messages.getString("prefs.6")); //$NON-NLS-1$
}
if (name.indexOf("//") >= 0) { //$NON-NLS-1$
// prefs.7=Name cannot contains consecutive '/'\!
- throw new IllegalArgumentException(
- Messages.getString("prefs.7")); //$NON-NLS-1$
+ throw new IllegalArgumentException(Messages.getString("prefs.7")); //$NON-NLS-1$
}
}
@@ -580,7 +571,6 @@
temp = getNodeFromBackend(createNew, currentNode, name);
}
}
-
currentNode = temp;
}
return currentNode;
@@ -589,12 +579,12 @@
private AbstractPreferences getNodeFromBackend(boolean createNew,
AbstractPreferences currentNode, String name)
throws BackingStoreException {
- AbstractPreferences temp;
if (name.length() > MAX_NAME_LENGTH) {
// prefs.8=Name length is too long: {0}
- throw new IllegalArgumentException(Messages.getString("prefs.8", //$NON-NLS-1$
+ throw new IllegalArgumentException(Messages.getString("prefs.8", //$NON-NLS-1$
name));
}
+ AbstractPreferences temp;
if (createNew) {
temp = currentNode.childSpi(name);
currentNode.cachedNode.put(name, temp);
@@ -609,6 +599,9 @@
@Override
public boolean nodeExists(String name) throws BackingStoreException {
+ if (null == name) {
+ throw new NullPointerException();
+ }
AbstractPreferences startNode = null;
synchronized (lock) {
if (isRemoved()) {
Modified: harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java?rev=766448&r1=766447&r2=766448&view=diff
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java (original)
+++ harmony/enhanced/classlib/branches/java6/modules/prefs/src/main/java/java/util/prefs/FilePreferencesImpl.java Sun Apr 19 11:15:28 2009
@@ -64,7 +64,6 @@
SYSTEM_HOME = System.getProperty("java.home") + "/.systemPrefs";//$NON-NLS-1$//$NON-NLS-2$
return null;
}
-
});
}
@@ -192,7 +191,8 @@
prefs = XMLParser.loadFilePrefs(prefsFile);
}
return prefs.getProperty(key);
- } catch (Exception e) {// if Exception happened, return null
+ } catch (Exception e) {
+ // if Exception happened, return null
return null;
}
}