use of com.squareup.javapoet.JavaFile in project mvp4g2 by mvp4g.
the class EventBusGenerator method generate.
public void generate(EventBusMetaModel eventBusMetaMetaModel, HandlerMetaModel handlerMetaModel, PresenterMetaModel presenterMetaModel, HistoryMetaModel historyMetaModel) throws ProcessorException {
// check if element is existing (to avoid generating code for deleted items)
if (!this.processorUtils.doesExist(eventBusMetaMetaModel.getEventBus())) {
return;
}
ClassName abstractEventBusClassName = ClassName.get(AbstractEventBus.class);
TypeSpec.Builder typeSpec = TypeSpec.classBuilder(eventBusMetaMetaModel.getEventBus().getSimpleName() + EventBusGenerator.IMPL_NAME).superclass(ParameterizedTypeName.get(abstractEventBusClassName, eventBusMetaMetaModel.getEventBus().getTypeName())).addModifiers(Modifier.PUBLIC, Modifier.FINAL).addSuperinterface(eventBusMetaMetaModel.getEventBus().getTypeName());
MethodSpec constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addStatement("super($S)", eventBusMetaMetaModel.getShell().getClassName()).build();
typeSpec.addMethod(constructor);
DebugGenerator.builder().eventBusMetaModel(eventBusMetaMetaModel).typeSpec(typeSpec).build().generate();
FilterGenerator.builder().eventBusMetaModel(eventBusMetaMetaModel).typeSpec(typeSpec).build().generate();
EventLoadMetaDataGenerator.builder().processingEnvironment(this.processingEnvironment).eventBusMetaModel(eventBusMetaMetaModel).typeSpec(typeSpec).build().generate();
EventMetaDataGenerator.builder().processingEnvironment(this.processingEnvironment).eventBusMetaModel(eventBusMetaMetaModel).build().generate();
EventHandlingMethodGenerator.builder().processorUtils(this.processorUtils).typeSpec(typeSpec).eventBusMetaModel(eventBusMetaMetaModel).historyMetaModel(historyMetaModel).presenterMetaModel(presenterMetaModel).handlerMetaModel(handlerMetaModel).build().generate();
AddPresenterGenerator.builder().typeSpec(typeSpec).processingEnvironment(this.processingEnvironment).presenterMetaModel(presenterMetaModel).build().generate();
HandlerAndPresenterRegristrationGenerator.builder().processingEnvironment(this.processingEnvironment).typeSpec(typeSpec).eventBusMetaModel(eventBusMetaMetaModel).presenterMetaModel(presenterMetaModel).handlerMetaModel(handlerMetaModel).build().generate();
JavaFile javaFile = JavaFile.builder(eventBusMetaMetaModel.getEventBus().getPackage(), typeSpec.build()).build();
// System.out.println(javaFile.toString());
try {
javaFile.writeTo(this.processingEnvironment.getFiler());
} catch (IOException e) {
throw new ProcessorException("Unable to write generated file: >>" + eventBusMetaMetaModel.getEventBus().getSimpleName() + EventBusGenerator.IMPL_NAME + "<< -> exception: " + e.getMessage());
}
}
use of com.squareup.javapoet.JavaFile in project mvp4g2 by mvp4g.
the class EventMetaDataGenerator method generate.
public void generate() throws ProcessorException {
for (EventMetaModel eventMetaModel : this.eventBusMetaModel.getEventMetaModels()) {
TypeSpec.Builder typeSpec = TypeSpec.classBuilder(this.createEventMetaDataClassName(this.eventBusMetaModel.getEventBus().getClassName(), eventMetaModel.getEventName())).superclass(ParameterizedTypeName.get(ClassName.get(EventMetaData.class), this.eventBusMetaModel.getEventBus().getTypeName())).addModifiers(Modifier.PUBLIC, Modifier.FINAL);
// constructor ...
MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addCode("super($S, $S, ", eventMetaModel.getEventInternalName(), eventMetaModel.getEventName());
if (Event.DEFAULT_HISTORY_NAME.equals(eventMetaModel.getHistoryEventName())) {
constructor.addCode("null, ");
} else {
constructor.addCode("$S, ", eventMetaModel.getHistoryEventName());
}
if (Event.NoHistoryConverter.class.getCanonicalName().equals(eventMetaModel.getHistoryConverter().getClassName())) {
constructor.addCode("null, null, ");
} else {
constructor.addCode("new $L(), new $T(), ", eventMetaModel.getHistoryConverter().getPackage() + "." + this.processorUtils.createHistoryMetaDataClassName(eventMetaModel.getHistoryConverter().getClassName()), eventMetaModel.getHistoryConverter().getTypeName());
}
constructor.addCode("$L, $L);\n", eventMetaModel.getPassive(), eventMetaModel.getNavigationEvent());
eventMetaModel.getBindings().forEach(s -> constructor.addStatement("super.addBindHandler($S)", s.getClassName()));
eventMetaModel.getHandlers().forEach(s -> constructor.addStatement("super.addHandler($S)", s.getClassName()));
eventMetaModel.getActivateHandlers().forEach(s -> constructor.addStatement("super.addActivateHandler($S)", s.getClassName()));
eventMetaModel.getDeactivateHandlers().forEach(s -> constructor.addStatement("super.addDeactivateHandler($S)", s.getClassName()));
typeSpec.addMethod(constructor.build());
JavaFile javaFile = JavaFile.builder(eventBusMetaModel.getEventBus().getPackage(), typeSpec.build()).build();
try {
javaFile.writeTo(this.processingEnvironment.getFiler());
} catch (IOException e) {
throw new ProcessorException("Unable to write generated file: >>" + eventBusMetaModel.getEventBus().getPackage() + "." + this.createEventMetaDataClassName(this.eventBusMetaModel.getEventBus().getClassName(), eventMetaModel.getEventName()) + "<< -> exception: " + e.getMessage());
}
}
}
use of com.squareup.javapoet.JavaFile in project mvp4g2 by mvp4g.
the class HandlerGenerator method generate.
public void generate(HandlerMetaModel metaModel) throws ProcessorException {
ClassName eventHandlerMetaDataClassName = ClassName.get(HandlerMetaData.class);
ClassName eventHandlerMetaDataKindClassName = ClassName.get(HandlerMetaData.Kind.class);
for (String eventHandler : metaModel.getHandlerKeys()) {
// check if element is existing (to avoid generating code for deleted items)
if (this.processorUtils.doesExist(new ClassNameModel(eventHandler))) {
HandlerMetaModel.HandlerData data = metaModel.getHandlerData(eventHandler);
String className = this.processorUtils.createFullClassName(data.getHandler().getPackage(), data.getHandler().getSimpleName() + ProcessorConstants.META_DATA);
TypeSpec.Builder typeSpec = TypeSpec.classBuilder(this.processorUtils.setFirstCharacterToUpperCase(className)).superclass(ParameterizedTypeName.get(eventHandlerMetaDataClassName, data.getHandler().getTypeName())).addModifiers(Modifier.PUBLIC, Modifier.FINAL);
// constructor ...
MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(Modifier.PUBLIC).addStatement("super($S, $T.EVENT_HANDLER, new $T())", data.getHandler().getClassName(), eventHandlerMetaDataKindClassName, data.getHandler().getTypeName());
typeSpec.addMethod(constructor.build());
JavaFile javaFile = JavaFile.builder(data.getHandler().getPackage(), typeSpec.build()).build();
try {
javaFile.writeTo(this.processingEnvironment.getFiler());
} catch (IOException e) {
throw new ProcessorException("Unable to write generated file: >>" + data.getHandler().getSimpleName() + ProcessorConstants.META_DATA + "<< -> exception: " + e.getMessage());
}
}
}
}
use of com.squareup.javapoet.JavaFile in project pixel-dungeon-remix by NYRDS.
the class PdAnnotationProcessor method process.
@Override
public boolean process(Set<? extends TypeElement> set, RoundEnvironment roundEnvironment) {
Map<Element, Set<Element>> fieldsByClass = new HashMap<>();
Map<Element, String> defaultValues = new HashMap<>();
// for each javax.lang.model.element.Element annotated with the CustomAnnotation
for (Element element : roundEnvironment.getElementsAnnotatedWith(Packable.class)) {
Element parent = element.getEnclosingElement();
String defaultValue = element.getAnnotation(Packable.class).defaultValue();
if (!defaultValue.isEmpty()) {
defaultValues.put(element, defaultValue);
}
if (fieldsByClass.get(parent) == null) {
fieldsByClass.put(parent, new HashSet<Element>());
}
fieldsByClass.get(parent).add(element);
}
TypeSpec BundleHelper = TypeSpec.classBuilder("BundleHelper").addModifiers(Modifier.PUBLIC, Modifier.FINAL).build();
MethodSpec pack = MethodSpec.methodBuilder("Pack").addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(void.class).addParameter(ClassName.get("com.watabou.utils", "Bundlable"), "arg").addParameter(ClassName.get("com.watabou.utils", "Bundle"), "bundle").beginControlFlow("try").build();
MethodSpec unpack = MethodSpec.methodBuilder("UnPack").addModifiers(Modifier.PUBLIC, Modifier.STATIC).returns(void.class).addParameter(ClassName.get("com.watabou.utils", "Bundlable"), "arg").addParameter(ClassName.get("com.watabou.utils", "Bundle"), "bundle").beginControlFlow("try").build();
for (Element clazz : fieldsByClass.keySet()) {
CodeBlock packerBlock = CodeBlock.builder().beginControlFlow("if(arg instanceof $T)", TypeName.get(clazz.asType())).build();
CodeBlock unpackerBlock = CodeBlock.builder().beginControlFlow("if(arg instanceof $T)", TypeName.get(clazz.asType())).build();
for (Element field : fieldsByClass.get(clazz)) {
String fieldName = field.getSimpleName().toString();
packerBlock = packerBlock.toBuilder().addStatement("$T $L = $T.class.getDeclaredField($S)", Field.class, fieldName, TypeName.get(clazz.asType()), fieldName).addStatement("$L.setAccessible(true)", fieldName).addStatement("bundle.put($S,($T)$L.get(arg))", fieldName, TypeName.get(field.asType()), fieldName).build();
unpackerBlock = unpackerBlock.toBuilder().addStatement("$T $L = $T.class.getDeclaredField($S)", Field.class, fieldName, TypeName.get(clazz.asType()), fieldName).addStatement("$L.setAccessible(true)", fieldName).build();
String fieldType = TypeName.get(field.asType()).toString();
String defaultValue = defaultValues.get(field);
if (fieldType.equals("int")) {
if (defaultValue == null || defaultValue.isEmpty()) {
defaultValue = "0";
}
unpackerBlock = unpackerBlock.toBuilder().addStatement("$L.setInt(arg,bundle.optInt($S,$L))", fieldName, fieldName, defaultValue).build();
continue;
}
if (fieldType.equals("boolean")) {
if (defaultValue == null || defaultValue.isEmpty()) {
defaultValue = "false";
}
unpackerBlock = unpackerBlock.toBuilder().addStatement("$L.setBoolean(arg,bundle.optBoolean($S,$L))", fieldName, fieldName, defaultValue).build();
continue;
}
if (fieldType.equals("float")) {
if (defaultValue == null || defaultValue.isEmpty()) {
defaultValue = "0.0f";
}
unpackerBlock = unpackerBlock.toBuilder().addStatement("$L.setFloat(arg,bundle.optFloat($S,$L))", fieldName, fieldName, defaultValue).build();
continue;
}
if (fieldType.equals("java.lang.String")) {
if (defaultValue == null || defaultValue.isEmpty()) {
defaultValue = "Unknown";
}
unpackerBlock = unpackerBlock.toBuilder().addStatement("$L.set(arg,bundle.optString($S,$S))", fieldName, fieldName, defaultValue).build();
continue;
}
Set<Class<?>> fieldInterfaces = new HashSet<>();
Collections.addAll(fieldInterfaces, field.getClass().getInterfaces());
Set<String> fieldInterfaceNames = new HashSet<>();
for (Class<?> clazzz : fieldInterfaces) {
fieldInterfaceNames.add(clazzz.getSimpleName());
}
/*
if(fieldType.equals("Collection")) {
unpackerBlock = unpackerBlock.toBuilder()
.addStatement("$L.set(arg,bundle.getCollection($S,$S))", fieldName,fieldName,fieldType+".class")
.build();
continue;
}
*/
if (fieldType.equals("Bundlable")) {
unpackerBlock = unpackerBlock.toBuilder().addStatement("($S)$L.set(arg,bundle.get($S))", fieldType + ".class", fieldName, fieldName).build();
continue;
}
}
packerBlock = packerBlock.toBuilder().endControlFlow().build();
unpackerBlock = unpackerBlock.toBuilder().endControlFlow().build();
pack = pack.toBuilder().addCode(packerBlock).build();
unpack = unpack.toBuilder().addCode(unpackerBlock).build();
}
pack = pack.toBuilder().nextControlFlow("catch ($T e)", NoSuchFieldException.class).addStatement("throw new $T(e)", ClassName.get("com.nyrds.android.util", "TrackedRuntimeException")).nextControlFlow("catch ($T e)", IllegalAccessException.class).addStatement("throw new $T(e)", ClassName.get("com.nyrds.android.util", "TrackedRuntimeException")).endControlFlow().build();
unpack = unpack.toBuilder().nextControlFlow("catch ($T e)", NoSuchFieldException.class).addStatement("throw new $T(e)", ClassName.get("com.nyrds.android.util", "TrackedRuntimeException")).nextControlFlow("catch ($T e)", IllegalAccessException.class).addStatement("throw new $T(e)", ClassName.get("com.nyrds.android.util", "TrackedRuntimeException")).endControlFlow().build();
BundleHelper = BundleHelper.toBuilder().addMethod(pack).addMethod(unpack).build();
JavaFile javaFile = JavaFile.builder("com.nyrds.generated", BundleHelper).build();
try {
// write the file
JavaFileObject source = processingEnv.getFiler().createSourceFile("com.nyrds.generated.BundleHelper");
Writer writer = source.openWriter();
javaFile.writeTo(writer);
writer.flush();
writer.close();
} catch (IOException e) {
// Note: calling e.printStackTrace() will print IO errors
// that occur from the file already existing after its first run, this is normal
}
return true;
}
use of com.squareup.javapoet.JavaFile in project ucsFramework by cjsoftware-lib.
the class PreserveUiStateProcessor method completeProcessing.
@Override
protected void completeProcessing() {
super.completeProcessing();
if (isFatalErrorEncountered()) {
// If we hit a fatal error, bail.
return;
}
for (TypeElement preservedFieldContainer : preservedFieldGroups.keySet()) {
PackageElement packageElement = getProcessorModel().getElementUtils().getPackageOf(preservedFieldContainer);
ClassName generatedFieldListClassName = ClassName.get(packageElement.getQualifiedName().toString(), String.format(GENERATED_PRESERVED_FIELD_LIST_CLASS_NAME_TEMPLATE, sanitiseClassName(preservedFieldContainer.getSimpleName().toString())));
TypeSpec.Builder preserveStateClass = TypeSpec.classBuilder(generatedFieldListClassName).addSuperinterface(ParameterizedTypeName.get(ClassName.get(StatePreservationManager.class), ClassName.get(preservedFieldContainer.asType()))).addField(FieldSpec.builder(TypeName.BOOLEAN, FIELD_HAVE_STATE).initializer("false").build());
List<DoPreservedField> preservedFieldList = preservedFieldGroups.get(preservedFieldContainer);
addStrategyFields(preserveStateClass, preservedFieldList, preservedFieldContainer.asType());
preserveStateClass.addMethod(addSaveMethod(TypeName.get(preservedFieldContainer.asType()), preservedFieldList));
for (DoPreservedField field : preservedFieldList) {
preserveStateClass.addMethod(addSaveFieldMethod(TypeName.get(preservedFieldContainer.asType()), field));
}
preserveStateClass.addMethod(addRestoreMethod(TypeName.get(preservedFieldContainer.asType()), preservedFieldList));
for (DoPreservedField field : preservedFieldList) {
preserveStateClass.addMethod(addRestoreFieldMethod(TypeName.get(preservedFieldContainer.asType()), field));
}
try {
JavaFile javaFile = JavaFile.builder(packageElement.getQualifiedName().toString(), preserveStateClass.build()).addFileComment("Generated Code, do not modify.").build();
javaFile.writeTo(getProcessorModel().getFiler());
} catch (IOException e) {
fatalErrorMessage("Exception writing java file: " + e.toString(), preservedFieldContainer);
}
}
}
Aggregations