001package org.junit.runners.model;
002
003import java.lang.reflect.Modifier;
004import java.util.List;
005
006/**
007 * Parent class for {@link FrameworkField} and {@link FrameworkMethod}
008 *
009 * @since 4.7
010 */
011public abstract class FrameworkMember<T extends FrameworkMember<T>> implements
012        Annotatable {
013    abstract boolean isShadowedBy(T otherMember);
014
015    boolean isShadowedBy(List<T> members) {
016        for (T each : members) {
017            if (isShadowedBy(each)) {
018                return true;
019            }
020        }
021        return false;
022    }
023
024    protected abstract int getModifiers();
025
026    /**
027     * Returns true if this member is static, false if not.
028     */
029    public boolean isStatic() {
030        return Modifier.isStatic(getModifiers());
031    }
032
033    /**
034     * Returns true if this member is public, false if not.
035     */
036    public boolean isPublic() {
037        return Modifier.isPublic(getModifiers());
038    }
039
040    public abstract String getName();
041
042    public abstract Class<?> getType();
043
044    public abstract Class<?> getDeclaringClass();
045}