class GeoJsonPolygonReader
        implements ObjectReader<GeoJsonPolygon> {
    public static final GeoJsonPolygonReader INSTANCE = new GeoJsonPolygonReader();

    static final long HASH_TYPE = Fnv.hashCode64("type");
    static final long HASH_POLYGON = Fnv.hashCode64("Polygon");
    static final long HASH_COORDINATES = Fnv.hashCode64("coordinates");

    public GeoJsonPolygonReader() {
    }

    @Override
    public GeoJsonPolygon readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {<FILL_FUNCTION_BODY>}
}

        if (jsonReader.nextIfNull()) {
            return null;
        }

        jsonReader.nextIfObjectStart();

        List<Point> points = new ArrayList<>();

        for (; ; ) {
            if (jsonReader.nextIfObjectEnd()) {
                break;
            }

            long nameHashCode = jsonReader.readFieldNameHashCode();
            if (nameHashCode == HASH_TYPE) {
                long valueHashCode = jsonReader.readValueHashCode();
                if (valueHashCode != HASH_POLYGON) {
                    throw new JSONException("not support input type : " + jsonReader.getString());
                }
            } else if (nameHashCode == HASH_COORDINATES) {
                GeoJsonLineString lineString = jsonReader.read(GeoJsonLineString.class);
                points.addAll(lineString.getCoordinates());
            } else {
                jsonReader.skipValue();
            }
        }

        jsonReader.nextIfMatch(',');
        return new GeoJsonPolygon(points);
    
<no_super_class>