diff --git a/auto-value-moshi-extension/src/main/java/com/ryanharter/auto/value/moshi/AutoValueMoshiExtension.java b/auto-value-moshi-extension/src/main/java/com/ryanharter/auto/value/moshi/AutoValueMoshiExtension.java index b1e7408..bc54c23 100644 --- a/auto-value-moshi-extension/src/main/java/com/ryanharter/auto/value/moshi/AutoValueMoshiExtension.java +++ b/auto-value-moshi-extension/src/main/java/com/ryanharter/auto/value/moshi/AutoValueMoshiExtension.java @@ -243,8 +243,7 @@ private static boolean generateExternalAdapter(TypeElement element) { autoValueClassName, genericTypeNames, properties, - context.builder().orElse(null), - context.processingEnvironment(), + context, adapterClassName); Optional generatedAnnotation = GeneratedAnnotationSpecs.generatedAnnotationSpec( @@ -419,8 +418,7 @@ private TypeSpec.Builder createJsonAdapter( ClassName autoValueClassName, TypeVariableName[] genericTypeNames, List properties, - @Nullable BuilderContext builderContext, - ProcessingEnvironment processingEnvironment, + Context context, String adapterClassName ) { @@ -504,7 +502,7 @@ && getTypeIndexInArray(genericTypeNames, prop.type) >= 0) { .addFields(adapters.values()) .addMethod(constructor.build()) .addMethod(createReadMethod(className, autoValueClassName, autoValueTypeName, properties, - adapters, names, builderContext, processingEnvironment)) + adapters, names, context)) .addMethod(createWriteMethod(autoValueTypeName, adapters)) .addMethod(MethodSpec.methodBuilder("toString") .addAnnotation(Override.class) @@ -591,8 +589,7 @@ private MethodSpec createWriteMethod(TypeName autoValueTypeName, private MethodSpec createReadMethod(ClassName className, ClassName autoValueClassName, TypeName autoValueTypeName, List properties, ImmutableMap adapters, - List names, @Nullable BuilderContext builderContext, - ProcessingEnvironment processingEnvironment) { + List names, Context context) { NameAllocator nameAllocator = new NameAllocator(); ParameterSpec reader = ParameterSpec.builder(JsonReader.class, nameAllocator.newName("reader")) .build(); @@ -602,10 +599,11 @@ private MethodSpec createReadMethod(ClassName className, ClassName autoValueClas .returns(autoValueTypeName) .addParameter(reader) .addException(IOException.class); + BuilderContext builderContext = context.builder().orElse(null); // Validate the builderContext if there is one. if (builderContext != null) { if (!builderContext.buildMethod().isPresent()) { - processingEnvironment.getMessager() + context.processingEnvironment().getMessager() .printMessage( Diagnostic.Kind.ERROR, "Could not determine the build method. Make sure it is named \"build\".", @@ -621,7 +619,7 @@ private MethodSpec createReadMethod(ClassName className, ClassName autoValueClas .collect(Collectors.toSet()); if (annotatedMethods.size() > 1) { - processingEnvironment.getMessager() + context.processingEnvironment().getMessager() .printMessage( Diagnostic.Kind.ERROR, "Too many @AutoValueMoshiBuilder annotated builder methods.", @@ -631,7 +629,7 @@ private MethodSpec createReadMethod(ClassName className, ClassName autoValueClas } if (annotatedMethods.isEmpty()) { - processingEnvironment.getMessager().printMessage( + context.processingEnvironment().getMessager().printMessage( Diagnostic.Kind.ERROR, "Too many builder methods. Annotate builder method with @AutoValueMoshiBuilder.", builderMethods.stream().findAny().get() @@ -730,7 +728,8 @@ private MethodSpec createReadMethod(ClassName className, ClassName autoValueClas readMethod.addStatement("return $N.$L", builderField.get(), builderContext.buildMethod().get()); } else { CodeBlock params = CodeBlock.join(constructorCall, ", "); - readMethod.addStatement("return new $T($L)", className, params); + ClassName constructorName = ClassName.bestGuess(context.finalAutoValueClassName()); + readMethod.addStatement("return new $T($L)", constructorName, params); } return readMethod.build(); }