001    package org.junit.runners.model;
002    
003    import java.lang.reflect.Modifier;
004    import java.util.List;
005    
006    /**
007     * Parent class for {@link FrameworkField} and {@link FrameworkMethod}
008     *
009     * @since 4.7
010     */
011    public 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    }