com.google.gson.InstanceCreator Java Examples

The following examples show how to use com.google.gson.InstanceCreator. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: ConstructorConstructor.java    From letv with Apache License 2.0 6 votes vote down vote up
public <T> ObjectConstructor<T> getConstructor(TypeToken<T> typeToken) {
    final Type type = typeToken.getType();
    Class<? super T> rawType = typeToken.getRawType();
    final InstanceCreator<T> creator = (InstanceCreator) this.instanceCreators.get(type);
    if (creator != null) {
        return new ObjectConstructor<T>() {
            public T construct() {
                return creator.createInstance(type);
            }
        };
    }
    ObjectConstructor<T> defaultConstructor = newDefaultConstructor(rawType);
    if (defaultConstructor != null) {
        return defaultConstructor;
    }
    ObjectConstructor<T> defaultImplementation = newDefaultImplementationConstructor(rawType);
    if (defaultImplementation != null) {
        return defaultImplementation;
    }
    return newUnsafeAllocator(type, rawType);
}
 
Example #2
Source File: InstanceCreatorTest.java    From gson with Apache License 2.0 6 votes vote down vote up
@SuppressWarnings({ "unchecked", "rawtypes" })
public void testInstanceCreatorForParametrizedType() throws Exception {
  @SuppressWarnings("serial")
  class SubTreeSet<T> extends TreeSet<T> {}
  InstanceCreator<SortedSet> sortedSetCreator = new InstanceCreator<SortedSet>() {
    @Override public SortedSet createInstance(Type type) {
      return new SubTreeSet();
    }
  };
  Gson gson = new GsonBuilder()
      .registerTypeAdapter(SortedSet.class, sortedSetCreator)
      .create();

  Type sortedSetType = new TypeToken<SortedSet<String>>() {}.getType();
  SortedSet<String> set = gson.fromJson("[\"a\"]", sortedSetType);
  assertEquals(set.first(), "a");
  assertEquals(SubTreeSet.class, set.getClass());

  set = gson.fromJson("[\"b\"]", SortedSet.class);
  assertEquals(set.first(), "b");
  assertEquals(SubTreeSet.class, set.getClass());
}
 
Example #3
Source File: ResultsDriftCorrection.java    From thunderstorm with GNU General Public License v3.0 6 votes vote down vote up
private DriftResults loadResultsFromFile(String path) throws IOException {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new FileReader(path));

        Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(
                UnivariateFunction.class,
                new InstanceCreator<PolynomialSplineFunction>() {
                    @Override
                    public PolynomialSplineFunction createInstance(Type type) {
                        return new PolynomialSplineFunction(new double[]{1, 2}, new PolynomialFunction[]{new PolynomialFunction(new double[1])});
                    }
                }).create();
        return gson.fromJson(reader, DriftResults.class);
    } finally {
        if(reader != null) {
            reader.close();
        }
    }
}
 
Example #4
Source File: InstanceCreatorTest.java    From gson with Apache License 2.0 6 votes vote down vote up
public void testInstanceCreatorReturnsSubTypeForTopLevelObject() {
  Gson gson = new GsonBuilder()
  .registerTypeAdapter(Base.class, new InstanceCreator<Base>() {
    @Override public Base createInstance(Type type) {
      return new Sub();
    }
  })
  .create();

  String json = "{baseName:'Base',subName:'SubRevised'}";
  Base base = gson.fromJson(json, Base.class);
  assertTrue(base instanceof Sub);

  Sub sub = (Sub) base;
  assertFalse("SubRevised".equals(sub.subName));
  assertEquals(Sub.SUB_NAME, sub.subName);
}
 
Example #5
Source File: Element.java    From streamsx.topology with Apache License 2.0 5 votes vote down vote up
private Gson refresher() {
    if (refreshJson == null) {
        refreshJson = refreshBuilder.registerTypeAdapter(getClass(),
            new InstanceCreator<Object>() {
                @Override
                public Object createInstance(Type arg0) {
                    return Element.this;
                }}).create();
    }
    return refreshJson;
}
 
Example #6
Source File: GraphAdapterBuilder.java    From gson with Apache License 2.0 5 votes vote down vote up
public void registerOn(GsonBuilder gsonBuilder) {
  Factory factory = new Factory(instanceCreators);
  gsonBuilder.registerTypeAdapterFactory(factory);
  for (Map.Entry<Type, InstanceCreator<?>> entry : instanceCreators.entrySet()) {
    gsonBuilder.registerTypeAdapter(entry.getKey(), factory);
  }
}
 
