File tree Expand file tree Collapse file tree 5 files changed +33
-39
lines changed
main/java/org/junit/runners/model
test/java/org/junit/tests/running/methods Expand file tree Collapse file tree 5 files changed +33
-39
lines changed Original file line number Diff line number Diff line change @@ -47,12 +47,7 @@ public <T extends Annotation> T getAnnotation(Class<T> annotationType) {
47
47
48
48
@ Override
49
49
public boolean isShadowedBy (FrameworkField otherMember ) {
50
- return false ;
51
- }
52
-
53
- @ Override
54
- FrameworkField handlePossibleBridgeMethod (List <FrameworkField > members ) {
55
- return this ; // fields are never bridge methods
50
+ return isStatic () && otherMember .getName ().equals (getName ());
56
51
}
57
52
58
53
@ Override
Original file line number Diff line number Diff line change @@ -18,7 +18,31 @@ public abstract class FrameworkMember<T extends FrameworkMember<T>> implements
18
18
*
19
19
* @return member that should be used, or {@code null} if no member should be used.
20
20
*/
21
- abstract T handlePossibleBridgeMethod (List <T > members );
21
+ final T handlePossibleShadowedMember (List <T > members ) {
22
+ for (int i = members .size () - 1 ; i >=0 ; i --) {
23
+ T otherMember = members .get (i );
24
+ if (isShadowedBy (otherMember )) {
25
+ if (otherMember .isBridgeMethod ()) {
26
+ /*
27
+ * We need to return the previously-encountered bridge method
28
+ * because JUnit won't be able to call the parent method,
29
+ * because the parent class isn't public.
30
+ */
31
+ members .remove (i );
32
+ return otherMember ;
33
+ }
34
+ // We found a shadowed member that isn't a bridge method. Ignore it.
35
+ return null ;
36
+ }
37
+ }
38
+ // No shadow or bridge method found. The caller should add *this* member.
39
+ return self ();
40
+ }
41
+
42
+ @ SuppressWarnings ("unchecked" )
43
+ private T self () {
44
+ return (T ) this ;
45
+ }
22
46
23
47
abstract boolean isBridgeMethod ();
24
48
Original file line number Diff line number Diff line change @@ -141,33 +141,8 @@ public void validateNoTypeParametersOnArgs(List<Throwable> errors) {
141
141
new NoGenericTypeParametersValidator (method ).validate (errors );
142
142
}
143
143
144
- @ Override
145
- FrameworkMethod handlePossibleBridgeMethod (List <FrameworkMethod > methods ) {
146
- for (int i = methods .size () - 1 ; i >=0 ; i --) {
147
- FrameworkMethod otherMethod = methods .get (i );
148
- if (isShadowedBy (otherMethod )) {
149
- if (otherMethod .isBridgeMethod ()) {
150
- /*
151
- * We need to return the previously-encountered bridge method
152
- * because JUnit won't be able to call the parent method,
153
- * because the parent class isn't public.
154
- */
155
- methods .remove (i );
156
- return otherMethod ;
157
- }
158
- // We found a shadowed member that isn't a bridge method. Ignore it.
159
- return null ;
160
- }
161
- }
162
- // No shadow or bridge method found. The caller should add *this* member.
163
- return this ;
164
- }
165
-
166
144
@ Override
167
145
public boolean isShadowedBy (FrameworkMethod other ) {
168
- if (isStatic ()) {
169
- return false ;
170
- }
171
146
if (!other .getName ().equals (getName ())) {
172
147
return false ;
173
148
}
Original file line number Diff line number Diff line change @@ -84,7 +84,7 @@ protected static <T extends FrameworkMember<T>> void addToAnnotationLists(T memb
84
84
for (Annotation each : member .getAnnotations ()) {
85
85
Class <? extends Annotation > type = each .annotationType ();
86
86
List <T > members = getAnnotatedMembers (map , type , true );
87
- T memberToAdd = member .handlePossibleBridgeMethod (members );
87
+ T memberToAdd = member .handlePossibleShadowedMember (members );
88
88
if (memberToAdd == null ) {
89
89
return ;
90
90
}
Original file line number Diff line number Diff line change @@ -586,13 +586,13 @@ public void test() {
586
586
}
587
587
}
588
588
589
- public void testStaticMethodsNeverTreatedAsShadowed () throws Exception {
589
+ public void testStaticMethodsCanBeTreatedAsShadowed () throws Exception {
590
590
log = "" ;
591
591
assertThat (testResult (SubStaticMethodShadowing .class ), isSuccessful ());
592
592
assertEquals (
593
- "super.rule().before() sub.rule().before() "
593
+ "sub.rule().before() "
594
594
+ "Test "
595
- + "sub.rule().after() super.rule().after() " ,
595
+ + "sub.rule().after() " ,
596
596
log );
597
597
}
598
598
@@ -680,13 +680,13 @@ public void test() {
680
680
}
681
681
}
682
682
683
- public void testStaticFieldsNeverTreatedAsShadowed () throws Exception {
683
+ public void testStaticFieldsCanBeTreatedAsShadowed () throws Exception {
684
684
log = "" ;
685
685
assertThat (testResult (SubStaticFieldShadowing .class ), isSuccessful ());
686
686
assertEquals (
687
- "super.rule.before() sub.rule.before() "
687
+ "sub.rule.before() "
688
688
+ "Test "
689
- + "sub.rule.after() super.rule.after() " ,
689
+ + "sub.rule.after() " ,
690
690
log );
691
691
}
692
692
You can’t perform that action at this time.
0 commit comments