Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/analysis/CacheWriter.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/analysis/CacheWriter.java (revision 0) |
+++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/analysis/CacheWriter.java (revision 0) |
@@ -0,0 +1,94 @@ |
+package com.google.dart.tools.core.analysis; |
+ |
+import java.io.File; |
+import java.io.PrintWriter; |
+import java.io.Writer; |
+import java.util.ArrayList; |
+import java.util.Map; |
+import java.util.Map.Entry; |
+import java.util.Set; |
+ |
+/** |
+ * Internal class for writing analysis state to disk between sessions. |
+ */ |
+public class CacheWriter { |
+ private PrintWriter writer; |
+ |
+ public CacheWriter(Writer writer) { |
+ this.writer = writer instanceof PrintWriter ? (PrintWriter) writer : new PrintWriter(writer); |
+ this.writer.println(CacheReader.CACHE_VERSION_TAG); |
+ } |
+ |
+ /** |
+ * Write a value that can be read by {@link CacheReader#readBoolean()} |
+ */ |
+ public void writeBoolean(boolean value) { |
+ writer.println(value ? "true" : "false"); |
+ } |
+ |
+ /** |
+ * Write a collection of file paths to be read by |
+ * {@link CacheReader#readFilePaths(java.util.Collection, String)} |
+ * |
+ * @param files the collection of files (not <code>null</code> ) |
+ * @param endTag the tag used to denote the end of the collection of file paths |
+ */ |
+ public void writeFilePaths(ArrayList<File> files, String endTag) { |
+ for (File libFile : files) { |
+ writeString(libFile.getPath()); |
+ } |
+ writeString(endTag); |
+ } |
+ |
+ /** |
+ * Write a string that can be read by {@link CacheReader#readString()} |
+ */ |
+ public void writeString(String string) { |
+ |
+ // Normal case ... write a line |
+ |
+ if (!string.startsWith("!") && string.indexOf('\r') == -1 && string.indexOf('\n') == -1) { |
+ writer.println(string); |
+ return; |
+ } |
+ |
+ // If the string contains a line separator, then string length is encoded |
+ // preceding the string as bang-number-bang |
+ |
+ writer.print('!'); |
+ writer.print(string.length()); |
+ writer.print('!'); |
+ writer.println(string); |
+ } |
+ |
+ /** |
+ * Write a collection of key/value pairs to be read by |
+ * {@link CacheReader#readStringFileMap(String)} where the keys are strings and the values are |
+ * instances of {@link java.io.File}. |
+ * |
+ * @param endTag the tag used to denote the end of the collection |
+ * @return the collection (not <code>null</code>) |
+ */ |
+ public void writeStringFileMap(Map<String, File> map, String endTag) { |
+ for (Entry<String, File> entry : map.entrySet()) { |
+ writeString(entry.getKey()); |
+ writeString(entry.getValue().getPath()); |
+ } |
+ writeString(endTag); |
+ } |
+ |
+ /** |
+ * Write a collection of strings that can be read by {@link CacheReader#readStringSet(String)} |
+ * |
+ * @param strings the collection of strings to be written (not <code>null</code>, contains no |
+ * <code>null</code>s) |
+ * @param endTag the tag used to denote the end of the collection of strings (not |
+ * <code>null</code>) |
+ */ |
+ public void writeStringSet(Set<String> strings, String endTag) { |
+ for (String string : strings) { |
+ writeString(string); |
+ } |
+ writeString(endTag); |
+ } |
+} |