Example #7
Source File: GraphAdapterBuilder.java    From gson with Apache License 2.0 5 votes vote down vote up
public GraphAdapterBuilder addType(Type type, InstanceCreator<?> instanceCreator) {
  if (type == null || instanceCreator == null) {
    throw new NullPointerException();
  }
  instanceCreators.put(type, instanceCreator);
  return this;
}
 
Example #8
Source File: ObjectTest.java    From gson with Apache License 2.0 5 votes vote down vote up
public void testInnerClassDeserialization() {
  final Parent p = new Parent();
  Gson gson = new GsonBuilder().registerTypeAdapter(
      Parent.Child.class, new InstanceCreator<Parent.Child>() {
    public Parent.Child createInstance(Type type) {
      return p.new Child();
    }
  }).create();
  String json = "{'value2':3}";
  Parent.Child c = gson.fromJson(json, Parent.Child.class);
  assertEquals(3, c.value2);
}
 
Example #9
Source File: InstanceCreatorTest.java    From gson with Apache License 2.0 5 votes vote down vote up
public void testInstanceCreatorForCollectionType() {
  @SuppressWarnings("serial")
  class SubArrayList<T> extends ArrayList<T> {}
  InstanceCreator<List<String>> listCreator = new InstanceCreator<List<String>>() {
    @Override public List<String> createInstance(Type type) {
      return new SubArrayList<String>();
    }
  };
  Type listOfStringType = new TypeToken<List<String>>() {}.getType();
  Gson gson = new GsonBuilder()
      .registerTypeAdapter(listOfStringType, listCreator)
      .create();
  List<String> list = gson.fromJson("[\"a\"]", listOfStringType);
  assertEquals(SubArrayList.class, list.getClass());
}
 
Example #10
Source File: InstanceCreatorTest.java    From gson with Apache License 2.0 5 votes vote down vote up
public void testInstanceCreatorReturnsSubTypeForField() {
  Gson gson = new GsonBuilder()
  .registerTypeAdapter(Base.class, new InstanceCreator<Base>() {
    @Override public Base createInstance(Type type) {
      return new Sub();
    }
  })
  .create();
  String json = "{base:{baseName:'Base',subName:'SubRevised'}}";
  ClassWithBaseField target = gson.fromJson(json, ClassWithBaseField.class);
  assertTrue(target.base instanceof Sub);
  assertEquals(Sub.SUB_NAME, ((Sub)target.base).subName);
}
 
Example #11
Source File: InstanceCreatorTest.java    From gson with Apache License 2.0 5 votes vote down vote up
public void testInstanceCreatorReturnsBaseType() {
  Gson gson = new GsonBuilder()
    .registerTypeAdapter(Base.class, new InstanceCreator<Base>() {
      @Override public Base createInstance(Type type) {
       return new Base();
     }
    })
    .create();
  String json = "{baseName:'BaseRevised',subName:'Sub'}";
  Base base = gson.fromJson(json, Base.class);
  assertEquals("BaseRevised", base.baseName);
}
 
Example #12
Source File: MapTest.java    From gson with Apache License 2.0 5 votes vote down vote up
public void testMapSubclassDeserialization() {
  Gson gson = new GsonBuilder().registerTypeAdapter(MyMap.class, new InstanceCreator<MyMap>() {
    public MyMap createInstance(Type type) {
      return new MyMap();
    }
  }).create();
  String json = "{\"a\":1,\"b\":2}";
  MyMap map = gson.fromJson(json, MyMap.class);
  assertEquals("1", map.get("a"));
  assertEquals("2", map.get("b"));
}
 
Example #13
Source File: GraphAdapterBuilder.java    From gson with Apache License 2.0 5 votes vote down vote up
/**
 * Hook for the graph adapter to get a reference to a deserialized value
 * before that value is fully populated. This is useful to deserialize
 * values that directly or indirectly reference themselves: we can hand
 * out an instance before read() returns.
 *
 * <p>Gson should only ever call this method when we're expecting it to;
 * that is only when we've called back into Gson to deserialize a tree.
 */
@SuppressWarnings("unchecked")
public Object createInstance(Type type) {
  Graph graph = graphThreadLocal.get();
  if (graph == null || graph.nextCreate == null) {
    throw new IllegalStateException("Unexpected call to createInstance() for " + type);
  }
  InstanceCreator<?> creator = instanceCreators.get(type);
  Object result = creator.createInstance(type);
  graph.nextCreate.value = result;
  graph.nextCreate = null;
  return result;
}
 
