git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@811656 13f79535-47bb-0310-9956-ffa450edef68remotes/1773173721559275296/tmp_61b4c00b3852083b0f81586d6f78adf0bc3c7f6f
| @@ -220,7 +220,7 @@ public class Rmic extends MatchingTask { | |||
| /** | |||
| * Specify the JDK version for the generated stub code. | |||
| * Specify "1.1" to pass the "-v1.1" option to rmic.</td> | |||
| * Specify "1.1" to pass the "-v1.1" option to rmic. | |||
| * @param stubVersion the JDK version | |||
| */ | |||
| public void setStubVersion(String stubVersion) { | |||
| @@ -583,84 +583,91 @@ public class Rmic extends MatchingTask { | |||
| */ | |||
| public void execute() throws BuildException { | |||
| try { | |||
| compileList.clear(); | |||
| compileList.clear(); | |||
| File outputDir = getOutputDir(); | |||
| if (outputDir == null) { | |||
| throw new BuildException(ERROR_BASE_NOT_SET, getLocation()); | |||
| } | |||
| if (!outputDir.exists()) { | |||
| throw new BuildException(ERROR_NO_BASE_EXISTS + outputDir, getLocation()); | |||
| } | |||
| if (!outputDir.isDirectory()) { | |||
| throw new BuildException(ERROR_NOT_A_DIR + outputDir, getLocation()); | |||
| } | |||
| if (verify) { | |||
| log("Verify has been turned on.", Project.MSG_VERBOSE); | |||
| } | |||
| RmicAdapter adapter = | |||
| nestedAdapter != null ? nestedAdapter : | |||
| RmicAdapterFactory.getRmic(getCompiler(), this, | |||
| createCompilerClasspath()); | |||
| // now we need to populate the compiler adapter | |||
| adapter.setRmic(this); | |||
| Path classpath = adapter.getClasspath(); | |||
| loader = getProject().createClassLoader(classpath); | |||
| // scan base dirs to build up compile lists only if a | |||
| // specific classname is not given | |||
| if (classname == null) { | |||
| DirectoryScanner ds = this.getDirectoryScanner(baseDir); | |||
| String[] files = ds.getIncludedFiles(); | |||
| scanDir(baseDir, files, adapter.getMapper()); | |||
| } else { | |||
| // otherwise perform a timestamp comparison - at least | |||
| String path = classname.replace('.', File.separatorChar) + ".class"; | |||
| File f = new File(baseDir, path); | |||
| if (f.isFile()) { | |||
| scanDir(baseDir, new String[] {path}, adapter.getMapper()); | |||
| } else { | |||
| // Does not exist, so checking whether it is up to date makes no sense. | |||
| // Compilation will fail later anyway, but tests expect a certain output. | |||
| compileList.add(classname); | |||
| File outputDir = getOutputDir(); | |||
| if (outputDir == null) { | |||
| throw new BuildException(ERROR_BASE_NOT_SET, getLocation()); | |||
| } | |||
| } | |||
| int fileCount = compileList.size(); | |||
| if (fileCount > 0) { | |||
| log("RMI Compiling " + fileCount + " class" | |||
| + (fileCount > 1 ? "es" : "") + " to " | |||
| + outputDir, Project.MSG_INFO); | |||
| if (listFiles) { | |||
| for (int i = 0; i < fileCount; i++) { | |||
| log(compileList.get(i).toString()); | |||
| if (!outputDir.exists()) { | |||
| throw new BuildException(ERROR_NO_BASE_EXISTS + outputDir, | |||
| getLocation()); | |||
| } | |||
| if (!outputDir.isDirectory()) { | |||
| throw new BuildException(ERROR_NOT_A_DIR + outputDir, getLocation()); | |||
| } | |||
| if (verify) { | |||
| log("Verify has been turned on.", Project.MSG_VERBOSE); | |||
| } | |||
| RmicAdapter adapter = | |||
| nestedAdapter != null ? nestedAdapter : | |||
| RmicAdapterFactory.getRmic(getCompiler(), this, | |||
| createCompilerClasspath()); | |||
| // now we need to populate the compiler adapter | |||
| adapter.setRmic(this); | |||
| Path classpath = adapter.getClasspath(); | |||
| loader = getProject().createClassLoader(classpath); | |||
| // scan base dirs to build up compile lists only if a | |||
| // specific classname is not given | |||
| if (classname == null) { | |||
| DirectoryScanner ds = this.getDirectoryScanner(baseDir); | |||
| String[] files = ds.getIncludedFiles(); | |||
| scanDir(baseDir, files, adapter.getMapper()); | |||
| } else { | |||
| // otherwise perform a timestamp comparison - at least | |||
| String path = classname.replace('.', File.separatorChar) | |||
| + ".class"; | |||
| File f = new File(baseDir, path); | |||
| if (f.isFile()) { | |||
| scanDir(baseDir, new String[] {path}, adapter.getMapper()); | |||
| } else { | |||
| // Does not exist, so checking whether it is up to | |||
| // date makes no sense. Compilation will fail | |||
| // later anyway, but tests expect a certain | |||
| // output. | |||
| compileList.add(classname); | |||
| } | |||
| } | |||
| int fileCount = compileList.size(); | |||
| if (fileCount > 0) { | |||
| log("RMI Compiling " + fileCount + " class" | |||
| + (fileCount > 1 ? "es" : "") + " to " | |||
| + outputDir, Project.MSG_INFO); | |||
| if (listFiles) { | |||
| for (int i = 0; i < fileCount; i++) { | |||
| log(compileList.get(i).toString()); | |||
| } | |||
| } | |||
| // finally, lets execute the compiler!! | |||
| if (!adapter.execute()) { | |||
| throw new BuildException(ERROR_RMIC_FAILED, getLocation()); | |||
| // finally, lets execute the compiler!! | |||
| if (!adapter.execute()) { | |||
| throw new BuildException(ERROR_RMIC_FAILED, getLocation()); | |||
| } | |||
| } | |||
| } | |||
| /* | |||
| * Move the generated source file to the base directory. If | |||
| * base directory and sourcebase are the same, the generated | |||
| * sources are already in place. | |||
| */ | |||
| if (null != sourceBase && !outputDir.equals(sourceBase) | |||
| && fileCount > 0) { | |||
| if (idl) { | |||
| log("Cannot determine sourcefiles in idl mode, ", Project.MSG_WARN); | |||
| log("sourcebase attribute will be ignored.", Project.MSG_WARN); | |||
| } else { | |||
| for (int j = 0; j < fileCount; j++) { | |||
| moveGeneratedFile(outputDir, sourceBase, (String) compileList.elementAt(j), | |||
| adapter); | |||
| /* | |||
| * Move the generated source file to the base directory. If | |||
| * base directory and sourcebase are the same, the generated | |||
| * sources are already in place. | |||
| */ | |||
| if (null != sourceBase && !outputDir.equals(sourceBase) | |||
| && fileCount > 0) { | |||
| if (idl) { | |||
| log("Cannot determine sourcefiles in idl mode, ", | |||
| Project.MSG_WARN); | |||
| log("sourcebase attribute will be ignored.", | |||
| Project.MSG_WARN); | |||
| } else { | |||
| for (int j = 0; j < fileCount; j++) { | |||
| moveGeneratedFile(outputDir, sourceBase, | |||
| (String) compileList.elementAt(j), | |||
| adapter); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } finally { | |||
| cleanup(); | |||
| } | |||
| @@ -686,7 +693,8 @@ public class Rmic extends MatchingTask { | |||
| */ | |||
| private void moveGeneratedFile(File baseDir, File sourceBaseFile, String classname, | |||
| RmicAdapter adapter) throws BuildException { | |||
| String classFileName = classname.replace('.', File.separatorChar) + ".class"; | |||
| String classFileName = classname.replace('.', File.separatorChar) | |||
| + ".class"; | |||
| String[] generatedFiles = adapter.getMapper().mapFileName(classFileName); | |||
| for (int i = 0; i < generatedFiles.length; i++) { | |||
| @@ -696,7 +704,8 @@ public class Rmic extends MatchingTask { | |||
| // have a corresponding Java source for example. | |||
| continue; | |||
| } | |||
| String sourceFileName = StringUtils.removeSuffix(generatedFile, ".class"); | |||
| String sourceFileName = StringUtils.removeSuffix(generatedFile, | |||
| ".class"); | |||
| File oldFile = new File(baseDir, sourceFileName); | |||
| if (!oldFile.exists()) { | |||
| @@ -707,14 +716,16 @@ public class Rmic extends MatchingTask { | |||
| File newFile = new File(sourceBaseFile, sourceFileName); | |||
| try { | |||
| if (filtering) { | |||
| FILE_UTILS.copyFile(oldFile, newFile, new FilterSetCollection(getProject() | |||
| .getGlobalFilterSet())); | |||
| FILE_UTILS.copyFile(oldFile, newFile, | |||
| new FilterSetCollection(getProject() | |||
| .getGlobalFilterSet())); | |||
| } else { | |||
| FILE_UTILS.copyFile(oldFile, newFile); | |||
| } | |||
| oldFile.delete(); | |||
| } catch (IOException ioe) { | |||
| String msg = "Failed to copy " + oldFile + " to " + newFile + " due to " | |||
| String msg = "Failed to copy " + oldFile + " to " + newFile | |||
| + " due to " | |||
| + ioe.getMessage(); | |||
| throw new BuildException(msg, ioe, getLocation()); | |||
| } | |||
| @@ -734,7 +745,8 @@ public class Rmic extends MatchingTask { | |||
| log("will leave uptodate test to rmic implementation in idl mode.", | |||
| Project.MSG_VERBOSE); | |||
| } else if (iiop && iiopOpts != null && iiopOpts.indexOf("-always") > -1) { | |||
| log("no uptodate test as -always option has been specified", Project.MSG_VERBOSE); | |||
| log("no uptodate test as -always option has been specified", | |||
| Project.MSG_VERBOSE); | |||
| } else { | |||
| SourceFileScanner sfs = new SourceFileScanner(this); | |||
| newFiles = sfs.restrict(files, baseDir, getOutputDir(), mapper); | |||
| @@ -760,12 +772,15 @@ public class Rmic extends MatchingTask { | |||
| } | |||
| return isValidRmiRemote(testClass); | |||
| } catch (ClassNotFoundException e) { | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname + ERROR_NOT_FOUND, Project.MSG_WARN); | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname + ERROR_NOT_FOUND, | |||
| Project.MSG_WARN); | |||
| } catch (NoClassDefFoundError e) { | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname + ERROR_NOT_DEFINED, Project.MSG_WARN); | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname + ERROR_NOT_DEFINED, | |||
| Project.MSG_WARN); | |||
| } catch (Throwable t) { | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname + ERROR_LOADING_CAUSED_EXCEPTION | |||
| + t.getMessage(), Project.MSG_WARN); | |||
| log(ERROR_UNABLE_TO_VERIFY_CLASS + classname | |||
| + ERROR_LOADING_CAUSED_EXCEPTION + t.getMessage(), | |||
| Project.MSG_WARN); | |||
| } | |||
| // we only get here if an exception has been thrown | |||
| return false; | |||
| @@ -107,12 +107,12 @@ public class WhichResource extends Task { | |||
| if (setcount == 0) { | |||
| throw new BuildException( | |||
| "One of classname or resource must be specified"); | |||
| throw new BuildException("One of classname or resource must" | |||
| + " be specified"); | |||
| } | |||
| if (setcount > 1) { | |||
| throw new BuildException( | |||
| "Only one of classname or resource can be specified"); | |||
| throw new BuildException("Only one of classname or resource can" | |||
| + " be specified"); | |||
| } | |||
| if (property == null) { | |||
| throw new BuildException("No property defined"); | |||
| @@ -128,39 +128,40 @@ public class WhichResource extends Task { | |||
| if (classpath != null) { | |||
| classpath = classpath.concatSystemClasspath("ignore"); | |||
| getProject().log("using user supplied classpath: " + classpath, | |||
| Project.MSG_DEBUG); | |||
| Project.MSG_DEBUG); | |||
| } else { | |||
| classpath = new Path(getProject()); | |||
| classpath = classpath.concatSystemClasspath("only"); | |||
| getProject().log("using system classpath: " + classpath, Project.MSG_DEBUG); | |||
| getProject().log("using system classpath: " + classpath, | |||
| Project.MSG_DEBUG); | |||
| } | |||
| AntClassLoader loader = null; | |||
| try { | |||
| loader = AntClassLoader.newAntClassLoader(getProject().getCoreLoader(), | |||
| getProject(), | |||
| classpath, false); | |||
| String loc = null; | |||
| if (classname != null) { | |||
| //convert a class name into a resource | |||
| resource = classname.replace('.', '/') + ".class"; | |||
| } | |||
| loader = AntClassLoader.newAntClassLoader(getProject().getCoreLoader(), | |||
| getProject(), | |||
| classpath, false); | |||
| String loc = null; | |||
| if (classname != null) { | |||
| //convert a class name into a resource | |||
| resource = classname.replace('.', '/') + ".class"; | |||
| } | |||
| if (resource == null) { | |||
| throw new BuildException("One of class or resource is required"); | |||
| } | |||
| if (resource == null) { | |||
| throw new BuildException("One of class or resource is required"); | |||
| } | |||
| if (resource.startsWith("/")) { | |||
| resource = resource.substring(1); | |||
| } | |||
| if (resource.startsWith("/")) { | |||
| resource = resource.substring(1); | |||
| } | |||
| log("Searching for " + resource, Project.MSG_VERBOSE); | |||
| URL url; | |||
| url = loader.getResource(resource); | |||
| if (url != null) { | |||
| //set the property | |||
| loc = url.toExternalForm(); | |||
| getProject().setNewProperty(property, loc); | |||
| } | |||
| log("Searching for " + resource, Project.MSG_VERBOSE); | |||
| URL url; | |||
| url = loader.getResource(resource); | |||
| if (url != null) { | |||
| //set the property | |||
| loc = url.toExternalForm(); | |||
| getProject().setNewProperty(property, loc); | |||
| } | |||
| } finally { | |||
| if (loader != null) { | |||
| loader.cleanup(); | |||
| @@ -110,13 +110,13 @@ public class HasMethod extends ProjectComponent implements Condition { | |||
| loader = getProject().createClassLoader(classpath); | |||
| loader.setParentFirst(false); | |||
| loader.addJavaLibraries(); | |||
| try { | |||
| return loader.findClass(classname); | |||
| } catch (SecurityException se) { | |||
| // class found but restricted name; this is | |||
| // actually the case we're looking for in JDK 1.3+, | |||
| // so catch the exception and return | |||
| return null; | |||
| try { | |||
| return loader.findClass(classname); | |||
| } catch (SecurityException se) { | |||
| // class found but restricted name; this is | |||
| // actually the case we're looking for in JDK 1.3+, | |||
| // so catch the exception and return | |||
| return null; | |||
| } | |||
| } else if (loader != null) { | |||
| // How do we ever get here? | |||
| @@ -132,10 +132,12 @@ public class HasMethod extends ProjectComponent implements Condition { | |||
| } | |||
| } | |||
| } catch (ClassNotFoundException e) { | |||
| throw new BuildException("class \"" + classname + "\" was not found"); | |||
| throw new BuildException("class \"" + classname | |||
| + "\" was not found"); | |||
| } catch (NoClassDefFoundError e) { | |||
| throw new BuildException("Could not load dependent class \"" + e.getMessage() | |||
| + "\" for class \"" + classname + "\""); | |||
| throw new BuildException("Could not load dependent class \"" | |||
| + e.getMessage() | |||
| + "\" for class \"" + classname + "\""); | |||
| } | |||
| } | |||
| @@ -147,14 +149,14 @@ public class HasMethod extends ProjectComponent implements Condition { | |||
| } | |||
| ClassLoader preLoadClass = loader; | |||
| try { | |||
| Class clazz = loadClass(classname); | |||
| if (method != null) { | |||
| return isMethodFound(clazz); | |||
| } | |||
| if (field != null) { | |||
| return isFieldFound(clazz); | |||
| } | |||
| throw new BuildException("Neither method nor field defined"); | |||
| Class clazz = loadClass(classname); | |||
| if (method != null) { | |||
| return isMethodFound(clazz); | |||
| } | |||
| if (field != null) { | |||
| return isFieldFound(clazz); | |||
| } | |||
| throw new BuildException("Neither method nor field defined"); | |||
| } finally { | |||
| if (preLoadClass != loader && loader != null) { | |||
| loader.cleanup(); | |||
| @@ -684,41 +684,43 @@ public class JonasDeploymentTool extends GenericDeploymentTool { | |||
| try { | |||
| cl = classpath.getProject().createClassLoader(classpath); | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.GENIC_CLASS); | |||
| log("Found GenIC class '" + JonasDeploymentTool.GENIC_CLASS | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.GENIC_CLASS; | |||
| } catch (ClassNotFoundException cnf1) { | |||
| log("GenIC class '" + JonasDeploymentTool.GENIC_CLASS | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.GENIC_CLASS); | |||
| log("Found GenIC class '" + JonasDeploymentTool.GENIC_CLASS | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.GENIC_CLASS; | |||
| } catch (ClassNotFoundException cnf1) { | |||
| log("GenIC class '" + JonasDeploymentTool.GENIC_CLASS | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_1); | |||
| log("Found GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_1 | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.OLD_GENIC_CLASS_1; | |||
| } catch (ClassNotFoundException cnf2) { | |||
| log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_1 | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_1); | |||
| log("Found GenIC class '" | |||
| + JonasDeploymentTool.OLD_GENIC_CLASS_1 | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.OLD_GENIC_CLASS_1; | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_2); | |||
| log("Found GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_2 | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.OLD_GENIC_CLASS_2; | |||
| } catch (ClassNotFoundException cnf3) { | |||
| log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_2 | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| } catch (ClassNotFoundException cnf2) { | |||
| log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_1 | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| try { | |||
| cl.loadClass(JonasDeploymentTool.OLD_GENIC_CLASS_2); | |||
| log("Found GenIC class '" | |||
| + JonasDeploymentTool.OLD_GENIC_CLASS_2 | |||
| + "' in classpath.", Project.MSG_VERBOSE); | |||
| return JonasDeploymentTool.OLD_GENIC_CLASS_2; | |||
| } catch (ClassNotFoundException cnf3) { | |||
| log("GenIC class '" + JonasDeploymentTool.OLD_GENIC_CLASS_2 | |||
| + "' not found in classpath.", | |||
| Project.MSG_VERBOSE); | |||
| } | |||
| } finally { | |||
| if (cl != null) { | |||
| cl.cleanup(); | |||
| @@ -79,19 +79,19 @@ public class JavaCC extends Task { | |||
| protected static final String[] ARCHIVE_LOCATIONS = | |||
| new String[] { | |||
| "JavaCC.zip", | |||
| "bin/lib/JavaCC.zip", | |||
| "bin/lib/javacc.jar", | |||
| "javacc.jar", // used by jpackage for JavaCC 3.x | |||
| }; | |||
| "JavaCC.zip", | |||
| "bin/lib/JavaCC.zip", | |||
| "bin/lib/javacc.jar", | |||
| "javacc.jar", // used by jpackage for JavaCC 3.x | |||
| }; | |||
| protected static final int[] ARCHIVE_LOCATIONS_VS_MAJOR_VERSION = | |||
| new int[] { | |||
| 1, | |||
| 2, | |||
| 3, | |||
| 3, | |||
| }; | |||
| 1, | |||
| 2, | |||
| 3, | |||
| 3, | |||
| }; | |||
| protected static final String COM_PACKAGE = "COM.sun.labs."; | |||
| protected static final String COM_JAVACC_CLASS = "javacc.Main"; | |||
| @@ -345,8 +345,10 @@ public class JavaCC extends Task { | |||
| // determine if the generated java file is up-to-date | |||
| final File javaFile = getOutputJavaFile(outputDirectory, targetFile); | |||
| if (javaFile.exists() && targetFile.lastModified() < javaFile.lastModified()) { | |||
| log("Target is already built - skipping (" + targetFile + ")", Project.MSG_VERBOSE); | |||
| if (javaFile.exists() | |||
| && targetFile.lastModified() < javaFile.lastModified()) { | |||
| log("Target is already built - skipping (" + targetFile + ")", | |||
| Project.MSG_VERBOSE); | |||
| return; | |||
| } | |||
| cmdl.createArgument().setValue(targetFile.getAbsolutePath()); | |||
| @@ -413,78 +415,77 @@ public class JavaCC extends Task { | |||
| AntClassLoader l = null; | |||
| try { | |||
| l = | |||
| AntClassLoader.newAntClassLoader(null, null, | |||
| path | |||
| .concatSystemClasspath("ignore"), | |||
| true); | |||
| String javaccClass = COM_PACKAGE + COM_JAVACC_CLASS; | |||
| InputStream is = l.getResourceAsStream(javaccClass.replace('.', '/') | |||
| + ".class"); | |||
| if (is != null) { | |||
| packagePrefix = COM_PACKAGE; | |||
| switch (type) { | |||
| case TASKDEF_TYPE_JAVACC: | |||
| mainClass = COM_JAVACC_CLASS; | |||
| l = AntClassLoader.newAntClassLoader(null, null, | |||
| path | |||
| .concatSystemClasspath("ignore"), | |||
| true); | |||
| String javaccClass = COM_PACKAGE + COM_JAVACC_CLASS; | |||
| InputStream is = l.getResourceAsStream(javaccClass.replace('.', '/') | |||
| + ".class"); | |||
| if (is != null) { | |||
| packagePrefix = COM_PACKAGE; | |||
| switch (type) { | |||
| case TASKDEF_TYPE_JAVACC: | |||
| mainClass = COM_JAVACC_CLASS; | |||
| break; | |||
| break; | |||
| case TASKDEF_TYPE_JJTREE: | |||
| mainClass = COM_JJTREE_CLASS; | |||
| case TASKDEF_TYPE_JJTREE: | |||
| mainClass = COM_JJTREE_CLASS; | |||
| break; | |||
| break; | |||
| case TASKDEF_TYPE_JJDOC: | |||
| mainClass = COM_JJDOC_CLASS; | |||
| case TASKDEF_TYPE_JJDOC: | |||
| mainClass = COM_JJDOC_CLASS; | |||
| break; | |||
| default: | |||
| // Fall Through | |||
| } | |||
| } else { | |||
| javaccClass = ORG_PACKAGE_3_1 + ORG_JAVACC_CLASS; | |||
| is = l.getResourceAsStream(javaccClass.replace('.', '/') | |||
| + ".class"); | |||
| if (is != null) { | |||
| packagePrefix = ORG_PACKAGE_3_1; | |||
| break; | |||
| default: | |||
| // Fall Through | |||
| } | |||
| } else { | |||
| javaccClass = ORG_PACKAGE_3_0 + ORG_JAVACC_CLASS; | |||
| javaccClass = ORG_PACKAGE_3_1 + ORG_JAVACC_CLASS; | |||
| is = l.getResourceAsStream(javaccClass.replace('.', '/') | |||
| + ".class"); | |||
| if (is != null) { | |||
| packagePrefix = ORG_PACKAGE_3_0; | |||
| packagePrefix = ORG_PACKAGE_3_1; | |||
| } else { | |||
| javaccClass = ORG_PACKAGE_3_0 + ORG_JAVACC_CLASS; | |||
| is = l.getResourceAsStream(javaccClass.replace('.', '/') | |||
| + ".class"); | |||
| if (is != null) { | |||
| packagePrefix = ORG_PACKAGE_3_0; | |||
| } | |||
| } | |||
| } | |||
| if (is != null) { | |||
| switch (type) { | |||
| case TASKDEF_TYPE_JAVACC: | |||
| mainClass = ORG_JAVACC_CLASS; | |||
| if (is != null) { | |||
| switch (type) { | |||
| case TASKDEF_TYPE_JAVACC: | |||
| mainClass = ORG_JAVACC_CLASS; | |||
| break; | |||
| break; | |||
| case TASKDEF_TYPE_JJTREE: | |||
| mainClass = ORG_JJTREE_CLASS; | |||
| case TASKDEF_TYPE_JJTREE: | |||
| mainClass = ORG_JJTREE_CLASS; | |||
| break; | |||
| break; | |||
| case TASKDEF_TYPE_JJDOC: | |||
| mainClass = ORG_JJDOC_CLASS; | |||
| case TASKDEF_TYPE_JJDOC: | |||
| mainClass = ORG_JJDOC_CLASS; | |||
| break; | |||
| default: | |||
| // Fall Through | |||
| break; | |||
| default: | |||
| // Fall Through | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if (packagePrefix == null) { | |||
| throw new BuildException("failed to load JavaCC"); | |||
| } | |||
| if (mainClass == null) { | |||
| throw new BuildException("unknown task type " + type); | |||
| } | |||
| return packagePrefix + mainClass; | |||
| if (packagePrefix == null) { | |||
| throw new BuildException("failed to load JavaCC"); | |||
| } | |||
| if (mainClass == null) { | |||
| throw new BuildException("unknown task type " + type); | |||
| } | |||
| return packagePrefix + mainClass; | |||
| } finally { | |||
| if (l != null) { | |||
| l.cleanup(); | |||
| @@ -409,9 +409,9 @@ public class JspC extends MatchingTask { | |||
| } | |||
| /** | |||
| * get the list of files to compile | |||
| * @return the list of files. | |||
| */ | |||
| * get the list of files to compile | |||
| * @return the list of files. | |||
| */ | |||
| public Vector getCompileList() { | |||
| return compileList; | |||
| } | |||
| @@ -432,80 +432,87 @@ public class JspC extends MatchingTask { | |||
| if (!destDir.isDirectory()) { | |||
| throw new BuildException("destination directory \"" + destDir | |||
| + "\" does not exist or is not a directory", getLocation()); | |||
| + "\" does not exist or is not a directory", | |||
| getLocation()); | |||
| } | |||
| File dest = getActualDestDir(); | |||
| AntClassLoader al = null; | |||
| try { | |||
| //bind to a compiler | |||
| JspCompilerAdapter compiler = | |||
| JspCompilerAdapterFactory.getCompiler(compilerName, this, | |||
| al = getProject().createClassLoader(compilerClasspath)); | |||
| //if we are a webapp, hand off to the compiler, which had better handle it | |||
| if (webApp != null) { | |||
| doCompilation(compiler); | |||
| return; | |||
| } | |||
| //bind to a compiler | |||
| JspCompilerAdapter compiler = | |||
| JspCompilerAdapterFactory | |||
| .getCompiler(compilerName, this, | |||
| al = getProject().createClassLoader(compilerClasspath)); | |||
| //if we are a webapp, hand off to the compiler, which had | |||
| //better handle it | |||
| if (webApp != null) { | |||
| doCompilation(compiler); | |||
| return; | |||
| } | |||
| // make sure that we've got a srcdir | |||
| if (src == null) { | |||
| throw new BuildException("srcdir attribute must be set!", | |||
| getLocation()); | |||
| } | |||
| String [] list = src.list(); | |||
| if (list.length == 0) { | |||
| throw new BuildException("srcdir attribute must be set!", | |||
| getLocation()); | |||
| } | |||
| // make sure that we've got a srcdir | |||
| if (src == null) { | |||
| throw new BuildException("srcdir attribute must be set!", | |||
| getLocation()); | |||
| } | |||
| String [] list = src.list(); | |||
| if (list.length == 0) { | |||
| throw new BuildException("srcdir attribute must be set!", | |||
| getLocation()); | |||
| } | |||
| // if the compiler does its own dependency stuff, we just call it right now | |||
| if (compiler.implementsOwnDependencyChecking()) { | |||
| doCompilation(compiler); | |||
| return; | |||
| } | |||
| // if the compiler does its own dependency stuff, we just | |||
| // call it right now | |||
| if (compiler.implementsOwnDependencyChecking()) { | |||
| doCompilation(compiler); | |||
| return; | |||
| } | |||
| //the remainder of this method is only for compilers that need their dependency work done | |||
| JspMangler mangler = compiler.createMangler(); | |||
| // scan source directories and dest directory to build up both copy | |||
| // lists and compile lists | |||
| resetFileLists(); | |||
| int filecount = 0; | |||
| for (int i = 0; i < list.length; i++) { | |||
| File srcDir = getProject().resolveFile(list[i]); | |||
| if (!srcDir.exists()) { | |||
| throw new BuildException("srcdir \"" + srcDir.getPath() | |||
| + "\" does not exist!", getLocation()); | |||
| //the remainder of this method is only for compilers that | |||
| //need their dependency work done | |||
| JspMangler mangler = compiler.createMangler(); | |||
| // scan source directories and dest directory to build up both copy | |||
| // lists and compile lists | |||
| resetFileLists(); | |||
| int filecount = 0; | |||
| for (int i = 0; i < list.length; i++) { | |||
| File srcDir = getProject().resolveFile(list[i]); | |||
| if (!srcDir.exists()) { | |||
| throw new BuildException("srcdir \"" + srcDir.getPath() | |||
| + "\" does not exist!", | |||
| getLocation()); | |||
| } | |||
| DirectoryScanner ds = this.getDirectoryScanner(srcDir); | |||
| String[] files = ds.getIncludedFiles(); | |||
| filecount = files.length; | |||
| scanDir(srcDir, dest, mangler, files); | |||
| } | |||
| DirectoryScanner ds = this.getDirectoryScanner(srcDir); | |||
| String[] files = ds.getIncludedFiles(); | |||
| filecount = files.length; | |||
| scanDir(srcDir, dest, mangler, files); | |||
| } | |||
| // compile the source files | |||
| // compile the source files | |||
| log("compiling " + compileList.size() + " files", Project.MSG_VERBOSE); | |||
| log("compiling " + compileList.size() + " files", | |||
| Project.MSG_VERBOSE); | |||
| if (compileList.size() > 0) { | |||
| if (compileList.size() > 0) { | |||
| log("Compiling " + compileList.size() + " source file" | |||
| + (compileList.size() == 1 ? "" : "s") | |||
| + " to " | |||
| + dest); | |||
| doCompilation(compiler); | |||
| log("Compiling " + compileList.size() + " source file" | |||
| + (compileList.size() == 1 ? "" : "s") | |||
| + " to " | |||
| + dest); | |||
| doCompilation(compiler); | |||
| } else { | |||
| if (filecount == 0) { | |||
| log("there were no files to compile", Project.MSG_INFO); | |||
| } else { | |||
| log("all files are up to date", Project.MSG_VERBOSE); | |||
| if (filecount == 0) { | |||
| log("there were no files to compile", Project.MSG_INFO); | |||
| } else { | |||
| log("all files are up to date", Project.MSG_VERBOSE); | |||
| } | |||
| } | |||
| } | |||
| } finally { | |||
| if (al != null) { | |||
| al.cleanup(); | |||
| @@ -533,7 +540,7 @@ public class JspC extends MatchingTask { | |||
| * do the compile | |||
| */ | |||
| private void doCompilation(JspCompilerAdapter compiler) | |||
| throws BuildException { | |||
| throws BuildException { | |||
| // now we need to populate the compiler adapter | |||
| compiler.setJspc(this); | |||
| @@ -562,8 +569,8 @@ public class JspC extends MatchingTask { | |||
| * @param mangler the jsp filename mangler. | |||
| * @param files the file names to mangle. | |||
| */ | |||
| protected void scanDir( | |||
| File srcDir, File dest, JspMangler mangler, String[] files) { | |||
| protected void scanDir(File srcDir, File dest, JspMangler mangler, | |||
| String[] files) { | |||
| long now = (new Date()).getTime(); | |||
| @@ -577,13 +584,13 @@ public class JspC extends MatchingTask { | |||
| if (srcFile.lastModified() > now) { | |||
| log("Warning: file modified in the future: " + filename, | |||
| Project.MSG_WARN); | |||
| Project.MSG_WARN); | |||
| } | |||
| boolean shouldCompile = false; | |||
| shouldCompile = isCompileNeeded(srcFile, javaFile); | |||
| if (shouldCompile) { | |||
| compileList.addElement(srcFile.getAbsolutePath()); | |||
| javaFiles.addElement(javaFile); | |||
| compileList.addElement(srcFile.getAbsolutePath()); | |||
| javaFiles.addElement(javaFile); | |||
| } | |||
| } | |||
| } | |||
| @@ -611,21 +618,21 @@ public class JspC extends MatchingTask { | |||
| log("Compiling " + srcFile.getPath() | |||
| + " because java file " + javaFile.getPath() | |||
| + " does not exist", Project.MSG_VERBOSE); | |||
| } else { | |||
| if (srcFile.lastModified() > javaFile.lastModified()) { | |||
| shouldCompile = true; | |||
| log("Compiling " + srcFile.getPath() | |||
| + " because it is out of date with respect to " | |||
| + javaFile.getPath(), | |||
| Project.MSG_VERBOSE); | |||
| } else { | |||
| if (srcFile.lastModified() > javaFile.lastModified()) { | |||
| if (javaFile.length() == 0) { | |||
| shouldCompile = true; | |||
| log("Compiling " + srcFile.getPath() | |||
| + " because it is out of date with respect to " | |||
| + javaFile.getPath(), | |||
| Project.MSG_VERBOSE); | |||
| } else { | |||
| if (javaFile.length() == 0) { | |||
| shouldCompile = true; | |||
| log("Compiling " + srcFile.getPath() | |||
| + " because java file " + javaFile.getPath() | |||
| + " is empty", Project.MSG_VERBOSE); | |||
| } | |||
| + " because java file " + javaFile.getPath() | |||
| + " is empty", Project.MSG_VERBOSE); | |||
| } | |||
| } | |||
| } | |||
| return shouldCompile; | |||
| } | |||
| @@ -640,12 +647,13 @@ public class JspC extends MatchingTask { | |||
| * @return the filename. | |||
| * @todo support packages and subdirs | |||
| */ | |||
| protected File mapToJavaFile(JspMangler mangler, File srcFile, File srcDir, File dest) { | |||
| protected File mapToJavaFile(JspMangler mangler, File srcFile, File srcDir, | |||
| File dest) { | |||
| if (!srcFile.getName().endsWith(".jsp")) { | |||
| return null; | |||
| } | |||
| String javaFileName = mangler.mapJspToJavaName(srcFile); | |||
| // String srcFileDir=srcFile.getParent(); | |||
| // String srcFileDir=srcFile.getParent(); | |||
| return new File(dest, javaFileName); | |||
| } | |||
| @@ -692,9 +700,9 @@ public class JspC extends MatchingTask { | |||
| public void setBaseDir(File directory) { | |||
| this.directory = directory; | |||
| } | |||
| //end inner class | |||
| //end inner class | |||
| } | |||
| //end class | |||
| //end class | |||
| } | |||
| @@ -1110,29 +1110,30 @@ public class JUnitTask extends Task { | |||
| } | |||
| AntClassLoader loader = null; | |||
| try { | |||
| loader = AntClassLoader.newAntClassLoader(null, | |||
| getProject(), cmd.createClasspath(getProject()), | |||
| true); | |||
| String projectResourceName = LoaderUtils.classNameToResource( | |||
| Project.class.getName()); | |||
| URL previous = null; | |||
| try { | |||
| for (Enumeration e = loader.getResources(projectResourceName); | |||
| e.hasMoreElements();) { | |||
| URL current = (URL) e.nextElement(); | |||
| if (previous != null && !current.equals(previous)) { | |||
| log("WARNING: multiple versions of ant detected " | |||
| + "in path for junit " | |||
| + LINE_SEP + " " + previous | |||
| + LINE_SEP + " and " + current, | |||
| Project.MSG_WARN); | |||
| return; | |||
| loader = | |||
| AntClassLoader.newAntClassLoader(null, getProject(), | |||
| cmd.createClasspath(getProject()), | |||
| true); | |||
| String projectResourceName = | |||
| LoaderUtils.classNameToResource(Project.class.getName()); | |||
| URL previous = null; | |||
| try { | |||
| for (Enumeration e = loader.getResources(projectResourceName); | |||
| e.hasMoreElements();) { | |||
| URL current = (URL) e.nextElement(); | |||
| if (previous != null && !current.equals(previous)) { | |||
| log("WARNING: multiple versions of ant detected " | |||
| + "in path for junit " | |||
| + LINE_SEP + " " + previous | |||
| + LINE_SEP + " and " + current, | |||
| Project.MSG_WARN); | |||
| return; | |||
| } | |||
| previous = current; | |||
| } | |||
| previous = current; | |||
| } catch (Exception ex) { | |||
| // Ignore exception | |||
| } | |||
| } catch (Exception ex) { | |||
| // Ignore exception | |||
| } | |||
| } finally { | |||
| if (loader != null) { | |||
| loader.cleanup(); | |||