Skip to content

Commit 0adcf0e

Browse files
committed
Avoid generating several times the same AnnotationLiteral
1 parent b39a0c9 commit 0adcf0e

File tree

1 file changed

+57
-54
lines changed

1 file changed

+57
-54
lines changed

deployment/src/main/java/io/quarkiverse/githubapp/deployment/GitHubAppProcessor.java

Lines changed: 57 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -500,64 +500,67 @@ private static DispatchingConfiguration getDispatchingConfiguration(
500500
}
501501

502502
private static void generateAnnotationLiterals(ClassOutput classOutput, DispatchingConfiguration dispatchingConfiguration) {
503-
for (EventDispatchingConfiguration eventDispatchingConfiguration : dispatchingConfiguration.getEventConfigurations()
504-
.values()) {
505-
for (EventAnnotationLiteral eventAnnotationLiteral : eventDispatchingConfiguration.getEventAnnotationLiterals()) {
506-
String literalClassName = getLiteralClassName(eventAnnotationLiteral.getName());
507-
508-
String signature = SignatureBuilder.forClass()
509-
.setSuperClass(parameterizedType(classType(AnnotationLiteral.class),
510-
classType(eventAnnotationLiteral.getName())))
511-
.addInterface(classType(eventAnnotationLiteral.getName()))
512-
.build();
513-
514-
ClassCreator literalClassCreator = ClassCreator.builder().classOutput(classOutput)
515-
.className(literalClassName)
516-
.signature(signature)
517-
.superClass(AnnotationLiteral.class)
518-
.interfaces(eventAnnotationLiteral.getName().toString())
519-
.build();
520-
521-
Class<?>[] parameterTypes = new Class<?>[eventAnnotationLiteral.getAttributes().size()];
522-
Arrays.fill(parameterTypes, String.class);
523-
524-
MethodCreator constructorCreator = literalClassCreator.getMethodCreator("<init>", "V",
525-
(Object[]) parameterTypes);
526-
constructorCreator.invokeSpecialMethod(MethodDescriptor.ofConstructor(AnnotationLiteral.class),
527-
constructorCreator.getThis());
528-
for (int i = 0; i < eventAnnotationLiteral.getAttributes().size(); i++) {
529-
constructorCreator.writeInstanceField(
530-
FieldDescriptor.of(literalClassName, eventAnnotationLiteral.getAttributes().get(i), String.class),
531-
constructorCreator.getThis(), constructorCreator.getMethodParam(i));
532-
constructorCreator.setModifiers(Modifier.PUBLIC);
533-
}
534-
constructorCreator.returnValue(null);
503+
Set<EventAnnotationLiteral> eventAnnotationLiterals = dispatchingConfiguration.getEventConfigurations().values()
504+
.stream()
505+
.map(EventDispatchingConfiguration::getEventAnnotationLiterals)
506+
.flatMap(Set::stream)
507+
.collect(Collectors.toSet());
535508

536-
for (String attribute : eventAnnotationLiteral.getAttributes()) {
537-
// we only support String for now
538-
literalClassCreator.getFieldCreator(attribute, String.class)
539-
.setModifiers(Modifier.PRIVATE);
540-
MethodCreator getterCreator = literalClassCreator.getMethodCreator(attribute, String.class);
541-
getterCreator.setModifiers(Modifier.PUBLIC);
542-
getterCreator.returnValue(getterCreator.readInstanceField(
543-
FieldDescriptor.of(literalClassName, attribute, String.class), getterCreator.getThis()));
544-
}
509+
for (EventAnnotationLiteral eventAnnotationLiteral : eventAnnotationLiterals) {
510+
String literalClassName = getLiteralClassName(eventAnnotationLiteral.getName());
545511

546-
if (eventAnnotationLiteral.getAttributes().isEmpty()) {
547-
FieldCreator arrayInstanceFieldCreator = literalClassCreator.getFieldCreator(ARRAY_INSTANCE_FIELD_NAME,
548-
"[L" + literalClassName + ";");
549-
arrayInstanceFieldCreator.setModifiers(ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
550-
MethodCreator clinit = literalClassCreator.getMethodCreator("<clinit>", void.class);
551-
clinit.setModifiers(ACC_STATIC);
552-
ResultHandle singletonInstance = clinit.newArray(literalClassName, 1);
553-
clinit.writeArrayValue(singletonInstance, clinit.load(0),
554-
clinit.newInstance(constructorCreator.getMethodDescriptor()));
555-
clinit.writeStaticField(arrayInstanceFieldCreator.getFieldDescriptor(), singletonInstance);
556-
clinit.returnVoid();
557-
}
512+
String signature = SignatureBuilder.forClass()
513+
.setSuperClass(parameterizedType(classType(AnnotationLiteral.class),
514+
classType(eventAnnotationLiteral.getName())))
515+
.addInterface(classType(eventAnnotationLiteral.getName()))
516+
.build();
517+
518+
ClassCreator literalClassCreator = ClassCreator.builder().classOutput(classOutput)
519+
.className(literalClassName)
520+
.signature(signature)
521+
.superClass(AnnotationLiteral.class)
522+
.interfaces(eventAnnotationLiteral.getName().toString())
523+
.build();
558524

559-
literalClassCreator.close();
525+
Class<?>[] parameterTypes = new Class<?>[eventAnnotationLiteral.getAttributes().size()];
526+
Arrays.fill(parameterTypes, String.class);
527+
528+
MethodCreator constructorCreator = literalClassCreator.getMethodCreator("<init>", "V",
529+
(Object[]) parameterTypes);
530+
constructorCreator.invokeSpecialMethod(MethodDescriptor.ofConstructor(AnnotationLiteral.class),
531+
constructorCreator.getThis());
532+
for (int i = 0; i < eventAnnotationLiteral.getAttributes().size(); i++) {
533+
constructorCreator.writeInstanceField(
534+
FieldDescriptor.of(literalClassName, eventAnnotationLiteral.getAttributes().get(i), String.class),
535+
constructorCreator.getThis(), constructorCreator.getMethodParam(i));
536+
constructorCreator.setModifiers(Modifier.PUBLIC);
537+
}
538+
constructorCreator.returnValue(null);
539+
540+
for (String attribute : eventAnnotationLiteral.getAttributes()) {
541+
// we only support String for now
542+
literalClassCreator.getFieldCreator(attribute, String.class)
543+
.setModifiers(Modifier.PRIVATE);
544+
MethodCreator getterCreator = literalClassCreator.getMethodCreator(attribute, String.class);
545+
getterCreator.setModifiers(Modifier.PUBLIC);
546+
getterCreator.returnValue(getterCreator.readInstanceField(
547+
FieldDescriptor.of(literalClassName, attribute, String.class), getterCreator.getThis()));
560548
}
549+
550+
if (eventAnnotationLiteral.getAttributes().isEmpty()) {
551+
FieldCreator arrayInstanceFieldCreator = literalClassCreator.getFieldCreator(ARRAY_INSTANCE_FIELD_NAME,
552+
"[L" + literalClassName + ";");
553+
arrayInstanceFieldCreator.setModifiers(ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
554+
MethodCreator clinit = literalClassCreator.getMethodCreator("<clinit>", void.class);
555+
clinit.setModifiers(ACC_STATIC);
556+
ResultHandle singletonInstance = clinit.newArray(literalClassName, 1);
557+
clinit.writeArrayValue(singletonInstance, clinit.load(0),
558+
clinit.newInstance(constructorCreator.getMethodDescriptor()));
559+
clinit.writeStaticField(arrayInstanceFieldCreator.getFieldDescriptor(), singletonInstance);
560+
clinit.returnVoid();
561+
}
562+
563+
literalClassCreator.close();
561564
}
562565
}
563566

0 commit comments

Comments
 (0)