All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javarepl.reflection.ClassReflection Maven / Gradle / Ivy

package javarepl.reflection;

import com.googlecode.totallylazy.Option;
import com.googlecode.totallylazy.Sequence;

import java.lang.annotation.Annotation;

import static com.googlecode.totallylazy.Option.option;
import static com.googlecode.totallylazy.Sequences.empty;
import static com.googlecode.totallylazy.Sequences.sequence;

public final class ClassReflection extends MemberReflection> {
    public ClassReflection(Class aClass) {
        super(aClass);
    }

    public Integer modifiers() {
        return member().getModifiers();
    }

    public String name() {
        return member().getName();
    }

    public Option enclosingMethod() {
        return option(member().getEnclosingMethod()).map(MethodReflection::new);
    }

    public Sequence declaredFields() {
        return sequence(member().getDeclaredFields()).map(FieldReflection::new);
    }

    public Sequence fields() {
        return sequence(member().getFields()).map(FieldReflection::new);
    }

    public Sequence declaredMethods() {
        return sequence(member().getDeclaredMethods()).map(MethodReflection::new);
    }

    public Sequence methods() {
        return sequence(member().getMethods()).map(MethodReflection::new);
    }

    public Sequence declaredConstructors() {
        return sequence(member().getDeclaredConstructors()).map(ConstructorReflection::new);
    }

    public Sequence constructors() {
        return sequence(member().getConstructors()).map(ConstructorReflection::new);
    }

    public Sequence declaredAnnotations() {
        return sequence(member().getDeclaredAnnotations());
    }

    public Sequence annotations() {
        return sequence(member().getAnnotations());
    }

    private Sequence interfaces() {
        return sequence(member().getInterfaces()).map(ClassReflection::new);
    }

    private Sequence declaredClasses() {
        return sequence(member().getDeclaredClasses()).map(ClassReflection::new);
    }

    private Sequence classes() {
        return sequence(member().getClasses()).map(ClassReflection::new);
    }

    public Sequence> declaredMembers() {
        return empty()
                .join(declaredClasses())
                .join(declaredConstructors())
                .join(declaredFields())
                .join(declaredMethods())
                .unique()
                .unsafeCast();
    }

    public Sequence> members() {
        return empty()
                .join(classes())
                .join(constructors())
                .join(fields())
                .join(methods())
                .unique()
                .unsafeCast();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy