private JSONObject toJsonObject(ItemHint hint) {
   JSONObject jsonObject = new JSONOrderedObject();
   jsonObject.put("name", hint.getName());
   if (!hint.getValues().isEmpty()) {
     jsonObject.put("values", getItemHintValues(hint));
   }
   if (!hint.getProviders().isEmpty()) {
     jsonObject.put("providers", getItemHintProviders(hint));
   }
   return jsonObject;
 }
 private JSONArray getItemHintProviders(ItemHint hint) {
   JSONArray providers = new JSONArray();
   for (ItemHint.ValueProvider provider : hint.getProviders()) {
     providers.put(getItemHintProvider(provider));
   }
   return providers;
 }
 private JSONArray getItemHintValues(ItemHint hint) {
   JSONArray values = new JSONArray();
   for (ItemHint.ValueHint value : hint.getValues()) {
     values.put(getItemHintValue(value));
   }
   return values;
 }