Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2013-02-17 13:35:25 +0400
committerjfrijters <jfrijters>2013-02-17 13:35:25 +0400
commit25881c98c11517a738d41402a0d7cad997479dd8 (patch)
treebd446a358e6747fa2466640f228e0a8f24e4e247 /openjdk/java
parent39ad0c5b68c777be287eca374dfb5c1ad767cc08 (diff)
Project stub classes into the jar the classes originated from.
Diffstat (limited to 'openjdk/java')
-rw-r--r--openjdk/java/util/zip/ClassStubZipEntry.java98
-rw-r--r--openjdk/java/util/zip/ZipFile.java4
2 files changed, 102 insertions, 0 deletions
diff --git a/openjdk/java/util/zip/ClassStubZipEntry.java b/openjdk/java/util/zip/ClassStubZipEntry.java
new file mode 100644
index 00000000..6a2a6df5
--- /dev/null
+++ b/openjdk/java/util/zip/ClassStubZipEntry.java
@@ -0,0 +1,98 @@
+/*
+ Copyright (C) 2013 Jeroen Frijters
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ Jeroen Frijters
+ jeroen@frijters.net
+
+*/
+package java.util.zip;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+
+final class ClassStubZipEntry extends ZipEntry
+{
+ private final String zipFilePath;
+
+ ClassStubZipEntry(String zipFilePath, String name)
+ {
+ super(name);
+ this.zipFilePath = zipFilePath;
+ }
+
+ private File getFile()
+ {
+ return new File(new File(zipFilePath).getParentFile().getParentFile(), "classes" + File.separator + name);
+ }
+
+ public long getSize()
+ {
+ if (size == -1)
+ {
+ size = getFile().length();
+ }
+ return size;
+ }
+
+ public long getCompressedSize()
+ {
+ if (csize == -1)
+ {
+ csize = getSize();
+ }
+ return csize;
+ }
+
+ public long getCrc()
+ {
+ if (crc == -1)
+ {
+ crc = computeCrc();
+ }
+ return crc;
+ }
+
+ private long computeCrc()
+ {
+ try (InputStream in = getInputStream())
+ {
+ CRC32 crc = new CRC32();
+ int b;
+ while ((b = in.read()) != -1)
+ {
+ crc.update(b);
+ }
+ return crc.getValue();
+ }
+ catch (IOException _)
+ {
+ return 0;
+ }
+ }
+
+ final InputStream getInputStream() throws IOException
+ {
+ return new FileInputStream(getFile());
+ }
+
+ static native void expandIkvmClasses(ZipFile zipFile, LinkedHashMap<String, ZipEntry> entries);
+}
diff --git a/openjdk/java/util/zip/ZipFile.java b/openjdk/java/util/zip/ZipFile.java
index b22c7978..35fbc665 100644
--- a/openjdk/java/util/zip/ZipFile.java
+++ b/openjdk/java/util/zip/ZipFile.java
@@ -195,6 +195,7 @@ public class ZipFile implements ZipConstants, Closeable
try
{
readEntries();
+ ClassStubZipEntry.expandIkvmClasses(this, entries);
valid = true;
}
catch (EOFException _)
@@ -457,6 +458,9 @@ public class ZipFile implements ZipConstants, Closeable
if (zipEntry == null)
return null;
+ if (zipEntry instanceof ClassStubZipEntry)
+ return ((ClassStubZipEntry)zipEntry).getInputStream();
+
PartialInputStream inp = new PartialInputStream(1024) {
void lazyInitialSeek() throws IOException {
seek(zipEntry.offset);