mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-08-04 00:49:44 +07:00
Created TableCodeGenerator
Created and implemented TableCodeGenerator Added stack trace printing for SchemaProcessor file io errors Created Table#indexed
This commit is contained in:
@ -30,7 +30,7 @@ abstract class CodeGenerator {
|
||||
.skipJavaLangImports(true)
|
||||
.addFileComment(
|
||||
"automatically generated by $L, do not modify",
|
||||
getClass().getCanonicalName())
|
||||
getClass().getSimpleName())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,8 @@ public class SchemaProcessor extends AbstractProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
TableCodeGenerator tableCodeGenerator = new TableCodeGenerator(
|
||||
context, "com.riiablo.excel.table");
|
||||
SerializerCodeGenerator serializerCodeGenerator = new SerializerCodeGenerator(
|
||||
context, "com.riiablo.excel.serializer");
|
||||
for (Element element : roundEnv.getElementsAnnotatedWith(Schema.class)) {
|
||||
@ -54,26 +56,26 @@ public class SchemaProcessor extends AbstractProcessor {
|
||||
}
|
||||
|
||||
SchemaElement schemaElement = SchemaElement.get(context, element);
|
||||
if (schemaElement.tableElement.declaredType != null) {
|
||||
try {
|
||||
tableCodeGenerator.generate(schemaElement)
|
||||
.writeTo(processingEnv.getFiler());
|
||||
// .writeTo(System.out);
|
||||
} catch (Throwable t) {
|
||||
context.error(ExceptionUtils.getRootCauseMessage(t));
|
||||
t.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
|
||||
if (schemaElement.serializerElement.declaredType != null) {
|
||||
try {
|
||||
serializerCodeGenerator.generate(schemaElement)
|
||||
.writeTo(processingEnv.getFiler());
|
||||
} catch (Throwable t) {
|
||||
context.error(ExceptionUtils.getRootCauseMessage(t));
|
||||
t.printStackTrace(System.err);
|
||||
}
|
||||
}
|
||||
// if (schemaElement.serializerElement.serializerElement != null) {
|
||||
// SerializerElement serializerElement = schemaElement.serializerElement;
|
||||
// ExecutableElement readRecordElement = serializerElement.getMethod("readRecord");
|
||||
// MethodSpec readRecord = MethodSpec
|
||||
// .overriding(readRecordElement, serializerElement.declaredType, typeUtils)
|
||||
// .build();
|
||||
// System.out.println(readRecord);
|
||||
// System.out.println(readRecord.parameters.get(0));
|
||||
// System.out.println(readRecord.parameters.get(1));
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -0,0 +1,89 @@
|
||||
package com.riiablo.table.annotation;
|
||||
|
||||
import com.squareup.javapoet.ClassName;
|
||||
import com.squareup.javapoet.CodeBlock;
|
||||
import com.squareup.javapoet.MethodSpec;
|
||||
import com.squareup.javapoet.TypeSpec;
|
||||
import javax.lang.model.element.Modifier;
|
||||
|
||||
class TableCodeGenerator extends CodeGenerator {
|
||||
TableCodeGenerator(Context context, String tablePackage) {
|
||||
super(context, tablePackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
String formatName(SchemaElement schemaElement) {
|
||||
return ClassName.get(schemaElement.element).simpleName() + Table.class.getSimpleName();
|
||||
}
|
||||
|
||||
@Override
|
||||
TypeSpec.Builder newTypeSpec(SchemaElement schemaElement) {
|
||||
return super.newTypeSpec(schemaElement)
|
||||
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
|
||||
.superclass(schemaElement.tableElement.declaredType)
|
||||
.addMethod(constructor(schemaElement))
|
||||
.addMethod(newRecord(schemaElement))
|
||||
.addMethod(offset(schemaElement))
|
||||
.addMethod(indexed(schemaElement))
|
||||
.addMethod(primaryKey(schemaElement))
|
||||
;
|
||||
}
|
||||
|
||||
MethodSpec newRecord(SchemaElement schemaElement) {
|
||||
TableElement tableElement = schemaElement.tableElement;
|
||||
return MethodSpec
|
||||
.overriding(
|
||||
tableElement.getMethod("newRecord"),
|
||||
tableElement.declaredType,
|
||||
context.typeUtils)
|
||||
.addStatement("return new $T()", schemaElement.element)
|
||||
.build();
|
||||
}
|
||||
|
||||
MethodSpec constructor(SchemaElement schemaElement) {
|
||||
Schema config = schemaElement.annotation;
|
||||
return MethodSpec
|
||||
.constructorBuilder()
|
||||
.addStatement("super($T.class, $L, $Lf)", // does not append "f" automatically for float literals
|
||||
schemaElement.element, config.initialCapacity(), config.loadFactor())
|
||||
.build();
|
||||
}
|
||||
|
||||
MethodSpec offset(SchemaElement schemaElement) {
|
||||
Schema config = schemaElement.annotation;
|
||||
TableElement tableElement = schemaElement.tableElement;
|
||||
return MethodSpec
|
||||
.overriding(
|
||||
tableElement.getMethod("offset"),
|
||||
tableElement.declaredType,
|
||||
context.typeUtils)
|
||||
.addStatement("return $L", config.offset())
|
||||
.build();
|
||||
}
|
||||
|
||||
MethodSpec indexed(SchemaElement schemaElement) {
|
||||
Schema config = schemaElement.annotation;
|
||||
TableElement tableElement = schemaElement.tableElement;
|
||||
return MethodSpec
|
||||
.overriding(
|
||||
tableElement.getMethod("indexed"),
|
||||
tableElement.declaredType,
|
||||
context.typeUtils)
|
||||
.addStatement("return $L", config.indexed())
|
||||
.build();
|
||||
}
|
||||
|
||||
MethodSpec primaryKey(SchemaElement schemaElement) {
|
||||
Schema config = schemaElement.annotation;
|
||||
TableElement tableElement = schemaElement.tableElement;
|
||||
return MethodSpec
|
||||
.overriding(
|
||||
tableElement.getMethod("primaryKey"),
|
||||
tableElement.declaredType,
|
||||
context.typeUtils)
|
||||
.addStatement("return $L", config.indexed()
|
||||
? null
|
||||
: CodeBlock.of("$S", schemaElement.primaryKeyFieldElement.element))
|
||||
.build();
|
||||
}
|
||||
}
|
@ -57,6 +57,10 @@ public abstract class Table<R> implements Iterable<R> {
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected boolean indexed() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected String primaryKey() {
|
||||
return null;
|
||||
}
|
||||
|
Reference in New Issue
Block a user