WEB-36042 Use DataInputOutputUtilRt methods in Angular Metadata stubs.
authorPiotr Tomiak <piotr.tomiak@jetbrains.com>
Fri, 24 May 2019 08:03:26 +0000 (10:03 +0200)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Fri, 24 May 2019 08:37:45 +0000 (11:37 +0300)
GitOrigin-RevId: c148dd6622ebeacd49142ca22eae83a37a3c99c5

platform/util-rt/src/com/intellij/openapi/util/io/DataInputOutputUtilRt.java

index e6acaac6540349d13440098a0b10a1a34a12266a..2f02cd96b2be763c66d4932a1463f1903575b314 100644 (file)
@@ -23,9 +23,7 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import java.util.*;
 
 public class DataInputOutputUtilRt {
   public static int readINT(@NotNull DataInput record) throws IOException {
@@ -74,7 +72,7 @@ public class DataInputOutputUtilRt {
 
   public static void writeINT(@NotNull ByteBuffer byteBuffer, int val) {
     if (0 > val || val >= 192) {
-      byteBuffer.put( (byte)(192 + (val & 0x3F)));
+      byteBuffer.put((byte)(192 + (val & 0x3F)));
       val >>>= 6;
       while (val >= 128) {
         byteBuffer.put((byte)((val & 0x7F) | 0x80));
@@ -88,7 +86,10 @@ public class DataInputOutputUtilRt {
    * Writes the given collection to the output using the given procedure to write each element.
    * Should be coupled with {@link #readSeq}
    */
-  public static <T> void writeSeq(@NotNull DataOutput out, @NotNull Collection<? extends T> collection, @NotNull ThrowableConsumer<T, IOException> writeElement) throws IOException {
+  public static <T> void writeSeq(@NotNull DataOutput out,
+                                  @NotNull Collection<? extends T> collection,
+                                  @SuppressWarnings("BoundedWildcard")
+                                  @NotNull ThrowableConsumer<T, IOException> writeElement) throws IOException {
     writeINT(out, collection.size());
     for (T t : collection) {
       writeElement.consume(t);
@@ -100,7 +101,9 @@ public class DataInputOutputUtilRt {
    * Should be coupled with {@link #writeSeq}
    */
   @NotNull
-  public static <T> List<T> readSeq(@NotNull DataInput in, @NotNull ThrowableComputable<? extends T, IOException> readElement) throws IOException {
+  public static <T> List<T> readSeq(@NotNull DataInput in,
+                                    @SuppressWarnings("BoundedWildcard")
+                                    @NotNull ThrowableComputable<? extends T, IOException> readElement) throws IOException {
     int size = readINT(in);
     List<T> result = new ArrayList<T>(size);
     for (int i = 0; i < size; i++) {
@@ -109,4 +112,34 @@ public class DataInputOutputUtilRt {
     return result;
   }
 
+  /**
+   * Writes the given map to the output using the given procedure to write each key and value.
+   * Should be coupled with {@link #readMap}
+   */
+  public static <K, V> void writeMap(@NotNull DataOutput out,
+                                     @NotNull Map<? extends K, ? extends V> map,
+                                     @NotNull ThrowableConsumer<K, ? extends IOException> writeKey,
+                                     @NotNull ThrowableConsumer<V, ? extends IOException> writeValue) throws IOException {
+    writeINT(out, map.size());
+    for (Map.Entry<? extends K, ? extends V> e : map.entrySet()) {
+      writeKey.consume(e.getKey());
+      writeValue.consume(e.getValue());
+    }
+  }
+
+  /**
+   * Reads a map using the given function to read each element.
+   * Should be coupled with {@link #writeMap}
+   */
+  @NotNull
+  public static <K, V> Map<K, V> readMap(@NotNull DataInput in,
+                                         @NotNull ThrowableComputable<? extends K, ? extends IOException> readKey,
+                                         @NotNull ThrowableComputable<? extends V, ? extends IOException> readValue) throws IOException {
+    int size = readINT(in);
+    Map<K, V> result = new HashMap<K, V>();
+    for (int i = 0; i < size; i++) {
+      result.put(readKey.compute(), readValue.compute());
+    }
+    return result;
+  }
 }