Skip to content

Commit 5804ea9

Browse files
committed
fixup! add possibility to check for overriding methods to domain and lang
I think there is still some problems with generics and bridge methods. Signed-off-by: Peter Gafert <[email protected]>
1 parent 20ec269 commit 5804ea9

File tree

1 file changed

+64
-5
lines changed

1 file changed

+64
-5
lines changed

archunit/src/test/java/com/tngtech/archunit/core/domain/JavaMethodTest.java

Lines changed: 64 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.tngtech.archunit.core.domain;
22

3+
import java.io.File;
4+
35
import org.junit.Test;
46

57
import static com.tngtech.archunit.core.domain.TestUtils.importMethod;
@@ -9,27 +11,52 @@ public class JavaMethodTest {
911

1012
@Test
1113
public void isOverriding_returns_true_for_implemented_interface_method() {
12-
assertThat(importMethod(SomeClass.class, "doSomething").isOverriding()).isTrue();
14+
assertThat(importMethod(SomeClass.class, "doSomething").isOverriding())
15+
.as("method is detected as overriding").isTrue();
1316
}
1417

1518
@Test
1619
public void isOverriding_returns_false_for_interface_method() {
17-
assertThat(importMethod(SomeInterface.class, "doSomething").isOverriding()).isFalse();
20+
assertThat(importMethod(SomeInterface.class, "doSomething").isOverriding())
21+
.as("method is detected as overriding").isFalse();
1822
}
1923

2024
@Test
2125
public void isOverriding_returns_true_for_overriding_method_of_java_lang_Object() {
22-
assertThat(importMethod(SomeClass.class, "toString").isOverriding()).isTrue();
26+
assertThat(importMethod(SomeClass.class, "toString").isOverriding())
27+
.as("method is detected as overriding").isTrue();
2328
}
2429

2530
@Test
2631
public void isOverriding_returns_false_for_non_overriding_method() {
27-
assertThat(importMethod(SomeClass.class, "doSomethingElse").isOverriding()).isFalse();
32+
assertThat(importMethod(SomeClass.class, "doSomethingElse").isOverriding())
33+
.as("method is detected as overriding").isFalse();
2834
}
2935

3036
@Test
3137
public void isOverriding_returns_false_for_non_overriding_overloaded_method() {
32-
assertThat(importMethod(SomeClass.class, "doSomething", Object.class).isOverriding()).isFalse();
38+
assertThat(importMethod(SomeClass.class, "doSomething", Object.class).isOverriding())
39+
.as("method is detected as overriding").isFalse();
40+
}
41+
42+
@Test
43+
public void isOverriding_returns_true_for_concrete_implementation_of_generic_interface_method() {
44+
assertThat(importMethod(SomeClassImplementingGenericsConcrete.class, "genericParam", Object.class).isOverriding())
45+
.as("method is detected as overriding").isTrue();
46+
assertThat(importMethod(SomeClassImplementingGenericsConcrete.class, "genericParam", String.class).isOverriding())
47+
.as("method is detected as overriding").isTrue();
48+
assertThat(importMethod(SomeClassImplementingGenericsConcrete.class, "genericReturnType").isOverriding())
49+
.as("method is detected as overriding").isTrue();
50+
}
51+
52+
@Test
53+
public void isOverriding_returns_true_for_generic_implementation_of_generic_interface_method() {
54+
assertThat(importMethod(SomeClassImplementingGenericsGeneric.class, "genericParam", Object.class).isOverriding())
55+
.as("method is detected as overriding").isTrue();
56+
assertThat(importMethod(SomeClassImplementingGenericsConcrete.class, "genericParam", String.class).isOverriding())
57+
.as("method is detected as overriding").isTrue();
58+
assertThat(importMethod(SomeClassImplementingGenericsGeneric.class, "genericReturnType").isOverriding())
59+
.as("method is detected as overriding").isTrue();
3360
}
3461

3562
@SuppressWarnings("unused")
@@ -56,4 +83,36 @@ public String toString() {
5683
return super.toString();
5784
}
5885
}
86+
87+
@SuppressWarnings("unused")
88+
private interface SomeGenericInterface<T, U> {
89+
90+
void genericParam(T param);
91+
92+
U genericReturnType();
93+
}
94+
95+
private static class SomeClassImplementingGenericsConcrete implements SomeGenericInterface<String, File> {
96+
97+
@Override
98+
public void genericParam(String param) {
99+
}
100+
101+
@Override
102+
public File genericReturnType() {
103+
return null;
104+
}
105+
}
106+
107+
private static class SomeClassImplementingGenericsGeneric<X extends String, Y extends File> implements SomeGenericInterface<X, Y> {
108+
109+
@Override
110+
public void genericParam(X param) {
111+
}
112+
113+
@Override
114+
public Y genericReturnType() {
115+
return null;
116+
}
117+
}
59118
}

0 commit comments

Comments
 (0)