Skip to content

Commit d2af4dd

Browse files
authored
Merge pull request quarkusio#46788 from mkouba/issue-46721
ArC: fix decorated interface defaults methods not overriden by a bean
2 parents 34fbf30 + 19a00de commit d2af4dd

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,13 @@ private void addDecoratedMethods(Map<MethodKey, DecorationInfo> decoratedMethods
827827
addDecoratedMethods(decoratedMethods, superClassInfo, originalClassInfo, boundDecorators, skipPredicate);
828828
}
829829
}
830+
831+
for (DotName i : classInfo.interfaceNames()) {
832+
ClassInfo interfaceInfo = getClassByName(beanDeployment.getBeanArchiveIndex(), i);
833+
if (interfaceInfo != null) {
834+
addDecoratedMethods(decoratedMethods, interfaceInfo, originalClassInfo, boundDecorators, skipPredicate);
835+
}
836+
}
830837
}
831838

832839
private List<DecoratorMethod> findMatchingDecorators(MethodInfo method, List<DecoratorInfo> decorators) {
@@ -857,6 +864,9 @@ private List<DecoratorMethod> findMatchingDecorators(MethodInfo method, List<Dec
857864
decoratedMethodParams = Types.getResolvedParameters(decoratedTypeClass, resolvedTypeParameters,
858865
decoratedMethod,
859866
beanDeployment.getBeanArchiveIndex());
867+
methodParams = Types.getResolvedParameters(decoratedTypeClass, resolvedTypeParameters,
868+
method,
869+
beanDeployment.getBeanArchiveIndex());
860870
for (int i = 0; i < methodParams.size(); i++) {
861871
BeanResolver resolver = beanDeployment.getDelegateInjectionPointResolver();
862872
Type decoratedParam = decoratedMethodParams.get(i);

independent-projects/arc/tests/src/test/java/io/quarkus/arc/test/decorators/DecoratorDefaultMethodTest.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package io.quarkus.arc.test.decorators;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
46

57
import jakarta.annotation.Priority;
68
import jakarta.decorator.Decorator;
@@ -16,22 +18,31 @@
1618
import io.quarkus.arc.test.ArcTestContainer;
1719

1820
public class DecoratorDefaultMethodTest {
21+
1922
@RegisterExtension
2023
public ArcTestContainer container = new ArcTestContainer(Converter.class, ToLengthConverter.class,
21-
NoopConverterDecorator.class);
24+
ConverterDecorator.class);
2225

2326
@SuppressWarnings("serial")
2427
@Test
2528
public void testDecoration() {
2629
Converter<String> converter = Arc.container().instance(new TypeLiteral<Converter<String>>() {
2730
}).get();
2831
assertEquals(5, converter.convert("Hola!"));
32+
assertTrue(converter.convertToBoolean("echo"));
33+
assertFalse(converter.convertToBoolean("echos"));
2934
}
3035

3136
interface Converter<T> {
37+
3238
default int convert(T value) {
3339
return Integer.MAX_VALUE;
3440
}
41+
42+
// this method is intentionally not overriden by ToLengthConverter
43+
default boolean convertToBoolean(T value) {
44+
return false;
45+
}
3546
}
3647

3748
@ApplicationScoped
@@ -44,7 +55,7 @@ public int convert(String value) {
4455

4556
@Priority(1)
4657
@Decorator
47-
static class NoopConverterDecorator implements Converter<String> {
58+
static class ConverterDecorator implements Converter<String> {
4859

4960
@Inject
5061
@Delegate
@@ -54,6 +65,12 @@ static class NoopConverterDecorator implements Converter<String> {
5465
public int convert(String value) {
5566
return delegate.convert(value);
5667
}
68+
69+
@Override
70+
public boolean convertToBoolean(String value) {
71+
return value.equals("echo");
72+
}
73+
5774
}
5875

5976
}

0 commit comments

Comments
 (0)