Skip to content

Commit

Permalink
Extracted the JsonReaders.skipValue() method
Browse files Browse the repository at this point in the history
  • Loading branch information
lyubomyr-shaydariv committed Mar 24, 2024
1 parent e112cc1 commit 1963f03
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 30 deletions.
31 changes: 1 addition & 30 deletions src/main/java/lsh/ext/gson/FailSafeTypeAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.google.gson.stream.JsonWriter;
import com.google.gson.stream.MalformedJsonException;
import lombok.AccessLevel;
Expand Down Expand Up @@ -39,39 +38,11 @@ public T read(final JsonReader in)
try {
return typeAdapter.read(in);
} catch ( final MalformedJsonException | RuntimeException ignored ) {
skip(in);
JsonReaders.skipValue(in);
return null;
}
}

@SuppressWarnings("checkstyle:CyclomaticComplexity")
private static void skip(final JsonReader in)
throws IOException {
final JsonToken jsonToken = in.peek();
switch ( jsonToken ) {
case BEGIN_ARRAY:
case BEGIN_OBJECT:
case NAME:
case STRING:
case NUMBER:
case BOOLEAN:
case NULL:
in.skipValue();
return;
case END_ARRAY:
in.endArray();
return;
case END_OBJECT:
in.endObject();
return;
case END_DOCUMENT:
// do nothing
return;
default:
throw new AssertionError(jsonToken);
}
}

@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public static final class Factory
implements TypeAdapterFactory {
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/lsh/ext/gson/JsonReaders.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,34 @@ public static void skipToken(@WillNotClose final JsonReader reader)
}
}

@SuppressWarnings("checkstyle:CyclomaticComplexity")
public static void skipValue(@WillNotClose final JsonReader jsonReader)
throws IOException {
final JsonToken jsonToken = jsonReader.peek();
switch ( jsonToken ) {
case BEGIN_ARRAY:
case BEGIN_OBJECT:
case NAME:
case STRING:
case NUMBER:
case BOOLEAN:
case NULL:
jsonReader.skipValue();
return;
case END_ARRAY:
jsonReader.endArray();
return;
case END_OBJECT:
jsonReader.endObject();
return;
case END_DOCUMENT:
// do nothing
return;
default:
throw new AssertionError(jsonToken);
}
}

public static <E> Iterator<E> asIterator(@WillNotClose final JsonReader jsonReader, final TypeAdapter<? extends E> elementTypeAdapter) {
return JsonReaderIterator.getInstance(jsonReader, elementTypeAdapter);
}
Expand Down

0 comments on commit 1963f03

Please sign in to comment.