diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java index 635a39be0..10e694e3e 100644 --- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java +++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/ClassConstants.java @@ -58,11 +58,7 @@ import java.io.IOException; import java.io.Reader; import org.apache.tools.ant.Project; - -import org.apache.bcel.classfile.ClassParser; -import org.apache.bcel.classfile.ConstantValue; -import org.apache.bcel.classfile.Field; -import org.apache.bcel.classfile.JavaClass; +import org.apache.tools.ant.filters.util.JavaClassHelper; /** * Assemble the constants declared in a Java class in @@ -93,9 +89,6 @@ public final class ClassConstants extends BaseFilterReader implements ChainableReader { - /** System specific line separator. */ - private static final String LS = System.getProperty("line.separator"); - /** Data that must be read from, if not null. */ private String queuedData = null; @@ -141,29 +134,7 @@ public final class ClassConstants ch = -1; } else { final byte[] bytes = clazz.getBytes(); - final StringBuffer sb = new StringBuffer(); - final ByteArrayInputStream bis = new ByteArrayInputStream(bytes); - final ClassParser parser = new ClassParser(bis, ""); - final JavaClass javaClass = parser.parse(); - final Field[] fields = javaClass.getFields(); - for (int i = 0; i < fields.length; i++) { - final Field field = fields[i]; - if (field != null) { - final ConstantValue cv = field.getConstantValue(); - if (cv != null) { - String cvs = cv.toString(); - //Remove start and end quotes if field is a String - if (cvs.startsWith("\"") && cvs.endsWith("\"")) { - cvs = cvs.substring(1, cvs.length() - 1); - } - sb.append(field.getName()); - sb.append('='); - sb.append(cvs); - sb.append(LS); - } - } - } - + final StringBuffer sb = JavaClassHelper.getConstants(bytes); if (sb.length() > 0) { queuedData = sb.toString(); return read(); diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java new file mode 100644 index 000000000..809a407a0 --- /dev/null +++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java @@ -0,0 +1,103 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2002 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Ant", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ +package org.apache.tools.ant.filters.util; + +import java.io.ByteArrayInputStream; +import java.io.IOException; + +import org.apache.bcel.classfile.ClassParser; +import org.apache.bcel.classfile.ConstantValue; +import org.apache.bcel.classfile.Field; +import org.apache.bcel.classfile.JavaClass; + +/** + * Helper class that filters constants from a Java Class + * + * @author Magesh Umasankar + */ +public final class JavaClassHelper { + + /** System specific line separator. */ + private static final String LS = System.getProperty("line.separator"); + + /** + * Get the constants declared in a file as name=value + */ + public static final StringBuffer getConstants(byte[] bytes) + throws IOException { + final StringBuffer sb = new StringBuffer(); + final ByteArrayInputStream bis = new ByteArrayInputStream(bytes); + final ClassParser parser = new ClassParser(bis, ""); + final JavaClass javaClass = parser.parse(); + final Field[] fields = javaClass.getFields(); + for (int i = 0; i < fields.length; i++) { + final Field field = fields[i]; + if (field != null) { + final ConstantValue cv = field.getConstantValue(); + if (cv != null) { + String cvs = cv.toString(); + //Remove start and end quotes if field is a String + if (cvs.startsWith("\"") && cvs.endsWith("\"")) { + cvs = cvs.substring(1, cvs.length() - 1); + } + sb.append(field.getName()); + sb.append('='); + sb.append(cvs); + sb.append(LS); + } + } + } + return sb; + } +} diff --git a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java index 5bf3468da..d5a8c6b04 100644 --- a/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java +++ b/proposal/sandbox/filterreaders/src/main/org/apache/tools/ant/types/FilterChain.java @@ -55,7 +55,7 @@ package org.apache.tools.ant.types; import java.util.Vector; -//import org.apache.tools.ant.filters.ClassConstants; +import org.apache.tools.ant.filters.ClassConstants; import org.apache.tools.ant.filters.ExpandProperties; import org.apache.tools.ant.filters.HeadFilter; import org.apache.tools.ant.filters.LineContains; @@ -85,11 +85,9 @@ public final class FilterChain { return filterReaders; } - /* public final void addClassConstants(final ClassConstants classConstants) { filterReaders.addElement(classConstants); } - */ public final void addExpandProperties(final ExpandProperties expandProperties) { filterReaders.addElement(expandProperties);