Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
esaulpaugh committed Feb 9, 2025
1 parent 47e3d59 commit 39c7f67
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 28 deletions.
44 changes: 18 additions & 26 deletions src/main/java/com/esaulpaugh/headlong/abi/ABIJSON.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,6 @@
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

/** For parsing JSON representations of {@link ABIObject}s according to the ABI specification. */
public final class ABIJSON {
Expand Down Expand Up @@ -103,24 +101,6 @@ public static List<ContractError<Tuple>> parseErrors(String arrayJson) {
public static <T extends ABIObject> List<T> parseElements(int flags, String arrayJson, Set<TypeEnum> types) {
return parseArray(reader(arrayJson), types, flags);
}
//----------------------------------------------------------------------------------------------------------------------
static <T extends ABIObject> List<T> parseArray(final JsonReader reader, Set<TypeEnum> types, int flags) {
final List<T> list = new ArrayList<>();
try (JsonReader ignored = reader) {
reader.beginArray();
final MessageDigest digest = Function.newDefaultDigest();
while (reader.peek() != JsonToken.END_ARRAY) {
T e = tryParseStreaming(reader, types, digest, flags);
if (e != null) {
list.add(e);
}
}
reader.endArray();
} catch (IOException io) {
throw new IllegalStateException(io);
}
return list;
}

public static <T extends ABIObject> List<T> parseABIField(int flags, String objectJson, Set<TypeEnum> types) {
try (final JsonReader reader = reader(objectJson)) {
Expand Down Expand Up @@ -149,18 +129,30 @@ public static String optimize(String json) {
if (token == JsonToken.BEGIN_OBJECT) {
return toJson(ABIObject.fromJson(json), false, true);
} else if (token == JsonToken.BEGIN_ARRAY) {
return optimizedArrayJson(parseArray(reader, ABIJSON.ALL, ABIType.FLAGS_NONE));
return toMinifiedJsonArray(parseArray(reader, ABIJSON.ALL, ABIType.FLAGS_NONE));
}
throw new IllegalArgumentException("unexpected token: " + token);
} catch (IOException io) {
throw new IllegalStateException(io);
}
}
//----------------------------------------------------------------------------------------------------------------------
static <T extends ABIObject> Stream<T> _stream(JsonReader reader, Set<TypeEnum> types, int flags) {
final JsonSpliterator<T> spliterator = new JsonSpliterator<>(reader, types, flags); // For single-threaded use only
return StreamSupport.stream(spliterator, false)
.onClose(spliterator::close);
static <T extends ABIObject> List<T> parseArray(final JsonReader reader, Set<TypeEnum> types, int flags) {
final List<T> list = new ArrayList<>();
try (JsonReader ignored = reader) {
reader.beginArray();
final MessageDigest digest = Function.newDefaultDigest();
while (reader.peek() != JsonToken.END_ARRAY) {
T e = tryParseStreaming(reader, types, digest, flags);
if (e != null) {
list.add(e);
}
}
reader.endArray();
} catch (IOException io) {
throw new IllegalStateException(io);
}
return list;
}

static String toJson(ABIObject o, boolean pretty, boolean minify) {
Expand All @@ -176,7 +168,7 @@ static String toJson(ABIObject o, boolean pretty, boolean minify) {
return stringOut.toString();
}

private static String optimizedArrayJson(List<ABIObject> elements) throws IOException {
private static String toMinifiedJsonArray(List<ABIObject> elements) throws IOException {
final Writer stringOut = new NonSyncWriter(2048);
try (final JsonWriter out = new JsonWriter(stringOut)) {
out.setIndent("");
Expand Down
13 changes: 11 additions & 2 deletions src/main/java/com/esaulpaugh/headlong/abi/ABIParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,14 @@
*/
package com.esaulpaugh.headlong.abi;

import com.google.gson.stream.JsonReader;

import java.io.InputStream;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

import static com.esaulpaugh.headlong.abi.ABIJSON.reader;

Expand Down Expand Up @@ -63,10 +66,16 @@ public <T extends ABIObject> List<T> parse(InputStream arrayStream) {
}

public <T extends ABIObject> Stream<T> stream(String arrayJson) {
return ABIJSON._stream(reader(arrayJson), types, flags);
return stream(reader(arrayJson), types, flags);
}

public <T extends ABIObject> Stream<T> stream(InputStream arrayStream) {
return ABIJSON._stream(reader(arrayStream), types, flags);
return stream(reader(arrayStream), types, flags);
}

private static <T extends ABIObject> Stream<T> stream(JsonReader reader, Set<TypeEnum> types, int flags) {
final ABIJSON.JsonSpliterator<T> spliterator = new ABIJSON.JsonSpliterator<>(reader, types, flags); // For single-threaded use only
return StreamSupport.stream(spliterator, false)
.onClose(spliterator::close);
}
}

0 comments on commit 39c7f67

Please sign in to comment.