blob: 5634b3f0ca98b9dab0b6d3874ac6eb7d4e6dc506 [file] [log] [blame]
package org.junit.runners.model;
import java.lang.reflect.Modifier;
import java.util.List;
/**
* Parent class for {@link FrameworkField} and {@link FrameworkMethod}
*
* @since 4.7
*/
public abstract class FrameworkMember<T extends FrameworkMember<T>> implements
Annotatable {
abstract boolean isShadowedBy(T otherMember);
T handlePossibleBridgeMethod(List<T> members) {
for (int i = members.size() - 1; i >=0; i--) {
T otherMember = members.get(i);
if (isShadowedBy(otherMember)) {
if (otherMember.isBridgeMethod()) {
/*
* We need to return the previously-encountered bridge method
* because JUnit won't be able to call the parent method,
* because the parent class isn't public.
*/
members.remove(i);
return otherMember;
}
// We found a shadowed member that isn't a bridge method. Ignore it.
return null;
}
}
// No shadow or bridge method found. The caller should add *this* member.
return (T) this;
}
abstract boolean isBridgeMethod();
protected abstract int getModifiers();
/**
* Returns true if this member is static, false if not.
*/
public boolean isStatic() {
return Modifier.isStatic(getModifiers());
}
/**
* Returns true if this member is public, false if not.
*/
public boolean isPublic() {
return Modifier.isPublic(getModifiers());
}
public abstract String getName();
public abstract Class<?> getType();
public abstract Class<?> getDeclaringClass();
}