You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by sj...@apache.org on 2008/10/08 15:05:44 UTC
svn commit: r702856 [3/3] - in /harmony/enhanced/classlib/trunk: ./
depends/files/ depends/manifests/asm-3.1/ make/ modules/pack200/META-INF/
modules/pack200/src/main/java/org/apache/harmony/pack200/
modules/pack200/src/test/java/org/apache/harmony/pac...
Modified: harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java?rev=702856&r1=702855&r2=702856&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java (original)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/main/java/org/apache/harmony/pack200/SegmentHeader.java Wed Oct 8 06:05:43 2008
@@ -46,7 +46,7 @@
private int attribute_definition_count;
private final byte[] band_headers = new byte[0];
- private boolean have_all_code_flags;
+ private boolean have_all_code_flags = true; // true by default
private int archive_size_hi;
private int archive_size_lo;
@@ -56,16 +56,15 @@
private boolean deflate_hint;
private boolean have_file_modtime;
- private boolean have_file_options;
- private boolean have_file_size_hi;
- private boolean have_class_flags_hi;
- private boolean have_field_flags_hi;
- private boolean have_method_flags_hi;
- private boolean have_code_flags_hi;
+ private boolean have_file_options = true;
+ private boolean have_file_size_hi;
+ private boolean have_class_flags_hi;
+ private boolean have_field_flags_hi;
+ private boolean have_method_flags_hi;
+ private boolean have_code_flags_hi;
private int ic_count;
private int class_count;
- private final Counter minverCounter = new Counter();
private final Counter majverCounter = new Counter();
/**
@@ -87,40 +86,41 @@
}
private void calculateArchiveOptions() {
- if(attribute_definition_count > 0 || band_headers.length > 0) {
+ if (attribute_definition_count > 0 || band_headers.length > 0) {
archive_options |= 1;
}
- if(cp_Int_count > 0 || cp_Float_count > 0 || cp_Long_count > 0 || cp_Double_count > 0) {
+ if (cp_Int_count > 0 || cp_Float_count > 0 || cp_Long_count > 0
+ || cp_Double_count > 0) {
archive_options |= (1 << 1);
}
- if(have_all_code_flags) {
+ if (have_all_code_flags) {
archive_options |= (1 << 2);
}
- if(file_count > 0) {
+ if (file_count > 0) {
archive_options |= (1 << 4);
}
- if(deflate_hint) {
+ if (deflate_hint) {
archive_options |= (1 << 5);
}
- if(have_file_modtime) {
+ if (have_file_modtime) {
archive_options |= (1 << 6);
}
- if(have_file_options) {
+ if (have_file_options) {
archive_options |= (1 << 7);
}
- if(have_file_size_hi) {
+ if (have_file_size_hi) {
archive_options |= (1 << 8);
}
- if(have_class_flags_hi) {
+ if (have_class_flags_hi) {
archive_options |= (1 << 9);
}
- if(have_field_flags_hi) {
+ if (have_field_flags_hi) {
archive_options |= (1 << 10);
}
- if(have_method_flags_hi) {
+ if (have_method_flags_hi) {
archive_options |= (1 << 11);
}
- if(have_code_flags_hi) {
+ if (have_code_flags_hi) {
archive_options |= (1 << 12);
}
}
@@ -177,97 +177,78 @@
this.attribute_definition_count = attribute_definition_count;
}
-
public void setHave_all_code_flags(boolean have_all_code_flags) {
this.have_all_code_flags = have_all_code_flags;
}
-
public void setArchive_size_hi(int archive_size_hi) {
this.archive_size_hi = archive_size_hi;
}
-
public void setArchive_size_lo(int archive_size_lo) {
this.archive_size_lo = archive_size_lo;
}
-
public void setArchive_next_count(int archive_next_count) {
this.archive_next_count = archive_next_count;
}
-
public void setArchive_modtime(int archive_modtime) {
this.archive_modtime = archive_modtime;
}
-
public void setFile_count(int file_count) {
this.file_count = file_count;
}
-
public void setDeflate_hint(boolean deflate_hint) {
this.deflate_hint = deflate_hint;
}
-
public void setHave_file_modtime(boolean have_file_modtime) {
this.have_file_modtime = have_file_modtime;
}
-
public void setHave_file_options(boolean have_file_options) {
this.have_file_options = have_file_options;
}
-
public void setHave_file_size_hi(boolean have_file_size_hi) {
this.have_file_size_hi = have_file_size_hi;
}
-
public void setHave_class_flags_hi(boolean have_class_flags_hi) {
this.have_class_flags_hi = have_class_flags_hi;
}
-
public void setHave_field_flags_hi(boolean have_field_flags_hi) {
this.have_field_flags_hi = have_field_flags_hi;
}
-
public void setHave_method_flags_hi(boolean have_method_flags_hi) {
this.have_method_flags_hi = have_method_flags_hi;
}
-
public void setHave_code_flags_hi(boolean have_code_flags_hi) {
this.have_code_flags_hi = have_code_flags_hi;
}
-
public boolean have_class_flags_hi() {
return have_class_flags_hi;
}
-
public boolean have_field_flags_hi() {
return have_field_flags_hi;
}
-
public boolean have_method_flags_hi() {
return have_method_flags_hi;
}
-
public boolean have_code_flags_hi() {
return have_code_flags_hi;
}
-
public void setIc_count(int ic_count) {
this.ic_count = ic_count;
}
@@ -276,9 +257,10 @@
this.class_count = class_count;
}
- private void writeCpCounts(OutputStream out) throws IOException, Pack200Exception {
+ private void writeCpCounts(OutputStream out) throws IOException,
+ Pack200Exception {
out.write(encodeScalar(cp_Utf8_count, Codec.UNSIGNED5));
- if((archive_options & (1 << 1)) != 0) { // have_cp_numbers
+ if ((archive_options & (1 << 1)) != 0) { // have_cp_numbers
out.write(encodeScalar(cp_Int_count, Codec.UNSIGNED5));
out.write(encodeScalar(cp_Float_count, Codec.UNSIGNED5));
out.write(encodeScalar(cp_Long_count, Codec.UNSIGNED5));
@@ -293,8 +275,9 @@
out.write(encodeScalar(cp_Imethod_count, Codec.UNSIGNED5));
}
- private void writeClassCounts(OutputStream out) throws IOException, Pack200Exception {
- int default_class_minver = minverCounter.getMostCommon();
+ private void writeClassCounts(OutputStream out) throws IOException,
+ Pack200Exception {
+ int default_class_minver = 0;
int default_class_majver = majverCounter.getMostCommon();
out.write(encodeScalar(ic_count, Codec.UNSIGNED5));
out.write(encodeScalar(default_class_minver, Codec.UNSIGNED5));
@@ -302,15 +285,19 @@
out.write(encodeScalar(class_count, Codec.UNSIGNED5));
}
- private void writeArchiveSpecialCounts(OutputStream out) throws IOException, Pack200Exception {
- if((archive_options & 1) > 0) { // have_special_formats
+ 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(attribute_definition_count,
+ Codec.UNSIGNED5));
}
}
- private void writeArchiveFileCounts(OutputStream out) throws IOException, Pack200Exception {
- if((archive_options & (1 << 4)) > 0) { // have_file_headers
+ private void writeArchiveFileCounts(OutputStream out) throws IOException,
+ Pack200Exception {
+ if ((archive_options & (1 << 4)) > 0) { // have_file_headers
out.write(encodeScalar(archive_size_hi, Codec.UNSIGNED5));
out.write(encodeScalar(archive_size_lo, Codec.UNSIGNED5));
out.write(encodeScalar(archive_next_count, Codec.UNSIGNED5));
@@ -319,10 +306,6 @@
}
}
- public void addMinorVersion(int minor) {
- minverCounter.add(minor);
- }
-
public void addMajorVersion(int major) {
majverCounter.add(major);
}
@@ -339,16 +322,16 @@
public void add(int obj) {
boolean found = false;
for (int i = 0; i < length; i++) {
- if(objs[i] == obj) {
+ if (objs[i] == obj) {
counts[i]++;
found = true;
}
}
- if(!found) {
+ if (!found) {
objs[length] = obj;
counts[length] = 1;
- length ++;
- if(length > objs.length - 1) {
+ length++;
+ if (length > objs.length - 1) {
Object[] newArray = new Object[objs.length + 8];
System.arraycopy(objs, 0, newArray, 0, length);
}
@@ -358,7 +341,7 @@
public int getMostCommon() {
int returnIndex = 0;
for (int i = 0; i < length; i++) {
- if(counts[i] > counts[returnIndex]) {
+ if (counts[i] > counts[returnIndex]) {
returnIndex = i;
}
}
@@ -367,11 +350,23 @@
}
public int getDefaultMinorVersion() {
- return minverCounter.getMostCommon();
+ return 0;
}
public int getDefaultMajorVersion() {
return majverCounter.getMostCommon();
}
+ public boolean have_file_size_hi() {
+ return have_file_size_hi;
+ }
+
+ public boolean have_file_modtime() {
+ return have_file_modtime;
+ }
+
+ public boolean have_file_options() {
+ return have_file_options;
+ }
+
}
\ No newline at end of file
Added: harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java?rev=702856&view=auto
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java (added)
+++ harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java Wed Oct 8 06:05:43 2008
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.harmony.pack200.tests;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.URISyntaxException;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarInputStream;
+import java.util.jar.JarOutputStream;
+
+import junit.framework.TestCase;
+
+import org.apache.harmony.pack200.Archive;
+import org.apache.harmony.pack200.Pack200Exception;
+import org.apache.harmony.unpack200.Segment;
+
+
+public class ArchiveTest extends TestCase {
+
+ JarInputStream 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"));
+ file = File.createTempFile("helloworld", ".pack");
+ out = new FileOutputStream(file);
+ new Archive(in, out).pack();
+ in.close();
+ out.close();
+
+ // now unpack
+ InputStream in2 = new FileInputStream(file);
+ File file2 = File.createTempFile("helloworld", ".jar");
+ JarOutputStream out2 = new JarOutputStream(new FileOutputStream(file2));
+ org.apache.harmony.unpack200.Archive archive = new org.apache.harmony.unpack200.Archive(
+ in2, out2);
+ archive.unpack();
+ out2.close();
+ in2.close();
+
+ JarFile jarFile = new JarFile(file2);
+ file2.deleteOnExit();
+ JarEntry entry = jarFile
+ .getJarEntry("org/apache/harmony/archive/tests/internal/pack200/HelloWorld.class");
+ assertNotNull(entry);
+ InputStream ours = jarFile.getInputStream(entry);
+
+ JarFile jarFile2 = new JarFile(new File(Segment.class.getResource(
+ "/org/apache/harmony/pack200/tests/hw.jar").toURI()));
+ JarEntry entry2 = jarFile2
+ .getJarEntry("org/apache/harmony/archive/tests/internal/pack200/HelloWorld.class");
+ assertNotNull(entry2);
+
+ InputStream expected = jarFile2.getInputStream(entry2);
+
+ 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 class files differ", line2, line1);
+ line1 = reader1.readLine();
+ line2 = reader2.readLine();
+ i++;
+ }
+ reader1.close();
+ reader2.close();
+
+ }
+
+}
Propchange: harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: harmony/enhanced/classlib/trunk/modules/pack200/src/test/java/org/apache/harmony/pack200/tests/ArchiveTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain