Skip to content

Commit 1cba1dc

Browse files
authored
Retain BeanManager fireEvent annotations (#599)
* Retain BeanManager `firstEvent` annotations Fixes #597 * Reduce warnings
1 parent 732c733 commit 1cba1dc

File tree

2 files changed

+73
-14
lines changed

2 files changed

+73
-14
lines changed

src/main/java/org/openrewrite/java/migrate/jakarta/UpdateBeanManagerMethods.java

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,12 @@
2222
import org.openrewrite.java.JavaParser;
2323
import org.openrewrite.java.JavaTemplate;
2424
import org.openrewrite.java.MethodMatcher;
25+
import org.openrewrite.java.tree.Expression;
2526
import org.openrewrite.java.tree.J;
2627

28+
import java.util.Collections;
29+
import java.util.List;
30+
2731
public 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
}

src/test/java/org/openrewrite/java/migrate/jakarta/UpdateBeanManagerMethodsTest.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,23 @@
1616
package org.openrewrite.java.migrate.jakarta;
1717

1818
import org.junit.jupiter.api.Test;
19-
import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
2019
import org.openrewrite.DocumentExample;
2120
import org.openrewrite.InMemoryExecutionContext;
21+
import org.openrewrite.Issue;
2222
import org.openrewrite.java.JavaParser;
2323
import org.openrewrite.test.RecipeSpec;
2424
import org.openrewrite.test.RewriteTest;
2525

2626
import static org.openrewrite.java.Assertions.java;
2727

28-
@DisabledIfEnvironmentVariable(named = "CI", matches = "true") // Unexplained failure only on GitHub Actions
2928
class UpdateBeanManagerMethodsTest implements RewriteTest {
3029
@Override
3130
public void defaults(RecipeSpec spec) {
3231
spec
3332
.parser(JavaParser.fromJavaVersion()
34-
.classpathFromResources(new InMemoryExecutionContext(), "jakarta.enterprise.cdi-api-3.0.0-M4", "jakarta.enterprise.cdi-api-4.0.1"))
33+
.classpathFromResources(new InMemoryExecutionContext(),
34+
"jakarta.enterprise.cdi-api-3.0.0-M4",
35+
"jakarta.enterprise.cdi-api-4.0.1"))
3536
.recipe(new UpdateBeanManagerMethods());
3637
}
3738

@@ -97,4 +98,44 @@ void bar(BeanManager beanManager) {
9798
)
9899
);
99100
}
101+
102+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/597")
103+
@Test
104+
void fireEventWithClassifiers() {
105+
rewriteRun(
106+
//language=java
107+
java(
108+
"""
109+
import java.lang.annotation.Annotation;
110+
import jakarta.enterprise.inject.spi.BeanManager;
111+
import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
112+
import java.util.Set;
113+
114+
class Foo {
115+
void one(BeanManager beanManager, BeforeBeanDiscovery beforeBeanDiscovery, Annotation classifier) {
116+
beanManager.fireEvent(beforeBeanDiscovery, classifier);
117+
}
118+
void two(BeanManager beanManager, BeforeBeanDiscovery beforeBeanDiscovery, Annotation classifier) {
119+
beanManager.fireEvent(beforeBeanDiscovery, classifier, classifier);
120+
}
121+
}
122+
""",
123+
"""
124+
import java.lang.annotation.Annotation;
125+
import jakarta.enterprise.inject.spi.BeanManager;
126+
import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
127+
import java.util.Set;
128+
129+
class Foo {
130+
void one(BeanManager beanManager, BeforeBeanDiscovery beforeBeanDiscovery, Annotation classifier) {
131+
beanManager.getEvent().select(classifier).fire(beforeBeanDiscovery);
132+
}
133+
void two(BeanManager beanManager, BeforeBeanDiscovery beforeBeanDiscovery, Annotation classifier) {
134+
beanManager.getEvent().select(classifier, classifier).fire(beforeBeanDiscovery);
135+
}
136+
}
137+
"""
138+
)
139+
);
140+
}
100141
}

0 commit comments

Comments
 (0)