private static JsonElement parse(File file) { try { InputStream stream = new FileInputStream(file); try { Reader fileReader = new InputStreamReader(stream, Charsets.UTF_8); JsonReader jsonReader = new JsonReader(fileReader); jsonReader.setLenient(true); return Streams.parse(jsonReader); } finally { stream.close(); } } catch (IOException e) { throw Throwables.propagate(e); } }
public JsonElement parse(JsonReader jsonreader) throws JsonIOException, JsonSyntaxException { boolean flag; flag = jsonreader.isLenient(); jsonreader.setLenient(true); JsonElement jsonelement = Streams.parse(jsonreader); jsonreader.setLenient(flag); return jsonelement; Object obj; obj; throw new JsonParseException((new StringBuilder()).append("Failed parsing JSON source: ").append(jsonreader).append(" to Json").toString(), ((Throwable) (obj))); obj; jsonreader.setLenient(flag); throw obj; obj; throw new JsonParseException((new StringBuilder()).append("Failed parsing JSON source: ").append(jsonreader).append(" to Json").toString(), ((Throwable) (obj))); }
@Override public JsonElement next() throws JsonParseException { if (!this.hasNext()) { throw new NoSuchElementException(); } try { JsonElement jsonElement = Streams.parse(this.parser); return jsonElement; } catch (StackOverflowError var1_2) { throw new JsonParseException("Failed parsing JSON source to Json", var1_2); } catch (OutOfMemoryError var1_3) { throw new JsonParseException("Failed parsing JSON source to Json", var1_3); } catch (JsonParseException var2_5) { RuntimeException runtimeException = var2_5; if (var2_5.getCause() instanceof EOFException) { runtimeException = new NoSuchElementException(); } throw runtimeException; } }
@Override public T read(JsonReader in) throws IOException { JsonObject el = Streams.parse(in).getAsJsonObject(); // Strip existing json schedules JsonObject directSchedules = el.has(SCHEDULES_FIELD_NAME) ? el.remove(SCHEDULES_FIELD_NAME).getAsJsonObject() : new JsonObject(); // Strip off @schedule annotations to update schedules attribute // Load annotated schedules JsonObject annotatedSchedules = new JsonObject(); // TODO: make this recursive to have nested schedules with dot notation for (Map.Entry<String, JsonElement> entry : el.entrySet()) { JsonElement entryEl = entry.getValue(); if (entryEl.isJsonObject()) { JsonObject subConfig = entryEl.getAsJsonObject(); if (subConfig.has(SCHEDULE)) { JsonElement scheduleConfig = subConfig.remove(SCHEDULE); annotatedSchedules.add(entry.getKey(), scheduleConfig); } } } T result = delegateAdapter.read(new JsonTreeReader(el)); // If there is a 'schedules' field, inject schedules Field schedulesField = AnnotationUtil.getField(SCHEDULES_FIELD_NAME, result.getClass()); if (schedulesField != null) { ///// Default schedules for every schedulable top level object JsonObject defaultSchedules = new JsonObject(); List<Field> fields = new ArrayList<Field>(); for (Field field : AnnotationUtil.getAllFields(fields, result.getClass())) { DefaultSchedule defaultSchedule = field.getAnnotation(DefaultSchedule.class); if (defaultSchedule == null) { boolean currentAccessibility = field.isAccessible(); try { field.setAccessible(true); Object fieldValue = field.get(result); if (fieldValue != null) { Class<?> fieldRuntimeClass = field.get(result).getClass(); defaultSchedule = fieldRuntimeClass.getAnnotation(DefaultSchedule.class); } } catch (IllegalArgumentException e) { Log.e(LogUtil.TAG, "Bad access of configurable fields!!", e); } catch (IllegalAccessException e) { Log.e(LogUtil.TAG, "Bad access of configurable fields!!", e); } finally { field.setAccessible(currentAccessibility); } } if (defaultSchedule != null) { defaultSchedules.add( field.getName(), gson.toJsonTree(defaultSchedule, DefaultSchedule.class)); } } JsonObject schedulesJson = directSchedules; JsonUtils.deepCopyOnto( defaultSchedules, schedulesJson, false); // Copy in default schedules, but do not replace JsonUtils.deepCopyOnto( annotatedSchedules, schedulesJson, true); // Override with annotations // For each schedule find default schedule, fill in remainder Map<String, Schedule> schedules = gson.fromJson(schedulesJson, new TypeToken<Map<String, Schedule>>() {}.getType()); boolean currentAccessibility = schedulesField.isAccessible(); try { schedulesField.setAccessible(true); schedulesField.set(result, schedules); } catch (IllegalArgumentException e) { Log.e(LogUtil.TAG, "Bad access of configurable fields!!", e); } catch (IllegalAccessException e) { Log.e(LogUtil.TAG, "Bad access of configurable fields!!", e); } finally { schedulesField.setAccessible(currentAccessibility); } } return result; }