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

net.vidageek.mirror.reflect.DefaultAllReflectionHandler Maven / Gradle / Ivy

/**
 * 
 */
package net.vidageek.mirror.reflect;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

import net.vidageek.mirror.dsl.Matcher;
import net.vidageek.mirror.matcher.GetterMatcher;
import net.vidageek.mirror.matcher.ListFilter;
import net.vidageek.mirror.matcher.SetterMatcher;
import net.vidageek.mirror.provider.ReflectionProvider;
import net.vidageek.mirror.reflect.dsl.AllAnnotationsHandler;
import net.vidageek.mirror.reflect.dsl.AllReflectionHandler;

/**
 * This class is responsible for reflecting lists of reflection elements
 * 
 * @author jonasabreu
 */
public final class DefaultAllReflectionHandler implements AllReflectionHandler {

    private final Class clazz;

    private final ReflectionProvider provider;

    public DefaultAllReflectionHandler(final ReflectionProvider provider, final Class clazz) {
        if (clazz == null) {
            throw new IllegalArgumentException("clazz cannot be null");
        }
        this.provider = provider;
        this.clazz = clazz;
    }

    public List fields() {
        return provider.getClassReflectionProvider(clazz).reflectAllFields();
    }

    public List methods() {
        return provider.getClassReflectionProvider(clazz).reflectAllMethods();
    }

    public List> constructors() {
        return provider.getClassReflectionProvider(clazz).reflectAllConstructors();
    }

    public AllAnnotationsHandler annotations() {
        return new DefaultAllAnnotationsHandler(provider, clazz);
    }

    public List setters() {
        return new ListFilter().filter(new SetterMatcher(), methods());
    }

    public List getters() {
        return new ListFilter().filter(new GetterMatcher(), methods());
    }

    public List fieldsMatching(final Matcher matcher) {
        return new ListFilter().filter(matcher, fields());
    }

    public List methodsMatching(final Matcher matcher) {
        return new ListFilter().filter(matcher, methods());
    }

    public List> constructorsMatching(final Matcher> matcher) {
        return new ListFilter().filter(matcher, constructors());
    }

    public List annotationsMatching(final Matcher matcher) {
        return new ListFilter().filter(matcher, annotations().atClass());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy