2222import org .openrewrite .java .JavaParser ;
2323import org .openrewrite .java .JavaTemplate ;
2424import org .openrewrite .java .MethodMatcher ;
25+ import org .openrewrite .java .tree .Expression ;
2526import org .openrewrite .java .tree .J ;
2627
28+ import java .util .Collections ;
29+ import java .util .List ;
30+
2731public class UpdateBeanManagerMethods extends Recipe {
2832 @ Override
2933 public String getDisplayName () {
@@ -44,25 +48,39 @@ public TreeVisitor<?, ExecutionContext> getVisitor() {
4448 @ Override
4549 public J .MethodInvocation visitMethodInvocation (J .MethodInvocation method , ExecutionContext ctx ) {
4650 J .MethodInvocation mi = super .visitMethodInvocation (method , ctx );
47- if (fireEventMatcher .matches (method )) {
48- return JavaTemplate .builder ("#{any(jakarta.enterprise.inject.spi.BeanManager)}.getEvent().fire(#{any(jakarta.enterprise.inject.spi.BeforeBeanDiscovery)})" )
51+ List <Expression > arguments = mi .getArguments ();
52+ if (fireEventMatcher .matches (method ) && mi .getSelect () != null ) {
53+ if (arguments .size () <= 1 ) {
54+ return JavaTemplate .builder ("#{any(jakarta.enterprise.inject.spi.BeanManager)}.getEvent()" +
55+ ".fire(#{any(jakarta.enterprise.inject.spi.BeforeBeanDiscovery)})" )
56+ .javaParser (JavaParser .fromJavaVersion ().classpathFromResources (ctx , "jakarta.enterprise.cdi-api-3.0.0-M4" ))
57+ .build ()
58+ .apply (updateCursor (mi ), mi .getCoordinates ().replace (), mi .getSelect (), arguments .get (0 ));
59+ }
60+
61+ Object [] args = new Expression [arguments .size () + 1 ];
62+ args [0 ] = mi .getSelect ();
63+ for (int i = 1 ; i < arguments .size (); i ++) {
64+ args [i ] = arguments .get (i );
65+ }
66+ args [arguments .size ()] = arguments .get (0 );
67+
68+ String template = "#{any(jakarta.enterprise.inject.spi.BeanManager)}.getEvent()" +
69+ ".select(" + String .join (", " , Collections .nCopies (arguments .size () - 1 , "#{any(java.lang.annotation.Annotation)}" )) + ')' +
70+ ".fire(#{any(jakarta.enterprise.inject.spi.BeforeBeanDiscovery)})" ;
71+ return JavaTemplate .builder (template )
4972 .javaParser (JavaParser .fromJavaVersion ().classpathFromResources (ctx , "jakarta.enterprise.cdi-api-3.0.0-M4" ))
5073 .build ()
51- .apply (updateCursor (mi ),
52- mi .getCoordinates ().replace (),
53- mi .getSelect (),
54- mi .getArguments ().get (0 ));
55- } else if (createInjectionTargetMatcher .matches (method )) {
74+ .apply (updateCursor (mi ), mi .getCoordinates ().replace (), args );
75+ } else if (createInjectionTargetMatcher .matches (method ) && mi .getSelect () != null ) {
5676 return JavaTemplate .builder ("#{any(jakarta.enterprise.inject.spi.BeanManager)}.getInjectionTargetFactory(#{any(jakarta.enterprise.inject.spi.AnnotatedType)}).createInjectionTarget(null)" )
5777 .javaParser (JavaParser .fromJavaVersion ().classpathFromResources (ctx , "jakarta.enterprise.cdi-api-3.0.0-M4" ))
5878 .build ()
59- .apply (updateCursor (mi ),
60- mi .getCoordinates ().replace (),
61- mi .getSelect (),
62- mi .getArguments ().get (0 ));
79+ .apply (updateCursor (mi ), mi .getCoordinates ().replace (), mi .getSelect (), arguments .get (0 ));
6380 }
6481 return mi ;
6582 }
83+
6684 };
6785 }
6886}
0 commit comments