Makes StandardGeneratedResource portable.
Patch by: spoon
Review by: me
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@6494 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardGeneratedResource.java b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardGeneratedResource.java
index c27a7af..5283ed6 100644
--- a/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardGeneratedResource.java
+++ b/dev/core/src/com/google/gwt/core/ext/linker/impl/StandardGeneratedResource.java
@@ -19,37 +19,62 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.linker.GeneratedResource;
+import com.google.gwt.dev.util.DiskCache;
+import com.google.gwt.dev.util.Util;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
/**
* The standard implementation of {@link GeneratedResource}.
*/
public class StandardGeneratedResource extends GeneratedResource {
- private final File file;
+ private static final DiskCache diskCache = new DiskCache();
+
+ private final long lastModified;
+
+ private transient long token;
public StandardGeneratedResource(Class<? extends Generator> generatorType,
String partialPath, File file) {
super(StandardLinkerContext.class, generatorType, partialPath);
- this.file = file;
+ this.lastModified = file.lastModified();
+ this.token = diskCache.writeByteArray(Util.readFileAsBytes(file));
}
@Override
public InputStream getContents(TreeLogger logger)
throws UnableToCompleteException {
- try {
- return new FileInputStream(file);
- } catch (IOException e) {
- logger.log(TreeLogger.ERROR, "Unable to open file", e);
- throw new UnableToCompleteException();
- }
+ return new ByteArrayInputStream(diskCache.readByteArray(token));
}
@Override
public long getLastModified() {
- return file.lastModified();
+ return lastModified;
+ }
+
+ @Override
+ public void writeTo(TreeLogger logger, OutputStream out)
+ throws UnableToCompleteException {
+ diskCache.writeTo(token, out);
+ }
+
+ private void readObject(ObjectInputStream stream) throws IOException,
+ ClassNotFoundException {
+ stream.defaultReadObject();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ Util.copyNoClose(stream, baos);
+ token = diskCache.writeByteArray(baos.toByteArray());
+ }
+
+ private void writeObject(ObjectOutputStream stream) throws IOException {
+ stream.defaultWriteObject();
+ diskCache.writeTo(token, stream);
}
}