Example #14
Source File: ConstructorConstructor.java    From MiBandDecompiled with Apache License 2.0 5 votes vote down vote up
public ObjectConstructor get(TypeToken typetoken)
{
    Type type = typetoken.getType();
    Class class1 = typetoken.getRawType();
    InstanceCreator instancecreator = (InstanceCreator)a.get(type);
    Object obj;
    if (instancecreator != null)
    {
        obj = new d(this, instancecreator, type);
    } else
    {
        InstanceCreator instancecreator1 = (InstanceCreator)a.get(class1);
        if (instancecreator1 != null)
        {
            return new h(this, instancecreator1, type);
        }
        obj = a(class1);
        if (obj == null)
        {
            obj = a(type, class1);
            if (obj == null)
            {
                return b(type, class1);
            }
        }
    }
    return ((ObjectConstructor) (obj));
}
 
Example #15
Source File: h.java    From MiBandDecompiled with Apache License 2.0 5 votes vote down vote up
h(ConstructorConstructor constructorconstructor, InstanceCreator instancecreator, Type type)
{
    c = constructorconstructor;
    a = instancecreator;
    b = type;
    super();
}
 
Example #16
Source File: PropertiesTypeAdapter.java    From smarthome with Eclipse Public License 2.0 5 votes vote down vote up
public PropertiesTypeAdapter(Gson gson) {
    // obtain the default type adapters for String and Object classes
    keyAdapter = gson.getAdapter(String.class);
    valueAdapter = gson.getAdapter(Object.class);

    // obtain default gson objects
    constructor = new ConstructorConstructor(Collections.<Type, InstanceCreator<?>> emptyMap());
    delegate = new MapTypeAdapterFactory(constructor, false).create(new Gson(), TOKEN);
}
 
Example #17
Source File: NavTreeRequest.java    From typescript.java with MIT License 5 votes vote down vote up
@Override
public Response<NavigationBarItem> parseResponse(JsonObject json) {
	Gson gson = GsonHelper.DEFAULT_GSON;
	if (positionProvider != null) {
		gson = new GsonBuilder().registerTypeAdapter(Location.class, new InstanceCreator<Location>() {
			@Override
			public Location createInstance(Type type) {
				return new Location(positionProvider);
			}
		}).create();
	}
	return gson.fromJson(json, NavTreeResponse.class);
}
 
Example #18
Source File: NavBarRequest.java    From typescript.java with MIT License 5 votes vote down vote up
@Override
public Response<List<NavigationBarItem>> parseResponse(JsonObject json) {
	Gson gson = GsonHelper.DEFAULT_GSON;
	if (positionProvider != null) {
		gson = new GsonBuilder().registerTypeAdapter(Location.class, new InstanceCreator<Location>() {
			@Override
			public Location createInstance(Type type) {
				return new Location(positionProvider);
			}
		}).create();
	}
	return gson.fromJson(json, NavBarResponse.class);
}
 
Example #19
Source File: CompletionsRequest.java    From typescript.java with MIT License 5 votes vote down vote up
@Override
public Response<List<CompletionEntry>> parseResponse(JsonObject json) {
	String fileName = super.getArguments().getFile();
	int line = super.getArguments().getLine();
	int offset = super.getArguments().getOffset();
	Gson gson = new GsonBuilder()
			.registerTypeAdapter(CompletionEntry.class, new InstanceCreator<CompletionEntry>() {
				@Override
				public CompletionEntry createInstance(Type type) {
					return factory.create(matcherProvider.getMatcher(), fileName, line, offset, client);
				}
			}).create();
	return gson.fromJson(json, CompletionsResponse.class);
}
 
Example #20
Source File: JsonConfigLoader.java    From extentreports-java with Apache License 2.0 5 votes vote down vote up
private void init(T instance) {
    this.instance = instance;
    creator = new InstanceCreator<T>() {
        @Override
        public T createInstance(Type type) {
            return instance;
        }
    };
}
 
Example #21
Source File: JadxSettingsAdapter.java    From jadx with Apache License 2.0 4 votes vote down vote up
private static <T> void populate(GsonBuilder builder, String json, Class<T> type, final T into) {
	builder.registerTypeAdapter(type, (InstanceCreator<T>) t -> into)
			.create()
			.fromJson(json, type);
}
 
Example #22
Source File: ConstructorConstructor.java    From framework with GNU Affero General Public License v3.0 4 votes vote down vote up
public ConstructorConstructor(Map<Type, InstanceCreator<?>> instanceCreators) {
  this.instanceCreators = instanceCreators;
}
 
