From f688c57ce10a8ab655aae2c0ccb178f72288bcd9 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Sun, 24 Sep 2000 11:50:18 +0000 Subject: [PATCH] Include any inner classes in the generated Jar file. Submitted by: Brian Towles git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268033 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/ejb/GenericDeploymentTool.java | 26 +++++++++++++++++++ .../ejb/InnerClassFilenameFilter.java | 23 ++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java index 5dec9e36f..f095395f2 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java @@ -369,6 +369,8 @@ public class GenericDeploymentTool implements EJBDeploymentTool { Iterator entryIterator = null; String entryName = null; File entryFile = null; + File entryDir = null; + String innerfiles[] = null; try { /* If the jarfile already exists then whack it and recreate it. @@ -398,6 +400,27 @@ public class GenericDeploymentTool implements EJBDeploymentTool { addFileToJar(jarStream, new FileInputStream(entryFile), entryName); + + // See if there are any inner classes for this class and add them in if there are + InnerClassFilenameFilter flt = new InnerClassFilenameFilter(entryFile.getName()); + entryDir = entryFile.getParentFile(); + innerfiles = entryDir.list(flt); + for (int i=0, n=innerfiles.length; i < n; i++) { + + //get and clean up innerclass name + entryName = entryName.substring(0, entryName.lastIndexOf(entryFile.getName())-1) + File.separatorChar + innerfiles[i]; + + // link the file + entryFile = new File(srcDir, entryName); + + getTask().log("adding innerclass file '" + entryName + "'", + Project.MSG_VERBOSE); + + addFileToJar(jarStream, + new FileInputStream(entryFile), + entryName); + + } } // All done. Close the jar stream. jarStream.close(); @@ -410,6 +433,9 @@ public class GenericDeploymentTool implements EJBDeploymentTool { throw new BuildException(msg, ioe); } } // end of writeJar + + + /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java new file mode 100644 index 000000000..921476033 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java @@ -0,0 +1,23 @@ +package org.apache.tools.ant.taskdefs.optional.ejb; + +import java.io.*; + +public class InnerClassFilenameFilter implements FilenameFilter { + private String baseClassName; + + InnerClassFilenameFilter(String baseclass){ + int extidx = baseclass.lastIndexOf(".class"); + if (extidx == -1) { + extidx = baseclass.length()-1; + } + baseClassName = baseclass.substring(0,extidx); + } + + public boolean accept (File Dir, String filename){ + if ((filename.lastIndexOf(".") != filename.lastIndexOf(".class")) + || (filename.indexOf(baseClassName + "$") != 0)) { + return false; + } + return true; + } +}