Source:
<code>private static UInt128 getHash(Object resource, UInt128 seed) throws IOException { if (resource == null) { return MurmurHash3_128.hash128(HashSeeds.NULL, seed); } if (resource instanceof JsonSerializable) { <START> return getHashFromJsonSerializable((JsonSerializable) resource, seed); <END> } if (resource instanceof List) { return getHashFromList((List<Object>) resource, seed); } if (resource instanceof Boolean) { return (Boolean)resource ? MurmurHash3_128.hash128(HashSeeds.TRUE, seed) : MurmurHash3_128.hash128(HashSeeds.FALSE, seed); } if (resource instanceof Integer) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.INTEGER, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof Long) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.LONG, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof Double) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.DOUBLE, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof String) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.STRING, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof ValueNode) { return getHash(JsonSerializable.getValue((JsonNode) resource)); } if (resource instanceof ArrayNode) { return getHashFromArrayNode((ArrayNode) resource, seed); } if (resource instanceof ObjectNode) { return getHashFromObjectNode((ObjectNode) resource, seed); } throw new IllegalArgumentException(String.format("Unexpected type: %s", resource.getClass().toString())); }</code><technical_language>I is a infinite recursion scenario here. This calls getHashFromJsonSerializable -> calls this method getHash casing resource JsonSerializable</technical_language>

Target:
private static UInt128 getHash(Object resource, UInt128 seed) throws IOException { if (resource == null) { return MurmurHash3_128.hash128(HashSeeds.NULL, seed); } if (resource instanceof JsonSerializable) { return getHashFromJsonSerializable((JsonSerializable) resource, seed); } if (resource instanceof List) { return getHashFromIterator(((List) resource).iterator(), seed); } if (resource instanceof Boolean) { return (Boolean)resource ? MurmurHash3_128.hash128(HashSeeds.TRUE, seed) : MurmurHash3_128.hash128(HashSeeds.FALSE, seed); } if (resource instanceof Integer) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.INTEGER, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof Long) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.LONG, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof Double) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.DOUBLE, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof String) { UInt128 hash = MurmurHash3_128.hash128(HashSeeds.STRING, seed); return MurmurHash3_128.hash128(resource, hash); } if (resource instanceof NullNode) { return getHash(null, seed); } if (resource instanceof ValueNode) { return getHash(JsonSerializable.getValue((JsonNode) resource), seed); } if (resource instanceof ArrayNode) { return getHashFromIterator(((ArrayNode) resource).iterator(), seed); } if (resource instanceof ObjectNode) { return getHashFromObjectNode((ObjectNode) resource, seed); } throw new IllegalArgumentException(String.format("Unexpected type: %s", resource.getClass().toString())); }