Skip to content

Commit

Permalink
getAdapter changes
Browse files Browse the repository at this point in the history
  • Loading branch information
anirudhramanan committed Nov 25, 2017
1 parent b9f8dcf commit da97c95
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ public StagFactoryGenerator(List<ClassInfo> classInfoList, String fileName) {
public TypeSpec getTypeAdapterFactorySpec() {
TypeSpec.Builder adapterBuilder = TypeSpec.classBuilder(fileName)
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
// .addSuperinterface(TypeAdapterFactory.class)
.addSuperinterface(TypeAdapterFactory.class)
.addMethod(createStaticAdapterCreationMethod())
.addMethod(getCreateMethodSpec());

return adapterBuilder.build();
Expand All @@ -42,10 +43,31 @@ public TypeSpec getTypeAdapterFactorySpec() {
private MethodSpec getCreateMethodSpec() {
TypeVariableName genericType = TypeVariableName.get("T");
AnnotationSpec suppressions = AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "\"unchecked\" /* Protected by TypeToken */")
.addMember("value", "\"unchecked\"")
.addMember("value", "\"rawtypes\"")
.build();
MethodSpec.Builder builder = MethodSpec.methodBuilder("create")
.addTypeVariable(genericType)
.addParameter(Gson.class, "gson")
.addParameter(ParameterizedTypeName.get(ClassName.get(TypeToken.class), genericType), "type")
.returns(ParameterizedTypeName.get(ClassName.get(TypeAdapter.class), genericType))
.addAnnotation(suppressions)
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC);

builder.addCode("return getAdapter(gson, type);\n");

return builder.build();
}

@NotNull
private MethodSpec createStaticAdapterCreationMethod() {
TypeVariableName genericType = TypeVariableName.get("T");
AnnotationSpec suppressions = AnnotationSpec.builder(SuppressWarnings.class)
.addMember("value", "\"unchecked\"")
.addMember("value", "\"rawtypes\"")
.build();
MethodSpec.Builder builder = MethodSpec.methodBuilder("getAdapter")
.addTypeVariable(genericType)
.addParameter(Gson.class, "gson")
.addParameter(ParameterizedTypeName.get(ClassName.get(TypeToken.class), genericType), "type")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private TypeSpec getAdapterFactorySpec() {
int count = 1;
for (String stagFileName : generatedStagFactoryWrappers) {
String fieldName = "adapter" + count;
createMethodBuilder.addStatement("TypeAdapter<T> " + fieldName + " = " + stagFileName + ".create(gson, type)");
createMethodBuilder.addStatement("TypeAdapter<T> " + fieldName + " = " + stagFileName + ".getAdapter(gson, type)");
createMethodBuilder.beginControlFlow("if (" + fieldName + " != null)");
createMethodBuilder.addStatement("return " + fieldName);
createMethodBuilder.endControlFlow();
Expand Down

0 comments on commit da97c95

Please sign in to comment.