Search in sources :

Example 1 with Parameterizable

use of org.apache.tools.ant.types.Parameterizable in project ant by apache.

the class ChainReaderHelper method expandReader.

/**
 * Creates and parameterizes a new FilterReader from a
 * <filterreader> element.
 *
 * @since Ant 1.8.0
 */
private Reader expandReader(final AntFilterReader filter, final Reader ancestor, final List<AntClassLoader> classLoadersToCleanUp) {
    final String className = filter.getClassName();
    final Path classpath = filter.getClasspath();
    if (className != null) {
        try {
            Class<? extends FilterReader> clazz;
            try {
                if (classpath == null) {
                    clazz = Class.forName(className).asSubclass(FilterReader.class);
                } else {
                    AntClassLoader al = filter.getProject().createClassLoader(classpath);
                    classLoadersToCleanUp.add(al);
                    clazz = Class.forName(className, true, al).asSubclass(FilterReader.class);
                }
            } catch (ClassCastException ex) {
                throw new BuildException("%s does not extend %s", className, FilterReader.class.getName());
            }
            Optional<Constructor<?>> ctor = Stream.of(clazz.getConstructors()).filter(c -> c.getParameterCount() == 1 && c.getParameterTypes()[0].isAssignableFrom(Reader.class)).findFirst();
            Object instream = ctor.orElseThrow(() -> new BuildException("%s does not define a public constructor that takes in a %s as its single argument.", className, Reader.class.getSimpleName())).newInstance(ancestor);
            setProjectOnObject(instream);
            if (Parameterizable.class.isAssignableFrom(clazz)) {
                ((Parameterizable) instream).setParameters(filter.getParams());
            }
            return (Reader) instream;
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | InvocationTargetException ex) {
            throw new BuildException(ex);
        }
    }
    // backwards compatibility makes it hard to change, though.
    return ancestor;
}
Also used : Path(org.apache.tools.ant.types.Path) FileUtils(org.apache.tools.ant.util.FileUtils) AntClassLoader(org.apache.tools.ant.AntClassLoader) Collection(java.util.Collection) FilterChain(org.apache.tools.ant.types.FilterChain) FilterReader(java.io.FilterReader) IOException(java.io.IOException) BuildException(org.apache.tools.ant.BuildException) BaseFilterReader(org.apache.tools.ant.filters.BaseFilterReader) Reader(java.io.Reader) ChainableReader(org.apache.tools.ant.filters.ChainableReader) Constructor(java.lang.reflect.Constructor) Collectors(java.util.stream.Collectors) InvocationTargetException(java.lang.reflect.InvocationTargetException) ArrayList(java.util.ArrayList) Path(org.apache.tools.ant.types.Path) Consumer(java.util.function.Consumer) List(java.util.List) Vector(java.util.Vector) Stream(java.util.stream.Stream) AntFilterReader(org.apache.tools.ant.types.AntFilterReader) Optional(java.util.Optional) Project(org.apache.tools.ant.Project) Parameterizable(org.apache.tools.ant.types.Parameterizable) Constructor(java.lang.reflect.Constructor) FilterReader(java.io.FilterReader) BaseFilterReader(org.apache.tools.ant.filters.BaseFilterReader) Reader(java.io.Reader) ChainableReader(org.apache.tools.ant.filters.ChainableReader) AntFilterReader(org.apache.tools.ant.types.AntFilterReader) AntClassLoader(org.apache.tools.ant.AntClassLoader) InvocationTargetException(java.lang.reflect.InvocationTargetException) Parameterizable(org.apache.tools.ant.types.Parameterizable) BuildException(org.apache.tools.ant.BuildException) FilterReader(java.io.FilterReader) BaseFilterReader(org.apache.tools.ant.filters.BaseFilterReader) AntFilterReader(org.apache.tools.ant.types.AntFilterReader)

Aggregations

FilterReader (java.io.FilterReader)1 IOException (java.io.IOException)1 Reader (java.io.Reader)1 Constructor (java.lang.reflect.Constructor)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 Optional (java.util.Optional)1 Vector (java.util.Vector)1 Consumer (java.util.function.Consumer)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 AntClassLoader (org.apache.tools.ant.AntClassLoader)1 BuildException (org.apache.tools.ant.BuildException)1 Project (org.apache.tools.ant.Project)1 BaseFilterReader (org.apache.tools.ant.filters.BaseFilterReader)1 ChainableReader (org.apache.tools.ant.filters.ChainableReader)1 AntFilterReader (org.apache.tools.ant.types.AntFilterReader)1 FilterChain (org.apache.tools.ant.types.FilterChain)1