aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2016-09-15 13:22:36 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-09-15 15:41:14 +0000
commit03940330768479b679a2fe995f3041d96f5412a3 (patch)
tree06d1c17358677e695f7c61511eb8e30b2f32b602
parentcf773d29e7001293638f3411c33622a4598556b2 (diff)
Store contents of FileWriteActions as UTF-8 bytes rather than java.lang.String.
-- MOS_MIGRATED_REVID=133253857
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java
index 1c7043ab46..64ea99c04d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/FileWriteAction.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.util.Fingerprint;
+import com.google.devtools.build.lib.util.LazyString;
import java.io.IOException;
import java.io.OutputStream;
@@ -75,9 +76,25 @@ public final class FileWriteAction extends AbstractFileWriteAction {
public FileWriteAction(ActionOwner owner, Collection<Artifact> inputs,
Artifact output, CharSequence fileContents, boolean makeExecutable) {
super(owner, inputs, output, makeExecutable);
+ if (fileContents instanceof String && fileContents.length() > 256) {
+ fileContents = new StoredAsUTF8((String) fileContents);
+ }
this.fileContents = fileContents;
}
+ private static final class StoredAsUTF8 extends LazyString {
+ final byte[] bytes;
+
+ StoredAsUTF8(String chars) {
+ this.bytes = chars.getBytes(UTF_8);
+ }
+
+ @Override
+ public String toString() {
+ return new String(bytes, UTF_8);
+ }
+ }
+
/**
* Creates a new FileWriteAction instance using UTF8 encoding.
*