From f9bcdd7713370a79393e749e0e55fada438faa4a Mon Sep 17 00:00:00 2001 From: Magesh Umasankar Date: Tue, 5 Mar 2002 20:40:36 +0000 Subject: [PATCH] Eliminate compile time dependency of ClassConstants with JavaClasshelper that uses bcel. Compilation of JavaClassHelper will be performed only if bcel is present at the time of compile. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271755 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/ant/filters/ClassConstants.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) 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 10e694e3e..f59c88130 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 @@ -56,9 +56,10 @@ package org.apache.tools.ant.filters; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.Reader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.apache.tools.ant.Project; -import org.apache.tools.ant.filters.util.JavaClassHelper; /** * Assemble the constants declared in a Java class in @@ -92,6 +93,10 @@ public final class ClassConstants /** Data that must be read from, if not null. */ private String queuedData = null; + /** Helper Class to be invoked via reflection. */ + private String JAVA_CLASS_HELPER = + "org.apache.tools.ant.filters.util.JavaClassHelper"; + /** * This constructor is a dummy constructor and is * not meant to be used by any class other than Ant's @@ -134,10 +139,37 @@ public final class ClassConstants ch = -1; } else { final byte[] bytes = clazz.getBytes(); - final StringBuffer sb = JavaClassHelper.getConstants(bytes); - if (sb.length() > 0) { - queuedData = sb.toString(); - return read(); + try { + final Class javaClassHelper = + Class.forName(JAVA_CLASS_HELPER); + if (javaClassHelper != null) { + final Class params[] = { + byte[].class + }; + final Method getConstants = + javaClassHelper.getMethod("getConstants", params); + final Object[] args = { + bytes + }; + // getConstants is a staic method, no need to + // pass in the object + final StringBuffer sb = (StringBuffer) + getConstants.invoke(null, args); + if (sb.length() > 0) { + queuedData = sb.toString(); + return read(); + } + } + } catch (ClassNotFoundException cnfe) { + throw new IOException(cnfe.getMessage()); + } catch (NoSuchMethodException nsme) { + throw new IOException(nsme.getMessage()); + } catch (IllegalAccessException iae) { + throw new IOException(iae.getMessage()); + } catch (IllegalArgumentException iarge) { + throw new IOException(iarge.getMessage()); + } catch (InvocationTargetException ite) { + throw new IOException(ite.getMessage()); } } }