mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-07-04 07:17:26 +07:00
Created CodeGenerator
Refactored some code generator responsibilities from SerializerCodeGenerator to CodeGenerator
This commit is contained in:
@ -0,0 +1,53 @@
|
||||
package com.riiablo.table.annotation;
|
||||
|
||||
import com.squareup.javapoet.AnnotationSpec;
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
import com.squareup.javapoet.TypeSpec;
|
||||
import java.util.Date;
|
||||
import javax.annotation.Generated;
|
||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
import org.apache.commons.lang3.time.FastDateFormat;
|
||||
|
||||
abstract class CodeGenerator {
|
||||
final Context context;
|
||||
final String packageName;
|
||||
|
||||
CodeGenerator(Context context, String packageName) {
|
||||
this.context = context;
|
||||
this.packageName = packageName;
|
||||
}
|
||||
|
||||
abstract String formatName(SchemaElement schemaElement);
|
||||
|
||||
JavaFile generate(SchemaElement schemaElement) {
|
||||
TypeSpec.Builder serializerTypeSpec
|
||||
=newTypeSpec(schemaElement)
|
||||
.addAnnotation(newGenerated(schemaElement.element.getQualifiedName().toString()))
|
||||
;
|
||||
|
||||
return JavaFile
|
||||
.builder(packageName, serializerTypeSpec.build())
|
||||
.skipJavaLangImports(true)
|
||||
.addFileComment(
|
||||
"automatically generated by $L, do not modify",
|
||||
getClass().getCanonicalName())
|
||||
.build();
|
||||
}
|
||||
|
||||
TypeSpec.Builder newTypeSpec(SchemaElement schemaElement) {
|
||||
return TypeSpec.classBuilder(formatName(schemaElement));
|
||||
}
|
||||
|
||||
AnnotationSpec newGenerated(String comments) {
|
||||
return AnnotationSpec
|
||||
.builder(Generated.class)
|
||||
.addMember("value", "$S", getClass().getCanonicalName())
|
||||
.addMember("date", "$S", dateFormat().format(new Date()))
|
||||
.addMember("comments", "$S", comments)
|
||||
.build();
|
||||
}
|
||||
|
||||
FastDateFormat dateFormat() {
|
||||
return DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT;
|
||||
}
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
package com.riiablo.table.annotation;
|
||||
|
||||
import com.squareup.javapoet.AnnotationSpec;
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.CodeBlock;
|
||||
import com.squareup.javapoet.FieldSpec;
|
||||
import com.squareup.javapoet.JavaFile;
|
||||
import com.squareup.javapoet.MethodSpec;
|
||||
import com.squareup.javapoet.ParameterSpec;
|
||||
import com.squareup.javapoet.ParameterizedTypeName;
|
||||
@ -13,55 +11,25 @@ import com.squareup.javapoet.TypeSpec;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.Objects;
|
||||
import javax.annotation.Generated;
|
||||
import javax.lang.model.element.Modifier;
|
||||
import javax.lang.model.element.Name;
|
||||
import org.apache.commons.lang3.time.DateFormatUtils;
|
||||
|
||||
import static com.riiablo.table.annotation.Constants.STRING;
|
||||
|
||||
class SerializerCodeGenerator {
|
||||
static String serializerName(SchemaElement schemaElement) {
|
||||
class SerializerCodeGenerator extends CodeGenerator {
|
||||
SerializerCodeGenerator(Context context, String serializerPackage) {
|
||||
super(context, serializerPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
String formatName(SchemaElement schemaElement) {
|
||||
return ClassName.get(schemaElement.element).simpleName() + Serializer.class.getSimpleName();
|
||||
}
|
||||
|
||||
final Context context;
|
||||
final String serializerPackage;
|
||||
|
||||
SerializerCodeGenerator(Context context, String serializerPackage) {
|
||||
this.context = context;
|
||||
this.serializerPackage = serializerPackage;
|
||||
}
|
||||
|
||||
JavaFile generate(SchemaElement schemaElement) {
|
||||
TypeSpec.Builder serializerTypeSpec
|
||||
=newSerializer(schemaElement)
|
||||
.addAnnotation(newGenerated(schemaElement.element.getQualifiedName().toString()))
|
||||
;
|
||||
|
||||
return JavaFile
|
||||
.builder(serializerPackage, serializerTypeSpec.build())
|
||||
.skipJavaLangImports(true)
|
||||
.addFileComment(
|
||||
"automatically generated by $L, do not modify",
|
||||
SerializerCodeGenerator.class.getCanonicalName())
|
||||
.build();
|
||||
}
|
||||
|
||||
AnnotationSpec newGenerated(String comments) {
|
||||
return AnnotationSpec
|
||||
.builder(Generated.class)
|
||||
.addMember("value", "$S", SerializerCodeGenerator.class.getCanonicalName())
|
||||
.addMember("date", "$S", DateFormatUtils.ISO_8601_EXTENDED_DATETIME_TIME_ZONE_FORMAT.format(new Date()))
|
||||
.addMember("comments", "$S", comments)
|
||||
.build();
|
||||
}
|
||||
|
||||
TypeSpec.Builder newSerializer(SchemaElement schemaElement) {
|
||||
return TypeSpec
|
||||
.classBuilder(serializerName(schemaElement))
|
||||
@Override
|
||||
TypeSpec.Builder newTypeSpec(SchemaElement schemaElement) {
|
||||
return super.newTypeSpec(schemaElement)
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
|
||||
.addSuperinterface(schemaElement.serializerElement.declaredType)
|
||||
.addMethod(readRecord(schemaElement))
|
||||
|
Reference in New Issue
Block a user