@@ -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