1b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotpackage org.junit.runners.model;
2b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
3aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinimport java.lang.reflect.Modifier;
4b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabotimport java.util.List;
5b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
6aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin/**
7aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * Parent class for {@link FrameworkField} and {@link FrameworkMethod}
8aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin *
9aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin * @since 4.7
10aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin */
11aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffinpublic abstract class FrameworkMember<T extends FrameworkMember<T>> implements
12aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        Annotatable {
13aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    abstract boolean isShadowedBy(T otherMember);
14b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
15aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    boolean isShadowedBy(List<T> members) {
16aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        for (T each : members) {
17aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            if (isShadowedBy(each)) {
18aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin                return true;
19aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin            }
20aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        }
21aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return false;
22aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
23b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot
24aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    protected abstract int getModifiers();
25aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
26aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    /**
27aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin     * Returns true if this member is static, false if not.
28aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin     */
29aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public boolean isStatic() {
30aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return Modifier.isStatic(getModifiers());
31aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
32aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
33aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    /**
34aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin     * Returns true if this member is public, false if not.
35aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin     */
36aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public boolean isPublic() {
37aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin        return Modifier.isPublic(getModifiers());
38aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    }
39aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
40aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public abstract String getName();
41aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
42aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public abstract Class<?> getType();
43aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin
44aeb93fc33cae3aadbb9b46083350ad2dc9aea645Paul Duffin    public abstract Class<?> getDeclaringClass();
45b3823db9f1192d8c81345740b3e65bd6738ba55bBrett Chabot}
46