Example #23
Source File: ConstructorConstructor.java    From framework with GNU Affero General Public License v3.0 4 votes vote down vote up
public <T> ObjectConstructor<T> get(TypeToken<T> typeToken) {
  final Type type = typeToken.getType();
  final Class<? super T> rawType = typeToken.getRawType();

  // first try an instance creator

  @SuppressWarnings("unchecked") // types must agree
  final InstanceCreator<T> typeCreator = (InstanceCreator<T>) instanceCreators.get(type);
  if (typeCreator != null) {
    return new ObjectConstructor<T>() {
      public T construct() {
        return typeCreator.createInstance(type);
      }
    };
  }

  // Next try raw type match for instance creators
  @SuppressWarnings("unchecked") // types must agree
  final InstanceCreator<T> rawTypeCreator =
      (InstanceCreator<T>) instanceCreators.get(rawType);
  if (rawTypeCreator != null) {
    return new ObjectConstructor<T>() {
      public T construct() {
        return rawTypeCreator.createInstance(type);
      }
    };
  }

  ObjectConstructor<T> defaultConstructor = newDefaultConstructor(rawType);
  if (defaultConstructor != null) {
    return defaultConstructor;
  }

  ObjectConstructor<T> defaultImplementation = newDefaultImplementationConstructor(type, rawType);
  if (defaultImplementation != null) {
    return defaultImplementation;
  }

  // finally try unsafe
  return newUnsafeAllocator(type, rawType);
}
 
Example #24
Source File: GraphAdapterBuilder.java    From gson with Apache License 2.0 4 votes vote down vote up
Factory(Map<Type, InstanceCreator<?>> instanceCreators) {
  this.instanceCreators = instanceCreators;
}
 
Example #25
Source File: GraphAdapterBuilder.java    From gson with Apache License 2.0 4 votes vote down vote up
public GraphAdapterBuilder() {
    this.instanceCreators = new HashMap<Type, InstanceCreator<?>>();
    this.constructorConstructor = new ConstructorConstructor(instanceCreators);
}
 
Example #26
Source File: ConstructorConstructor.java    From gson with Apache License 2.0 4 votes vote down vote up
public <T> ObjectConstructor<T> get(TypeToken<T> typeToken) {
  final Type type = typeToken.getType();
  final Class<? super T> rawType = typeToken.getRawType();

  // first try an instance creator

  @SuppressWarnings("unchecked") // types must agree
  final InstanceCreator<T> typeCreator = (InstanceCreator<T>) instanceCreators.get(type);
  if (typeCreator != null) {
    return new ObjectConstructor<T>() {
      @Override public T construct() {
        return typeCreator.createInstance(type);
      }
    };
  }

  // Next try raw type match for instance creators
  @SuppressWarnings("unchecked") // types must agree
  final InstanceCreator<T> rawTypeCreator =
      (InstanceCreator<T>) instanceCreators.get(rawType);
  if (rawTypeCreator != null) {
    return new ObjectConstructor<T>() {
      @Override public T construct() {
        return rawTypeCreator.createInstance(type);
      }
    };
  }

  ObjectConstructor<T> defaultConstructor = newDefaultConstructor(rawType);
  if (defaultConstructor != null) {
    return defaultConstructor;
  }

  ObjectConstructor<T> defaultImplementation = newDefaultImplementationConstructor(type, rawType);
  if (defaultImplementation != null) {
    return defaultImplementation;
  }

  // finally try unsafe
  return newUnsafeAllocator(type, rawType);
}
 
Example #27
Source File: ConstructorConstructor.java    From gson with Apache License 2.0 4 votes vote down vote up
public ConstructorConstructor(Map<Type, InstanceCreator<?>> instanceCreators) {
  this.instanceCreators = instanceCreators;
}
 
Example #28
Source File: CollectionGsonAdaptable.java    From lastaflute with Apache License 2.0 4 votes vote down vote up
protected ConstructorConstructor createConstructorConstructor(Map<Type, InstanceCreator<?>> instanceCreators) {
    return new ConstructorConstructor(instanceCreators);
}
 
Example #29
Source File: CollectionGsonAdaptable.java    From lastaflute with Apache License 2.0 4 votes vote down vote up
protected Map<Type, InstanceCreator<?>> prepareInstanceCreators() {
    return Collections.emptyMap();
}
 
Example #30
Source File: CollectionGsonAdaptable.java    From lastaflute with Apache License 2.0 4 votes vote down vote up
protected CollectionTypeAdapterFactory createEmbeddedFactory() {
    final Map<Type, InstanceCreator<?>> instanceCreators = prepareInstanceCreators();
    final ConstructorConstructor constructor = createConstructorConstructor(instanceCreators);
    return newCollectionTypeAdapterFactory(constructor);
}