From 753a6c60f47f3ac4f270005b65e9d6481de8eb68 Mon Sep 17 00:00:00 2001 From: Ashlee Young Date: Fri, 23 Oct 2015 10:00:02 -0700 Subject: Adding maven and ant source trees Change-Id: I0a39b9add833a31b9c3f98d193983ae2f3a5a445 Signed-off-by: Ashlee Young --- framework/src/ant/apache-ant-1.9.6/CONTRIBUTORS | 417 ++ framework/src/ant/apache-ant-1.9.6/INSTALL | 2 + framework/src/ant/apache-ant-1.9.6/KEYS | 1497 +++++ framework/src/ant/apache-ant-1.9.6/LICENSE | 272 + framework/src/ant/apache-ant-1.9.6/NOTICE | 9 + framework/src/ant/apache-ant-1.9.6/README | 97 + framework/src/ant/apache-ant-1.9.6/WHATSNEW | 6263 ++++++++++++++++++++ framework/src/ant/apache-ant-1.9.6/bootstrap.bat | 138 + framework/src/ant/apache-ant-1.9.6/bootstrap.sh | 167 + framework/src/ant/apache-ant-1.9.6/build.bat | 40 + framework/src/ant/apache-ant-1.9.6/build.sh | 57 + framework/src/ant/apache-ant-1.9.6/build.xml | 2037 +++++++ .../src/ant/apache-ant-1.9.6/contributors.xml | 1671 ++++++ framework/src/ant/apache-ant-1.9.6/fetch.xml | 335 ++ framework/src/ant/apache-ant-1.9.6/get-m2.xml | 121 + framework/src/ant/apache-ant-1.9.6/lib/README | 3 + .../ant/apache-ant-1.9.6/lib/libraries.properties | 65 + .../lib/optional/hamcrest-core-1.3.jar | Bin 0 -> 45024 bytes .../apache-ant-1.9.6/lib/optional/junit-3.8.2.jar | Bin 0 -> 120640 bytes .../apache-ant-1.9.6/lib/optional/junit-4.11.jar | Bin 0 -> 245039 bytes .../manual/Integration/anttool1.gif | Bin 0 -> 4211 bytes .../manual/Integration/jext-plugin.html | 56 + .../apache-ant-1.9.6/manual/Integration/remacc.gif | Bin 0 -> 10931 bytes .../manual/Integration/toolmenu.gif | Bin 0 -> 17569 bytes framework/src/ant/apache-ant-1.9.6/manual/LICENSE | 203 + .../manual/Tasks/BorlandEJBTasks.html | 143 + .../manual/Tasks/BorlandGenerateClient.html | 90 + .../src/ant/apache-ant-1.9.6/manual/Tasks/ant.html | 413 ++ .../ant/apache-ant-1.9.6/manual/Tasks/antcall.html | 201 + .../ant/apache-ant-1.9.6/manual/Tasks/antlr.html | 200 + .../manual/Tasks/antstructure.html | 100 + .../apache-ant-1.9.6/manual/Tasks/antversion.html | 95 + .../ant/apache-ant-1.9.6/manual/Tasks/apply.html | 499 ++ .../src/ant/apache-ant-1.9.6/manual/Tasks/apt.html | 179 + .../ant/apache-ant-1.9.6/manual/Tasks/attrib.html | 167 + .../ant/apache-ant-1.9.6/manual/Tasks/augment.html | 83 + .../apache-ant-1.9.6/manual/Tasks/available.html | 160 + .../apache-ant-1.9.6/manual/Tasks/basename.html | 92 + .../apache-ant-1.9.6/manual/Tasks/bindtargets.html | 92 + .../apache-ant-1.9.6/manual/Tasks/buildnumber.html | 74 + .../src/ant/apache-ant-1.9.6/manual/Tasks/cab.html | 167 + .../src/ant/apache-ant-1.9.6/manual/Tasks/ccm.html | 272 + .../apache-ant-1.9.6/manual/Tasks/changelog.html | 294 + .../apache-ant-1.9.6/manual/Tasks/checksum.html | 269 + .../ant/apache-ant-1.9.6/manual/Tasks/chgrp.html | 185 + .../ant/apache-ant-1.9.6/manual/Tasks/chmod.html | 225 + .../ant/apache-ant-1.9.6/manual/Tasks/chown.html | 183 + .../apache-ant-1.9.6/manual/Tasks/clearcase.html | 958 +++ .../ant/apache-ant-1.9.6/manual/Tasks/common.html | 59 + .../manual/Tasks/componentdef.html | 62 + .../ant/apache-ant-1.9.6/manual/Tasks/concat.html | 337 ++ .../apache-ant-1.9.6/manual/Tasks/condition.html | 110 + .../apache-ant-1.9.6/manual/Tasks/conditions.html | 1087 ++++ .../ant/apache-ant-1.9.6/manual/Tasks/copy.html | 376 ++ .../ant/apache-ant-1.9.6/manual/Tasks/copydir.html | 136 + .../apache-ant-1.9.6/manual/Tasks/copyfile.html | 73 + .../src/ant/apache-ant-1.9.6/manual/Tasks/cvs.html | 230 + .../ant/apache-ant-1.9.6/manual/Tasks/cvspass.html | 70 + .../apache-ant-1.9.6/manual/Tasks/cvstagdiff.html | 241 + .../apache-ant-1.9.6/manual/Tasks/cvsversion.html | 108 + .../manual/Tasks/defaultexcludes.html | 107 + .../ant/apache-ant-1.9.6/manual/Tasks/delete.html | 228 + .../ant/apache-ant-1.9.6/manual/Tasks/deltree.html | 56 + .../ant/apache-ant-1.9.6/manual/Tasks/depend.html | 216 + .../apache-ant-1.9.6/manual/Tasks/dependset.html | 171 + .../apache-ant-1.9.6/manual/Tasks/diagnostics.html | 49 + .../ant/apache-ant-1.9.6/manual/Tasks/dirname.html | 74 + .../src/ant/apache-ant-1.9.6/manual/Tasks/ear.html | 301 + .../ant/apache-ant-1.9.6/manual/Tasks/echo.html | 193 + .../manual/Tasks/echoproperties.html | 146 + .../ant/apache-ant-1.9.6/manual/Tasks/echoxml.html | 74 + .../src/ant/apache-ant-1.9.6/manual/Tasks/ejb.html | 1777 ++++++ .../ant/apache-ant-1.9.6/manual/Tasks/exec.html | 460 ++ .../ant/apache-ant-1.9.6/manual/Tasks/fail.html | 143 + .../ant/apache-ant-1.9.6/manual/Tasks/filter.html | 79 + .../ant/apache-ant-1.9.6/manual/Tasks/fixcrlf.html | 327 + .../src/ant/apache-ant-1.9.6/manual/Tasks/ftp.html | 724 +++ .../ant/apache-ant-1.9.6/manual/Tasks/genkey.html | 125 + .../src/ant/apache-ant-1.9.6/manual/Tasks/get.html | 239 + .../ant/apache-ant-1.9.6/manual/Tasks/gunzip.html | 29 + .../ant/apache-ant-1.9.6/manual/Tasks/gzip.html | 29 + .../apache-ant-1.9.6/manual/Tasks/hostinfo.html | 98 + .../manual/Tasks/image-classdiagram.gif | Bin 0 -> 132412 bytes .../ant/apache-ant-1.9.6/manual/Tasks/image.html | 261 + .../ant/apache-ant-1.9.6/manual/Tasks/import.html | 349 ++ .../ant/apache-ant-1.9.6/manual/Tasks/include.html | 344 ++ .../ant/apache-ant-1.9.6/manual/Tasks/input.html | 198 + .../src/ant/apache-ant-1.9.6/manual/Tasks/jar.html | 588 ++ .../manual/Tasks/jarlib-available.html | 134 + .../manual/Tasks/jarlib-display.html | 80 + .../manual/Tasks/jarlib-manifest.html | 123 + .../manual/Tasks/jarlib-resolve.html | 211 + .../ant/apache-ant-1.9.6/manual/Tasks/java.html | 405 ++ .../ant/apache-ant-1.9.6/manual/Tasks/javac.html | 860 +++ .../ant/apache-ant-1.9.6/manual/Tasks/javacc.html | 210 + .../ant/apache-ant-1.9.6/manual/Tasks/javadoc.html | 915 +++ .../ant/apache-ant-1.9.6/manual/Tasks/javah.html | 243 + .../ant/apache-ant-1.9.6/manual/Tasks/jdepend.html | 177 + .../ant/apache-ant-1.9.6/manual/Tasks/jjdoc.html | 123 + .../ant/apache-ant-1.9.6/manual/Tasks/jjtree.html | 563 ++ .../ant/apache-ant-1.9.6/manual/Tasks/jlink.html | 177 + .../ant/apache-ant-1.9.6/manual/Tasks/jspc.html | 308 + .../ant/apache-ant-1.9.6/manual/Tasks/junit.html | 802 +++ .../apache-ant-1.9.6/manual/Tasks/junitreport.html | 214 + .../ant/apache-ant-1.9.6/manual/Tasks/length.html | 127 + .../apache-ant-1.9.6/manual/Tasks/loadfile.html | 133 + .../manual/Tasks/loadproperties.html | 140 + .../manual/Tasks/loadresource.html | 93 + .../ant/apache-ant-1.9.6/manual/Tasks/local.html | 186 + .../apache-ant-1.9.6/manual/Tasks/macrodef.html | 385 ++ .../ant/apache-ant-1.9.6/manual/Tasks/mail.html | 362 ++ .../ant/apache-ant-1.9.6/manual/Tasks/makeurl.html | 234 + .../apache-ant-1.9.6/manual/Tasks/manifest.html | 197 + .../manual/Tasks/manifestclasspath.html | 117 + .../apache-ant-1.9.6/manual/Tasks/mimemail.html | 115 + .../ant/apache-ant-1.9.6/manual/Tasks/mkdir.html | 52 + .../ant/apache-ant-1.9.6/manual/Tasks/move.html | 258 + .../manual/Tasks/native2ascii.html | 246 + .../apache-ant-1.9.6/manual/Tasks/netrexxc.html | 338 ++ .../ant/apache-ant-1.9.6/manual/Tasks/nice.html | 70 + .../ant/apache-ant-1.9.6/manual/Tasks/pack.html | 76 + .../apache-ant-1.9.6/manual/Tasks/parallel.html | 235 + .../ant/apache-ant-1.9.6/manual/Tasks/patch.html | 111 + .../apache-ant-1.9.6/manual/Tasks/pathconvert.html | 224 + .../apache-ant-1.9.6/manual/Tasks/presetdef.html | 184 + .../manual/Tasks/projecthelper.html | 59 + .../apache-ant-1.9.6/manual/Tasks/property.html | 345 ++ .../manual/Tasks/propertyfile.html | 249 + .../manual/Tasks/propertyhelper.html | 108 + .../apache-ant-1.9.6/manual/Tasks/pvcstask.html | 295 + .../apache-ant-1.9.6/manual/Tasks/recorder.html | 172 + .../ant/apache-ant-1.9.6/manual/Tasks/rename.html | 64 + .../manual/Tasks/renameextensions.html | 123 + .../ant/apache-ant-1.9.6/manual/Tasks/replace.html | 242 + .../manual/Tasks/replaceregexp.html | 205 + .../manual/Tasks/resourcecount.html | 107 + .../ant/apache-ant-1.9.6/manual/Tasks/retry.html | 61 + .../ant/apache-ant-1.9.6/manual/Tasks/rexec.html | 116 + .../ant/apache-ant-1.9.6/manual/Tasks/rmic.html | 353 ++ .../src/ant/apache-ant-1.9.6/manual/Tasks/rpm.html | 123 + .../manual/Tasks/schemavalidate.html | 283 + .../src/ant/apache-ant-1.9.6/manual/Tasks/scp.html | 293 + .../ant/apache-ant-1.9.6/manual/Tasks/script.html | 393 ++ .../apache-ant-1.9.6/manual/Tasks/scriptdef.html | 332 ++ .../apache-ant-1.9.6/manual/Tasks/sequential.html | 55 + .../manual/Tasks/serverdeploy.html | 335 ++ .../apache-ant-1.9.6/manual/Tasks/setproxy.html | 220 + .../ant/apache-ant-1.9.6/manual/Tasks/signjar.html | 299 + .../ant/apache-ant-1.9.6/manual/Tasks/sleep.html | 85 + .../src/ant/apache-ant-1.9.6/manual/Tasks/sos.html | 503 ++ .../ant/apache-ant-1.9.6/manual/Tasks/sound.html | 123 + .../ant/apache-ant-1.9.6/manual/Tasks/splash.html | 154 + .../src/ant/apache-ant-1.9.6/manual/Tasks/sql.html | 511 ++ .../ant/apache-ant-1.9.6/manual/Tasks/sshexec.html | 291 + .../apache-ant-1.9.6/manual/Tasks/sshsession.html | 288 + .../ant/apache-ant-1.9.6/manual/Tasks/style.html | 629 ++ .../ant/apache-ant-1.9.6/manual/Tasks/subant.html | 608 ++ .../ant/apache-ant-1.9.6/manual/Tasks/symlink.html | 146 + .../ant/apache-ant-1.9.6/manual/Tasks/sync.html | 166 + .../src/ant/apache-ant-1.9.6/manual/Tasks/tar.html | 281 + .../ant/apache-ant-1.9.6/manual/Tasks/taskdef.html | 44 + .../ant/apache-ant-1.9.6/manual/Tasks/telnet.html | 155 + .../apache-ant-1.9.6/manual/Tasks/tempfile.html | 229 + .../ant/apache-ant-1.9.6/manual/Tasks/touch.html | 157 + .../apache-ant-1.9.6/manual/Tasks/translate.html | 182 + .../apache-ant-1.9.6/manual/Tasks/truncate.html | 109 + .../ant/apache-ant-1.9.6/manual/Tasks/tstamp.html | 161 + .../ant/apache-ant-1.9.6/manual/Tasks/typedef.html | 269 + .../ant/apache-ant-1.9.6/manual/Tasks/unpack.html | 117 + .../ant/apache-ant-1.9.6/manual/Tasks/untar.html | 35 + .../ant/apache-ant-1.9.6/manual/Tasks/unzip.html | 244 + .../apache-ant-1.9.6/manual/Tasks/uptodate.html | 177 + .../apache-ant-1.9.6/manual/Tasks/verifyjar.html | 145 + .../src/ant/apache-ant-1.9.6/manual/Tasks/vss.html | 823 +++ .../ant/apache-ant-1.9.6/manual/Tasks/waitfor.html | 133 + .../src/ant/apache-ant-1.9.6/manual/Tasks/war.html | 364 ++ .../manual/Tasks/whichresource.html | 120 + .../ant/apache-ant-1.9.6/manual/Tasks/wljspc.html | 99 + .../apache-ant-1.9.6/manual/Tasks/xmlproperty.html | 289 + .../apache-ant-1.9.6/manual/Tasks/xmlvalidate.html | 263 + .../src/ant/apache-ant-1.9.6/manual/Tasks/zip.html | 551 ++ .../ant/apache-ant-1.9.6/manual/Types/antlib.html | 266 + .../apache-ant-1.9.6/manual/Types/assertions.html | 208 + .../manual/Types/classfileset.html | 119 + .../manual/Types/custom-programming.html | 415 ++ .../apache-ant-1.9.6/manual/Types/description.html | 46 + .../ant/apache-ant-1.9.6/manual/Types/dirset.html | 154 + .../apache-ant-1.9.6/manual/Types/extension.html | 114 + .../manual/Types/extensionset.html | 83 + .../apache-ant-1.9.6/manual/Types/filelist.html | 120 + .../ant/apache-ant-1.9.6/manual/Types/fileset.html | 186 + .../apache-ant-1.9.6/manual/Types/filterchain.html | 1739 ++++++ .../apache-ant-1.9.6/manual/Types/filterset.html | 200 + .../ant/apache-ant-1.9.6/manual/Types/mapper.html | 972 +++ .../manual/Types/multirootfileset.html | 173 + .../apache-ant-1.9.6/manual/Types/namespace.html | 224 + .../apache-ant-1.9.6/manual/Types/patternset.html | 192 + .../apache-ant-1.9.6/manual/Types/permissions.html | 164 + .../apache-ant-1.9.6/manual/Types/propertyset.html | 143 + .../apache-ant-1.9.6/manual/Types/redirector.html | 193 + .../ant/apache-ant-1.9.6/manual/Types/regexp.html | 116 + .../apache-ant-1.9.6/manual/Types/resources.html | 1380 +++++ .../manual/Types/selectors-program.html | 244 + .../apache-ant-1.9.6/manual/Types/selectors.html | 1566 +++++ .../apache-ant-1.9.6/manual/Types/tarfileset.html | 182 + .../apache-ant-1.9.6/manual/Types/xmlcatalog.html | 306 + .../apache-ant-1.9.6/manual/Types/zipfileset.html | 148 + .../ant/apache-ant-1.9.6/manual/antexternal.html | 160 + .../ant/apache-ant-1.9.6/manual/anttaskslist.html | 41 + .../apache-ant-1.9.6/manual/argumentprocessor.html | 76 + .../apache-ant-1.9.6/manual/base_task_classes.html | 114 + .../src/ant/apache-ant-1.9.6/manual/clonevm.html | 52 + .../apache-ant-1.9.6/manual/conceptstypeslist.html | 90 + .../src/ant/apache-ant-1.9.6/manual/cover.html | 53 + .../src/ant/apache-ant-1.9.6/manual/credits.html | 70 + .../src/ant/apache-ant-1.9.6/manual/develop.html | 544 ++ .../ant/apache-ant-1.9.6/manual/developlist.html | 53 + .../src/ant/apache-ant-1.9.6/manual/dirtasks.html | 314 + .../src/ant/apache-ant-1.9.6/manual/favicon.ico | Bin 0 -> 3638 bytes .../src/ant/apache-ant-1.9.6/manual/feedback.html | 72 + framework/src/ant/apache-ant-1.9.6/manual/ide.html | 105 + .../src/ant/apache-ant-1.9.6/manual/ifunless.html | 64 + .../manual/images/ant_logo_large.gif | Bin 0 -> 3804 bytes .../src/ant/apache-ant-1.9.6/manual/index.html | 34 + .../ant/apache-ant-1.9.6/manual/inputhandler.html | 116 + .../src/ant/apache-ant-1.9.6/manual/install.html | 1096 ++++ .../ant/apache-ant-1.9.6/manual/installlist.html | 44 + .../src/ant/apache-ant-1.9.6/manual/intro.html | 69 + .../ant/apache-ant-1.9.6/manual/javacprops.html | 53 + .../src/ant/apache-ant-1.9.6/manual/listeners.html | 623 ++ .../src/ant/apache-ant-1.9.6/manual/platform.html | 178 + .../ant/apache-ant-1.9.6/manual/projecthelper.html | 150 + .../ant/apache-ant-1.9.6/manual/properties.html | 399 ++ .../src/ant/apache-ant-1.9.6/manual/proxy.html | 292 + .../src/ant/apache-ant-1.9.6/manual/running.html | 622 ++ .../ant/apache-ant-1.9.6/manual/runninglist.html | 47 + .../apache-ant-1.9.6/manual/stylesheets/style.css | 72 + .../ant/apache-ant-1.9.6/manual/sysclasspath.html | 79 + .../src/ant/apache-ant-1.9.6/manual/targets.html | 300 + .../src/ant/apache-ant-1.9.6/manual/tasklist.html | 195 + .../ant/apache-ant-1.9.6/manual/tasksoverview.html | 1198 ++++ framework/src/ant/apache-ant-1.9.6/manual/toc.html | 51 + .../manual/tutorial-HelloWorldWithAnt.html | 520 ++ .../manual/tutorial-tasks-filesets-properties.html | 993 ++++ .../manual/tutorial-tasks-filesets-properties.zip | Bin 0 -> 15377 bytes .../manual/tutorial-writing-tasks-src.zip | Bin 0 -> 2474 bytes .../manual/tutorial-writing-tasks.html | 819 +++ .../src/ant/apache-ant-1.9.6/manual/tutorials.html | 45 + .../src/ant/apache-ant-1.9.6/manual/using.html | 579 ++ .../src/ant/apache-ant-1.9.6/manual/usinglist.html | 50 + framework/src/ant/apache-ant-1.9.6/patch.xml | 48 + .../apache-ant-1.9.6/src/antidote/WHAT-IS-THIS-P | 6 + .../src/ant/apache-ant-1.9.6/src/etc/ant-bin.wxs | 454 ++ .../src/ant/apache-ant-1.9.6/src/etc/ant-msi.wxs | 122 + .../ant/apache-ant-1.9.6/src/etc/ant-update.xsl | 117 + .../src/ant/apache-ant-1.9.6/src/etc/changelog.xsl | 148 + .../src/etc/checkstyle/RequiredHeader.txt | 17 + .../src/etc/checkstyle/checkstyle-config | 139 + .../checkstyle/checkstyle-frames-sortby-check.xsl | 367 ++ .../src/etc/checkstyle/checkstyle-frames.xsl | 299 + .../src/etc/checkstyle/checkstyle-text.xsl | 34 + .../src/etc/checkstyle/checkstyle-xdoc.xsl | 130 + .../ant/apache-ant-1.9.6/src/etc/common2master.xsl | 73 + .../apache-ant-1.9.6/src/etc/coverage-frames.xsl | 487 ++ .../apache-ant-1.9.6/src/etc/jdepend-frames.xsl | 485 ++ .../src/ant/apache-ant-1.9.6/src/etc/jdepend.xsl | 276 + .../src/etc/junit-frames-xalan1.xsl | 745 +++ .../ant/apache-ant-1.9.6/src/etc/junit-frames.xsl | 972 +++ .../apache-ant-1.9.6/src/etc/junit-noframes.xsl | 513 ++ framework/src/ant/apache-ant-1.9.6/src/etc/log.xsl | 203 + .../src/ant/apache-ant-1.9.6/src/etc/manifest | 4 + .../ant/apache-ant-1.9.6/src/etc/maudit-frames.xsl | 502 ++ .../apache-ant-1.9.6/src/etc/mmetrics-frames.xsl | 1023 ++++ .../apache-ant-1.9.6/src/etc/performance/build.xml | 124 + .../src/etc/performance/dirscanner.xml | 316 + .../ant/apache-ant-1.9.6/src/etc/poms/README.txt | 53 + .../src/etc/poms/ant-antlr/pom.xml | 75 + .../src/etc/poms/ant-apache-bcel/pom.xml | 71 + .../src/etc/poms/ant-apache-bsf/pom.xml | 74 + .../src/etc/poms/ant-apache-log4j/pom.xml | 69 + .../src/etc/poms/ant-apache-oro/pom.xml | 74 + .../src/etc/poms/ant-apache-regexp/pom.xml | 70 + .../src/etc/poms/ant-apache-resolver/pom.xml | 69 + .../src/etc/poms/ant-apache-xalan2/pom.xml | 94 + .../src/etc/poms/ant-commons-logging/pom.xml | 70 + .../src/etc/poms/ant-commons-net/pom.xml | 75 + .../apache-ant-1.9.6/src/etc/poms/ant-jai/pom.xml | 85 + .../src/etc/poms/ant-javamail/pom.xml | 78 + .../src/etc/poms/ant-jdepend/pom.xml | 72 + .../apache-ant-1.9.6/src/etc/poms/ant-jmf/pom.xml | 65 + .../apache-ant-1.9.6/src/etc/poms/ant-jsch/pom.xml | 74 + .../src/etc/poms/ant-junit/pom.xml | 101 + .../src/etc/poms/ant-junit4/pom.xml | 71 + .../src/etc/poms/ant-launcher/pom.xml | 57 + .../src/etc/poms/ant-netrexx/pom.xml | 98 + .../src/etc/poms/ant-swing/pom.xml | 66 + .../src/etc/poms/ant-testutil/pom.xml | 74 + .../ant/apache-ant-1.9.6/src/etc/poms/ant/pom.xml | 225 + .../src/ant/apache-ant-1.9.6/src/etc/poms/pom.xml | 151 + .../apache-ant-1.9.6/src/etc/printFailingTests.xsl | 45 + .../src/ant/apache-ant-1.9.6/src/etc/tagdiff.xsl | 179 + .../src/etc/testcases/asf-logo.gif | Bin 0 -> 7279 bytes .../src/etc/testcases/buildfiletest-base.xml | 11 + .../src/etc/testcases/core/antclassloader.xml | 80 + .../src/etc/testcases/core/case.xml | 37 + .../core/containersrc/test/SpecialSeq.java | 67 + .../src/etc/testcases/core/directoryscanner.xml | 41 + .../src/etc/testcases/core/dispatch/dispatch.xml | 34 + .../testcases/core/duplicate-target-imported.xml | 23 + .../src/etc/testcases/core/duplicate-target.xml | 31 + .../src/etc/testcases/core/duplicate-target2.xml | 26 + .../src/etc/testcases/core/executor.xml | 29 + .../src/etc/testcases/core/extended-taskdef.xml | 73 + .../src/etc/testcases/core/immutable.xml | 79 + .../etc/testcases/core/include/basic/include.inc | 20 + .../etc/testcases/core/include/basic/include.xml | 25 + .../etc/testcases/core/include/basic/relative.xml | 26 + .../testcases/core/include/frag#ment/include.inc | 20 + .../testcases/core/include/frag#ment/include.xml | 26 + .../testcases/core/include/frag#ment/relative.xml | 26 + .../testcases/core/include/frag#ment/simple.xml | 23 + .../include/included_file_parse_error/build.xml | 33 + .../included_file_parse_error/included_file.xml | 21 + .../include/included_file_task_error/build.xml | 33 + .../included_file_task_error/included_file.xml | 21 + .../include/including_file_parse_error/build.xml | 35 + .../including_file_parse_error/included_file.xml | 20 + .../include/including_file_task_error/build.xml | 34 + .../including_file_task_error/included_file.xml | 20 + .../testcases/core/include/with space/include.inc | 19 + .../testcases/core/include/with space/include.xml | 25 + .../testcases/core/include/with space/relative.xml | 25 + .../testcases/core/include/with space/simple.xml | 22 + .../src/etc/testcases/core/loaderref/loaderref.xml | 46 + .../etc/testcases/core/loaderref/src/Task1.java | 21 + .../src/etc/testcases/core/location.xml | 74 + .../src/etc/testcases/core/taskcontainer.xml | 62 + .../etc/testcases/core/topleveltasks/notarget.xml | 21 + .../core/topleveltasks/targetlevelant.xml | 22 + .../testcases/core/topleveltasks/toplevelant.xml | 21 + .../src/etc/testcases/core/unknownelement.xml | 39 + .../src/etc/testcases/filters/build.xml | 147 + .../src/etc/testcases/filters/concat.xml | 117 + .../src/etc/testcases/filters/dynamicfilter.xml | 48 + .../testcases/filters/expected/escapeunicode.test | 9 + .../testcases/filters/expected/head-tail.head.test | 10 + .../filters/expected/head-tail.headAllSkip.test | 58 + .../filters/expected/head-tail.headLines.test | 2 + .../filters/expected/head-tail.headLinesSkip.test | 2 + .../filters/expected/head-tail.headSkip.test | 10 + .../filters/expected/head-tail.headtail.test | 2 + .../testcases/filters/expected/head-tail.tail.test | 10 + .../filters/expected/head-tail.tailAllSkip.test | 58 + .../filters/expected/head-tail.tailLines.test | 2 + .../filters/expected/head-tail.tailLinesSkip.test | 2 + .../filters/expected/head-tail.tailSkip.test | 10 + .../testcases/filters/expected/linecontains.test | 4 + .../filters/expected/negatelinecontains.test | 3 + .../filters/expected/replacetokens.double.test | 2 + .../testcases/filters/expected/replacetokens.test | 2 + .../filters/expected/stripjavacomments.test | 19 + .../src/etc/testcases/filters/head-tail.xml | 146 + .../etc/testcases/filters/input/escapeunicode.test | 9 + .../testcases/filters/input/head-tail.small.test | 5 + .../src/etc/testcases/filters/input/head-tail.test | 60 + .../etc/testcases/filters/input/linecontains.test | 7 + .../filters/input/replacetokens.double.test | 2 + .../filters/input/replacetokens.mustache.test | 2 + .../etc/testcases/filters/input/replacetokens.test | 2 + .../etc/testcases/filters/input/sample.properties | 16 + .../testcases/filters/input/stripjavacomments.test | 30 + .../src/etc/testcases/filters/tokenfilter.xml | 357 ++ .../src/etc/testcases/taskdefs/abstractcvstask.xml | 47 + .../etc/testcases/taskdefs/ant.topleveltest.xml | 20 + .../src/etc/testcases/taskdefs/ant.xml | 261 + .../src/etc/testcases/taskdefs/ant/ant.xml | 33 + .../src/etc/testcases/taskdefs/ant/references.xml | 33 + .../etc/testcases/taskdefs/antlib.current-test.xml | 29 + .../src/etc/testcases/taskdefs/antlib.xml | 72 + .../src/etc/testcases/taskdefs/antstructure.xml | 41 + .../src/etc/testcases/taskdefs/available.xml | 269 + .../src/etc/testcases/taskdefs/bar.properties | 15 + .../src/etc/testcases/taskdefs/basename.xml | 57 + .../src/etc/testcases/taskdefs/bunzip2.xml | 47 + .../src/etc/testcases/taskdefs/bzip2.xml | 44 + .../src/etc/testcases/taskdefs/calltarget.xml | 120 + .../src/etc/testcases/taskdefs/checksum.xml | 266 + .../src/etc/testcases/taskdefs/checksum/foo/Bar | 1 + .../etc/testcases/taskdefs/checksum/foo/zap/Eenie | 1 + .../src/etc/testcases/taskdefs/classloader.xml | 40 + .../src/etc/testcases/taskdefs/concat-input/A | 1 + .../src/etc/testcases/taskdefs/concat-input/B | 1 + .../src/etc/testcases/taskdefs/concat.xml | 214 + .../src/etc/testcases/taskdefs/condition.xml | 521 ++ .../testcases/taskdefs/conditions/antversion.xml | 66 + .../src/etc/testcases/taskdefs/conditions/http.xml | 57 + .../testcases/taskdefs/conditions/isfailure.xml | 65 + .../taskdefs/conditions/isfileselected.xml | 70 + .../testcases/taskdefs/conditions/isreachable.xml | 105 + .../testcases/taskdefs/conditions/isreference.xml | 60 + .../etc/testcases/taskdefs/conditions/issigned.xml | 78 + .../taskdefs/conditions/jars/apassword.jar | Bin 0 -> 1708 bytes .../testcases/taskdefs/conditions/jars/nosign.jar | Bin 0 -> 451 bytes .../testcases/taskdefs/conditions/jars/pass.jar | Bin 0 -> 1690 bytes .../taskdefs/conditions/parsersupports.xml | 95 + .../testcases/taskdefs/conditions/typefound.xml | 75 + .../src/etc/testcases/taskdefs/conditions/xor.xml | 112 + .../src/etc/testcases/taskdefs/copy.filterset | 1 + .../src/etc/testcases/taskdefs/copy.xml | 268 + .../src/etc/testcases/taskdefs/copy/expected/utf-8 | 1 + .../etc/testcases/taskdefs/copy/input/iso8859-1 | 1 + .../src/etc/testcases/taskdefs/copydir.xml | 56 + .../src/etc/testcases/taskdefs/copyfile.xml | 56 + .../src/etc/testcases/taskdefs/cvspass.xml | 85 + .../src/etc/testcases/taskdefs/defaultexcludes.xml | 37 + .../src/etc/testcases/taskdefs/delete.xml | 194 + .../src/etc/testcases/taskdefs/deltree.xml | 29 + .../src/etc/testcases/taskdefs/dirname.xml | 41 + .../src/etc/testcases/taskdefs/dynamictask.xml | 37 + .../src/etc/testcases/taskdefs/echoxml.xml | 46 + .../src/etc/testcases/taskdefs/email/mail.xml | 40 + .../src/etc/testcases/taskdefs/exec/blabla.sh | 24 + .../src/etc/testcases/taskdefs/exec/blabla.xml | 19 + .../src/etc/testcases/taskdefs/exec/exec.xml | 69 + .../src/etc/testcases/taskdefs/exec/parrot.sh | 19 + .../src/etc/testcases/taskdefs/exec/spawn.sh | 29 + .../taskdefs/expected/asf-logo-huge.tar.bz2 | Bin 0 -> 58089 bytes .../taskdefs/expected/asf-logo-huge.tar.gz | Bin 0 -> 30905 bytes .../testcases/taskdefs/expected/asf-logo.gif.bz2 | Bin 0 -> 7435 bytes .../testcases/taskdefs/expected/asf-logo.gif.gz | Bin 0 -> 6996 bytes .../testcases/taskdefs/expected/asf-logo.gif.md5 | 1 + .../taskdefs/expected/asf-logo.gif.md5sum | 1 + .../taskdefs/expected/asf-logo.gif.pattern | 1 + .../testcases/taskdefs/expected/asf-logo.gif.svf | 1 + .../testcases/taskdefs/expected/asf-logo.gif.tar | Bin 0 -> 10240 bytes .../taskdefs/expected/asf-logo.gif.tar.bz2 | Bin 0 -> 7543 bytes .../taskdefs/expected/asf-logo.gif.tar.gz | Bin 0 -> 7116 bytes .../testcases/taskdefs/expected/asf-logo.gif.zip | Bin 0 -> 7121 bytes .../taskdefs/expected/copy.filterset.filtered | 1 + .../src/etc/testcases/taskdefs/fail.xml | 130 + .../src/etc/testcases/taskdefs/filter.xml | 72 + .../src/etc/testcases/taskdefs/filter1.txt | 1 + .../src/etc/testcases/taskdefs/filter2.txt | 1 + .../src/etc/testcases/taskdefs/filter3.txt | 1 + .../etc/testcases/taskdefs/filterdefs.properties | 15 + .../src/etc/testcases/taskdefs/fixcrlf/build.xml | 331 ++ .../etc/testcases/taskdefs/fixcrlf/expected.zip | Bin 0 -> 5642 bytes .../src/etc/testcases/taskdefs/fixcrlf/input.zip | Bin 0 -> 4815 bytes .../src/etc/testcases/taskdefs/foo.properties | 15 + .../src/etc/testcases/taskdefs/get.xml | 107 + .../src/etc/testcases/taskdefs/gunzip.xml | 58 + .../src/etc/testcases/taskdefs/gzip.xml | 56 + .../src/etc/testcases/taskdefs/import/a.xml | 20 + .../src/etc/testcases/taskdefs/import/b.xml | 21 + .../src/etc/testcases/taskdefs/import/bad.xml | 20 + .../src/etc/testcases/taskdefs/import/c.xml | 21 + .../src/etc/testcases/taskdefs/import/import.xml | 34 + .../taskdefs/import/import_bad_import.xml | 20 + .../taskdefs/import/import_same_target.xml | 21 + .../src/etc/testcases/taskdefs/import/imported.xml | 26 + .../taskdefs/import/importtargetfirst.xml | 22 + .../taskdefs/import/recursive-selfimport.xml | 22 + .../etc/testcases/taskdefs/import/same_target.xml | 20 + .../import/subdir/importinsequential-inner.xml | 25 + .../taskdefs/import/subdir/importinsequential.xml | 22 + .../import/subdir/importintarget-inner.xml | 23 + .../taskdefs/import/subdir/importintarget.xml | 24 + .../testcases/taskdefs/import/subdir/serial.xml | 22 + .../testcases/taskdefs/import/symlinks/d1/p1.xml | 21 + .../testcases/taskdefs/import/symlinks/d2/p2.xml | 18 + .../testcases/taskdefs/import/symlinks/d3a/p3.xml | 18 + .../etc/testcases/taskdefs/import/targetfirst.xml | 21 + .../src/etc/testcases/taskdefs/import/unnamed1.xml | 22 + .../src/etc/testcases/taskdefs/import/unnamed2.xml | 20 + .../testcases/taskdefs/import/unnamedImport.xml | 25 + .../src/etc/testcases/taskdefs/initializeclass.xml | 41 + .../src/etc/testcases/taskdefs/input.properties | 25 + .../src/etc/testcases/taskdefs/input.stdin | 2 + .../src/etc/testcases/taskdefs/input.xml | 119 + .../src/etc/testcases/taskdefs/jar.xml | 285 + .../src/etc/testcases/taskdefs/java.xml | 404 ++ .../taskdefs/javadoc/java/ClassToJavadoc.java | 39 + .../src/etc/testcases/taskdefs/javadoc/javadoc.xml | 155 + .../src/etc/testcases/taskdefs/loadfile.xml | 163 + .../src/etc/testcases/taskdefs/macrodef.xml | 290 + .../src/etc/testcases/taskdefs/makeurl.xml | 79 + .../src/etc/testcases/taskdefs/manifest.xml | 267 + .../etc/testcases/taskdefs/manifestclasspath.xml | 238 + .../taskdefs/manifestclasspath/Alpha.java | 21 + .../testcases/taskdefs/manifestclasspath/Beta.java | 25 + .../src/etc/testcases/taskdefs/manifests/test1.mf | 1 + .../src/etc/testcases/taskdefs/manifests/test2.mf | 2 + .../src/etc/testcases/taskdefs/manifests/test3.mf | 3 + .../src/etc/testcases/taskdefs/manifests/test4.mf | 4 + .../src/etc/testcases/taskdefs/manifests/test5.mf | 3 + .../src/etc/testcases/taskdefs/manifests/test6.mf | 5 + .../src/etc/testcases/taskdefs/manifests/test7.mf | 4 + .../src/etc/testcases/taskdefs/mkdir.xml | 39 + .../src/etc/testcases/taskdefs/move.xml | 263 + .../src/etc/testcases/taskdefs/multimap.xml | 192 + .../src/etc/testcases/taskdefs/nice.xml | 66 + .../src/etc/testcases/taskdefs/nopermissions.zip | Bin 0 -> 138 bytes .../etc/testcases/taskdefs/optional/antlr/antlr.g | 76 + .../testcases/taskdefs/optional/antlr/antlr.xml | 128 + .../taskdefs/optional/antlr/extended.calc.g | 23 + .../etc/testcases/taskdefs/optional/antlr/java.g | 1162 ++++ .../testcases/taskdefs/optional/antlr/java.tree.g | 312 + .../testcases/taskdefs/optional/depend/depend.xml | 196 + .../testcases/taskdefs/optional/depend/src1/A.java | 20 + .../testcases/taskdefs/optional/depend/src1/B.java | 19 + .../testcases/taskdefs/optional/depend/src1/C.java | 19 + .../testcases/taskdefs/optional/depend/src1/D.java | 19 + .../testcases/taskdefs/optional/depend/src1/E.java | 22 + .../testcases/taskdefs/optional/depend/src2/A.java | 21 + .../testcases/taskdefs/optional/depend/src2/B.java | 19 + .../testcases/taskdefs/optional/depend/src3/A.java | 23 + .../testcases/taskdefs/optional/depend/src3/B.java | 19 + .../depend/src4/test/ContainsOnlyInner.java | 24 + .../optional/depend/src4/test/MethodParam.java | 24 + .../taskdefs/optional/depend/src4/test/Outer.java | 23 + .../testcases/taskdefs/optional/depend/src5/A.java | 22 + .../testcases/taskdefs/optional/depend/src5/B.java | 19 + .../taskdefs/optional/echoproperties.properties | 15 + .../testcases/taskdefs/optional/echoproperties.xml | 133 + .../i18n/translate/expected/de/template.txt | 1 + .../translate/input/resources_ger_DE.properties | 24 + .../optional/i18n/translate/input/template.txt | 1 + .../taskdefs/optional/i18n/translate/translate.xml | 44 + .../testcases/taskdefs/optional/image/image.xml | 73 + .../taskdefs/optional/image/src/badimage.jpg | Bin 0 -> 875960 bytes .../taskdefs/optional/image/src/largeimage.jpg | Bin 0 -> 336783 bytes .../testcases/taskdefs/optional/javah/build.xml | 56 + .../optional/javah/input/org/example/Foo.java | 26 + .../taskdefs/optional/jdepend/jdepend.xml | 70 + .../taskdefs/optional/jsp/1nvalid-classname.jsp | 25 + .../taskdefs/optional/jsp/WEB-INF/web.xml | 20 + .../testcases/taskdefs/optional/jsp/default.jsp | 25 + .../taskdefs/optional/jsp/missing_tld.jsp | 32 + .../etc/testcases/taskdefs/optional/jsp/simple.jsp | 25 + .../testcases/taskdefs/optional/jsp/uriroot.jsp | 25 + .../etc/testcases/taskdefs/optional/jsp/xml.jsp | 32 + .../src/etc/testcases/taskdefs/optional/jspc.xml | 133 + .../src/etc/testcases/taskdefs/optional/junit.xml | 361 ++ .../taskdefs/optional/junit/cdataoutput.xml | 28 + .../testcases/taskdefs/optional/junit/matches.xml | 25 + .../taskdefs/optional/junit/teardownlistener.xml | 50 + .../junitreport-with-include/junit-frames.xsl | 879 +++ .../junitreport-with-include/junit-import.xsl | 24 + .../testcases/taskdefs/optional/junitreport.xml | 189 + .../INCOMPLETE-sampleproject.incomplete.xml | 31 + .../NAMESPACE-sampleproject.namespace.xml | 116 + .../TEST-sampleproject.coins.CoinTest.xml | 115 + .../TEST-sampleproject.util.UniqueStringTest.xml | 93 + .../WRONGELEMENT-sampleproject.wrongelement.xml | 18 + .../ZEROBYTES-sampleproject.package.xml | 0 .../taskdefs/optional/junitreport/junit-frames.xsl | 879 +++ .../taskdefs/optional/native2ascii/build.xml | 38 + .../optional/native2ascii/expected/iso8859-1.test | 1 + .../optional/native2ascii/input/iso8859-1.test | 1 + .../etc/testcases/taskdefs/optional/net/ftp.xml | 331 ++ .../testcases/taskdefs/optional/propertyfile.xml | 123 + .../src/etc/testcases/taskdefs/optional/pvcs.xml | 50 + .../taskdefs/optional/replaceregexp.properties | 16 + .../testcases/taskdefs/optional/replaceregexp.xml | 83 + .../taskdefs/optional/replaceregexp2.properties | 15 + .../optional/replaceregexp2.result.properties | 15 + .../testcases/taskdefs/optional/schemavalidate.xml | 100 + .../src/etc/testcases/taskdefs/optional/script.xml | 46 + .../taskdefs/optional/script/scriptdef.xml | 145 + .../taskdefs/optional/script_reference.xml | 27 + .../etc/testcases/taskdefs/optional/sos/sos.xml | 124 + .../testcases/taskdefs/optional/splash-test.xml | 45 + .../testcases/taskdefs/optional/unix/symlink.xml | 354 ++ .../etc/testcases/taskdefs/optional/vss/vss.xml | 68 + .../taskdefs/optional/xalan-redirect-in.xsl | 37 + .../etc/testcases/taskdefs/optional/xml/about.xml | 26 + .../etc/testcases/taskdefs/optional/xml/apache.xsl | 35 + .../etc/testcases/taskdefs/optional/xml/books.xml | 28 + .../etc/testcases/taskdefs/optional/xml/catalog | 2 + .../testcases/taskdefs/optional/xml/doc-in-ns.xsd | 38 + .../etc/testcases/taskdefs/optional/xml/doc.dtd | 24 + .../etc/testcases/taskdefs/optional/xml/doc.xsd | 37 + .../etc/testcases/taskdefs/optional/xml/doc.xsl | 26 + .../taskdefs/optional/xml/docwithentity.xml | 29 + .../optional/xml/endpiece-noSchema-invalid.xml | 30 + .../taskdefs/optional/xml/endpiece-noSchema.xml | 28 + .../optional/xml/endpiece-ns-no-location.xml | 23 + .../testcases/taskdefs/optional/xml/endpiece.xml | 23 + .../testcases/taskdefs/optional/xml/endpiece2.xml | 26 + .../etc/testcases/taskdefs/optional/xml/entity.xml | 20 + .../taskdefs/optional/xml/iso-2022-jp.xml | 23 + .../taskdefs/optional/xml/stylesheet_include.xsl | 28 + .../optional/xml/stylesheet_with_include.xsl | 28 + .../etc/testcases/taskdefs/optional/xml/test.xml | 25 + .../etc/testcases/taskdefs/optional/xml/test.xsl | 25 + .../etc/testcases/taskdefs/optional/xml/utf-8.xml | 23 + .../testcases/taskdefs/optional/xml/validate.xml | 28 + .../testcases/taskdefs/optional/xmlvalidate.xml | 208 + .../src/etc/testcases/taskdefs/optional/xslt.xml | 102 + .../taskdefs/optional/xsltliaison-encoding-in.xml | 20 + .../taskdefs/optional/xsltliaison-encoding-in.xsl | 27 + .../testcases/taskdefs/optional/xsltliaison-in.xml | 23 + .../testcases/taskdefs/optional/xsltliaison-in.xsl | 20 + .../taskdefs/optional/xsltliaison-include.xml | 19 + .../taskdefs/optional/xsltliaison-include.xsl | 20 + .../src/etc/testcases/taskdefs/parallel.xml | 163 + .../src/etc/testcases/taskdefs/pathconvert.xml | 42 + .../src/etc/testcases/taskdefs/presetdef.xml | 147 + .../src/etc/testcases/taskdefs/property.xml | 92 + .../etc/testcases/taskdefs/property1.properties | 17 + .../etc/testcases/taskdefs/property2.properties | 17 + .../etc/testcases/taskdefs/property3.properties | 18 + .../etc/testcases/taskdefs/property4.properties | 16 + .../etc/testcases/taskdefs/property5.properties | 17 + .../src/etc/testcases/taskdefs/recorder.xml | 73 + .../testcases/taskdefs/recorder/rectest1.result | 1 + .../testcases/taskdefs/recorder/rectest2.result | 2 + .../testcases/taskdefs/recorder/rectest3.result | 2 + .../testcases/taskdefs/recorder/rectest4.result | 1 + .../testcases/taskdefs/recorder/rectest5.result | 5 + .../testcases/taskdefs/recorder/rectest6.result | 3 + .../src/etc/testcases/taskdefs/recorder2.xml | 29 + .../src/etc/testcases/taskdefs/rename.xml | 50 + .../src/etc/testcases/taskdefs/replace.xml | 94 + .../src/etc/testcases/taskdefs/replace/result.txt | 7 + .../src/etc/testcases/taskdefs/replace/source.txt | 4 + .../src/etc/testcases/taskdefs/replace/value.txt | 3 + .../src/etc/testcases/taskdefs/rmic/rmic.xml | 499 ++ .../testcases/taskdefs/rmic/src/AntTimestamp.java | 45 + .../taskdefs/rmic/src/RemoteTimestamp.java | 26 + .../taskdefs/rmic/src/RemoteTimestampImpl.java | 28 + .../src/etc/testcases/taskdefs/signjar.xml | 97 + .../src/etc/testcases/taskdefs/skinconfig.dtd | 19 + .../src/etc/testcases/taskdefs/sleep.xml | 47 + .../src/etc/testcases/taskdefs/style/build.xml | 197 + .../src/etc/testcases/taskdefs/style/data.xml | 18 + .../etc/testcases/taskdefs/style/printFilename.xsl | 38 + .../etc/testcases/taskdefs/style/printParams.xsl | 36 + .../taskdefs/style/testNewerStylesheet.xsl | 28 + .../src/etc/testcases/taskdefs/subant.xml | 65 + .../testcases/taskdefs/subant/genericsubant.xml | 22 + .../taskdefs/subant/subant-test1/mysubant.xml | 31 + .../taskdefs/subant/subant-test2/mysubant.xml | 28 + .../src/etc/testcases/taskdefs/sync.xml | 141 + .../src/etc/testcases/taskdefs/tar.xml | 200 + .../src/etc/testcases/taskdefs/taskdef.xml | 89 + .../src/etc/testcases/taskdefs/template.xml | 17 + .../src/etc/testcases/taskdefs/test.antlib.xml | 22 + .../src/etc/testcases/taskdefs/test2.antlib.xml | 22 + .../src/etc/testcases/taskdefs/toplevelant.xml | 24 + .../src/etc/testcases/taskdefs/toplevelantcall.xml | 24 + .../src/etc/testcases/taskdefs/toplevelsubant.xml | 26 + .../src/etc/testcases/taskdefs/touch.xml | 216 + .../src/etc/testcases/taskdefs/typeadapter.xml | 79 + .../src/etc/testcases/taskdefs/typedef.xml | 84 + .../src/etc/testcases/taskdefs/untar.xml | 103 + .../src/etc/testcases/taskdefs/unzip.xml | 184 + .../src/etc/testcases/taskdefs/uptodate.xml | 57 + .../src/etc/testcases/taskdefs/war.xml | 39 + .../src/etc/testcases/taskdefs/whichresource.xml | 37 + .../src/etc/testcases/taskdefs/xmlns.xml | 67 + .../src/etc/testcases/taskdefs/xmlproperty.xml | 44 + .../goldfiles/keeproot-collapse-input1.properties | 21 + .../keeproot-collapse-original.properties | 20 + .../keeproot-collapse-override.properties | 17 + .../keeproot-nocollapse-input1.properties | 8 + .../keeproot-nocollapse-original.properties | 20 + .../goldfiles/keeproot-semantic-include.properties | 21 + .../goldfiles/keeproot-semantic-input1.properties | 21 + .../keeproot-semantic-override.properties | 17 + .../nokeeproot-collapse-input1.properties | 21 + .../nokeeproot-collapse-original.properties | 19 + .../nokeeproot-nocollapse-input1.properties | 7 + .../nokeeproot-nocollapse-multi.properties | 16 + .../nokeeproot-nocollapse-original.properties | 19 + .../nokeeproot-semantic-include-input1.properties | 21 + .../nokeeproot-semantic-input1.properties | 21 + .../nokeeproot-semantic-locations.properties | 16 + .../goldfiles/nokeeproot-semantic-paths.properties | 16 + .../nokeeproot-semantic-references.properties | 20 + .../taskdefs/xmlproperty/inputs/input1.xml | 27 + .../taskdefs/xmlproperty/inputs/locations.xml | 20 + .../taskdefs/xmlproperty/inputs/multi.xml | 25 + .../taskdefs/xmlproperty/inputs/original.xml | 22 + .../taskdefs/xmlproperty/inputs/override.xml | 27 + .../taskdefs/xmlproperty/inputs/paths.xml | 22 + .../taskdefs/xmlproperty/inputs/references.xml | 24 + .../etc/testcases/taskdefs/xmlproperty_data.dtd | 30 + .../etc/testcases/taskdefs/xmlproperty_data.xml | 22 + .../testcases/taskdefs/xmlproperty_needscat.xml | 22 + .../etc/testcases/taskdefs/xmlproperty_withdtd.xml | 24 + .../src/etc/testcases/taskdefs/zip.xml | 287 + .../testcases/taskdefs/zip/zipgroupfileset1.zip | Bin 0 -> 2211 bytes .../testcases/taskdefs/zip/zipgroupfileset2.zip | Bin 0 -> 1825 bytes .../testcases/taskdefs/zip/zipgroupfileset3.zip | Bin 0 -> 313 bytes .../src/etc/testcases/testkeystore | Bin 0 -> 2453 bytes .../src/etc/testcases/types/addtype.xml | 163 + .../src/etc/testcases/types/assertions.xml | 205 + .../testcases/types/assertions/AssertionMain.java | 31 + .../testcases/types/assertions/AssertionTest.java | 45 + .../src/etc/testcases/types/description1.xml | 22 + .../src/etc/testcases/types/description2.xml | 23 + .../src/etc/testcases/types/description3.xml | 23 + .../src/etc/testcases/types/description4.xml | 23 + .../src/etc/testcases/types/filelist.xml | 54 + .../src/etc/testcases/types/filterset.xml | 146 + .../src/etc/testcases/types/filterseta.txt | 2 + .../src/etc/testcases/types/filtersetb.txt | 5 + .../src/etc/testcases/types/filtersetc.txt | 7 + .../src/etc/testcases/types/filtersetd.txt | 1 + .../src/etc/testcases/types/filtersfile1 | 2 + .../src/etc/testcases/types/filtersfile2 | 1 + .../src/etc/testcases/types/flexinteger.xml | 35 + .../src/etc/testcases/types/gold/filterset1.txt | 2 + .../src/etc/testcases/types/gold/filterset2.txt | 5 + .../src/etc/testcases/types/gold/filterset3.txt | 7 + .../src/etc/testcases/types/mapper.xml | 67 + .../types/mappers/define.mapperresult.xml | 25 + .../src/etc/testcases/types/mappers/globmapper.xml | 32 + .../etc/testcases/types/mappers/regexpmapper.xml | 32 + .../etc/testcases/types/mappers/scriptmapper.xml | 58 + .../src/etc/testcases/types/poly.xml | 62 + .../src/etc/testcases/types/quote1.xml | 25 + .../src/etc/testcases/types/quote2.xml | 26 + .../src/etc/testcases/types/redirector.xml | 79 + .../etc/testcases/types/resources/javaresource.xml | 24 + .../etc/testcases/types/resources/resourcelist.xml | 26 + .../src/etc/testcases/types/resources/tarentry.xml | 40 + .../src/etc/testcases/types/selectors.xml | 356 ++ .../testcases/types/selectors/scriptselector.xml | 138 + .../testcases/types/selectors/signedselector.xml | 61 + .../src/etc/testcases/types/xmlcatalog.xml | 150 + .../src/etc/testcases/types/xmlcatalog.xsl | 47 + .../src/etc/testcases/types/xmlcatalog1.xml | 30 + .../src/etc/testcases/types/xmlcatalog2.xml | 27 + .../src/etc/testcases/types/xmlfragment.xml | 31 + .../src/etc/testcases/util/simple.properties | 24 + .../src/etc/testcases/util/unusual.properties | 37 + .../src/ant/apache-ant-1.9.6/src/etc/yearcheck.sh | 101 + .../main/org/apache/tools/ant/AntClassLoader.java | 1622 +++++ .../org/apache/tools/ant/AntTypeDefinition.java | 389 ++ .../org/apache/tools/ant/ArgumentProcessor.java | 72 + .../tools/ant/ArgumentProcessorRegistry.java | 171 + .../src/main/org/apache/tools/ant/BuildEvent.java | 203 + .../main/org/apache/tools/ant/BuildException.java | 153 + .../main/org/apache/tools/ant/BuildListener.java | 110 + .../src/main/org/apache/tools/ant/BuildLogger.java | 72 + .../main/org/apache/tools/ant/ComponentHelper.java | 1101 ++++ .../org/apache/tools/ant/DefaultDefinitions.java | 76 + .../main/org/apache/tools/ant/DefaultLogger.java | 380 ++ .../org/apache/tools/ant/DemuxInputStream.java | 74 + .../org/apache/tools/ant/DemuxOutputStream.java | 249 + .../src/main/org/apache/tools/ant/Diagnostics.java | 715 +++ .../org/apache/tools/ant/DirectoryScanner.java | 1900 ++++++ .../org/apache/tools/ant/DynamicAttribute.java | 38 + .../org/apache/tools/ant/DynamicAttributeNS.java | 41 + .../org/apache/tools/ant/DynamicConfigurator.java | 29 + .../apache/tools/ant/DynamicConfiguratorNS.java | 27 + .../main/org/apache/tools/ant/DynamicElement.java | 36 + .../org/apache/tools/ant/DynamicElementNS.java | 37 + .../apache/tools/ant/DynamicObjectAttribute.java | 41 + .../src/main/org/apache/tools/ant/Evaluable.java | 29 + .../src/main/org/apache/tools/ant/Executor.java | 48 + .../main/org/apache/tools/ant/ExitException.java | 61 + .../org/apache/tools/ant/ExitStatusException.java | 69 + .../main/org/apache/tools/ant/ExtensionPoint.java | 60 + .../src/main/org/apache/tools/ant/FileScanner.java | 158 + .../org/apache/tools/ant/IntrospectionHelper.java | 1745 ++++++ .../src/main/org/apache/tools/ant/Location.java | 179 + .../src/main/org/apache/tools/ant/MagicNames.java | 293 + .../src/main/org/apache/tools/ant/Main.java | 1317 ++++ .../main/org/apache/tools/ant/NoBannerLogger.java | 100 + .../main/org/apache/tools/ant/PathTokenizer.java | 166 + .../src/main/org/apache/tools/ant/Project.java | 2494 ++++++++ .../org/apache/tools/ant/ProjectComponent.java | 169 + .../main/org/apache/tools/ant/ProjectHelper.java | 698 +++ .../apache/tools/ant/ProjectHelperRepository.java | 337 ++ .../main/org/apache/tools/ant/PropertyHelper.java | 1215 ++++ .../org/apache/tools/ant/RuntimeConfigurable.java | 608 ++ .../org/apache/tools/ant/SubBuildListener.java | 58 + .../src/main/org/apache/tools/ant/Target.java | 532 ++ .../src/main/org/apache/tools/ant/Task.java | 481 ++ .../src/main/org/apache/tools/ant/TaskAdapter.java | 182 + .../apache/tools/ant/TaskConfigurationChecker.java | 111 + .../main/org/apache/tools/ant/TaskContainer.java | 41 + .../src/main/org/apache/tools/ant/TypeAdapter.java | 66 + .../main/org/apache/tools/ant/UnknownElement.java | 699 +++ .../tools/ant/UnsupportedAttributeException.java | 49 + .../tools/ant/UnsupportedElementException.java | 57 + .../src/main/org/apache/tools/ant/XmlLogger.java | 474 ++ .../src/main/org/apache/tools/ant/antlib.xml | 144 + .../tools/ant/attribute/AttributeNamespace.java | 28 + .../tools/ant/attribute/BaseIfAttribute.java | 86 + .../tools/ant/attribute/EnableAttribute.java | 35 + .../tools/ant/attribute/IfBlankAttribute.java | 39 + .../apache/tools/ant/attribute/IfSetAttribute.java | 39 + .../tools/ant/attribute/IfTrueAttribute.java | 41 + .../main/org/apache/tools/ant/defaultManifest.mf | 4 + .../apache/tools/ant/dispatch/DispatchTask.java | 59 + .../apache/tools/ant/dispatch/DispatchUtils.java | 124 + .../apache/tools/ant/dispatch/Dispatchable.java | 31 + .../apache/tools/ant/filters/BaseFilterReader.java | 199 + .../tools/ant/filters/BaseParamFilterReader.java | 74 + .../apache/tools/ant/filters/ChainableReader.java | 37 + .../apache/tools/ant/filters/ClassConstants.java | 165 + .../org/apache/tools/ant/filters/ConcatFilter.java | 218 + .../apache/tools/ant/filters/EscapeUnicode.java | 123 + .../apache/tools/ant/filters/ExpandProperties.java | 142 + .../apache/tools/ant/filters/FixCrLfFilter.java | 1004 ++++ .../org/apache/tools/ant/filters/HeadFilter.java | 222 + .../org/apache/tools/ant/filters/LineContains.java | 244 + .../tools/ant/filters/LineContainsRegExp.java | 242 + .../org/apache/tools/ant/filters/PrefixLines.java | 164 + .../apache/tools/ant/filters/ReplaceTokens.java | 379 ++ .../org/apache/tools/ant/filters/SortFilter.java | 375 ++ .../tools/ant/filters/StringInputStream.java | 49 + .../tools/ant/filters/StripJavaComments.java | 145 + .../apache/tools/ant/filters/StripLineBreaks.java | 154 + .../tools/ant/filters/StripLineComments.java | 237 + .../org/apache/tools/ant/filters/SuffixLines.java | 174 + .../org/apache/tools/ant/filters/TabsToSpaces.java | 155 + .../org/apache/tools/ant/filters/TailFilter.java | 243 + .../org/apache/tools/ant/filters/TokenFilter.java | 712 +++ .../org/apache/tools/ant/filters/UniqFilter.java | 37 + .../tools/ant/filters/util/ChainReaderHelper.java | 288 + .../tools/ant/filters/util/JavaClassHelper.java | 70 + .../org/apache/tools/ant/helper/AntXMLContext.java | 417 ++ .../apache/tools/ant/helper/DefaultExecutor.java | 60 + .../ant/helper/IgnoreDependenciesExecutor.java | 70 + .../apache/tools/ant/helper/ProjectHelper2.java | 1238 ++++ .../apache/tools/ant/helper/ProjectHelperImpl.java | 1026 ++++ .../tools/ant/helper/SingleCheckExecutor.java | 47 + .../tools/ant/input/DefaultInputHandler.java | 120 + .../apache/tools/ant/input/GreedyInputHandler.java | 80 + .../org/apache/tools/ant/input/InputHandler.java | 41 + .../org/apache/tools/ant/input/InputRequest.java | 93 + .../ant/input/MultipleChoiceInputRequest.java | 58 + .../tools/ant/input/PropertyFileInputHandler.java | 92 + .../apache/tools/ant/input/SecureInputHandler.java | 59 + .../main/org/apache/tools/ant/launch/AntMain.java | 42 + .../apache/tools/ant/launch/LaunchException.java | 38 + .../main/org/apache/tools/ant/launch/Launcher.java | 412 ++ .../main/org/apache/tools/ant/launch/Locator.java | 528 ++ .../apache/tools/ant/listener/AnsiColorLogger.java | 249 + .../tools/ant/listener/BigProjectLogger.java | 194 + .../tools/ant/listener/CommonsLoggingListener.java | 332 ++ .../apache/tools/ant/listener/Log4jListener.java | 177 + .../org/apache/tools/ant/listener/MailLogger.java | 440 ++ .../apache/tools/ant/listener/ProfileLogger.java | 112 + .../apache/tools/ant/listener/SilentLogger.java | 62 + .../tools/ant/listener/SimpleBigProjectLogger.java | 46 + .../tools/ant/listener/TimestampedLogger.java | 54 + .../apache/tools/ant/listener/defaults.properties | 58 + .../apache/tools/ant/loader/AntClassLoader2.java | 31 + .../apache/tools/ant/loader/AntClassLoader5.java | 65 + .../org/apache/tools/ant/property/GetProperty.java | 31 + .../apache/tools/ant/property/LocalProperties.java | 152 + .../tools/ant/property/LocalPropertyStack.java | 161 + .../org/apache/tools/ant/property/NullReturn.java | 38 + .../tools/ant/property/ParseNextProperty.java | 44 + .../apache/tools/ant/property/ParseProperties.java | 199 + .../tools/ant/property/PropertyExpander.java | 51 + .../tools/ant/property/ResolvePropertyMap.java | 151 + .../org/apache/tools/ant/property/package.html | 19 + .../apache/tools/ant/taskdefs/AbstractCvsTask.java | 873 +++ .../tools/ant/taskdefs/AbstractJarSignerTask.java | 423 ++ .../main/org/apache/tools/ant/taskdefs/Ant.java | 836 +++ .../apache/tools/ant/taskdefs/AntStructure.java | 485 ++ .../main/org/apache/tools/ant/taskdefs/Antlib.java | 184 + .../tools/ant/taskdefs/AntlibDefinition.java | 81 + .../main/org/apache/tools/ant/taskdefs/Apt.java | 270 + .../tools/ant/taskdefs/AttributeNamespaceDef.java | 51 + .../tools/ant/taskdefs/AugmentReference.java | 96 + .../org/apache/tools/ant/taskdefs/Available.java | 514 ++ .../org/apache/tools/ant/taskdefs/BUnzip2.java | 112 + .../main/org/apache/tools/ant/taskdefs/BZip2.java | 74 + .../org/apache/tools/ant/taskdefs/Basename.java | 110 + .../org/apache/tools/ant/taskdefs/BindTargets.java | 91 + .../org/apache/tools/ant/taskdefs/BuildNumber.java | 201 + .../org/apache/tools/ant/taskdefs/CVSPass.java | 172 + .../org/apache/tools/ant/taskdefs/CallTarget.java | 255 + .../org/apache/tools/ant/taskdefs/Checksum.java | 712 +++ .../main/org/apache/tools/ant/taskdefs/Chmod.java | 261 + .../org/apache/tools/ant/taskdefs/Classloader.java | 244 + .../apache/tools/ant/taskdefs/CloseResources.java | 59 + .../tools/ant/taskdefs/CommandLauncherTask.java | 56 + .../apache/tools/ant/taskdefs/Componentdef.java | 40 + .../main/org/apache/tools/ant/taskdefs/Concat.java | 955 +++ .../apache/tools/ant/taskdefs/ConditionTask.java | 130 + .../main/org/apache/tools/ant/taskdefs/Copy.java | 1111 ++++ .../org/apache/tools/ant/taskdefs/CopyPath.java | 214 + .../org/apache/tools/ant/taskdefs/Copydir.java | 163 + .../org/apache/tools/ant/taskdefs/Copyfile.java | 116 + .../main/org/apache/tools/ant/taskdefs/Cvs.java | 41 + .../org/apache/tools/ant/taskdefs/DefBase.java | 167 + .../apache/tools/ant/taskdefs/DefaultExcludes.java | 115 + .../org/apache/tools/ant/taskdefs/Definer.java | 639 ++ .../main/org/apache/tools/ant/taskdefs/Delete.java | 836 +++ .../org/apache/tools/ant/taskdefs/Deltree.java | 112 + .../org/apache/tools/ant/taskdefs/DependSet.java | 299 + .../apache/tools/ant/taskdefs/DiagnosticsTask.java | 41 + .../org/apache/tools/ant/taskdefs/Dirname.java | 82 + .../main/org/apache/tools/ant/taskdefs/Ear.java | 154 + .../main/org/apache/tools/ant/taskdefs/Echo.java | 170 + .../org/apache/tools/ant/taskdefs/EchoXML.java | 137 + .../main/org/apache/tools/ant/taskdefs/Exec.java | 281 + .../org/apache/tools/ant/taskdefs/ExecTask.java | 726 +++ .../org/apache/tools/ant/taskdefs/Execute.java | 734 +++ .../org/apache/tools/ant/taskdefs/ExecuteJava.java | 331 ++ .../org/apache/tools/ant/taskdefs/ExecuteOn.java | 784 +++ .../tools/ant/taskdefs/ExecuteStreamHandler.java | 68 + .../apache/tools/ant/taskdefs/ExecuteWatchdog.java | 177 + .../main/org/apache/tools/ant/taskdefs/Exit.java | 235 + .../main/org/apache/tools/ant/taskdefs/Expand.java | 527 ++ .../main/org/apache/tools/ant/taskdefs/Filter.java | 101 + .../org/apache/tools/ant/taskdefs/FixCRLF.java | 696 +++ .../main/org/apache/tools/ant/taskdefs/GUnzip.java | 97 + .../main/org/apache/tools/ant/taskdefs/GZip.java | 68 + .../org/apache/tools/ant/taskdefs/GenerateKey.java | 420 ++ .../main/org/apache/tools/ant/taskdefs/Get.java | 883 +++ .../org/apache/tools/ant/taskdefs/HostInfo.java | 256 + .../org/apache/tools/ant/taskdefs/ImportTask.java | 348 ++ .../main/org/apache/tools/ant/taskdefs/Input.java | 259 + .../org/apache/tools/ant/taskdefs/JDBCTask.java | 525 ++ .../main/org/apache/tools/ant/taskdefs/Jar.java | 1238 ++++ .../main/org/apache/tools/ant/taskdefs/Java.java | 965 +++ .../main/org/apache/tools/ant/taskdefs/Javac.java | 1270 ++++ .../org/apache/tools/ant/taskdefs/Javadoc.java | 2624 ++++++++ .../main/org/apache/tools/ant/taskdefs/Jikes.java | 132 + .../tools/ant/taskdefs/JikesOutputParser.java | 183 + .../org/apache/tools/ant/taskdefs/KeySubst.java | 191 + .../main/org/apache/tools/ant/taskdefs/Length.java | 335 ++ .../org/apache/tools/ant/taskdefs/LoadFile.java | 41 + .../apache/tools/ant/taskdefs/LoadProperties.java | 248 + .../apache/tools/ant/taskdefs/LoadResource.java | 236 + .../main/org/apache/tools/ant/taskdefs/Local.java | 47 + .../apache/tools/ant/taskdefs/LogOutputStream.java | 111 + .../tools/ant/taskdefs/LogStreamHandler.java | 70 + .../org/apache/tools/ant/taskdefs/MacroDef.java | 851 +++ .../apache/tools/ant/taskdefs/MacroInstance.java | 411 ++ .../org/apache/tools/ant/taskdefs/MakeUrl.java | 298 + .../org/apache/tools/ant/taskdefs/Manifest.java | 1183 ++++ .../tools/ant/taskdefs/ManifestClassPath.java | 180 + .../tools/ant/taskdefs/ManifestException.java | 36 + .../apache/tools/ant/taskdefs/ManifestTask.java | 293 + .../apache/tools/ant/taskdefs/MatchingTask.java | 446 ++ .../main/org/apache/tools/ant/taskdefs/Mkdir.java | 114 + .../main/org/apache/tools/ant/taskdefs/Move.java | 382 ++ .../main/org/apache/tools/ant/taskdefs/Nice.java | 99 + .../main/org/apache/tools/ant/taskdefs/Pack.java | 212 + .../org/apache/tools/ant/taskdefs/Parallel.java | 489 ++ .../main/org/apache/tools/ant/taskdefs/Patch.java | 215 + .../org/apache/tools/ant/taskdefs/PathConvert.java | 511 ++ .../org/apache/tools/ant/taskdefs/PreSetDef.java | 275 + .../tools/ant/taskdefs/ProcessDestroyer.java | 220 + .../tools/ant/taskdefs/ProjectHelperTask.java | 50 + .../org/apache/tools/ant/taskdefs/Property.java | 726 +++ .../tools/ant/taskdefs/PropertyHelperTask.java | 145 + .../tools/ant/taskdefs/PumpStreamHandler.java | 298 + .../org/apache/tools/ant/taskdefs/Recorder.java | 324 + .../apache/tools/ant/taskdefs/RecorderEntry.java | 367 ++ .../org/apache/tools/ant/taskdefs/Redirector.java | 1022 ++++ .../main/org/apache/tools/ant/taskdefs/Rename.java | 96 + .../org/apache/tools/ant/taskdefs/Replace.java | 955 +++ .../apache/tools/ant/taskdefs/ResourceCount.java | 124 + .../main/org/apache/tools/ant/taskdefs/Retry.java | 119 + .../main/org/apache/tools/ant/taskdefs/Rmic.java | 853 +++ .../org/apache/tools/ant/taskdefs/SQLExec.java | 1162 ++++ .../org/apache/tools/ant/taskdefs/SendEmail.java | 45 + .../org/apache/tools/ant/taskdefs/Sequential.java | 74 + .../org/apache/tools/ant/taskdefs/SignJar.java | 645 ++ .../main/org/apache/tools/ant/taskdefs/Sleep.java | 194 + .../apache/tools/ant/taskdefs/StreamPumper.java | 252 + .../main/org/apache/tools/ant/taskdefs/SubAnt.java | 642 ++ .../main/org/apache/tools/ant/taskdefs/Sync.java | 606 ++ .../main/org/apache/tools/ant/taskdefs/Tar.java | 1016 ++++ .../tools/ant/taskdefs/TaskOutputStream.java | 96 + .../org/apache/tools/ant/taskdefs/Taskdef.java | 51 + .../org/apache/tools/ant/taskdefs/TempFile.java | 163 + .../main/org/apache/tools/ant/taskdefs/Touch.java | 381 ++ .../org/apache/tools/ant/taskdefs/Transform.java | 30 + .../org/apache/tools/ant/taskdefs/Truncate.java | 205 + .../main/org/apache/tools/ant/taskdefs/Tstamp.java | 341 ++ .../org/apache/tools/ant/taskdefs/Typedef.java | 46 + .../main/org/apache/tools/ant/taskdefs/Unpack.java | 195 + .../main/org/apache/tools/ant/taskdefs/Untar.java | 244 + .../org/apache/tools/ant/taskdefs/UpToDate.java | 277 + .../org/apache/tools/ant/taskdefs/VerifyJar.java | 207 + .../org/apache/tools/ant/taskdefs/WaitFor.java | 277 + .../main/org/apache/tools/ant/taskdefs/War.java | 233 + .../apache/tools/ant/taskdefs/WhichResource.java | 199 + .../org/apache/tools/ant/taskdefs/XSLTLiaison.java | 69 + .../apache/tools/ant/taskdefs/XSLTLiaison2.java | 33 + .../apache/tools/ant/taskdefs/XSLTLiaison3.java | 35 + .../apache/tools/ant/taskdefs/XSLTLiaison4.java | 42 + .../org/apache/tools/ant/taskdefs/XSLTLogger.java | 31 + .../apache/tools/ant/taskdefs/XSLTLoggerAware.java | 31 + .../org/apache/tools/ant/taskdefs/XSLTProcess.java | 1689 ++++++ .../org/apache/tools/ant/taskdefs/XmlProperty.java | 780 +++ .../main/org/apache/tools/ant/taskdefs/Zip.java | 2274 +++++++ .../ant/taskdefs/compilers/AptCompilerAdapter.java | 187 + .../compilers/AptExternalCompilerAdapter.java | 71 + .../ant/taskdefs/compilers/CompilerAdapter.java | 52 + .../compilers/CompilerAdapterExtension.java | 40 + .../taskdefs/compilers/CompilerAdapterFactory.java | 202 + .../taskdefs/compilers/DefaultCompilerAdapter.java | 736 +++ .../apache/tools/ant/taskdefs/compilers/Gcj.java | 160 + .../tools/ant/taskdefs/compilers/Javac12.java | 91 + .../tools/ant/taskdefs/compilers/Javac13.java | 70 + .../ant/taskdefs/compilers/JavacExternal.java | 92 + .../apache/tools/ant/taskdefs/compilers/Jikes.java | 221 + .../apache/tools/ant/taskdefs/compilers/Jvc.java | 116 + .../apache/tools/ant/taskdefs/compilers/Kjc.java | 119 + .../apache/tools/ant/taskdefs/compilers/Sj.java | 61 + .../apache/tools/ant/taskdefs/condition/And.java | 50 + .../tools/ant/taskdefs/condition/AntVersion.java | 171 + .../tools/ant/taskdefs/condition/Condition.java | 35 + .../ant/taskdefs/condition/ConditionBase.java | 281 + .../tools/ant/taskdefs/condition/Contains.java | 76 + .../tools/ant/taskdefs/condition/Equals.java | 148 + .../tools/ant/taskdefs/condition/FilesMatch.java | 101 + .../tools/ant/taskdefs/condition/HasFreeSpace.java | 101 + .../tools/ant/taskdefs/condition/HasMethod.java | 192 + .../apache/tools/ant/taskdefs/condition/Http.java | 117 + .../tools/ant/taskdefs/condition/IsFailure.java | 54 + .../tools/ant/taskdefs/condition/IsFalse.java | 55 + .../ant/taskdefs/condition/IsFileSelected.java | 81 + .../ant/taskdefs/condition/IsLastModified.java | 219 + .../tools/ant/taskdefs/condition/IsReachable.java | 207 + .../tools/ant/taskdefs/condition/IsReference.java | 89 + .../apache/tools/ant/taskdefs/condition/IsSet.java | 51 + .../tools/ant/taskdefs/condition/IsSigned.java | 152 + .../tools/ant/taskdefs/condition/IsTrue.java | 55 + .../tools/ant/taskdefs/condition/Matches.java | 119 + .../apache/tools/ant/taskdefs/condition/Not.java | 50 + .../apache/tools/ant/taskdefs/condition/Or.java | 50 + .../apache/tools/ant/taskdefs/condition/Os.java | 321 + .../ant/taskdefs/condition/ParserSupports.java | 150 + .../ant/taskdefs/condition/ResourceContains.java | 165 + .../ant/taskdefs/condition/ResourceExists.java | 56 + .../ant/taskdefs/condition/ResourcesMatch.java | 93 + .../tools/ant/taskdefs/condition/Socket.java | 87 + .../tools/ant/taskdefs/condition/TypeFound.java | 90 + .../apache/tools/ant/taskdefs/condition/Xor.java | 49 + .../apache/tools/ant/taskdefs/cvslib/CVSEntry.java | 112 + .../tools/ant/taskdefs/cvslib/ChangeLogParser.java | 321 + .../tools/ant/taskdefs/cvslib/ChangeLogTask.java | 489 ++ .../tools/ant/taskdefs/cvslib/ChangeLogWriter.java | 114 + .../tools/ant/taskdefs/cvslib/CvsTagDiff.java | 576 ++ .../tools/ant/taskdefs/cvslib/CvsTagEntry.java | 109 + .../apache/tools/ant/taskdefs/cvslib/CvsUser.java | 93 + .../tools/ant/taskdefs/cvslib/CvsVersion.java | 169 + .../apache/tools/ant/taskdefs/cvslib/RCSFile.java | 69 + .../taskdefs/cvslib/RedirectingOutputStream.java | 46 + .../taskdefs/cvslib/RedirectingStreamHandler.java | 61 + .../apache/tools/ant/taskdefs/defaults.properties | 210 + .../tools/ant/taskdefs/email/EmailAddress.java | 197 + .../apache/tools/ant/taskdefs/email/EmailTask.java | 634 ++ .../apache/tools/ant/taskdefs/email/Header.java | 61 + .../apache/tools/ant/taskdefs/email/Mailer.java | 277 + .../apache/tools/ant/taskdefs/email/Message.java | 203 + .../tools/ant/taskdefs/email/MimeMailer.java | 343 ++ .../tools/ant/taskdefs/email/PlainMailer.java | 177 + .../apache/tools/ant/taskdefs/email/UUMailer.java | 56 + .../ant/taskdefs/launcher/CommandLauncher.java | 213 + .../taskdefs/launcher/CommandLauncherProxy.java | 54 + .../taskdefs/launcher/Java13CommandLauncher.java | 66 + .../ant/taskdefs/launcher/MacCommandLauncher.java | 63 + .../ant/taskdefs/launcher/OS2CommandLauncher.java | 82 + .../launcher/PerlScriptCommandLauncher.java | 90 + .../taskdefs/launcher/ScriptCommandLauncher.java | 88 + .../ant/taskdefs/launcher/VmsCommandLauncher.java | 145 + .../taskdefs/launcher/WinNTCommandLauncher.java | 78 + .../apache/tools/ant/taskdefs/optional/ANTLR.java | 438 ++ .../apache/tools/ant/taskdefs/optional/Cab.java | 357 ++ .../ant/taskdefs/optional/EchoProperties.java | 543 ++ .../apache/tools/ant/taskdefs/optional/Javah.java | 513 ++ .../tools/ant/taskdefs/optional/Native2Ascii.java | 328 + .../tools/ant/taskdefs/optional/NetRexxC.java | 1042 ++++ .../tools/ant/taskdefs/optional/PropertyFile.java | 726 +++ .../ant/taskdefs/optional/RenameExtensions.java | 146 + .../tools/ant/taskdefs/optional/ReplaceRegExp.java | 533 ++ .../apache/tools/ant/taskdefs/optional/Rpm.java | 364 ++ .../ant/taskdefs/optional/SchemaValidate.java | 529 ++ .../apache/tools/ant/taskdefs/optional/Script.java | 133 + .../tools/ant/taskdefs/optional/TraXLiaison.java | 650 ++ .../ant/taskdefs/optional/XMLValidateTask.java | 764 +++ .../ant/taskdefs/optional/XSLTTraceSupport.java | 32 + .../ant/taskdefs/optional/Xalan2TraceSupport.java | 54 + .../tools/ant/taskdefs/optional/ccm/CCMCheck.java | 208 + .../ant/taskdefs/optional/ccm/CCMCheckin.java | 39 + .../taskdefs/optional/ccm/CCMCheckinDefault.java | 38 + .../ant/taskdefs/optional/ccm/CCMCheckout.java | 35 + .../ant/taskdefs/optional/ccm/CCMCreateTask.java | 335 ++ .../ant/taskdefs/optional/ccm/CCMReconfigure.java | 159 + .../tools/ant/taskdefs/optional/ccm/Continuus.java | 144 + .../ant/taskdefs/optional/clearcase/CCCheckin.java | 343 ++ .../taskdefs/optional/clearcase/CCCheckout.java | 516 ++ .../ant/taskdefs/optional/clearcase/CCLock.java | 378 ++ .../ant/taskdefs/optional/clearcase/CCMkattr.java | 425 ++ .../ant/taskdefs/optional/clearcase/CCMkbl.java | 365 ++ .../ant/taskdefs/optional/clearcase/CCMkdir.java | 237 + .../ant/taskdefs/optional/clearcase/CCMkelem.java | 424 ++ .../ant/taskdefs/optional/clearcase/CCMklabel.java | 402 ++ .../taskdefs/optional/clearcase/CCMklbtype.java | 440 ++ .../ant/taskdefs/optional/clearcase/CCRmtype.java | 373 ++ .../taskdefs/optional/clearcase/CCUnCheckout.java | 141 + .../ant/taskdefs/optional/clearcase/CCUnlock.java | 260 + .../ant/taskdefs/optional/clearcase/CCUpdate.java | 331 ++ .../ant/taskdefs/optional/clearcase/ClearCase.java | 242 + .../ant/taskdefs/optional/depend/AntAnalyzer.java | 144 + .../ant/taskdefs/optional/depend/ClassFile.java | 121 + .../optional/depend/ClassFileIterator.java | 33 + .../taskdefs/optional/depend/ClassFileUtils.java | 52 + .../tools/ant/taskdefs/optional/depend/Depend.java | 917 +++ .../optional/depend/DirectoryIterator.java | 164 + .../taskdefs/optional/depend/JarFileIterator.java | 89 + .../optional/depend/constantpool/ClassCPInfo.java | 93 + .../depend/constantpool/ConstantCPInfo.java | 63 + .../optional/depend/constantpool/ConstantPool.java | 358 ++ .../depend/constantpool/ConstantPoolEntry.java | 242 + .../optional/depend/constantpool/DoubleCPInfo.java | 58 + .../depend/constantpool/FieldRefCPInfo.java | 130 + .../optional/depend/constantpool/FloatCPInfo.java | 56 + .../depend/constantpool/IntegerCPInfo.java | 56 + .../constantpool/InterfaceMethodRefCPInfo.java | 137 + .../depend/constantpool/InvokeDynamicCPInfo.java | 85 + .../optional/depend/constantpool/LongCPInfo.java | 56 + .../depend/constantpool/MethodHandleCPInfo.java | 107 + .../depend/constantpool/MethodRefCPInfo.java | 133 + .../depend/constantpool/MethodTypeCPInfo.java | 82 + .../depend/constantpool/NameAndTypeCPInfo.java | 112 + .../optional/depend/constantpool/StringCPInfo.java | 74 + .../optional/depend/constantpool/Utf8CPInfo.java | 67 + .../optional/ejb/BorlandDeploymentTool.java | 559 ++ .../optional/ejb/BorlandGenerateClient.java | 313 + .../taskdefs/optional/ejb/DescriptorHandler.java | 390 ++ .../taskdefs/optional/ejb/EJBDeploymentTool.java | 61 + .../tools/ant/taskdefs/optional/ejb/EjbJar.java | 630 ++ .../optional/ejb/GenericDeploymentTool.java | 953 +++ .../optional/ejb/IPlanetDeploymentTool.java | 403 ++ .../ant/taskdefs/optional/ejb/IPlanetEjbc.java | 1495 +++++ .../ant/taskdefs/optional/ejb/IPlanetEjbcTask.java | 321 + .../optional/ejb/InnerClassFilenameFilter.java | 54 + .../taskdefs/optional/ejb/JbossDeploymentTool.java | 111 + .../taskdefs/optional/ejb/JonasDeploymentTool.java | 835 +++ .../optional/ejb/WeblogicDeploymentTool.java | 932 +++ .../ejb/WeblogicTOPLinkDeploymentTool.java | 113 + .../optional/ejb/WebsphereDeploymentTool.java | 897 +++ .../taskdefs/optional/extension/Compatability.java | 57 + .../taskdefs/optional/extension/Compatibility.java | 57 + .../taskdefs/optional/extension/DeweyDecimal.java | 54 + .../ant/taskdefs/optional/extension/Extension.java | 690 +++ .../optional/extension/ExtensionAdapter.java | 215 + .../optional/extension/ExtensionResolver.java | 43 + .../taskdefs/optional/extension/ExtensionSet.java | 153 + .../taskdefs/optional/extension/ExtensionUtil.java | 215 + .../optional/extension/ExtraAttribute.java | 83 + .../optional/extension/JarLibAvailableTask.java | 157 + .../optional/extension/JarLibDisplayTask.java | 119 + .../optional/extension/JarLibManifestTask.java | 296 + .../optional/extension/JarLibResolveTask.java | 268 + .../taskdefs/optional/extension/LibFileSet.java | 117 + .../optional/extension/LibraryDisplayer.java | 150 + .../taskdefs/optional/extension/Specification.java | 605 ++ .../optional/extension/resolvers/AntResolver.java | 117 + .../extension/resolvers/LocationResolver.java | 65 + .../optional/extension/resolvers/URLResolver.java | 133 + .../ant/taskdefs/optional/i18n/Translate.java | 632 ++ .../tools/ant/taskdefs/optional/image/Image.java | 421 ++ .../optional/j2ee/AbstractHotDeploymentTool.java | 193 + .../optional/j2ee/GenericHotDeploymentTool.java | 140 + .../taskdefs/optional/j2ee/HotDeploymentTool.java | 61 + .../optional/j2ee/JonasHotDeploymentTool.java | 252 + .../ant/taskdefs/optional/j2ee/ServerDeploy.java | 153 + .../optional/j2ee/WebLogicHotDeploymentTool.java | 247 + .../tools/ant/taskdefs/optional/javacc/JJDoc.java | 226 + .../tools/ant/taskdefs/optional/javacc/JJTree.java | 416 ++ .../tools/ant/taskdefs/optional/javacc/JavaCC.java | 579 ++ .../tools/ant/taskdefs/optional/javah/Gcjh.java | 89 + .../ant/taskdefs/optional/javah/JavahAdapter.java | 38 + .../optional/javah/JavahAdapterFactory.java | 120 + .../tools/ant/taskdefs/optional/javah/Kaffeh.java | 94 + .../ant/taskdefs/optional/javah/SunJavah.java | 123 + .../ant/taskdefs/optional/jdepend/JDependTask.java | 684 +++ .../taskdefs/optional/jlink/ClassNameReader.java | 139 + .../ant/taskdefs/optional/jlink/JlinkTask.java | 183 + .../tools/ant/taskdefs/optional/jlink/jlink.java | 458 ++ .../ant/taskdefs/optional/jsp/Jasper41Mangler.java | 93 + .../tools/ant/taskdefs/optional/jsp/JspC.java | 709 +++ .../ant/taskdefs/optional/jsp/JspMangler.java | 47 + .../ant/taskdefs/optional/jsp/JspNameMangler.java | 155 + .../tools/ant/taskdefs/optional/jsp/WLJspc.java | 334 ++ .../jsp/compilers/DefaultJspCompilerAdapter.java | 153 + .../taskdefs/optional/jsp/compilers/JasperC.java | 182 + .../optional/jsp/compilers/JspCompilerAdapter.java | 64 + .../jsp/compilers/JspCompilerAdapterFactory.java | 122 + .../optional/junit/AggregateTransformer.java | 346 ++ .../ant/taskdefs/optional/junit/BaseTest.java | 241 + .../ant/taskdefs/optional/junit/BatchTest.java | 202 + .../optional/junit/BriefJUnitResultFormatter.java | 300 + .../ant/taskdefs/optional/junit/Constants.java | 46 + .../junit/CustomJUnit4TestAdapterCache.java | 90 + .../tools/ant/taskdefs/optional/junit/DOMUtil.java | 228 + .../ant/taskdefs/optional/junit/Enumerations.java | 177 + .../taskdefs/optional/junit/FailureRecorder.java | 448 ++ .../taskdefs/optional/junit/FormatterElement.java | 401 ++ .../optional/junit/IgnoredTestListener.java | 52 + .../taskdefs/optional/junit/IgnoredTestResult.java | 99 + .../optional/junit/JUnit4TestMethodAdapter.java | 193 + .../optional/junit/JUnitResultFormatter.java | 65 + .../ant/taskdefs/optional/junit/JUnitTask.java | 2283 +++++++ .../taskdefs/optional/junit/JUnitTaskMirror.java | 190 + .../optional/junit/JUnitTaskMirrorImpl.java | 109 + .../ant/taskdefs/optional/junit/JUnitTest.java | 542 ++ .../taskdefs/optional/junit/JUnitTestRunner.java | 1297 ++++ .../optional/junit/JUnitVersionHelper.java | 179 + .../junit/OutErrSummaryJUnitResultFormatter.java | 36 + .../optional/junit/PlainJUnitResultFormatter.java | 317 + .../junit/SummaryJUnitResultFormatter.java | 213 + .../taskdefs/optional/junit/TearDownOnVmCrash.java | 144 + .../ant/taskdefs/optional/junit/TestIgnored.java | 35 + .../optional/junit/TestListenerWrapper.java | 63 + .../ant/taskdefs/optional/junit/XMLConstants.java | 141 + .../optional/junit/XMLJUnitResultFormatter.java | 366 ++ .../optional/junit/XMLResultAggregator.java | 329 + .../optional/native2ascii/DefaultNative2Ascii.java | 106 + .../optional/native2ascii/KaffeNative2Ascii.java | 88 + .../optional/native2ascii/Native2AsciiAdapter.java | 44 + .../native2ascii/Native2AsciiAdapterFactory.java | 116 + .../optional/native2ascii/SunNative2Ascii.java | 71 + .../tools/ant/taskdefs/optional/net/FTP.java | 2725 +++++++++ .../ant/taskdefs/optional/net/FTPConfigurator.java | 99 + .../tools/ant/taskdefs/optional/net/FTPTask.java | 965 +++ .../ant/taskdefs/optional/net/FTPTaskConfig.java | 28 + .../ant/taskdefs/optional/net/FTPTaskMirror.java | 24 + .../taskdefs/optional/net/FTPTaskMirrorImpl.java | 1951 ++++++ .../tools/ant/taskdefs/optional/net/MimeMail.java | 43 + .../tools/ant/taskdefs/optional/net/RExecTask.java | 479 ++ .../tools/ant/taskdefs/optional/net/SetProxy.java | 283 + .../ant/taskdefs/optional/net/TelnetTask.java | 397 ++ .../tools/ant/taskdefs/optional/pvcs/Pvcs.java | 675 +++ .../ant/taskdefs/optional/pvcs/PvcsProject.java | 49 + .../ant/taskdefs/optional/script/ScriptDef.java | 397 ++ .../taskdefs/optional/script/ScriptDefBase.java | 132 + .../tools/ant/taskdefs/optional/sos/SOS.java | 479 ++ .../ant/taskdefs/optional/sos/SOSCheckin.java | 101 + .../ant/taskdefs/optional/sos/SOSCheckout.java | 85 + .../tools/ant/taskdefs/optional/sos/SOSCmd.java | 81 + .../tools/ant/taskdefs/optional/sos/SOSGet.java | 116 + .../tools/ant/taskdefs/optional/sos/SOSLabel.java | 91 + .../tools/ant/taskdefs/optional/sos/package.html | 29 + .../taskdefs/optional/sound/AntSoundPlayer.java | 251 + .../ant/taskdefs/optional/sound/SoundTask.java | 193 + .../ant/taskdefs/optional/splash/SplashScreen.java | 181 + .../ant/taskdefs/optional/splash/SplashTask.java | 297 + .../taskdefs/optional/ssh/AbstractSshMessage.java | 272 + .../tools/ant/taskdefs/optional/ssh/Directory.java | 196 + .../ant/taskdefs/optional/ssh/LogListener.java | 30 + .../tools/ant/taskdefs/optional/ssh/SSHBase.java | 236 + .../tools/ant/taskdefs/optional/ssh/SSHExec.java | 519 ++ .../ant/taskdefs/optional/ssh/SSHSession.java | 333 ++ .../ant/taskdefs/optional/ssh/SSHUserInfo.java | 217 + .../tools/ant/taskdefs/optional/ssh/Scp.java | 486 ++ .../ant/taskdefs/optional/ssh/ScpFromMessage.java | 311 + .../optional/ssh/ScpFromMessageBySftp.java | 205 + .../ant/taskdefs/optional/ssh/ScpToMessage.java | 331 ++ .../taskdefs/optional/ssh/ScpToMessageBySftp.java | 277 + .../ant/taskdefs/optional/testing/BlockFor.java | 71 + .../optional/testing/BuildTimeoutException.java | 114 + .../ant/taskdefs/optional/testing/Funtest.java | 577 ++ .../taskdefs/optional/unix/AbstractAccessTask.java | 110 + .../tools/ant/taskdefs/optional/unix/Chgrp.java | 84 + .../tools/ant/taskdefs/optional/unix/Chown.java | 84 + .../tools/ant/taskdefs/optional/unix/Symlink.java | 600 ++ .../tools/ant/taskdefs/optional/vss/MSVSS.java | 784 +++ .../tools/ant/taskdefs/optional/vss/MSVSSADD.java | 122 + .../ant/taskdefs/optional/vss/MSVSSCHECKIN.java | 114 + .../ant/taskdefs/optional/vss/MSVSSCHECKOUT.java | 165 + .../tools/ant/taskdefs/optional/vss/MSVSSCP.java | 69 + .../ant/taskdefs/optional/vss/MSVSSCREATE.java | 91 + .../ant/taskdefs/optional/vss/MSVSSConstants.java | 127 + .../tools/ant/taskdefs/optional/vss/MSVSSGET.java | 172 + .../ant/taskdefs/optional/vss/MSVSSHISTORY.java | 199 + .../ant/taskdefs/optional/vss/MSVSSLABEL.java | 108 + .../ant/taskdefs/optional/windows/Attrib.java | 196 + .../ant/taskdefs/rmic/DefaultRmicAdapter.java | 493 ++ .../tools/ant/taskdefs/rmic/ForkingSunRmic.java | 90 + .../apache/tools/ant/taskdefs/rmic/KaffeRmic.java | 104 + .../tools/ant/taskdefs/rmic/RmicAdapter.java | 67 + .../ant/taskdefs/rmic/RmicAdapterFactory.java | 135 + .../apache/tools/ant/taskdefs/rmic/SunRmic.java | 114 + .../org/apache/tools/ant/taskdefs/rmic/WLRmic.java | 136 + .../apache/tools/ant/taskdefs/rmic/XNewRmic.java | 52 + .../apache/tools/ant/types/AbstractFileSet.java | 922 +++ .../apache/tools/ant/types/AntFilterReader.java | 178 + .../org/apache/tools/ant/types/ArchiveFileSet.java | 596 ++ .../org/apache/tools/ant/types/ArchiveScanner.java | 363 ++ .../org/apache/tools/ant/types/Assertions.java | 359 ++ .../org/apache/tools/ant/types/Commandline.java | 689 +++ .../apache/tools/ant/types/CommandlineJava.java | 699 +++ .../org/apache/tools/ant/types/Comparison.java | 95 + .../org/apache/tools/ant/types/DTDLocation.java | 33 + .../main/org/apache/tools/ant/types/DataType.java | 367 ++ .../org/apache/tools/ant/types/Description.java | 116 + .../main/org/apache/tools/ant/types/DirSet.java | 115 + .../tools/ant/types/EnumeratedAttribute.java | 153 + .../org/apache/tools/ant/types/Environment.java | 177 + .../main/org/apache/tools/ant/types/FileList.java | 219 + .../main/org/apache/tools/ant/types/FileSet.java | 94 + .../org/apache/tools/ant/types/FilterChain.java | 418 ++ .../main/org/apache/tools/ant/types/FilterSet.java | 654 ++ .../tools/ant/types/FilterSetCollection.java | 88 + .../org/apache/tools/ant/types/FlexInteger.java | 54 + .../main/org/apache/tools/ant/types/LogLevel.java | 87 + .../main/org/apache/tools/ant/types/Mapper.java | 322 + .../main/org/apache/tools/ant/types/Parameter.java | 82 + .../apache/tools/ant/types/Parameterizable.java | 31 + .../src/main/org/apache/tools/ant/types/Path.java | 775 +++ .../org/apache/tools/ant/types/PatternSet.java | 541 ++ .../org/apache/tools/ant/types/Permissions.java | 356 ++ .../org/apache/tools/ant/types/PropertySet.java | 577 ++ .../org/apache/tools/ant/types/Quantifier.java | 146 + .../apache/tools/ant/types/RedirectorElement.java | 630 ++ .../main/org/apache/tools/ant/types/Reference.java | 134 + .../apache/tools/ant/types/RegularExpression.java | 141 + .../main/org/apache/tools/ant/types/Resource.java | 439 ++ .../apache/tools/ant/types/ResourceCollection.java | 50 + .../apache/tools/ant/types/ResourceFactory.java | 38 + .../apache/tools/ant/types/ResourceLocation.java | 106 + .../org/apache/tools/ant/types/Substitution.java | 77 + .../org/apache/tools/ant/types/TarFileSet.java | 269 + .../org/apache/tools/ant/types/TarScanner.java | 87 + .../org/apache/tools/ant/types/TimeComparison.java | 122 + .../org/apache/tools/ant/types/XMLCatalog.java | 1128 ++++ .../org/apache/tools/ant/types/ZipFileSet.java | 117 + .../org/apache/tools/ant/types/ZipScanner.java | 99 + .../apache/tools/ant/types/conditions/antlib.xml | 93 + .../org/apache/tools/ant/types/defaults.properties | 101 + .../tools/ant/types/mappers/CutDirsMapper.java | 76 + .../tools/ant/types/mappers/FilterMapper.java | 87 + .../types/optional/AbstractScriptComponent.java | 158 + .../tools/ant/types/optional/ScriptCondition.java | 68 + .../tools/ant/types/optional/ScriptFilter.java | 183 + .../tools/ant/types/optional/ScriptMapper.java | 91 + .../tools/ant/types/optional/ScriptSelector.java | 223 + .../ant/types/optional/depend/ClassfileSet.java | 183 + .../ant/types/optional/depend/DependScanner.java | 225 + .../apache/tools/ant/types/optional/image/Arc.java | 123 + .../tools/ant/types/optional/image/BasicShape.java | 55 + .../ant/types/optional/image/ColorMapper.java | 102 + .../tools/ant/types/optional/image/Draw.java | 102 + .../ant/types/optional/image/DrawOperation.java | 40 + .../tools/ant/types/optional/image/Ellipse.java | 87 + .../ant/types/optional/image/ImageOperation.java | 72 + .../tools/ant/types/optional/image/Rectangle.java | 119 + .../tools/ant/types/optional/image/Rotate.java | 118 + .../tools/ant/types/optional/image/Scale.java | 181 + .../tools/ant/types/optional/image/Text.java | 128 + .../types/optional/image/TransformOperation.java | 38 + .../tools/ant/types/resolver/ApacheCatalog.java | 121 + .../ant/types/resolver/ApacheCatalogResolver.java | 174 + .../apache/tools/ant/types/resolver/package.html | 35 + .../types/resources/AbstractClasspathResource.java | 265 + .../AbstractResourceCollectionWrapper.java | 209 + .../tools/ant/types/resources/AllButFirst.java | 60 + .../tools/ant/types/resources/AllButLast.java | 53 + .../tools/ant/types/resources/Appendable.java | 35 + .../tools/ant/types/resources/ArchiveResource.java | 293 + .../apache/tools/ant/types/resources/Archives.java | 194 + .../tools/ant/types/resources/BCFileSet.java | 73 + .../tools/ant/types/resources/BZip2Resource.java | 85 + .../resources/BaseResourceCollectionContainer.java | 268 + .../resources/BaseResourceCollectionWrapper.java | 56 + .../ant/types/resources/CompressedResource.java | 60 + .../resources/ContentTransformingResource.java | 177 + .../tools/ant/types/resources/Difference.java | 63 + .../apache/tools/ant/types/resources/FailFast.java | 135 + .../tools/ant/types/resources/FileProvider.java | 36 + .../tools/ant/types/resources/FileResource.java | 392 ++ .../ant/types/resources/FileResourceIterator.java | 149 + .../apache/tools/ant/types/resources/Files.java | 503 ++ .../apache/tools/ant/types/resources/First.java | 48 + .../tools/ant/types/resources/GZipResource.java | 75 + .../resources/ImmutableResourceException.java | 46 + .../tools/ant/types/resources/Intersect.java | 64 + .../ant/types/resources/JavaConstantResource.java | 70 + .../tools/ant/types/resources/JavaResource.java | 141 + .../org/apache/tools/ant/types/resources/Last.java | 73 + .../resources/LazyResourceCollectionWrapper.java | 176 + .../ant/types/resources/LogOutputResource.java | 68 + .../tools/ant/types/resources/MappedResource.java | 116 + .../types/resources/MappedResourceCollection.java | 267 + .../ant/types/resources/MultiRootFileSet.java | 237 + .../ant/types/resources/PropertyResource.java | 206 + .../ant/types/resources/ResourceDecorator.java | 270 + .../tools/ant/types/resources/ResourceList.java | 239 + .../tools/ant/types/resources/Resources.java | 274 + .../apache/tools/ant/types/resources/Restrict.java | 156 + .../ant/types/resources/SizeLimitCollection.java | 71 + .../org/apache/tools/ant/types/resources/Sort.java | 98 + .../tools/ant/types/resources/StringResource.java | 261 + .../tools/ant/types/resources/TarResource.java | 198 + .../apache/tools/ant/types/resources/Tokens.java | 137 + .../tools/ant/types/resources/Touchable.java | 32 + .../tools/ant/types/resources/URLProvider.java | 35 + .../tools/ant/types/resources/URLResource.java | 454 ++ .../apache/tools/ant/types/resources/Union.java | 156 + .../tools/ant/types/resources/ZipResource.java | 226 + .../ant/types/resources/comparators/Content.java | 70 + .../ant/types/resources/comparators/Date.java | 45 + .../comparators/DelegatedResourceComparator.java | 125 + .../ant/types/resources/comparators/Exists.java | 43 + .../types/resources/comparators/FileSystem.java | 60 + .../ant/types/resources/comparators/Name.java | 38 + .../resources/comparators/ResourceComparator.java | 81 + .../ant/types/resources/comparators/Reverse.java | 91 + .../ant/types/resources/comparators/Size.java | 39 + .../ant/types/resources/comparators/Type.java | 44 + .../tools/ant/types/resources/selectors/And.java | 58 + .../ant/types/resources/selectors/Compare.java | 149 + .../tools/ant/types/resources/selectors/Date.java | 162 + .../ant/types/resources/selectors/Exists.java | 37 + .../ant/types/resources/selectors/InstanceOf.java | 130 + .../ant/types/resources/selectors/Majority.java | 84 + .../tools/ant/types/resources/selectors/Name.java | 151 + .../tools/ant/types/resources/selectors/None.java | 59 + .../tools/ant/types/resources/selectors/Not.java | 66 + .../tools/ant/types/resources/selectors/Or.java | 58 + .../resources/selectors/ResourceSelector.java | 35 + .../selectors/ResourceSelectorContainer.java | 128 + .../tools/ant/types/resources/selectors/Size.java | 73 + .../tools/ant/types/resources/selectors/Type.java | 110 + .../types/selectors/AbstractSelectorContainer.java | 353 ++ .../tools/ant/types/selectors/AndSelector.java | 74 + .../ant/types/selectors/BaseExtendSelector.java | 87 + .../tools/ant/types/selectors/BaseSelector.java | 113 + .../ant/types/selectors/BaseSelectorContainer.java | 343 ++ .../types/selectors/ContainsRegexpSelector.java | 219 + .../ant/types/selectors/ContainsSelector.java | 221 + .../tools/ant/types/selectors/DateSelector.java | 260 + .../tools/ant/types/selectors/DependSelector.java | 78 + .../tools/ant/types/selectors/DepthSelector.java | 185 + .../ant/types/selectors/DifferentSelector.java | 114 + .../ant/types/selectors/ExtendFileSelector.java | 39 + .../tools/ant/types/selectors/ExtendSelector.java | 201 + .../tools/ant/types/selectors/FileSelector.java | 48 + .../ant/types/selectors/FilenameSelector.java | 195 + .../ant/types/selectors/MajoritySelector.java | 103 + .../tools/ant/types/selectors/MappingSelector.java | 165 + .../tools/ant/types/selectors/NoneSelector.java | 75 + .../tools/ant/types/selectors/NotSelector.java | 73 + .../tools/ant/types/selectors/OrSelector.java | 75 + .../tools/ant/types/selectors/PresentSelector.java | 198 + .../ant/types/selectors/ReadableSelector.java | 49 + .../tools/ant/types/selectors/SelectSelector.java | 231 + .../ant/types/selectors/SelectorContainer.java | 187 + .../tools/ant/types/selectors/SelectorScanner.java | 49 + .../tools/ant/types/selectors/SelectorUtils.java | 695 +++ .../tools/ant/types/selectors/SignedSelector.java | 59 + .../tools/ant/types/selectors/SizeSelector.java | 279 + .../tools/ant/types/selectors/TokenizedPath.java | 222 + .../ant/types/selectors/TokenizedPattern.java | 177 + .../tools/ant/types/selectors/TypeSelector.java | 135 + .../ant/types/selectors/WritableSelector.java | 46 + .../selectors/modifiedselector/Algorithm.java | 48 + .../types/selectors/modifiedselector/Cache.java | 72 + .../modifiedselector/ChecksumAlgorithm.java | 151 + .../modifiedselector/DigestAlgorithm.java | 208 + .../modifiedselector/EqualComparator.java | 58 + .../modifiedselector/HashvalueAlgorithm.java | 80 + .../modifiedselector/ModifiedSelector.java | 971 +++ .../modifiedselector/PropertiesfileCache.java | 236 + .../org/apache/tools/ant/types/spi/Provider.java | 63 + .../org/apache/tools/ant/types/spi/Service.java | 116 + .../org/apache/tools/ant/util/Base64Converter.java | 124 + .../org/apache/tools/ant/util/ChainedMapper.java | 60 + .../org/apache/tools/ant/util/ClasspathUtils.java | 463 ++ .../org/apache/tools/ant/util/CollectionUtils.java | 278 + .../org/apache/tools/ant/util/CompositeMapper.java | 50 + .../tools/ant/util/ConcatFileInputStream.java | 136 + .../tools/ant/util/ConcatResourceInputStream.java | 147 + .../org/apache/tools/ant/util/ContainerMapper.java | 119 + .../apache/tools/ant/util/DOMElementWriter.java | 640 ++ .../main/org/apache/tools/ant/util/DOMUtils.java | 163 + .../main/org/apache/tools/ant/util/DateUtils.java | 301 + .../org/apache/tools/ant/util/DeweyDecimal.java | 237 + .../org/apache/tools/ant/util/FileNameMapper.java | 60 + .../org/apache/tools/ant/util/FileTokenizer.java | 48 + .../main/org/apache/tools/ant/util/FileUtils.java | 1722 ++++++ .../apache/tools/ant/util/FirstMatchMapper.java | 45 + .../apache/tools/ant/util/FlatFileNameMapper.java | 54 + .../apache/tools/ant/util/GlobPatternMapper.java | 203 + .../org/apache/tools/ant/util/IdentityMapper.java | 52 + .../org/apache/tools/ant/util/IdentityStack.java | 130 + .../main/org/apache/tools/ant/util/JAXPUtils.java | 260 + .../org/apache/tools/ant/util/JavaEnvUtils.java | 573 ++ .../tools/ant/util/KeepAliveInputStream.java | 66 + .../tools/ant/util/KeepAliveOutputStream.java | 83 + .../tools/ant/util/LayoutPreservingProperties.java | 775 +++ .../tools/ant/util/LazyFileOutputStream.java | 162 + .../org/apache/tools/ant/util/LazyHashtable.java | 120 + .../apache/tools/ant/util/LeadPipeInputStream.java | 161 + .../tools/ant/util/LineOrientedOutputStream.java | 158 + .../util/LineOrientedOutputStreamRedirector.java | 68 + .../org/apache/tools/ant/util/LineTokenizer.java | 115 + .../org/apache/tools/ant/util/LinkedHashtable.java | 132 + .../org/apache/tools/ant/util/LoaderUtils.java | 140 + .../org/apache/tools/ant/util/MergingMapper.java | 67 + .../tools/ant/util/OutputStreamFunneler.java | 176 + .../apache/tools/ant/util/PackageNameMapper.java | 49 + .../org/apache/tools/ant/util/ProcessUtil.java | 65 + .../tools/ant/util/PropertyOutputStream.java | 69 + .../main/org/apache/tools/ant/util/ProxySetup.java | 115 + .../apache/tools/ant/util/ReaderInputStream.java | 205 + .../org/apache/tools/ant/util/ReflectUtil.java | 212 + .../org/apache/tools/ant/util/ReflectWrapper.java | 99 + .../apache/tools/ant/util/RegexpPatternMapper.java | 159 + .../org/apache/tools/ant/util/ResourceUtils.java | 860 +++ .../org/apache/tools/ant/util/RetryHandler.java | 74 + .../main/org/apache/tools/ant/util/Retryable.java | 38 + .../apache/tools/ant/util/ScriptFixBSFPath.java | 147 + .../org/apache/tools/ant/util/ScriptRunner.java | 27 + .../apache/tools/ant/util/ScriptRunnerBase.java | 360 ++ .../apache/tools/ant/util/ScriptRunnerCreator.java | 133 + .../apache/tools/ant/util/ScriptRunnerHelper.java | 206 + .../apache/tools/ant/util/SourceFileScanner.java | 173 + .../apache/tools/ant/util/SplitClassLoader.java | 73 + .../org/apache/tools/ant/util/StringTokenizer.java | 154 + .../org/apache/tools/ant/util/StringUtils.java | 273 + .../apache/tools/ant/util/SymbolicLinkUtils.java | 296 + .../main/org/apache/tools/ant/util/TaskLogger.java | 79 + .../org/apache/tools/ant/util/TeeOutputStream.java | 95 + .../org/apache/tools/ant/util/TimeoutObserver.java | 37 + .../main/org/apache/tools/ant/util/Tokenizer.java | 44 + .../main/org/apache/tools/ant/util/UUEncoder.java | 148 + .../apache/tools/ant/util/UnPackageNameMapper.java | 48 + .../org/apache/tools/ant/util/UnicodeUtil.java | 46 + .../main/org/apache/tools/ant/util/VectorSet.java | 242 + .../main/org/apache/tools/ant/util/Watchdog.java | 128 + .../apache/tools/ant/util/WeakishReference.java | 91 + .../main/org/apache/tools/ant/util/WorkerAnt.java | 172 + .../org/apache/tools/ant/util/XMLFragment.java | 155 + .../org/apache/tools/ant/util/XmlConstants.java | 65 + .../tools/ant/util/depend/AbstractAnalyzer.java | 286 + .../tools/ant/util/depend/DependencyAnalyzer.java | 130 + .../ant/util/depend/bcel/AncestorAnalyzer.java | 144 + .../ant/util/depend/bcel/DependencyVisitor.java | 192 + .../tools/ant/util/depend/bcel/FullAnalyzer.java | 136 + .../tools/ant/util/facade/FacadeTaskHelper.java | 165 + .../facade/ImplementationSpecificArgument.java | 61 + .../tools/ant/util/java15/ProxyDiagnostics.java | 108 + .../tools/ant/util/optional/JavaxScriptRunner.java | 163 + .../ant/util/optional/NoExitSecurityManager.java | 51 + .../tools/ant/util/optional/ScriptRunner.java | 177 + .../ant/util/optional/WeakishReference12.java | 45 + .../tools/ant/util/regexp/JakartaOroMatcher.java | 170 + .../tools/ant/util/regexp/JakartaOroRegexp.java | 98 + .../ant/util/regexp/JakartaRegexpMatcher.java | 161 + .../tools/ant/util/regexp/JakartaRegexpRegexp.java | 90 + .../tools/ant/util/regexp/Jdk14RegexpMatcher.java | 170 + .../tools/ant/util/regexp/Jdk14RegexpRegexp.java | 105 + .../org/apache/tools/ant/util/regexp/Regexp.java | 50 + .../tools/ant/util/regexp/RegexpFactory.java | 85 + .../tools/ant/util/regexp/RegexpMatcher.java | 110 + .../ant/util/regexp/RegexpMatcherFactory.java | 114 + .../apache/tools/ant/util/regexp/RegexpUtil.java | 109 + .../src/main/org/apache/tools/ant/version.txt | 2 + .../org/apache/tools/bzip2/BZip2Constants.java | 109 + .../src/main/org/apache/tools/bzip2/BlockSort.java | 1081 ++++ .../org/apache/tools/bzip2/CBZip2InputStream.java | 1062 ++++ .../org/apache/tools/bzip2/CBZip2OutputStream.java | 1580 +++++ .../src/main/org/apache/tools/bzip2/CRC.java | 141 + .../apache/tools/mail/ErrorInQuitException.java | 43 + .../main/org/apache/tools/mail/MailMessage.java | 526 ++ .../org/apache/tools/mail/SmtpResponseReader.java | 106 + .../apache/tools/tar/TarArchiveSparseEntry.java | 63 + .../src/main/org/apache/tools/tar/TarBuffer.java | 463 ++ .../main/org/apache/tools/tar/TarConstants.java | 293 + .../src/main/org/apache/tools/tar/TarEntry.java | 1149 ++++ .../main/org/apache/tools/tar/TarInputStream.java | 660 +++ .../main/org/apache/tools/tar/TarOutputStream.java | 657 ++ .../src/main/org/apache/tools/tar/TarUtils.java | 564 ++ .../tools/zip/AbstractUnicodeExtraField.java | 183 + .../main/org/apache/tools/zip/AsiExtraField.java | 352 ++ .../zip/CentralDirectoryParsingZipExtraField.java | 40 + .../main/org/apache/tools/zip/ExtraFieldUtils.java | 314 + .../org/apache/tools/zip/FallbackZipEncoding.java | 94 + .../org/apache/tools/zip/GeneralPurposeBit.java | 194 + .../src/main/org/apache/tools/zip/JarMarker.java | 108 + .../main/org/apache/tools/zip/NioZipEncoding.java | 122 + .../apache/tools/zip/Simple8BitZipEncoding.java | 274 + .../apache/tools/zip/UnicodeCommentExtraField.java | 70 + .../apache/tools/zip/UnicodePathExtraField.java | 67 + .../src/main/org/apache/tools/zip/UnixStat.java | 76 + .../tools/zip/UnparseableExtraFieldData.java | 115 + .../apache/tools/zip/UnrecognizedExtraField.java | 154 + .../tools/zip/UnsupportedZipFeatureException.java | 89 + .../zip/Zip64ExtendedInformationExtraField.java | 322 + .../src/main/org/apache/tools/zip/Zip64Mode.java | 47 + .../apache/tools/zip/Zip64RequiredException.java | 49 + .../main/org/apache/tools/zip/ZipConstants.java | 59 + .../org/apache/tools/zip/ZipEightByteInteger.java | 229 + .../src/main/org/apache/tools/zip/ZipEncoding.java | 84 + .../org/apache/tools/zip/ZipEncodingHelper.java | 252 + .../src/main/org/apache/tools/zip/ZipEntry.java | 786 +++ .../main/org/apache/tools/zip/ZipExtraField.java | 85 + .../src/main/org/apache/tools/zip/ZipFile.java | 1048 ++++ .../src/main/org/apache/tools/zip/ZipLong.java | 201 + .../main/org/apache/tools/zip/ZipOutputStream.java | 1674 ++++++ .../src/main/org/apache/tools/zip/ZipShort.java | 166 + .../src/main/org/apache/tools/zip/ZipUtil.java | 252 + .../ant/taskdefs/javadoc-frame-injections-fix.txt | 37 + .../ant/types/resources/comparators/antlib.xml | 33 + .../tools/ant/types/resources/selectors/antlib.xml | 53 + framework/src/ant/apache-ant-1.9.6/src/script/ant | 336 ++ .../src/ant/apache-ant-1.9.6/src/script/ant.bat | 218 + .../src/ant/apache-ant-1.9.6/src/script/ant.cmd | 93 + .../src/ant/apache-ant-1.9.6/src/script/antRun | 24 + .../src/ant/apache-ant-1.9.6/src/script/antRun.bat | 50 + .../src/ant/apache-ant-1.9.6/src/script/antRun.pl | 63 + .../src/ant/apache-ant-1.9.6/src/script/antenv.cmd | 98 + .../src/script/complete-ant-cmd.pl | 115 + .../src/ant/apache-ant-1.9.6/src/script/envset.cmd | 131 + .../src/ant/apache-ant-1.9.6/src/script/lcp.bat | 31 + .../src/ant/apache-ant-1.9.6/src/script/runant.pl | 150 + .../src/ant/apache-ant-1.9.6/src/script/runant.py | 105 + .../src/ant/apache-ant-1.9.6/src/script/runrc.cmd | 60 + .../src/tests/antunit/antunit-base.xml | 60 + .../src/tests/antunit/bugfixes/README.txt | 2 + .../antunit/bugfixes/br50866/br50866-test.xml | 13 + .../src/tests/antunit/bugfixes/br50866/common.xml | 8 + .../src/tests/antunit/bugfixes/br50866/middle.xml | 7 + .../bugfixes/bugzilla-43324-stackoverflow-test.xml | 68 + .../src/tests/antunit/core/ant-attribute-test.xml | 74 + .../src/tests/antunit/core/bindtargets-test.xml | 39 + .../src/tests/antunit/core/classloader-test.xml | 88 + .../src/tests/antunit/core/createtask-test.xml | 50 + .../antunit/core/dirscanner-symlinks-test.xml | 200 + .../tests/antunit/core/extension-point-test.xml | 210 + .../tests/antunit/core/extension/include-test.xml | 34 + .../src/tests/antunit/core/extension/module1.xml | 25 + .../src/tests/antunit/core/location/location.xml | 93 + .../core/location/src/task/EchoLocation.java | 26 + .../src/tests/antunit/core/magic-names-test.xml | 51 + .../tests/antunit/core/nested-elements-test.xml | 125 + .../src/tests/antunit/core/nested-text-test.xml | 42 + .../src/tests/antunit/core/projecthelpers-test.xml | 86 + .../projecthelpers/build-cross-extension-ref.xml | 26 + .../build-cross-extension-ref.xmlref | 14 + .../core/projecthelpers/build-cross-extension.xml | 36 + .../projecthelpers/build-cross-targets-ref.xml | 22 + .../projecthelpers/build-cross-targets-ref.xmlref | 14 + .../core/projecthelpers/build-cross-targets.xml | 27 + .../projecthelpers/build-many-import-common.xml | 23 + .../projecthelpers/build-many-import-commonref.xml | 23 + .../core/projecthelpers/build-many-import-ref.xml | 24 + .../projecthelpers/build-many-import-ref.xmlref | 14 + .../core/projecthelpers/build-many-import.xml | 32 + .../core/projecthelpers/build-many-import2-ref.xml | 25 + .../projecthelpers/build-many-import2-ref.xmlref | 14 + .../tests/antunit/core/ref-propertyhelper-test.xml | 104 + .../tests/antunit/core/ref-psyntax-hint-test.xml | 28 + .../src/tests/antunit/core/target-test-helper.xml | 57 + .../src/tests/antunit/core/target-test.xml | 82 + .../antunit/core/uuencode/src/task/BaseTask.java | 78 + .../core/uuencode/src/task/UUDecodeTask.java | 31 + .../core/uuencode/src/task/UUEncodeTask.java | 30 + .../tests/antunit/core/uuencode/uuencode-test.xml | 45 + .../antunit/filters/expandproperties-test.xml | 92 + .../filters/expected/sort.sortComparator.test | 10 + .../antunit/filters/expected/sort.sortDefault.test | 10 + .../antunit/filters/expected/sort.sortReverse.test | 10 + .../tests/antunit/filters/expected/sortuniq.txt | 4 + .../src/tests/antunit/filters/expected/uniq.txt | 5 + .../antunit/filters/expected/unique-columns.txt | 1 + .../antunit/filters/input/sort.sortDefault.test | 10 + .../src/tests/antunit/filters/input/uniq.txt | 6 + .../tests/antunit/filters/input/unique-columns.txt | 1 + .../tests/antunit/filters/replacetokens-test.xml | 68 + .../src/tests/antunit/filters/sort-test.xml | 126 + .../antunit/filters/striplinecomments-test.xml | 85 + .../src/tests/antunit/filters/suffix-test.xml | 42 + .../src/tests/antunit/filters/uniq-test.xml | 81 + .../src/tests/antunit/junit-frames.xsl | 889 +++ .../src/tests/antunit/junit-noframes.xsl | 485 ++ .../src/tests/antunit/propertyhelpers.xml | 88 + .../src/tests/antunit/taskdefs/ant-test.xml | 55 + .../src/tests/antunit/taskdefs/antcall-test.xml | 63 + .../src/tests/antunit/taskdefs/apt-test.xml | 158 + .../src/tests/antunit/taskdefs/apt/AptExample.java | 25 + .../tests/antunit/taskdefs/apt/Distributed.java | 39 + .../taskdefs/apt/DistributedAnnotationFactory.java | 50 + .../apt/DistributedAnnotationProcessor.java | 65 + .../src/tests/antunit/taskdefs/augment-test.xml | 74 + .../src/tests/antunit/taskdefs/broken_cd.zip | Bin 0 -> 326 bytes .../src/tests/antunit/taskdefs/bunzip2-test.xml | 28 + .../src/tests/antunit/taskdefs/bzip2/expected | 1 + .../src/tests/antunit/taskdefs/bzip2/multiple.bz2 | Bin 0 -> 74 bytes .../src/tests/antunit/taskdefs/checksum-test.xml | 83 + .../commandlauncher/commandlauncher-test.xml | 87 + .../src/tests/antunit/taskdefs/concat-test.xml | 202 + .../antunit/taskdefs/condition/antversion-test.xml | 70 + .../antunit/taskdefs/condition/equals-test.xml | 80 + .../antunit/taskdefs/condition/filesmatch-test.xml | 57 + .../taskdefs/condition/hasfreespace-test.xml | 57 + .../antunit/taskdefs/condition/hasmethod-text.xml | 63 + .../taskdefs/condition/islastmodified-test.xml | 118 + .../taskdefs/condition/resourcecontains-test.xml | 139 + .../taskdefs/condition/resourceexists-test.xml | 47 + .../src/tests/antunit/taskdefs/copy-test.xml | 471 ++ .../src/tests/antunit/taskdefs/cvs/cvs.xml | 169 + .../taskdefs/cvs/repository/CVSROOT/checkoutlist | 13 + .../taskdefs/cvs/repository/CVSROOT/checkoutlist,v | 37 + .../taskdefs/cvs/repository/CVSROOT/commitinfo | 26 + .../taskdefs/cvs/repository/CVSROOT/commitinfo,v | 50 + .../antunit/taskdefs/cvs/repository/CVSROOT/config | 97 + .../taskdefs/cvs/repository/CVSROOT/config,v | 121 + .../taskdefs/cvs/repository/CVSROOT/cvswrappers | 19 + .../taskdefs/cvs/repository/CVSROOT/cvswrappers,v | 43 + .../taskdefs/cvs/repository/CVSROOT/history | 65 + .../taskdefs/cvs/repository/CVSROOT/loginfo | 36 + .../taskdefs/cvs/repository/CVSROOT/loginfo,v | 60 + .../taskdefs/cvs/repository/CVSROOT/modules | 26 + .../taskdefs/cvs/repository/CVSROOT/modules,v | 50 + .../antunit/taskdefs/cvs/repository/CVSROOT/notify | 19 + .../taskdefs/cvs/repository/CVSROOT/notify,v | 43 + .../taskdefs/cvs/repository/CVSROOT/postadmin | 20 + .../taskdefs/cvs/repository/CVSROOT/postadmin,v | 44 + .../taskdefs/cvs/repository/CVSROOT/postproxy | 22 + .../taskdefs/cvs/repository/CVSROOT/postproxy,v | 46 + .../taskdefs/cvs/repository/CVSROOT/posttag | 37 + .../taskdefs/cvs/repository/CVSROOT/posttag,v | 61 + .../taskdefs/cvs/repository/CVSROOT/postwatch | 20 + .../taskdefs/cvs/repository/CVSROOT/postwatch,v | 44 + .../taskdefs/cvs/repository/CVSROOT/preproxy | 24 + .../taskdefs/cvs/repository/CVSROOT/preproxy,v | 48 + .../taskdefs/cvs/repository/CVSROOT/rcsinfo | 13 + .../taskdefs/cvs/repository/CVSROOT/rcsinfo,v | 37 + .../taskdefs/cvs/repository/CVSROOT/taginfo | 46 + .../taskdefs/cvs/repository/CVSROOT/taginfo,v | 70 + .../taskdefs/cvs/repository/CVSROOT/val-tags | 2 + .../taskdefs/cvs/repository/CVSROOT/verifymsg | 31 + .../taskdefs/cvs/repository/CVSROOT/verifymsg,v | 55 + .../cvs/repository/ant module 2/test.txt,v | 41 + .../taskdefs/cvs/repository/antmodule1/foo.txt,v | 108 + .../repository/antmodule3/yet another test.txt,v | 60 + .../antunit/taskdefs/defaultexcludes-test.xml | 52 + .../antunit/taskdefs/delete-and-symlinks-test.xml | 84 + .../src/tests/antunit/taskdefs/delete-test.xml | 141 + .../src/tests/antunit/taskdefs/dependset-test.xml | 196 + .../src/tests/antunit/taskdefs/dirname-test.xml | 59 + .../src/tests/antunit/taskdefs/ear-test.xml | 31 + .../src/tests/antunit/taskdefs/echo-test.xml | 138 + .../src/tests/antunit/taskdefs/echoxml-test.xml | 87 + .../src/tests/antunit/taskdefs/exec/apply-test.xml | 792 +++ .../src/tests/antunit/taskdefs/exec/exec-test.xml | 710 +++ .../src/tests/antunit/taskdefs/exec/expected/utf-8 | 1 + .../tests/antunit/taskdefs/exec/input/iso8859-1 | 1 + .../src/tests/antunit/taskdefs/exec/parrot.sh | 19 + .../src/tests/antunit/taskdefs/fail-test.xml | 59 + .../src/tests/antunit/taskdefs/get-test.xml | 125 + .../src/tests/antunit/taskdefs/gzip-test.xml | 46 + .../src/tests/antunit/taskdefs/hostinfo-test.xml | 64 + .../src/tests/antunit/taskdefs/import-test.xml | 55 + .../src/tests/antunit/taskdefs/import-url-test.xml | 101 + .../src/tests/antunit/taskdefs/importtests/a.xml | 23 + .../src/tests/antunit/taskdefs/importtests/b.xml | 23 + .../tests/antunit/taskdefs/importtests/nested.xml | 21 + .../antunit/taskdefs/importtests/override.xml | 25 + .../src/tests/antunit/taskdefs/importtests/w.xml | 22 + .../src/tests/antunit/taskdefs/importtests/x.xml | 22 + .../src/tests/antunit/taskdefs/importtests/y.xml | 22 + .../src/tests/antunit/taskdefs/importtests/z.xml | 21 + .../src/tests/antunit/taskdefs/include-test.xml | 58 + .../src/tests/antunit/taskdefs/jar-spi-test.xml | 149 + .../src/tests/antunit/taskdefs/jar-test.xml | 252 + .../src/tests/antunit/taskdefs/java-test.xml | 75 + .../antunit/taskdefs/javac-dir/bad-src/Bad.java | 22 + .../taskdefs/javac-dir/good-src/Simple.java | 20 + .../src/tests/antunit/taskdefs/javac-test.xml | 316 + .../src/tests/antunit/taskdefs/javadoc-test.xml | 157 + .../src/tests/antunit/taskdefs/length-test.xml | 240 + .../tests/antunit/taskdefs/loadproperties-test.xml | 192 + .../tests/antunit/taskdefs/loadresource-test.xml | 41 + .../src/tests/antunit/taskdefs/local-test.xml | 96 + .../src/tests/antunit/taskdefs/macrodef-test.xml | 60 + .../src/tests/antunit/taskdefs/manifest-test.xml | 180 + .../antunit/taskdefs/manifestclasspath-test.xml | 30 + .../src/tests/antunit/taskdefs/move-test.xml | 234 + .../taskdefs/optional/depend/depend-test.xml | 131 + .../antunit/taskdefs/optional/funtest-test.xml | 128 + .../tests/antunit/taskdefs/optional/javah-test.xml | 65 + .../optional/junit/junit-formatter-test.xml | 93 + .../junit/junit-outputtoformatters-test.xml | 137 + .../antunit/taskdefs/optional/junit/junit-test.xml | 372 ++ .../taskdefs/optional/junit/src/ExampleTest.java | 23 + .../taskdefs/optional/junit/xmlformatter-test.xml | 126 + .../taskdefs/optional/native2ascii-test.xml | 68 + .../taskdefs/optional/propertyfile-test.xml | 44 + .../taskdefs/optional/propertyfilelayout-test.xml | 289 + .../taskdefs/optional/replaceregexp-test.xml | 32 + .../taskdefs/optional/script/scriptdef-test.xml | 131 + .../taskdefs/optional/unix/symlink-test.xml | 109 + .../taskdefs/optional/windows/attrib-test.xml | 46 + .../src/tests/antunit/taskdefs/parallel-test.xml | 37 + .../tests/antunit/taskdefs/pathconvert-test.xml | 31 + .../src/tests/antunit/taskdefs/property-test.xml | 171 + .../tests/antunit/taskdefs/propertyfile-test.xml | 44 + .../tests/antunit/taskdefs/propertyhelper-test.xml | 151 + .../src/tests/antunit/taskdefs/replace-test.xml | 103 + .../src/tests/antunit/taskdefs/retry-test.xml | 45 + .../src/tests/antunit/taskdefs/rmic-test.xml | 105 + .../src/tests/antunit/taskdefs/secure-input.xml | 32 + .../src/tests/antunit/taskdefs/signjar-test.xml | 272 + .../tests/antunit/taskdefs/subant-helper/echo.xml | 20 + .../src/tests/antunit/taskdefs/subant-test.xml | 111 + .../src/tests/antunit/taskdefs/sync-test.xml | 175 + .../src/tests/antunit/taskdefs/tar-test.xml | 118 + .../tests/antunit/taskdefs/taskdef-antlib-test.xml | 64 + .../src/tests/antunit/taskdefs/taskdef-test.xml | 99 + .../src/tests/antunit/taskdefs/tempfile-test.xml | 30 + .../src/tests/antunit/taskdefs/touch-test.xml | 35 + .../antunit/taskdefs/truncate/truncate-test.xml | 145 + .../src/tests/antunit/taskdefs/unzip-test.xml | 70 + .../src/tests/antunit/taskdefs/uptodate-test.xml | 86 + .../src/tests/antunit/taskdefs/utf-16.expected | Bin 0 -> 26 bytes .../tests/antunit/taskdefs/utf-16.expected.windows | Bin 0 -> 32 bytes .../src/tests/antunit/taskdefs/war-test.xml | 194 + .../src/tests/antunit/taskdefs/web.xml | 21 + .../tests/antunit/taskdefs/whichresource-test.xml | 51 + .../tests/antunit/taskdefs/xmlproperty-test.xml | 144 + .../taskdefs/xmlproperty.inline-expansion.xml | 33 + .../tests/antunit/taskdefs/xmlproperty.multi.xml | 21 + .../src/tests/antunit/taskdefs/xslt-test.xml | 260 + .../antunit/taskdefs/xslt/printParams-invalid.xsl | 36 + .../src/tests/antunit/taskdefs/zip-test.xml | 185 + .../tests/antunit/taskdefs/zip/Bugzilla-42940.zip | Bin 0 -> 10930 bytes .../src/tests/antunit/types/build-embedded-ref.xml | 20 + .../antunit/types/conditions/isreference-test.xml | 40 + .../antunit/types/conditions/matches-test.xml | 114 + .../src/tests/antunit/types/cutdirs-test.xml | 56 + .../tests/antunit/types/defer-reference-test.xml | 69 + .../src/tests/antunit/types/fileset-test.xml | 67 + .../src/tests/antunit/types/filterset-test.xml | 96 + .../src/tests/antunit/types/firstmatch-test.xml | 41 + .../src/tests/antunit/types/javaresource-test.xml | 62 + .../src/tests/antunit/types/mapper-ref.xml | 55 + .../src/tests/antunit/types/mappers/glob-test.xml | 80 + .../antunit/types/mappers/packagemapper-test.xml | 50 + .../tests/antunit/types/modified-selector-test.xml | 37 + .../src/tests/antunit/types/path-test.xml | 51 + .../tests/antunit/types/patternset-invert-test.xml | 66 + .../src/tests/antunit/types/patternset-test.xml | 78 + .../src/tests/antunit/types/propertyset-test.xml | 125 + .../antunit/types/resources/archives-test.xml | 136 + .../antunit/types/resources/comparators/test.xml | 299 + .../types/resources/concat-resource-test.xml | 160 + .../antunit/types/resources/fileresource-test.xml | 57 + .../tests/antunit/types/resources/files-test.xml | 52 + .../antunit/types/resources/first-last-test.xml | 280 + .../antunit/types/resources/javaresource-test.xml | 62 + .../antunit/types/resources/latepath-test.xml | 34 + .../types/resources/multirootfileset-test.xml | 166 + .../antunit/types/resources/resourcelist-test.xml | 104 + .../antunit/types/resources/resources-test.xml | 32 + .../types/resources/selectors/name-test.xml | 90 + .../types/resources/selectors/readwrite-test.xml | 106 + .../resources/selectors/test-componentdef.xml | 458 ++ .../antunit/types/resources/selectors/test.xml | 483 ++ .../src/tests/antunit/types/resources/test.xml | 460 ++ .../tests/antunit/types/resources/tokens-test.xml | 128 + .../src/tests/antunit/types/resources/utf-16.in | Bin 0 -> 26 bytes .../tests/antunit/types/selectors/depend-test.xml | 45 + .../antunit/types/selectors/different-test.xml | 46 + .../antunit/types/selectors/filename-test.xml | 69 + .../antunit/types/selectors/modified-test.xml | 76 + .../tests/antunit/types/selectors/present-test.xml | 45 + .../antunit/types/selectors/readwrite-test.xml | 99 + .../tests/antunit/types/selectors/select-test.xml | 88 + .../src/tests/antunit/types/tarfileset-test.xml | 48 + .../src/tests/antunit/types/zipfileset-test.xml | 83 + .../junit/org/apache/tools/ant/AntAssert.java | 72 + .../tools/ant/AntClassLoaderDelegationTest.java | 124 + .../tools/ant/AntClassLoaderPerformance.java | 56 + .../org/apache/tools/ant/AntClassLoaderTest.java | 210 + .../junit/org/apache/tools/ant/BuildFileRule.java | 318 + .../junit/org/apache/tools/ant/BuildFileTest.java | 592 ++ .../tests/junit/org/apache/tools/ant/CaseTest.java | 64 + .../org/apache/tools/ant/DefaultLoggerTest.java | 77 + .../org/apache/tools/ant/DirectoryScannerTest.java | 588 ++ .../org/apache/tools/ant/DispatchTaskTest.java | 46 + .../org/apache/tools/ant/DummyTaskAbstract.java | 32 + .../org/apache/tools/ant/DummyTaskInterface.java | 25 + .../junit/org/apache/tools/ant/DummyTaskOk.java | 31 + .../org/apache/tools/ant/DummyTaskOkNonTask.java | 29 + .../tools/ant/DummyTaskWithNonPublicExecute.java | 29 + .../tools/ant/DummyTaskWithNonVoidExecute.java | 30 + .../ant/DummyTaskWithoutDefaultConstructor.java | 31 + .../apache/tools/ant/DummyTaskWithoutExecute.java | 29 + .../ant/DummyTaskWithoutPublicConstructor.java | 31 + .../junit/org/apache/tools/ant/ExecutorTest.java | 171 + .../org/apache/tools/ant/ExtendedTaskdefTest.java | 68 + .../junit/org/apache/tools/ant/FileUtilities.java | 88 + .../junit/org/apache/tools/ant/ImmutableTest.java | 90 + .../junit/org/apache/tools/ant/IncludeTest.java | 151 + .../apache/tools/ant/IntrospectionHelperTest.java | 726 +++ .../junit/org/apache/tools/ant/LoaderRefTest.java | 52 + .../junit/org/apache/tools/ant/LocationTest.java | 93 + .../org/apache/tools/ant/MockBuildListener.java | 64 + .../junit/org/apache/tools/ant/PickOneTask.java | 31 + .../org/apache/tools/ant/ProjectComponentTest.java | 47 + .../tools/ant/ProjectHelperRepositoryTest.java | 105 + .../junit/org/apache/tools/ant/ProjectTest.java | 327 + .../apache/tools/ant/PropertyExpansionTest.java | 99 + .../org/apache/tools/ant/PropertyFileCLITest.java | 68 + .../org/apache/tools/ant/TaskContainerTest.java | 66 + .../org/apache/tools/ant/TopLevelTaskTest.java | 59 + .../org/apache/tools/ant/UnknownElementTest.java | 115 + .../junit/org/apache/tools/ant/XmlLoggerTest.java | 37 + .../apache/tools/ant/filters/ConcatFilterTest.java | 143 + .../tools/ant/filters/DynamicFilterTest.java | 80 + .../tools/ant/filters/EscapeUnicodeTest.java | 50 + .../org/apache/tools/ant/filters/HeadTailTest.java | 137 + .../apache/tools/ant/filters/LineContainsTest.java | 57 + .../apache/tools/ant/filters/NoNewLineTest.java | 50 + .../tools/ant/filters/ReplaceTokensTest.java | 81 + .../tools/ant/filters/StripJavaCommentsTest.java | 51 + .../apache/tools/ant/filters/TokenFilterTest.java | 279 + .../org/apache/tools/ant/launch/LocatorTest.java | 180 + .../tools/ant/loader/AntClassLoader5Test.java | 73 + .../tools/ant/taskdefs/AbstractCvsTaskTest.java | 71 + .../ant/taskdefs/AntLikeTasksAtTopLevelTest.java | 70 + .../tools/ant/taskdefs/AntStructureTest.java | 114 + .../org/apache/tools/ant/taskdefs/AntTest.java | 607 ++ .../org/apache/tools/ant/taskdefs/AntlibTest.java | 106 + .../apache/tools/ant/taskdefs/AvailableTest.java | 272 + .../org/apache/tools/ant/taskdefs/BUnzip2Test.java | 66 + .../org/apache/tools/ant/taskdefs/BZip2Test.java | 117 + .../apache/tools/ant/taskdefs/BasenameTest.java | 114 + .../org/apache/tools/ant/taskdefs/CVSPassTest.java | 119 + .../apache/tools/ant/taskdefs/CallTargetTest.java | 92 + .../apache/tools/ant/taskdefs/ChecksumTest.java | 109 + .../org/apache/tools/ant/taskdefs/ConcatTest.java | 315 + .../apache/tools/ant/taskdefs/ConditionTest.java | 379 ++ .../org/apache/tools/ant/taskdefs/CopyTest.java | 280 + .../org/apache/tools/ant/taskdefs/CopydirTest.java | 100 + .../apache/tools/ant/taskdefs/CopyfileTest.java | 100 + .../tools/ant/taskdefs/DefaultExcludesTest.java | 170 + .../org/apache/tools/ant/taskdefs/DeleteTest.java | 112 + .../org/apache/tools/ant/taskdefs/DeltreeTest.java | 55 + .../apache/tools/ant/taskdefs/DemuxOutputTask.java | 75 + .../org/apache/tools/ant/taskdefs/DirnameTest.java | 92 + .../org/apache/tools/ant/taskdefs/DynamicTask.java | 46 + .../org/apache/tools/ant/taskdefs/DynamicTest.java | 46 + .../org/apache/tools/ant/taskdefs/EchoTest.java | 105 + .../org/apache/tools/ant/taskdefs/EchoXMLTest.java | 71 + .../apache/tools/ant/taskdefs/ExecTaskTest.java | 192 + .../apache/tools/ant/taskdefs/ExecuteJavaTest.java | 131 + .../tools/ant/taskdefs/ExecuteWatchdogTest.java | 162 + .../org/apache/tools/ant/taskdefs/FailTest.java | 210 + .../org/apache/tools/ant/taskdefs/FilterTest.java | 147 + .../org/apache/tools/ant/taskdefs/FixCrLfTest.java | 262 + .../org/apache/tools/ant/taskdefs/GUnzipTest.java | 91 + .../org/apache/tools/ant/taskdefs/GetTest.java | 122 + .../org/apache/tools/ant/taskdefs/GzipTest.java | 113 + .../org/apache/tools/ant/taskdefs/ImportTest.java | 174 + .../tools/ant/taskdefs/InitializeClassTest.java | 77 + .../org/apache/tools/ant/taskdefs/InputTest.java | 126 + .../org/apache/tools/ant/taskdefs/JarTest.java | 375 ++ .../org/apache/tools/ant/taskdefs/JavaTest.java | 475 ++ .../org/apache/tools/ant/taskdefs/JavacTest.java | 247 + .../org/apache/tools/ant/taskdefs/JavadocTest.java | 132 + .../apache/tools/ant/taskdefs/LoadFileTest.java | 170 + .../apache/tools/ant/taskdefs/MacroDefTest.java | 206 + .../org/apache/tools/ant/taskdefs/MakeUrlTest.java | 176 + .../tools/ant/taskdefs/ManifestClassPathTest.java | 249 + .../apache/tools/ant/taskdefs/ManifestTest.java | 477 ++ .../org/apache/tools/ant/taskdefs/MkdirTest.java | 70 + .../org/apache/tools/ant/taskdefs/MoveTest.java | 168 + .../apache/tools/ant/taskdefs/MultiMapTest.java | 79 + .../org/apache/tools/ant/taskdefs/NiceTest.java | 83 + .../apache/tools/ant/taskdefs/ParallelTest.java | 195 + .../apache/tools/ant/taskdefs/PathConvertTest.java | 65 + .../apache/tools/ant/taskdefs/PreSetDefTest.java | 154 + .../tools/ant/taskdefs/ProcessDestroyerTest.java | 68 + .../apache/tools/ant/taskdefs/PropertyTest.java | 141 + .../ant/taskdefs/ProtectedJarMethodsTest.java | 106 + .../apache/tools/ant/taskdefs/RecorderTest.java | 103 + .../org/apache/tools/ant/taskdefs/RenameTest.java | 88 + .../org/apache/tools/ant/taskdefs/ReplaceTest.java | 180 + .../tools/ant/taskdefs/RmicAdvancedTest.java | 467 ++ .../org/apache/tools/ant/taskdefs/RmicTest.java | 104 + .../org/apache/tools/ant/taskdefs/SQLExecTest.java | 326 + .../org/apache/tools/ant/taskdefs/SignJarTest.java | 139 + .../org/apache/tools/ant/taskdefs/SleepTest.java | 120 + .../org/apache/tools/ant/taskdefs/StyleTest.java | 225 + .../org/apache/tools/ant/taskdefs/SubAntTest.java | 161 + .../org/apache/tools/ant/taskdefs/SyncTest.java | 148 + .../org/apache/tools/ant/taskdefs/TStampTest.java | 117 + .../org/apache/tools/ant/taskdefs/TarTest.java | 210 + .../org/apache/tools/ant/taskdefs/TaskdefTest.java | 128 + .../apache/tools/ant/taskdefs/TaskdefsTest.java | 31 + .../org/apache/tools/ant/taskdefs/TestProcess.java | 96 + .../org/apache/tools/ant/taskdefs/TimeProcess.java | 34 + .../org/apache/tools/ant/taskdefs/TouchTest.java | 211 + .../apache/tools/ant/taskdefs/TypeAdapterTest.java | 176 + .../org/apache/tools/ant/taskdefs/TypedefTest.java | 136 + .../org/apache/tools/ant/taskdefs/UntarTest.java | 111 + .../org/apache/tools/ant/taskdefs/UnzipTest.java | 250 + .../apache/tools/ant/taskdefs/UpToDateTest.java | 77 + .../org/apache/tools/ant/taskdefs/WarTest.java | 55 + .../tools/ant/taskdefs/WhichResourceTest.java | 58 + .../apache/tools/ant/taskdefs/XmlPropertyTest.java | 376 ++ .../org/apache/tools/ant/taskdefs/XmlnsTest.java | 89 + .../tools/ant/taskdefs/ZipExtraFieldTest.java | 109 + .../org/apache/tools/ant/taskdefs/ZipTest.java | 300 + .../compilers/DefaultCompilerAdapterTest.java | 223 + .../ant/taskdefs/condition/AntVersionTest.java | 48 + .../tools/ant/taskdefs/condition/ContainsTest.java | 42 + .../tools/ant/taskdefs/condition/EqualsTest.java | 56 + .../tools/ant/taskdefs/condition/HttpTest.java | 76 + .../ant/taskdefs/condition/IsFailureTest.java | 44 + .../ant/taskdefs/condition/IsFileSelectedTest.java | 74 + .../ant/taskdefs/condition/IsReachableTest.java | 116 + .../ant/taskdefs/condition/IsReferenceTest.java | 71 + .../tools/ant/taskdefs/condition/IsSignedTest.java | 59 + .../ant/taskdefs/condition/ParserSupportsTest.java | 95 + .../ant/taskdefs/condition/TypeFoundTest.java | 91 + .../tools/ant/taskdefs/condition/XorTest.java | 75 + .../ant/taskdefs/cvslib/ChangeLogParserTest.java | 67 + .../ant/taskdefs/cvslib/ChangeLogWriterTest.java | 96 + .../org/apache/tools/ant/taskdefs/dir1/B.java | 30 + .../org/apache/tools/ant/taskdefs/dir2/A.java | 40 + .../tools/ant/taskdefs/email/EmailAddressTest.java | 112 + .../tools/ant/taskdefs/email/EmailTaskTest.java | 63 + .../tools/ant/taskdefs/email/MessageTest.java | 62 + .../tools/ant/taskdefs/optional/ANTLRTest.java | 216 + .../taskdefs/optional/AbstractXSLTLiaisonTest.java | 104 + .../ant/taskdefs/optional/BeanShellScriptTest.java | 48 + .../ant/taskdefs/optional/EchoPropertiesTest.java | 266 + .../tools/ant/taskdefs/optional/JavahTest.java | 60 + .../tools/ant/taskdefs/optional/JspcTest.java | 200 + .../ant/taskdefs/optional/Native2AsciiTest.java | 57 + .../ant/taskdefs/optional/PropertyFileTest.java | 235 + .../tools/ant/taskdefs/optional/PvcsTest.java | 79 + .../ant/taskdefs/optional/ReplaceRegExpTest.java | 132 + .../ant/taskdefs/optional/RhinoReferenceTest.java | 45 + .../ant/taskdefs/optional/RhinoScriptTest.java | 67 + .../tools/ant/taskdefs/optional/RpmTest.java | 71 + .../ant/taskdefs/optional/SchemaValidateTest.java | 128 + .../ant/taskdefs/optional/TraXLiaisonTest.java | 129 + .../taskdefs/optional/XmlValidateCatalogTest.java | 71 + .../ant/taskdefs/optional/XmlValidateTest.java | 193 + .../tools/ant/taskdefs/optional/XsltTest.java | 86 + .../ant/taskdefs/optional/depend/DependTest.java | 213 + .../ant/taskdefs/optional/i18n/TranslateTest.java | 87 + .../ant/taskdefs/optional/image/ImageTest.java | 133 + .../ant/taskdefs/optional/jdepend/JDependTest.java | 99 + .../ant/taskdefs/optional/junit/BatchTestTest.java | 121 + .../ant/taskdefs/optional/junit/DOMUtilTest.java | 53 + .../optional/junit/JUnitClassLoaderTest.java | 37 + .../taskdefs/optional/junit/JUnitReportTest.java | 211 + .../ant/taskdefs/optional/junit/JUnitTaskTest.java | 398 ++ .../optional/junit/JUnitTestListenerTest.java | 111 + .../optional/junit/JUnitTestRunnerTest.java | 217 + .../optional/junit/JUnitVersionHelperTest.java | 102 + .../ant/taskdefs/optional/junit/NoVmCrash.java | 30 + .../tools/ant/taskdefs/optional/junit/Printer.java | 42 + .../tools/ant/taskdefs/optional/junit/Sleeper.java | 30 + .../taskdefs/optional/junit/SuiteMethodTest.java | 42 + .../optional/junit/TearDownOnVmCrashTest.java | 53 + .../ant/taskdefs/optional/junit/TestFormatter.java | 112 + .../tools/ant/taskdefs/optional/junit/VmCrash.java | 31 + .../junit/XMLFormatterWithCDATAOnSystemOut.java | 83 + .../optional/junit/XMLResultAggregatorTest.java | 93 + .../tools/ant/taskdefs/optional/net/FTPTest.java | 879 +++ .../taskdefs/optional/script/ScriptDefTest.java | 146 + .../tools/ant/taskdefs/optional/sos/SOSTest.java | 351 ++ .../taskdefs/optional/splash/SplashScreenTest.java | 50 + .../tools/ant/taskdefs/optional/ssh/ScpTest.java | 206 + .../ant/taskdefs/optional/unix/SymlinkTest.java | 297 + .../tools/ant/taskdefs/optional/vss/MSVSSTest.java | 475 ++ .../tools/ant/types/AbstractFileSetTest.java | 248 + .../org/apache/tools/ant/types/AddTypeTest.java | 223 + .../org/apache/tools/ant/types/AssertionsTest.java | 125 + .../tools/ant/types/CommandlineJavaTest.java | 191 + .../apache/tools/ant/types/CommandlineTest.java | 180 + .../apache/tools/ant/types/DescriptionTest.java | 59 + .../org/apache/tools/ant/types/DirSetTest.java | 94 + .../tools/ant/types/EnumeratedAttributeTest.java | 106 + .../org/apache/tools/ant/types/FileListTest.java | 163 + .../org/apache/tools/ant/types/FileSetTest.java | 36 + .../org/apache/tools/ant/types/FilterSetTest.java | 239 + .../apache/tools/ant/types/FlexIntegerTest.java | 74 + .../org/apache/tools/ant/types/MapperTest.java | 235 + .../junit/org/apache/tools/ant/types/PathTest.java | 579 ++ .../org/apache/tools/ant/types/PatternSetTest.java | 206 + .../apache/tools/ant/types/PermissionsTest.java | 158 + .../junit/org/apache/tools/ant/types/PolyTest.java | 79 + .../tools/ant/types/RedirectorElementTest.java | 86 + .../apache/tools/ant/types/ResourceOutputTest.java | 160 + .../org/apache/tools/ant/types/TarFileSetTest.java | 119 + .../tools/ant/types/XMLCatalogBuildFileTest.java | 98 + .../org/apache/tools/ant/types/XMLCatalogTest.java | 392 ++ .../org/apache/tools/ant/types/ZipFileSetTest.java | 118 + .../tools/ant/types/mappers/GlobMapperTest.java | 49 + .../tools/ant/types/mappers/MapperResult.java | 103 + .../ant/types/mappers/RegexpPatternMapperTest.java | 51 + .../tools/ant/types/optional/ScriptMapperTest.java | 53 + .../ant/types/optional/ScriptSelectorTest.java | 83 + .../types/optional/depend/ClassFileSetTest.java | 186 + .../ant/types/resources/FileResourceTest.java | 122 + .../ant/types/resources/JavaResourceTest.java | 62 + .../resources/LazyResourceCollectionTest.java | 186 + .../ant/types/resources/MultiRootFileSetTest.java | 131 + .../ant/types/resources/ResourceListTest.java | 134 + .../tools/ant/types/resources/TarResourceTest.java | 54 + .../ant/types/selectors/BaseSelectorRule.java | 125 + .../ant/types/selectors/BaseSelectorTest.java | 295 + .../ant/types/selectors/ContainsRegexpTest.java | 56 + .../ant/types/selectors/ContainsSelectorTest.java | 114 + .../ant/types/selectors/DateSelectorTest.java | 229 + .../ant/types/selectors/DependSelectorTest.java | 185 + .../ant/types/selectors/DepthSelectorTest.java | 147 + .../ant/types/selectors/FilenameSelectorTest.java | 115 + .../tools/ant/types/selectors/MockAlgorithm.java | 37 + .../tools/ant/types/selectors/MockCache.java | 68 + .../tools/ant/types/selectors/MockComparator.java | 32 + .../ant/types/selectors/ModifiedSelectorTest.java | 1062 ++++ .../ant/types/selectors/PresentSelectorTest.java | 137 + .../org/apache/tools/ant/types/selectors/README | 96 + .../ant/types/selectors/SignedSelectorTest.java | 54 + .../ant/types/selectors/SizeSelectorTest.java | 237 + .../ant/types/selectors/TokenizedPatternTest.java | 64 + .../ant/types/selectors/TypeSelectorTest.java | 81 + .../apache/tools/ant/util/Base64ConverterTest.java | 43 + .../apache/tools/ant/util/ClasspathUtilsTest.java | 67 + .../apache/tools/ant/util/CollectionUtilsTest.java | 102 + .../tools/ant/util/DOMElementWriterTest.java | 305 + .../org/apache/tools/ant/util/DateUtilsTest.java | 106 + .../apache/tools/ant/util/DeweyDecimalTest.java | 70 + .../org/apache/tools/ant/util/FileUtilsTest.java | 625 ++ .../tools/ant/util/GlobPatternMapperTest.java | 102 + .../org/apache/tools/ant/util/JAXPUtilsTest.java | 43 + .../apache/tools/ant/util/JavaEnvUtilsTest.java | 144 + .../ant/util/LayoutPreservingPropertiesTest.java | 316 + .../tools/ant/util/LazyFileOutputStreamTest.java | 75 + .../ant/util/LineOrientedOutputStreamTest.java | 153 + .../apache/tools/ant/util/LinkedHashtableTest.java | 165 + .../org/apache/tools/ant/util/LoaderUtilsTest.java | 43 + .../tools/ant/util/PackageNameMapperTest.java | 43 + .../tools/ant/util/ReaderInputStreamTest.java | 142 + .../apache/tools/ant/util/ResourceUtilsTest.java | 63 + .../org/apache/tools/ant/util/StringUtilsTest.java | 170 + .../apache/tools/ant/util/SymlinkUtilsTest.java | 40 + .../tools/ant/util/UnPackageNameMapperTest.java | 42 + .../org/apache/tools/ant/util/UnicodeUtilTest.java | 33 + .../org/apache/tools/ant/util/VectorSetTest.java | 295 + .../org/apache/tools/ant/util/XMLFragmentTest.java | 91 + .../ant/util/facade/FacadeTaskHelperTest.java | 64 + .../facade/ImplementationSpecificArgumentTest.java | 59 + .../ant/util/regexp/JakartaOroMatcherTest.java | 35 + .../ant/util/regexp/JakartaOroRegexpTest.java | 35 + .../ant/util/regexp/JakartaRegexpMatcherTest.java | 63 + .../ant/util/regexp/JakartaRegexpRegexpTest.java | 62 + .../ant/util/regexp/Jdk14RegexpMatcherTest.java | 70 + .../ant/util/regexp/Jdk14RegexpRegexpTest.java | 71 + .../tools/ant/util/regexp/RegexpMatcherTest.java | 204 + .../apache/tools/ant/util/regexp/RegexpTest.java | 63 + .../org/apache/tools/bzip2/BlockSortTest.java | 171 + .../org/apache/tools/bzip2/CBZip2StreamTest.java | 47 + .../org/apache/tools/mail/MailMessageTest.java | 707 +++ .../junit/org/apache/tools/tar/TarEntryTest.java | 35 + .../org/apache/tools/tar/TarOutputStreamTest.java | 35 + .../org/apache/tools/tar/TarRoundTripTest.java | 74 + .../org/apache/tools/zip/AsiExtraFieldTest.java | 163 + .../org/apache/tools/zip/ExtraFieldUtilsTest.java | 210 + .../org/apache/tools/zip/UTF8ZipFilesTest.java | 260 + .../org/apache/tools/zip/ZipEncodingTest.java | 152 + .../junit/org/apache/tools/zip/ZipEntryTest.java | 228 + .../junit/org/apache/tools/zip/ZipLongTest.java | 94 + .../org/apache/tools/zip/ZipOutputStreamTest.java | 73 + .../junit/org/apache/tools/zip/ZipShortTest.java | 92 + .../example/junit/AbstractJUnit3TestMissed.java | 27 + .../example/junit/AbstractJUnit3TestNotMissed.java | 31 + .../org/example/junit/AbstractTestMissed.java | 29 + .../org/example/junit/AbstractTestNotMissed.java | 32 + .../org/example/junit/JUnit3NonTestMissed.java | 27 + .../org/example/junit/JUnit3TestNotMissed.java | 28 + .../junit/org/example/junit/JUnit4Skippable.java | 74 + .../junit/org/example/junit/MultilineAsserts.java | 27 + .../junit/org/example/junit/NonTestMissed.java | 25 + .../src/tests/junit/org/example/junit/Output.java | 37 + .../junit/org/example/junit/TestNotMissed.java | 29 + .../org/example/junit/TestWithSuiteNotMissed.java | 32 + .../junit/org/example/junit/ThreadedOutput.java | 43 + .../src/tests/junit/org/example/junit/Timeout.java | 32 + .../junit/org/example/junit/XmlParserTest.java | 58 + .../example/tasks/TaskdefTestContainerTask.java | 25 + .../org/example/tasks/TaskdefTestSimpleTask.java | 45 + .../src/tests/junit/org/example/tasks/antlib.xml | 26 + .../src/tests/junit/org/example/tasks/antlib2.xml | 26 + .../junit/org/example/types/TypedefTestType.java | 25 + .../src/maven/apache-maven-3.3.3/DEPENDENCIES | 111 + framework/src/maven/apache-maven-3.3.3/LICENSE | 202 + framework/src/maven/apache-maven-3.3.3/NOTICE | 5 + framework/src/maven/apache-maven-3.3.3/README.md | 23 + .../apache-maven-3.3.3/apache-maven/README.txt | 79 + .../maven/apache-maven-3.3.3/apache-maven/pom.xml | 216 + .../apache-maven/src/bin/m2.conf | 8 + .../apache-maven-3.3.3/apache-maven/src/bin/mvn | 232 + .../apache-maven/src/bin/mvn.cmd | 176 + .../apache-maven/src/bin/mvnDebug | 41 + .../apache-maven/src/bin/mvnDebug.cmd | 31 + .../apache-maven-3.3.3/apache-maven/src/bin/mvnyjp | 42 + .../src/conf/logging/simplelogger.properties | 25 + .../apache-maven/src/conf/settings.xml | 257 + .../apache-maven/src/conf/toolchains.xml | 103 + .../apache-maven/src/lib/ext/README.txt | 2 + .../main/appended-resources/META-INF/LICENSE.vm | 49 + .../apache-maven/src/main/assembly/bin.xml | 94 + .../apache-maven/src/main/assembly/src.xml | 49 + .../apache-maven/src/site/site.xml | 29 + .../apache/maven/settings/GlobalSettingsTest.java | 59 + framework/src/maven/apache-maven-3.3.3/build.xml | 307 + .../src/maven/apache-maven-3.3.3/deploySite.sh | 23 + .../src/maven/apache-maven-3.3.3/doap_Maven.rdf | 178 + .../maven-aether-provider/pom.xml | 130 + .../internal/ArtifactDescriptorReaderDelegate.java | 153 + .../internal/ArtifactDescriptorUtils.java | 81 + .../internal/DefaultArtifactDescriptorReader.java | 435 ++ .../repository/internal/DefaultModelCache.java | 119 + .../repository/internal/DefaultModelResolver.java | 229 + .../internal/DefaultVersionRangeResolver.java | 322 + .../internal/DefaultVersionResolver.java | 636 ++ .../repository/internal/LocalSnapshotMetadata.java | 163 + .../internal/LocalSnapshotMetadataGenerator.java | 82 + .../repository/internal/MavenAetherModule.java | 76 + .../maven/repository/internal/MavenMetadata.java | 150 + .../internal/MavenRepositorySystemUtils.java | 141 + .../repository/internal/MavenSnapshotMetadata.java | 100 + .../repository/internal/MavenWorkspaceReader.java | 32 + .../repository/internal/RelocatedArtifact.java | 116 + .../internal/RemoteSnapshotMetadata.java | 152 + .../internal/RemoteSnapshotMetadataGenerator.java | 107 + .../internal/SnapshotMetadataGeneratorFactory.java | 52 + .../repository/internal/VersionsMetadata.java | 133 + .../internal/VersionsMetadataGenerator.java | 108 + .../internal/VersionsMetadataGeneratorFactory.java | 52 + .../maven/repository/internal/package-info.java | 25 + .../maven-aether-provider/src/site/apt/index.apt | 33 + .../maven-aether-provider/src/site/site.xml | 36 + .../internal/AbstractRepositoryTestCase.java | 87 + .../DefaultArtifactDescriptorReaderTest.java | 77 + .../internal/DefaultVersionResolverTest.java | 96 + .../internal/MavenRepositorySystemUtilsTest.java | 45 + .../repository/internal/RepositorySystemTest.java | 220 + .../internal/util/ConsoleRepositoryListener.java | 132 + .../internal/util/ConsoleTransferListener.java | 186 + .../07.20.3-SNAPSHOT/maven-metadata.xml | 49 + .../dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml | 47 + .../artifact/1.0/artifact-1.0-classifier.zip | 0 .../repo/ut/simple/artifact/1.0/artifact-1.0.jar | 0 .../repo/ut/simple/artifact/1.0/artifact-1.0.pom | 48 + .../repo/ut/simple/artifact/1.0/artifact-1.0.zip | 0 .../repo/ut/simple/artifact/maven-metadata.xml | 34 + .../dependency/1.0/dependency-1.0-sources.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.jar | 0 .../ut/simple/dependency/1.0/dependency-1.0.pom | 31 + .../repo/ut/simple/dependency/maven-metadata.xml | 34 + .../repo/ut/simple/parent/1.0/parent-1.0.pom | 43 + .../repo/ut/simple/parent/maven-metadata.xml | 34 + .../apache-maven-3.3.3/maven-ant-tasks-2.1.1.jar | Bin 0 -> 1314262 bytes .../apache-maven-3.3.3/maven-artifact/pom.xml | 58 + .../java/org/apache/maven/artifact/Artifact.java | 161 + .../org/apache/maven/artifact/ArtifactUtils.java | 215 + .../org/apache/maven/artifact/DefaultArtifact.java | 597 ++ .../maven/artifact/InvalidArtifactRTException.java | 100 + .../maven/artifact/handler/ArtifactHandler.java | 42 + .../maven/artifact/metadata/ArtifactMetadata.java | 27 + .../artifact/repository/ArtifactRepository.java | 135 + .../repository/ArtifactRepositoryPolicy.java | 222 + .../maven/artifact/repository/Authentication.java | 126 + .../layout/ArtifactRepositoryLayout.java | 38 + .../layout/ArtifactRepositoryLayout2.java | 31 + .../metadata/RepositoryMetadataStoreException.java | 40 + .../AbstractArtifactResolutionException.java | 347 ++ .../resolver/ArtifactNotFoundException.java | 85 + .../resolver/ArtifactResolutionException.java | 68 + .../resolver/CyclicDependencyException.java | 45 + .../MultipleArtifactsNotFoundException.java | 122 + .../artifact/resolver/filter/ArtifactFilter.java | 30 + .../maven/artifact/versioning/ArtifactVersion.java | 42 + .../artifact/versioning/ComparableVersion.java | 503 ++ .../versioning/DefaultArtifactVersion.java | 228 + .../InvalidVersionSpecificationException.java | 34 + .../OverConstrainedVersionException.java | 49 + .../maven/artifact/versioning/Restriction.java | 195 + .../maven/artifact/versioning/VersionRange.java | 583 ++ .../java/org/apache/maven/repository/Proxy.java | 197 + .../legacy/metadata/ArtifactMetadata.java | 83 + .../maven-artifact/src/site/apt/index.apt | 47 + .../maven-artifact/src/site/site.xml | 36 + .../artifact/versioning/ComparableVersionTest.java | 231 + .../versioning/DefaultArtifactVersionTest.java | 223 + .../artifact/versioning/VersionRangeTest.java | 730 +++ .../maven-builder-support/pom.xml | 49 + .../org/apache/maven/building/DefaultProblem.java | 161 + .../maven/building/DefaultProblemCollector.java | 64 + .../java/org/apache/maven/building/FileSource.java | 79 + .../java/org/apache/maven/building/Problem.java | 101 + .../apache/maven/building/ProblemCollector.java | 59 + .../maven/building/ProblemCollectorFactory.java | 43 + .../java/org/apache/maven/building/Source.java | 49 + .../org/apache/maven/building/StringSource.java | 90 + .../java/org/apache/maven/building/UrlSource.java | 80 + .../maven-builder-support/src/site/site.xml | 36 + .../building/DefaultProblemCollectorTest.java | 76 + .../apache/maven/building/DefaultProblemTest.java | 136 + .../org/apache/maven/building/FileSourceTest.java | 93 + .../building/ProblemCollectorFactoryTest.java | 45 + .../apache/maven/building/StringSourceTest.java | 79 + .../org/apache/maven/building/UrlSourceTest.java | 87 + .../src/test/resources/source.txt | 1 + .../maven/apache-maven-3.3.3/maven-compat/pom.xml | 115 + .../apache/maven/artifact/ArtifactScopeEnum.java | 133 + .../org/apache/maven/artifact/ArtifactStatus.java | 124 + .../artifact/UnknownRepositoryLayoutException.java | 54 + .../maven/artifact/deployer/ArtifactDeployer.java | 61 + .../deployer/ArtifactDeploymentException.java | 43 + .../artifact/deployer/DefaultArtifactDeployer.java | 161 + .../installer/ArtifactInstallationException.java | 43 + .../artifact/installer/ArtifactInstaller.java | 60 + .../installer/DefaultArtifactInstaller.java | 135 + .../artifact/manager/DefaultWagonManager.java | 182 + .../manager/WagonConfigurationException.java | 38 + .../maven/artifact/manager/WagonManager.java | 56 + .../repository/ArtifactRepositoryFactory.java | 55 + .../repository/DefaultArtifactRepository.java | 267 + .../DefaultArtifactRepositoryFactory.java | 124 + .../repository/layout/FlatRepositoryLayout.java | 92 + .../metadata/DefaultRepositoryMetadataManager.java | 558 ++ .../metadata/GroupRepositoryMetadata.java | 119 + .../repository/metadata/MetadataBridge.java | 172 + .../repository/metadata/MetadataUtils.java | 39 + .../metadata/RepositoryMetadataReadException.java | 40 + .../SnapshotArtifactRepositoryMetadata.java | 98 + .../maven/artifact/resolver/ArtifactCollector.java | 42 + .../maven/artifact/resolver/ArtifactResolver.java | 108 + .../artifact/resolver/DebugResolutionListener.java | 167 + .../resolver/DefaultArtifactCollector.java | 30 + .../artifact/resolver/DefaultArtifactResolver.java | 643 ++ .../resolver/ResolutionListenerForDepMgmt.java | 43 + .../artifact/resolver/UnresolvedArtifacts.java | 66 + .../resolver/WarningResolutionListener.java | 90 + .../resolver/filter/InversionArtifactFilter.java | 65 + .../artifact/resolver/filter/OrArtifactFilter.java | 93 + .../resolver/filter/TypeArtifactFilter.java | 66 + .../artifact/versioning/ManagedVersionMap.java | 56 + .../maven/execution/DefaultRuntimeInformation.java | 64 + .../apache/maven/execution/RuntimeInformation.java | 34 + .../profiles/DefaultMavenProfilesBuilder.java | 93 + .../maven/profiles/DefaultProfileManager.java | 248 + .../maven/profiles/MavenProfilesBuilder.java | 37 + .../org/apache/maven/profiles/ProfileManager.java | 58 + .../maven/profiles/ProfilesConversionUtils.java | 151 + .../activation/DetectedProfileActivator.java | 35 + .../profiles/activation/FileProfileActivator.java | 109 + .../activation/JdkPrefixProfileActivator.java | 97 + .../OperatingSystemProfileActivator.java | 161 + .../activation/ProfileActivationException.java | 39 + .../profiles/activation/ProfileActivator.java | 33 + .../activation/SystemPropertyProfileActivator.java | 114 + .../maven/project/DefaultMavenProjectBuilder.java | 324 + .../DefaultProjectBuilderConfiguration.java | 107 + .../project/InvalidProjectModelException.java | 74 + .../apache/maven/project/MavenProjectBuilder.java | 76 + .../project/MissingRepositoryElementException.java | 38 + .../java/org/apache/maven/project/ModelUtils.java | 367 ++ .../maven/project/ProjectBuilderConfiguration.java | 55 + .../org/apache/maven/project/ProjectUtils.java | 118 + .../DefaultModelInheritanceAssembler.java | 752 +++ .../inheritance/ModelInheritanceAssembler.java | 41 + .../AbstractStringBasedModelInterpolator.java | 407 ++ .../interpolation/BuildTimestampValueSource.java | 63 + .../interpolation/ModelInterpolationException.java | 72 + .../project/interpolation/ModelInterpolator.java | 66 + .../PathTranslatingPostProcessor.java | 64 + .../interpolation/RegexBasedModelInterpolator.java | 58 + .../StringSearchModelInterpolator.java | 410 ++ .../maven/project/path/DefaultPathTranslator.java | 261 + .../project/validation/DefaultModelValidator.java | 76 + .../project/validation/ModelValidationResult.java | 95 + .../maven/project/validation/ModelValidator.java | 37 + .../maven/reporting/MavenReportException.java | 39 + .../maven/repository/DefaultMirrorSelector.java | 205 + .../maven/repository/MavenArtifactMetadata.java | 119 + .../org/apache/maven/repository/MetadataGraph.java | 96 + .../apache/maven/repository/MetadataGraphNode.java | 101 + .../repository/MetadataResolutionRequest.java | 202 + .../maven/repository/MetadataResolutionResult.java | 356 ++ .../apache/maven/repository/MirrorSelector.java | 44 + .../repository/UserLocalArtifactRepository.java | 74 + .../maven/repository/VersionNotFoundException.java | 83 + .../repository/legacy/ChecksumFailedException.java | 42 + .../legacy/DefaultUpdateCheckManager.java | 438 ++ .../repository/legacy/DefaultWagonManager.java | 823 +++ .../repository/legacy/LegacyRepositorySystem.java | 906 +++ .../maven/repository/legacy/MavenArtifact.java | 96 + .../repository/legacy/TransferListenerAdapter.java | 187 + .../repository/legacy/UpdateCheckManager.java | 41 + .../legacy/WagonConfigurationException.java | 63 + .../maven/repository/legacy/WagonManager.java | 79 + .../repository/ArtifactRepositoryFactory.java | 56 + .../DefaultArtifactRepositoryFactory.java | 144 + .../resolver/DefaultLegacyArtifactCollector.java | 796 +++ .../legacy/resolver/LegacyArtifactCollector.java | 62 + .../legacy/resolver/conflict/ConflictResolver.java | 44 + .../resolver/conflict/ConflictResolverFactory.java | 48 + .../ConflictResolverNotFoundException.java | 47 + .../resolver/conflict/DefaultConflictResolver.java | 36 + .../conflict/DefaultConflictResolverFactory.java | 80 + .../conflict/FarthestConflictResolver.java | 47 + .../resolver/conflict/NearestConflictResolver.java | 48 + .../resolver/conflict/NewestConflictResolver.java | 62 + .../resolver/conflict/OldestConflictResolver.java | 62 + .../transform/AbstractVersionTransformation.java | 135 + .../resolver/transform/ArtifactTransformation.java | 86 + .../transform/ArtifactTransformationManager.java | 82 + .../DefaultArtifactTransformationManager.java | 86 + .../transform/LatestArtifactTransformation.java | 74 + .../transform/ReleaseArtifactTransformation.java | 100 + .../resolver/transform/SnapshotTransformation.java | 171 + .../repository/metadata/ArtifactMetadata.java | 353 ++ .../repository/metadata/ClasspathContainer.java | 144 + .../metadata/ClasspathTransformation.java | 46 + .../metadata/DefaultClasspathTransformation.java | 183 + .../DefaultGraphConflictResolutionPolicy.java | 73 + .../metadata/DefaultGraphConflictResolver.java | 249 + .../metadata/GraphConflictResolutionException.java | 51 + .../metadata/GraphConflictResolutionPolicy.java | 35 + .../repository/metadata/GraphConflictResolver.java | 48 + .../maven/repository/metadata/MetadataGraph.java | 523 ++ .../repository/metadata/MetadataGraphEdge.java | 189 + .../MetadataGraphTransformationException.java | 50 + .../repository/metadata/MetadataGraphVertex.java | 216 + .../repository/metadata/MetadataResolution.java | 71 + .../metadata/MetadataResolutionException.java | 49 + .../metadata/MetadataResolutionRequest.java | 79 + .../MetadataResolutionRequestTypeEnum.java | 45 + .../metadata/MetadataResolutionResult.java | 172 + .../metadata/MetadataRetrievalException.java | 59 + .../maven/repository/metadata/MetadataSource.java | 39 + .../repository/metadata/MetadataTreeNode.java | 148 + .../plugin/ExpressionDocumentationException.java | 37 + .../usability/plugin/ExpressionDocumenter.java | 175 + .../maven-compat/src/main/mdo/paramdoc.mdo | 154 + .../maven-compat/src/main/mdo/profiles.mdo | 398 ++ .../maven/plugin-expressions/project.paramdoc.xml | 172 + .../maven/plugin-expressions/rootless.paramdoc.xml | 48 + .../maven/plugin-expressions/settings.paramdoc.xml | 53 + .../src/main/resources/META-INF/maven/plugin.xml | 218 + .../maven-compat/src/site/site.xml | 36 + .../AbstractArtifactComponentTestCase.java | 371 ++ .../apache/maven/artifact/ArtifactUtilsTest.java | 79 + .../apache/maven/artifact/DefaultArtifactTest.java | 140 + .../artifact/deployer/ArtifactDeployerTest.java | 67 + .../deployer/SimpleArtifactMetadataSource.java | 66 + .../factory/DefaultArtifactFactoryTest.java | 49 + .../artifact/handler/ArtifactHandlerMock.java | 100 + .../artifact/installer/ArtifactInstallerTest.java | 61 + .../artifact/metadata/TestMetadataSource.java | 102 + .../repository/MavenArtifactRepositoryTest.java | 59 + .../resolver/ArtifactResolutionExceptionTest.java | 64 + .../artifact/resolver/ArtifactResolverTest.java | 283 + .../resolver/DefaultArtifactResolverTest.java | 111 + .../maven/artifact/resolver/TestFileWagon.java | 94 + .../artifact/resolver/TestTransferListener.java | 43 + .../resolver/filter/AndArtifactFilterTest.java | 62 + .../resolver/filter/FilterHashEqualsTest.java | 50 + .../resolver/filter/OrArtifactFilterTest.java | 62 + .../resolver/filter/ScopeArtifactFilterTest.java | 96 + .../maven/artifact/testutils/TestFileManager.java | 224 + .../transform/TransformationManagerTest.java | 46 + .../manager/DefaultProfileManagerTest.java | 232 + .../project/AbstractMavenProjectTestCase.java | 185 + .../maven/project/ClasspathArtifactResolver.java | 89 + .../maven/project/EmptyLifecycleExecutor.java | 110 + .../project/EmptyLifecyclePluginAnalyzer.java | 78 + .../project/LegacyLocalRepositoryManager.java | 192 + .../org/apache/maven/project/ModelUtilsTest.java | 616 ++ .../apache/maven/project/ProjectClasspathTest.java | 149 + .../apache/maven/project/TestArtifactResolver.java | 30 + .../maven/project/TestMavenRepositorySystem.java | 30 + .../apache/maven/project/TestProjectBuilder.java | 68 + .../AbstractProjectInheritanceTestCase.java | 57 + .../inheritance/t00/ProjectInheritanceTest.java | 93 + .../inheritance/t01/ProjectInheritanceTest.java | 92 + .../inheritance/t02/ProjectInheritanceTest.java | 169 + .../inheritance/t03/ProjectInheritanceTest.java | 68 + .../inheritance/t04/ProjectInheritanceTest.java | 86 + .../inheritance/t05/ProjectInheritanceTest.java | 79 + .../inheritance/t06/ProjectInheritanceTest.java | 80 + .../inheritance/t07/ProjectInheritanceTest.java | 82 + .../inheritance/t08/ProjectInheritanceTest.java | 81 + .../inheritance/t09/ProjectInheritanceTest.java | 119 + .../inheritance/t10/ProjectInheritanceTest.java | 94 + .../inheritance/t11/ProjectInheritanceTest.java | 64 + .../inheritance/t12/ProjectInheritanceTest.java | 65 + .../inheritance/t12scm/ProjectInheritanceTest.java | 125 + .../project/path/DefaultPathTranslatorTest.java | 58 + .../repository/DefaultMirrorSelectorTest.java | 38 + .../maven/repository/LegacyRepositoryLayout.java | 89 + .../repository/LegacyRepositorySystemTest.java | 206 + .../maven/repository/MirrorProcessorTest.java | 259 + .../legacy/DefaultUpdateCheckManagerTest.java | 240 + .../repository/legacy/DefaultWagonManagerTest.java | 422 ++ .../legacy/LegacyRepositorySystemTest.java | 88 + .../maven/repository/legacy/PerLookupWagon.java | 38 + .../maven/repository/legacy/StringWagon.java | 107 + .../org/apache/maven/repository/legacy/WagonA.java | 39 + .../org/apache/maven/repository/legacy/WagonB.java | 39 + .../org/apache/maven/repository/legacy/WagonC.java | 39 + .../apache/maven/repository/legacy/WagonMock.java | 50 + .../resolver/DefaultArtifactCollectorTest.java | 984 +++ .../conflict/AbstractConflictResolverTest.java | 143 + .../conflict/FarthestConflictResolverTest.java | 107 + .../conflict/NearestConflictResolverTest.java | 107 + .../conflict/NewestConflictResolverTest.java | 107 + .../conflict/OldestConflictResolverTest.java | 107 + .../DefaultClasspathTransformationTest.java | 120 + .../DefaultGraphConflictResolutionPolicyTest.java | 59 + .../metadata/DefaultGraphConflictResolverTest.java | 153 + .../repository/metadata/TestMetadataSource.java | 99 + .../org/apache/maven/its/a/0.1/a-0.1.jar | Bin 0 -> 1898 bytes .../org/apache/maven/its/a/0.1/a-0.1.pom | 41 + .../org/apache/maven/its/a/maven-metadata.xml | 12 + .../org/apache/maven/its/b/0.1/b-0.1.jar | Bin 0 -> 1936 bytes .../org/apache/maven/its/b/0.1/b-0.1.pom | 49 + .../org/apache/maven/its/b/maven-metadata.xml | 12 + .../test/repository-system/maven-core-2.1.0.jar | 0 .../resources/artifact-install/artifact-1.0.jar | 1 + .../inheritance-repo/t00/maven/poms/p0-1.0.pom | 11 + .../inheritance-repo/t00/maven/poms/p1-1.0.pom | 16 + .../inheritance-repo/t00/maven/poms/p2-1.0.pom | 18 + .../inheritance-repo/t00/maven/poms/p3-1.0.pom | 14 + .../inheritance-repo/t00/maven/poms/p4-1.0.pom | 13 + .../inheritance-repo/t01/maven.t01/poms/p0-1.0.pom | 11 + .../inheritance-repo/t01/maven.t01/poms/p1-1.0.pom | 16 + .../inheritance-repo/t01/maven.t01/poms/p2-1.0.pom | 16 + .../inheritance-repo/t01/maven.t01/poms/p3-1.0.pom | 16 + .../inheritance-repo/t01/maven.t01/poms/p4-1.0.pom | 16 + .../inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml | 32 + .../inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml | 32 + .../inheritance-repo/t02/p0/p1/p2/p3/pom.xml | 33 + .../inheritance-repo/t02/p0/p1/p2/pom.xml | 37 + .../resources/inheritance-repo/t02/p0/p1/pom.xml | 51 + .../test/resources/inheritance-repo/t02/p0/pom.xml | 30 + .../resources/inheritance-repo/t03/p0/p1/pom.xml | 45 + .../test/resources/inheritance-repo/t03/p0/pom.xml | 30 + .../t04/maven-test/jars/t04-a-1.0.jar | 1 + .../t04/maven-test/jars/t04-b-1.0.jar | 1 + .../t04/maven-test/jars/t04-b-2.0.jar | 1 + .../t04/maven-test/jars/t04-c-1.0.jar | 1 + .../t04/maven-test/jars/t04-c-2.0.jar | 1 + .../t04/maven-test/poms/t04-a-1.0.pom | 21 + .../t04/maven-test/poms/t04-b-1.0.pom | 7 + .../t04/maven-test/poms/t04-b-2.0.pom | 7 + .../t04/maven-test/poms/t04-c-1.0.pom | 7 + .../t04/maven-test/poms/t04-c-2.0.pom | 7 + .../resources/inheritance-repo/t04/p0/p1/pom.xml | 41 + .../test/resources/inheritance-repo/t04/p0/pom.xml | 37 + .../t05/maven-test/jars/t05-a-1.0.jar | 1 + .../t05/maven-test/jars/t05-a-2.0.jar | 1 + .../t05/maven-test/jars/t05-b-1.0.jar | 1 + .../t05/maven-test/jars/t05-b-1.1.jar | 1 + .../t05/maven-test/jars/t05-b-2.0.jar | 1 + .../t05/maven-test/jars/t05-c-1.0.jar | 1 + .../t05/maven-test/jars/t05-d-1.0.jar | 1 + .../t05/maven-test/jars/t05-d-1.1.jar | 1 + .../t05/maven-test/jars/t05-d-1.2.jar | 1 + .../t05/maven-test/poms/t05-a-1.0.pom | 23 + .../t05/maven-test/poms/t05-a-2.0.pom | 23 + .../t05/maven-test/poms/t05-b-1.0.pom | 24 + .../t05/maven-test/poms/t05-b-1.1.pom | 24 + .../t05/maven-test/poms/t05-b-2.0.pom | 24 + .../t05/maven-test/poms/t05-c-1.0.pom | 17 + .../t05/maven-test/poms/t05-d-1.0.pom | 7 + .../t05/maven-test/poms/t05-d-1.1.pom | 7 + .../t05/maven-test/poms/t05-d-1.2.pom | 7 + .../resources/inheritance-repo/t05/p0/p1/pom.xml | 54 + .../test/resources/inheritance-repo/t05/p0/pom.xml | 36 + .../t06/maven-test/jars/t06-a-1.0.jar | 1 + .../t06/maven-test/jars/t06-b-1.0.jar | 1 + .../t06/maven-test/jars/t06-b-1.1.jar | 1 + .../t06/maven-test/jars/t06-c-1.0.jar | 1 + .../t06/maven-test/jars/t06-d-1.0.jar | 1 + .../t06/maven-test/jars/t06-d-1.1.jar | 1 + .../t06/maven-test/jars/t06-d-1.2.jar | 1 + .../t06/maven-test/poms/t06-a-1.0.pom | 23 + .../t06/maven-test/poms/t06-b-1.0.pom | 24 + .../t06/maven-test/poms/t06-b-1.1.pom | 24 + .../t06/maven-test/poms/t06-c-1.0.pom | 17 + .../t06/maven-test/poms/t06-d-1.0.pom | 7 + .../t06/maven-test/poms/t06-d-1.1.pom | 7 + .../t06/maven-test/poms/t06-d-1.2.pom | 7 + .../resources/inheritance-repo/t06/p0/p1/pom.xml | 54 + .../test/resources/inheritance-repo/t06/p0/pom.xml | 37 + .../t07/maven-test/jars/t07-a-1.0.jar | 1 + .../t07/maven-test/jars/t07-b-1.0.jar | 1 + .../t07/maven-test/jars/t07-b-1.1.jar | 1 + .../t07/maven-test/jars/t07-c-1.0.jar | 1 + .../t07/maven-test/jars/t07-d-1.0.jar | 1 + .../t07/maven-test/jars/t07-d-1.1.jar | 1 + .../t07/maven-test/jars/t07-d-1.2.jar | 1 + .../t07/maven-test/poms/t07-a-1.0.pom | 23 + .../t07/maven-test/poms/t07-b-1.0.pom | 24 + .../t07/maven-test/poms/t07-b-1.1.pom | 24 + .../t07/maven-test/poms/t07-c-1.0.pom | 17 + .../t07/maven-test/poms/t07-d-1.0.pom | 7 + .../t07/maven-test/poms/t07-d-1.1.pom | 7 + .../t07/maven-test/poms/t07-d-1.2.pom | 7 + .../resources/inheritance-repo/t07/p0/p1/pom.xml | 54 + .../test/resources/inheritance-repo/t07/p0/pom.xml | 37 + .../t08/maven-test/jars/t08-a-1.0.jar | 1 + .../t08/maven-test/jars/t08-b-1.0.jar | 1 + .../t08/maven-test/jars/t08-b-1.1.jar | 1 + .../t08/maven-test/jars/t08-c-1.0.jar | 1 + .../t08/maven-test/jars/t08-d-1.0.jar | 1 + .../t08/maven-test/jars/t08-d-1.1.jar | 1 + .../t08/maven-test/jars/t08-d-1.2.jar | 1 + .../t08/maven-test/poms/t08-a-1.0.pom | 23 + .../t08/maven-test/poms/t08-b-1.0.pom | 24 + .../t08/maven-test/poms/t08-b-1.1.pom | 24 + .../t08/maven-test/poms/t08-c-1.0.pom | 17 + .../t08/maven-test/poms/t08-d-1.0.pom | 7 + .../t08/maven-test/poms/t08-d-1.1.pom | 7 + .../t08/maven-test/poms/t08-d-1.2.pom | 7 + .../resources/inheritance-repo/t08/p0/p1/pom.xml | 59 + .../test/resources/inheritance-repo/t08/p0/pom.xml | 37 + .../t09/maven-test/jars/t09-a-1.0.jar | 1 + .../t09/maven-test/jars/t09-b-1.0.jar | 1 + .../t09/maven-test/jars/t09-c-1.0.jar | 1 + .../t09/maven-test/jars/t09-d-1.0.jar | 1 + .../t09/maven-test/poms/t09-a-1.0.pom | 24 + .../t09/maven-test/poms/t09-b-1.0.pom | 17 + .../t09/maven-test/poms/t09-c-1.0.pom | 7 + .../t09/maven-test/poms/t09-d-1.0.pom | 17 + .../resources/inheritance-repo/t09/p0/p1/pom.xml | 36 + .../resources/inheritance-repo/t09/p0/p2/pom.xml | 42 + .../test/resources/inheritance-repo/t09/p0/pom.xml | 38 + .../t10/maven-test/jars/t10-a-1.0.jar | 1 + .../t10/maven-test/jars/t10-b-1.0.jar | 1 + .../t10/maven-test/jars/t10-c-1.0.jar | 1 + .../t10/maven-test/poms/t10-a-1.0.pom | 24 + .../t10/maven-test/poms/t10-b-1.0.pom | 7 + .../t10/maven-test/poms/t10-c-1.0.pom | 7 + .../resources/inheritance-repo/t10/p0/p1/pom.xml | 42 + .../test/resources/inheritance-repo/t10/p0/pom.xml | 41 + .../resources/inheritance-repo/t11/p0/p1/pom.xml | 16 + .../test/resources/inheritance-repo/t11/p0/pom.xml | 27 + .../resources/inheritance-repo/t12/p0/p1/pom.xml | 29 + .../test/resources/inheritance-repo/t12/p0/pom.xml | 30 + .../t12scm/maven/p0/1.0/p0-1.0.pom | 18 + .../t12scm/maven/p1/1.0/p1-1.0.pom | 11 + .../inheritance-repo/t12scm/p0/modules/p1/pom.xml | 11 + .../resources/inheritance-repo/t12scm/p0/pom.xml | 18 + .../src/test/resources/local-repo/marker.txt | 1 + .../maven-test/jars/maven-test-a-1.0.jar | 1 + .../maven-test/jars/maven-test-b-1.0.jar | 1 + .../maven-test/jars/maven-test-c-1.0.jar | 1 + .../maven-test/jars/maven-test-d-1.0.jar | 1 + .../maven-test/poms/maven-test-a-1.0.pom | 23 + .../maven-test/poms/maven-test-b-1.0.pom | 23 + .../maven-test/poms/maven-test-c-1.0.pom | 16 + .../maven-test/poms/maven-test-d-1.1.pom | 7 + .../maven-test/poms/maven-test-d-1.2.pom | 7 + .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-e-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../poms/maven-test-snapshot-resolving-1.0.pom | 49 + .../artifact/deployer/ArtifactDeployerTest.xml | 23 + .../artifact/installer/ArtifactInstallerTest.xml | 23 + .../artifact/manager/DefaultWagonManagerTest.xml | 48 + .../artifact/resolver/ArtifactResolverTest.xml | 71 + .../artifact/resolver/ArtifactUpdatePolicyTest.xml | 29 + .../maven/project/AbstractMavenProjectTestCase.xml | 9 + .../maven-compat/src/test/resources/pom.xml | 155 + .../scope/project-with-scoped-dependencies.xml | 99 + .../projects/scope/transitive-compile-dep.xml | 57 + .../projects/scope/transitive-default-dep.xml | 58 + .../projects/scope/transitive-provided-dep.xml | 57 + .../projects/scope/transitive-runtime-dep.xml | 58 + .../projects/scope/transitive-test-dep.xml | 58 + .../maven-core/lifecycle-executor.txt | 217 + .../maven-core/plugin-manager.txt | 184 + .../maven/apache-maven-3.3.3/maven-core/pom.xml | 238 + .../maven-core/project-builder.txt | 1 + .../maven/AbstractMavenLifecycleParticipant.java | 77 + .../org/apache/maven/ArtifactFilterManager.java | 51 + .../maven/ArtifactFilterManagerDelegate.java | 34 + .../src/main/java/org/apache/maven/BuildAbort.java | 39 + .../org/apache/maven/BuildFailureException.java | 39 + .../apache/maven/DefaultArtifactFilterManager.java | 112 + .../main/java/org/apache/maven/DefaultMaven.java | 521 ++ .../maven/DefaultProjectDependenciesResolver.java | 217 + .../apache/maven/DuplicateProjectException.java | 61 + .../org/apache/maven/InternalErrorException.java | 36 + .../src/main/java/org/apache/maven/Maven.java | 34 + .../org/apache/maven/MavenExecutionException.java | 55 + .../org/apache/maven/MissingModuleException.java | 48 + .../apache/maven/ProjectBuildFailureException.java | 55 + .../org/apache/maven/ProjectCycleException.java | 39 + .../apache/maven/ProjectDependenciesResolver.java | 95 + .../main/java/org/apache/maven/ReactorReader.java | 255 + .../java/org/apache/maven/RepositoryUtils.java | 362 ++ .../main/java/org/apache/maven/SessionScoped.java | 42 + .../DependencyResolutionRequiredException.java | 35 + .../maven/artifact/InvalidRepositoryException.java | 65 + .../maven/artifact/factory/ArtifactFactory.java | 59 + .../artifact/factory/DefaultArtifactFactory.java | 160 + .../artifact/handler/DefaultArtifactHandler.java | 134 + .../handler/manager/ArtifactHandlerManager.java | 37 + .../manager/DefaultArtifactHandlerManager.java | 73 + .../metadata/AbstractArtifactMetadata.java | 33 + .../ArtifactMetadataRetrievalException.java | 55 + .../artifact/metadata/ArtifactMetadataSource.java | 52 + .../maven/artifact/metadata/ResolutionGroup.java | 46 + .../repository/DefaultRepositoryRequest.java | 134 + .../repository/LegacyLocalRepositoryManager.java | 435 ++ .../repository/MavenArtifactRepository.java | 412 ++ .../maven/artifact/repository/RepositoryCache.java | 58 + .../artifact/repository/RepositoryRequest.java | 95 + .../repository/layout/DefaultRepositoryLayout.java | 112 + .../metadata/AbstractRepositoryMetadata.java | 255 + .../metadata/ArtifactRepositoryMetadata.java | 129 + .../repository/metadata/RepositoryMetadata.java | 92 + .../RepositoryMetadataDeploymentException.java | 40 + .../RepositoryMetadataInstallationException.java | 40 + .../metadata/RepositoryMetadataManager.java | 61 + .../RepositoryMetadataResolutionException.java | 40 + .../metadata/io/DefaultMetadataReader.java | 110 + .../metadata/io/MetadataParseException.java | 93 + .../repository/metadata/io/MetadataReader.java | 82 + .../resolver/ArtifactResolutionRequest.java | 329 + .../resolver/ArtifactResolutionResult.java | 358 ++ .../resolver/DefaultResolutionErrorHandler.java | 89 + .../artifact/resolver/ResolutionErrorHandler.java | 31 + .../artifact/resolver/ResolutionListener.java | 109 + .../maven/artifact/resolver/ResolutionNode.java | 251 + .../filter/AbstractScopeArtifactFilter.java | 107 + .../resolver/filter/AndArtifactFilter.java | 99 + .../filter/CumulativeScopeArtifactFilter.java | 122 + .../resolver/filter/ExcludesArtifactFilter.java | 44 + .../resolver/filter/ExclusionSetFilter.java | 86 + .../resolver/filter/IncludesArtifactFilter.java | 93 + .../resolver/filter/ScopeArtifactFilter.java | 78 + .../apache/maven/bridge/MavenRepositorySystem.java | 785 +++ .../classrealm/ArtifactClassRealmConstituent.java | 76 + .../maven/classrealm/ClassRealmConstituent.java | 74 + .../apache/maven/classrealm/ClassRealmManager.java | 88 + .../classrealm/ClassRealmManagerDelegate.java | 36 + .../apache/maven/classrealm/ClassRealmRequest.java | 100 + .../maven/classrealm/DefaultClassRealmManager.java | 416 ++ .../maven/classrealm/DefaultClassRealmRequest.java | 82 + .../BasedirBeanConfigurationPathTranslator.java | 71 + .../configuration/BeanConfigurationException.java | 41 + .../BeanConfigurationPathTranslator.java | 41 + .../configuration/BeanConfigurationRequest.java | 130 + .../BeanConfigurationValuePreprocessor.java | 45 + .../maven/configuration/BeanConfigurator.java | 44 + .../DefaultBeanConfigurationRequest.java | 195 + .../internal/DefaultBeanConfigurator.java | 160 + .../apache/maven/eventspy/AbstractEventSpy.java | 45 + .../java/org/apache/maven/eventspy/EventSpy.java | 77 + .../eventspy/internal/EventSpyDispatcher.java | 158 + .../internal/EventSpyExecutionListener.java | 163 + .../internal/EventSpyRepositoryListener.java | 176 + .../maven/exception/DefaultExceptionHandler.java | 336 ++ .../apache/maven/exception/ExceptionHandler.java | 30 + .../apache/maven/exception/ExceptionSummary.java | 79 + .../maven/execution/AbstractExecutionListener.java | 116 + .../org/apache/maven/execution/BuildFailure.java | 61 + .../org/apache/maven/execution/BuildSuccess.java | 44 + .../org/apache/maven/execution/BuildSummary.java | 78 + .../execution/DefaultMavenExecutionRequest.java | 1299 ++++ .../DefaultMavenExecutionRequestPopulator.java | 318 + .../execution/DefaultMavenExecutionResult.java | 109 + .../org/apache/maven/execution/ExecutionEvent.java | 92 + .../apache/maven/execution/ExecutionListener.java | 66 + .../maven/execution/MavenExecutionRequest.java | 443 ++ .../MavenExecutionRequestPopulationException.java | 43 + .../execution/MavenExecutionRequestPopulator.java | 74 + .../maven/execution/MavenExecutionResult.java | 70 + .../org/apache/maven/execution/MavenSession.java | 438 ++ .../apache/maven/execution/MojoExecutionEvent.java | 86 + .../maven/execution/MojoExecutionListener.java | 40 + .../maven/execution/ProjectDependencyGraph.java | 64 + .../maven/execution/ProjectExecutionEvent.java | 90 + .../maven/execution/ProjectExecutionListener.java | 44 + .../org/apache/maven/execution/ReactorManager.java | 199 + .../apache/maven/execution/SettingsAdapter.java | 126 + .../maven/execution/scope/MojoExecutionScoped.java | 42 + .../execution/scope/WeakMojoExecutionListener.java | 44 + .../scope/internal/MojoExecutionScope.java | 190 + .../internal/MojoExecutionScopeCoreModule.java | 45 + .../scope/internal/MojoExecutionScopeModule.java | 56 + .../maven/extension/internal/CoreExports.java | 75 + .../extension/internal/CoreExportsProvider.java | 53 + .../extension/internal/CoreExtensionEntry.java | 141 + .../apache/maven/graph/DefaultGraphBuilder.java | 488 ++ .../maven/graph/DefaultProjectDependencyGraph.java | 134 + .../graph/FilteredProjectDependencyGraph.java | 111 + .../java/org/apache/maven/graph/GraphBuilder.java | 31 + .../DefaultRepositorySystemSessionFactory.java | 271 + .../internal/aether/LoggingRepositoryListener.java | 141 + .../maven/lifecycle/DefaultLifecycleExecutor.java | 177 + .../apache/maven/lifecycle/DefaultLifecycles.java | 144 + .../maven/lifecycle/LifeCyclePluginAnalyzer.java | 32 + .../java/org/apache/maven/lifecycle/Lifecycle.java | 80 + .../lifecycle/LifecycleExecutionException.java | 111 + .../apache/maven/lifecycle/LifecycleExecutor.java | 89 + .../maven/lifecycle/LifecycleMappingDelegate.java | 52 + .../lifecycle/LifecycleNotFoundException.java | 54 + .../lifecycle/LifecyclePhaseNotFoundException.java | 55 + .../apache/maven/lifecycle/MavenExecutionPlan.java | 202 + .../maven/lifecycle/MissingProjectException.java | 41 + .../maven/lifecycle/MojoExecutionConfigurator.java | 44 + .../maven/lifecycle/NoGoalSpecifiedException.java | 41 + .../lifecycle/internal/BuildListCalculator.java | 67 + .../lifecycle/internal/BuildThreadFactory.java | 39 + .../internal/CompoundProjectExecutionListener.java | 72 + .../lifecycle/internal/DefaultExecutionEvent.java | 77 + .../internal/DefaultExecutionEventCatapult.java | 119 + .../DefaultLifecycleExecutionPlanCalculator.java | 591 ++ .../internal/DefaultLifecycleMappingDelegate.java | 158 + .../internal/DefaultLifecyclePluginAnalyzer.java | 258 + .../DefaultLifecycleTaskSegmentCalculator.java | 155 + .../internal/DefaultMojoExecutionConfigurator.java | 108 + .../internal/DefaultProjectArtifactFactory.java | 53 + .../lifecycle/internal/DependencyContext.java | 114 + .../lifecycle/internal/ExecutionEventCatapult.java | 40 + .../lifecycle/internal/ExecutionPlanItem.java | 84 + .../apache/maven/lifecycle/internal/GoalTask.java | 45 + .../lifecycle/internal/LifecycleDebugLogger.java | 182 + .../internal/LifecycleDependencyResolver.java | 334 ++ .../internal/LifecycleExecutionPlanCalculator.java | 67 + .../lifecycle/internal/LifecycleModuleBuilder.java | 154 + .../internal/LifecyclePluginResolver.java | 95 + .../maven/lifecycle/internal/LifecycleStarter.java | 150 + .../maven/lifecycle/internal/LifecycleTask.java | 50 + .../internal/LifecycleTaskSegmentCalculator.java | 61 + .../lifecycle/internal/MojoDescriptorCreator.java | 309 + .../maven/lifecycle/internal/MojoExecutor.java | 394 ++ .../maven/lifecycle/internal/PhaseRecorder.java | 78 + .../lifecycle/internal/ProjectArtifactFactory.java | 38 + .../maven/lifecycle/internal/ProjectBuildList.java | 158 + .../maven/lifecycle/internal/ProjectIndex.java | 70 + .../maven/lifecycle/internal/ProjectSegment.java | 106 + .../lifecycle/internal/ReactorBuildStatus.java | 80 + .../maven/lifecycle/internal/ReactorContext.java | 83 + .../maven/lifecycle/internal/TaskSegment.java | 73 + .../maven/lifecycle/internal/builder/Builder.java | 47 + .../lifecycle/internal/builder/BuilderCommon.java | 199 + .../internal/builder/BuilderNotFoundException.java | 29 + .../multithreaded/ConcurrencyDependencyGraph.java | 153 + .../multithreaded/MultiThreadedBuilder.java | 197 + .../builder/multithreaded/ThreadOutputMuxer.java | 477 ++ .../singlethreaded/SingleThreadedBuilder.java | 65 + .../lifecycle/mapping/DefaultLifecycleMapping.java | 111 + .../apache/maven/lifecycle/mapping/Lifecycle.java | 83 + .../maven/lifecycle/mapping/LifecycleMapping.java | 39 + .../plugin/DefaultLifecycleBindingsInjector.java | 171 + .../maven/monitor/event/EventDispatcher.java | 37 + .../apache/maven/monitor/event/EventMonitor.java | 35 + .../apache/maven/plugin/BuildPluginManager.java | 54 + .../java/org/apache/maven/plugin/CacheUtils.java | 211 + .../plugin/CompoundMojoExecutionListener.java | 64 + .../CycleDetectedInPluginGraphException.java | 46 + .../maven/plugin/DebugConfigurationListener.java | 91 + .../maven/plugin/DefaultBuildPluginManager.java | 244 + .../maven/plugin/DefaultExtensionRealmCache.java | 170 + .../maven/plugin/DefaultPluginArtifactsCache.java | 218 + .../maven/plugin/DefaultPluginDescriptorCache.java | 219 + .../maven/plugin/DefaultPluginRealmCache.java | 219 + .../apache/maven/plugin/ExtensionRealmCache.java | 84 + .../plugin/InvalidPluginDescriptorException.java | 44 + .../maven/plugin/InvalidPluginException.java | 48 + .../org/apache/maven/plugin/LegacySupport.java | 59 + .../apache/maven/plugin/MavenPluginManager.java | 128 + .../apache/maven/plugin/MavenPluginValidator.java | 78 + .../org/apache/maven/plugin/MojoExecution.java | 237 + .../apache/maven/plugin/PluginArtifactsCache.java | 91 + .../maven/plugin/PluginConfigurationException.java | 74 + .../maven/plugin/PluginContainerException.java | 88 + .../apache/maven/plugin/PluginDescriptorCache.java | 58 + .../plugin/PluginDescriptorParsingException.java | 58 + .../maven/plugin/PluginExecutionException.java | 90 + .../maven/plugin/PluginIncompatibleException.java | 36 + .../apache/maven/plugin/PluginLoaderException.java | 124 + .../org/apache/maven/plugin/PluginManager.java | 82 + .../maven/plugin/PluginManagerException.java | 197 + .../maven/plugin/PluginNotFoundException.java | 58 + .../maven/plugin/PluginParameterException.java | 192 + .../plugin/PluginParameterExpressionEvaluator.java | 482 ++ .../org/apache/maven/plugin/PluginRealmCache.java | 85 + .../maven/plugin/PluginResolutionException.java | 47 + .../plugin/internal/DefaultLegacySupport.java | 74 + .../plugin/internal/DefaultMavenPluginManager.java | 946 +++ .../DefaultPluginDependenciesResolver.java | 256 + .../plugin/internal/DefaultPluginManager.java | 261 + .../maven/plugin/internal/PlexusUtilsInjector.java | 87 + .../internal/PluginDependenciesResolver.java | 71 + .../PluginDependencyResolutionListener.java | 158 + .../internal/ValidatingConfigurationListener.java | 97 + .../maven/plugin/internal/WagonExcluder.java | 109 + .../plugin/prefix/DefaultPluginPrefixRequest.java | 156 + .../prefix/NoPluginFoundForPrefixException.java | 65 + .../maven/plugin/prefix/PluginPrefixRequest.java | 115 + .../maven/plugin/prefix/PluginPrefixResolver.java | 42 + .../maven/plugin/prefix/PluginPrefixResult.java | 55 + .../internal/DefaultPluginPrefixResolver.java | 294 + .../prefix/internal/DefaultPluginPrefixResult.java | 90 + .../version/DefaultPluginVersionRequest.java | 165 + .../version/PluginVersionNotFoundException.java | 47 + .../maven/plugin/version/PluginVersionRequest.java | 115 + .../version/PluginVersionResolutionException.java | 107 + .../plugin/version/PluginVersionResolver.java | 42 + .../maven/plugin/version/PluginVersionResult.java | 47 + .../internal/DefaultPluginVersionResolver.java | 408 ++ .../internal/DefaultPluginVersionResult.java | 69 + .../DefaultDependencyResolutionRequest.java | 82 + .../project/DefaultDependencyResolutionResult.java | 111 + .../maven/project/DefaultMavenProjectHelper.java | 128 + .../project/DefaultModelBuildingListener.java | 155 + .../maven/project/DefaultProjectBuilder.java | 929 +++ .../project/DefaultProjectBuildingHelper.java | 295 + .../project/DefaultProjectBuildingRequest.java | 339 ++ .../project/DefaultProjectBuildingResult.java | 110 + .../DefaultProjectDependenciesResolver.java | 333 ++ .../maven/project/DefaultProjectRealmCache.java | 147 + .../project/DependencyResolutionException.java | 42 + .../maven/project/DependencyResolutionRequest.java | 81 + .../maven/project/DependencyResolutionResult.java | 80 + .../DuplicateArtifactAttachmentException.java | 64 + .../maven/project/DuplicateProjectException.java | 80 + .../apache/maven/project/ExtensionDescriptor.java | 88 + .../maven/project/ExtensionDescriptorBuilder.java | 168 + .../project/InvalidProjectVersionException.java | 59 + .../org/apache/maven/project/MavenProject.java | 1976 ++++++ .../apache/maven/project/MavenProjectHelper.java | 76 + .../org/apache/maven/project/ProjectBuilder.java | 98 + .../maven/project/ProjectBuildingException.java | 145 + .../maven/project/ProjectBuildingHelper.java | 81 + .../maven/project/ProjectBuildingRequest.java | 194 + .../maven/project/ProjectBuildingResult.java | 74 + .../maven/project/ProjectDependenciesResolver.java | 40 + .../apache/maven/project/ProjectModelResolver.java | 248 + .../apache/maven/project/ProjectRealmCache.java | 79 + .../org/apache/maven/project/ProjectSorter.java | 289 + .../apache/maven/project/ReactorModelCache.java | 103 + .../org/apache/maven/project/ReactorModelPool.java | 106 + .../maven/project/RepositorySessionDecorator.java | 36 + .../project/artifact/ActiveProjectArtifact.java | 403 ++ .../project/artifact/ArtifactWithDependencies.java | 33 + .../maven/project/artifact/AttachedArtifact.java | 185 + .../artifact/DefaultMavenMetadataCache.java | 347 ++ .../project/artifact/DefaultMetadataSource.java | 37 + .../InvalidDependencyVersionException.java | 55 + .../maven/project/artifact/MavenMetadataCache.java | 38 + .../project/artifact/MavenMetadataSource.java | 770 +++ .../maven/project/artifact/PluginArtifact.java | 94 + .../maven/project/artifact/ProjectArtifact.java | 100 + .../project/artifact/ProjectArtifactMetadata.java | 130 + .../apache/maven/project/path/PathTranslator.java | 41 + .../properties/internal/EnvironmentUtils.java | 70 + .../properties/internal/SystemProperties.java | 51 + .../repository/ArtifactDoesNotExistException.java | 34 + .../maven/repository/ArtifactTransferEvent.java | 343 ++ .../ArtifactTransferFailedException.java | 35 + .../maven/repository/ArtifactTransferListener.java | 36 + .../maven/repository/ArtifactTransferResource.java | 66 + .../DelegatingLocalArtifactRepository.java | 195 + .../maven/repository/LocalArtifactRepository.java | 33 + .../LocalRepositoryNotAccessibleException.java | 44 + .../apache/maven/repository/RepositorySystem.java | 164 + .../legacy/metadata/AbstractArtifactMetadata.java | 65 + .../ArtifactMetadataRetrievalException.java | 68 + .../legacy/metadata/ArtifactMetadataSource.java | 78 + .../metadata/DefaultMetadataResolutionRequest.java | 132 + .../legacy/metadata/MetadataResolutionRequest.java | 113 + .../legacy/metadata/ResolutionGroup.java | 83 + .../apache/maven/rtinfo/RuntimeInformation.java | 49 + .../rtinfo/internal/DefaultRuntimeInformation.java | 150 + .../maven/session/scope/internal/SessionScope.java | 169 + .../session/scope/internal/SessionScopeModule.java | 63 + .../settings/DefaultMavenSettingsBuilder.java | 158 + .../maven/settings/MavenSettingsBuilder.java | 81 + .../settings/SettingsConfigurationException.java | 63 + .../org/apache/maven/settings/SettingsUtils.java | 321 + .../apache/maven/toolchain/DefaultToolchain.java | 190 + .../maven/toolchain/DefaultToolchainManager.java | 140 + .../toolchain/DefaultToolchainManagerPrivate.java | 82 + .../maven/toolchain/DefaultToolchainsBuilder.java | 78 + .../toolchain/MisconfiguredToolchainException.java | 39 + .../apache/maven/toolchain/RequirementMatcher.java | 30 + .../maven/toolchain/RequirementMatcherFactory.java | 109 + .../java/org/apache/maven/toolchain/Toolchain.java | 46 + .../apache/maven/toolchain/ToolchainFactory.java | 44 + .../apache/maven/toolchain/ToolchainManager.java | 64 + .../maven/toolchain/ToolchainManagerPrivate.java | 58 + .../apache/maven/toolchain/ToolchainPrivate.java | 48 + .../apache/maven/toolchain/ToolchainsBuilder.java | 46 + .../building/DefaultToolchainsBuilder.java | 138 + .../building/DefaultToolchainsBuildingRequest.java | 63 + .../building/DefaultToolchainsBuildingResult.java | 66 + .../toolchain/building/ToolchainsBuilder.java | 41 + .../building/ToolchainsBuildingException.java | 93 + .../building/ToolchainsBuildingRequest.java | 64 + .../building/ToolchainsBuildingResult.java | 50 + .../toolchain/io/DefaultToolchainsReader.java | 115 + .../toolchain/io/ToolchainsParseException.java | 94 + .../maven/toolchain/io/ToolchainsReader.java | 83 + .../maven/toolchain/java/DefaultJavaToolChain.java | 55 + .../apache/maven/toolchain/java/JavaToolchain.java | 67 + .../maven/toolchain/java/JavaToolchainFactory.java | 127 + .../maven/toolchain/java/JavaToolchainImpl.java | 87 + .../toolchain/merge/MavenToolchainMerger.java | 103 + .../maven-core/src/main/mdo/extension.mdo | 65 + .../maven-core/src/main/mdo/toolchains.mdo | 231 + .../main/resources/META-INF/maven/extension.xml | 173 + .../META-INF/plexus/artifact-handlers.xml | 219 + .../main/resources/META-INF/plexus/components.xml | 134 + .../resources/META-INF/plexus/default-bindings.xml | 399 ++ .../org/apache/maven/messages/build.properties | 23 + .../org/apache/maven/messages/messages.properties | 34 + .../apache/maven/messages/messages_de.properties | 34 + .../apache/maven/messages/messages_el.properties | 33 + .../apache/maven/messages/messages_en.properties | 23 + .../apache/maven/messages/messages_es.properties | 33 + .../apache/maven/messages/messages_fr.properties | 33 + .../apache/maven/messages/messages_ja.properties | 34 + .../apache/maven/messages/messages_ko.properties | 34 + .../apache/maven/messages/messages_nl.properties | 33 + .../apache/maven/messages/messages_no.properties | 33 + .../apache/maven/messages/messages_pl.properties | 33 + .../maven/messages/messages_zh_CN.properties | 34 + .../org/apache/maven/project/standalone.xml | 30 + .../maven-core/src/site/apt/artifact-handlers.apt | 59 + .../src/site/apt/configuration-management.apt | 139 + .../src/site/apt/default-bindings.apt.vm | 67 + .../apt/getting-to-container-configured-mojos.apt | 102 + .../maven-core/src/site/apt/index.apt | 77 + .../maven-core/src/site/apt/inheritance.apt | 100 + .../maven-core/src/site/apt/lifecycles.apt.vm | 49 + .../maven-core/src/site/apt/offline-mode.apt | 269 + .../src/site/apt/plugin-execution-isolation.apt | 57 + .../apt/scripting-support/marmalade-support.apt | 196 + .../2.1-lifecycle-refactor-class-diagram.png | Bin 0 -> 38152 bytes .../2.1-lifecycle-refactor-sequence-diagram.png | Bin 0 -> 87383 bytes .../design/2.1-lifecycle-refactor.graffle | 4024 +++++++++++++ .../maven-core/src/site/site.xml | 42 + .../maven/AbstractCoreMavenComponentTestCase.java | 360 ++ .../java/org/apache/maven/DefaultMavenTest.java | 45 + .../maven/MavenLifecycleParticipantTest.java | 173 + .../src/test/java/org/apache/maven/MavenTest.java | 69 + .../maven/ProjectDependenciesResolverTest.java | 114 + .../artifact/handler/ArtifactHandlerTest.java | 89 + .../configuration/DefaultBeanConfiguratorTest.java | 148 + .../exception/DefaultExceptionHandlerTest.java | 60 + .../DefaultMavenExecutionRequestPopulatorTest.java | 62 + .../maven/execution/DefaultMavenExecutionTest.java | 52 + .../scope/internal/MojoExecutionScopeTest.java | 122 + .../graph/DefaultProjectDependencyGraphTest.java | 172 + .../maven/lifecycle/DefaultLifecyclesTest.java | 59 + .../lifecycle/DelegatingMojoExecutionListener.java | 75 + .../DelegatingProjectExecutionListener.java | 82 + .../lifecycle/EmptyLifecyclePluginAnalyzer.java | 77 + .../lifecycle/LifecycleExecutorSubModulesTest.java | 98 + .../maven/lifecycle/LifecycleExecutorTest.java | 553 ++ .../maven/lifecycle/MavenExecutionPlanTest.java | 77 + .../lifecycle/MojoExecutionXPathContainer.java | 72 + .../internal/BuildListCalculatorTest.java | 49 + .../lifecycle/internal/BuilderCommonTest.java | 76 + .../internal/ConcurrencyDependencyGraphTest.java | 94 + .../LifecycleExecutionPlanCalculatorTest.java | 82 + .../LifecycleTaskSegmentCalculatorImplTest.java | 57 + .../lifecycle/internal/PhaseRecorderTest.java | 49 + .../lifecycle/internal/ProjectBuildListTest.java | 42 + .../multithreaded/ThreadOutputMuxerTest.java | 167 + .../lifecycle/internal/stub/AboutTheStubs.html | 55 + .../internal/stub/BuildPluginManagerStub.java | 56 + .../internal/stub/CompletionServiceStub.java | 89 + .../internal/stub/DefaultLifecyclesStub.java | 63 + .../internal/stub/ExecutionEventCatapultStub.java | 42 + .../internal/stub/LifeCyclePluginAnalyzerStub.java | 74 + .../stub/LifecycleExecutionPlanCalculatorStub.java | 231 + .../stub/LifecycleTaskSegmentCalculatorStub.java | 89 + .../maven/lifecycle/internal/stub/LoggerStub.java | 110 + .../lifecycle/internal/stub/MojoExecutorStub.java | 70 + .../internal/stub/PluginPrefixResolverStub.java | 52 + .../internal/stub/PluginVersionResolverStub.java | 48 + .../stub/ProjectDependenciesResolverStub.java | 109 + .../internal/stub/ProjectDependencyGraphStub.java | 227 + .../stub/ProjectDependencyGraphStubTest.java | 61 + .../org/apache/maven/plugin/PluginManagerTest.java | 342 ++ .../maven/plugin/PluginParameterExceptionTest.java | 164 + .../PluginParameterExpressionEvaluatorTest.java | 447 ++ .../plugin/internal/DefaultLegacySupportTest.java | 74 + .../project/AbstractMavenProjectTestCase.java | 189 + .../project/DefaultMavenProjectBuilderTest.java | 193 + .../maven/project/EmptyLifecycleExecutor.java | 109 + .../maven/project/EmptyProjectBuildingHelper.java | 62 + .../project/ExtensionDescriptorBuilderTest.java | 101 + .../project/LegacyLocalRepositoryManager.java | 192 + .../org/apache/maven/project/MavenProjectTest.java | 197 + .../apache/maven/project/PomConstructionTest.java | 1878 ++++++ .../apache/maven/project/ProjectBuilderTest.java | 87 + .../apache/maven/project/ProjectSorterTest.java | 363 ++ .../apache/maven/project/TestMetadataSource.java | 51 + .../artifact/DefaultMavenMetadataCacheTest.java | 81 + .../project/artifact/MavenMetadataSourceTest.java | 183 + .../canonical/CanonicalProjectBuilderTest.java | 101 + .../maven/project/harness/PomTestWrapper.java | 121 + .../project/harness/Xpp3DomAttributeIterator.java | 89 + .../project/harness/Xpp3DomAttributePointer.java | 105 + .../maven/project/harness/Xpp3DomNodeIterator.java | 161 + .../maven/project/harness/Xpp3DomNodePointer.java | 155 + .../project/harness/Xpp3DomPointerFactory.java | 61 + .../maven/repository/LegacyRepositoryLayout.java | 89 + .../maven/repository/TestArtifactHandler.java | 83 + .../maven/repository/TestRepositoryConnector.java | 123 + .../repository/TestRepositoryConnectorFactory.java | 48 + .../maven/repository/TestRepositorySystem.java | 329 + .../internal/DefaultRuntimeInformationTest.java | 81 + .../settings/PomConstructionWithSettingsTest.java | 159 + .../apache/maven/settings/SettingsUtilsTest.java | 126 + .../DefaultToolchainManagerPrivateTest.java | 166 + .../toolchain/DefaultToolchainManagerTest.java | 153 + .../maven/toolchain/DefaultToolchainTest.java | 158 + .../toolchain/RequirementMatcherFactoryTest.java | 72 + .../building/DefaultToolchainsBuilderTest.java | 185 + .../building/ToolchainsBuildingExceptionTest.java | 73 + .../toolchain/merge/MavenToolchainMergerTest.java | 176 + .../cyclic-reference/module-a/pom.xml | 19 + .../cyclic-reference/module-b/pom.xml | 19 + .../default-maven/cyclic-reference/pom.xml | 14 + .../lifecycle-executor/mojo-configuration/pom.xml | 67 + .../lifecycle-executor/project-basic/pom.xml | 79 + .../pom.xml | 72 + .../java/org/apache/maven/lifecycle/test/App.java | 13 + .../org/apache/maven/lifecycle/test/AppTest.java | 38 + .../project-with-inheritance/pom.xml | 628 ++ .../project-with-multiple-executions/pom.xml | 112 + .../src/main/mdo/remote-resources.mdo | 61 + .../src/main/mdo/supplemental-model.mdo | 61 + .../pom.xml | 42 + .../pom.xml | 30 + .../module-a/pom.xml | 12 + .../module-b/pom.xml | 12 + .../pom.xml | 13 + .../mng-5003-plugin-realm-cache/pom.xml | 8 + .../pom.xml | 44 + .../tools.jar | 0 .../project-with-build-extensions-plugin/pom.xml | 31 + .../project-with-inheritance/pom.xml | 628 ++ .../project-with-plugin-classpath-ordering/pom.xml | 63 + .../sub/pom.xml | 77 + .../org/apache/maven/its/mng3906/a/0.1/a-0.1.jar | Bin 0 -> 5109 bytes .../org/apache/maven/its/mng3906/a/0.1/a-0.1.pom | 56 + .../org/apache/maven/its/mng3906/a/0.2/a-0.2.jar | Bin 0 -> 5111 bytes .../org/apache/maven/its/mng3906/a/0.2/a-0.2.pom | 56 + .../apache/maven/its/mng3906/a/maven-metadata.xml | 13 + .../org/apache/maven/its/mng3906/b/0.1/b-0.1.jar | Bin 0 -> 5108 bytes .../org/apache/maven/its/mng3906/b/0.1/b-0.1.pom | 56 + .../apache/maven/its/mng3906/b/maven-metadata.xml | 12 + .../org/apache/maven/its/mng3906/c/0.1/c-0.1.jar | Bin 0 -> 5109 bytes .../org/apache/maven/its/mng3906/c/0.1/c-0.1.pom | 56 + .../apache/maven/its/mng3906/c/maven-metadata.xml | 12 + .../org/apache/maven/its/mng3906/d/0.1/d-0.1.jar | Bin 0 -> 5108 bytes .../org/apache/maven/its/mng3906/d/0.1/d-0.1.pom | 56 + .../apache/maven/its/mng3906/d/maven-metadata.xml | 12 + .../org/apache/maven/its/mng3906/e/0.1/e-0.1.jar | Bin 0 -> 5107 bytes .../org/apache/maven/its/mng3906/e/0.1/e-0.1.pom | 56 + .../apache/maven/its/mng3906/e/maven-metadata.xml | 12 + .../sub/settings-template.xml | 55 + .../project-builder/it0063/jdk/jre/placeholder.txt | 1 + .../project-builder/it0063/jdk/lib/tools.jar | Bin 0 -> 345 bytes .../test/projects/project-builder/it0063/pom.xml | 55 + .../project-builder/mng-3023/consumer/pom.xml | 66 + .../mng-3023/dependency/dependency-1.jar | Bin 0 -> 345 bytes .../project-builder/mng-3023/dependency/pom.xml | 70 + .../test/projects/project-builder/mng-3023/pom.xml | 37 + .../it0063/jdk/jre/placeholder.txt | 1 + .../it0063/jdk/lib/tools.jar | Bin 0 -> 345 bytes .../project-dependencies-resolver/it0063/pom.xml | 55 + .../project-with-exclusions/pom.xml | 41 + .../org/apache/maven/its/a/0.1/a-0.1.jar | Bin 0 -> 1898 bytes .../org/apache/maven/its/a/0.1/a-0.1.pom | 41 + .../org/apache/maven/its/a/maven-metadata.xml | 12 + .../org/apache/maven/its/b/0.1/b-0.1.jar | Bin 0 -> 1936 bytes .../org/apache/maven/its/b/0.1/b-0.1.pom | 49 + .../org/apache/maven/its/b/maven-metadata.xml | 12 + .../maven-it-plugin/0.1/maven-it-plugin-0.1.jar | Bin 0 -> 13520 bytes .../maven-it-plugin/0.1/maven-it-plugin-0.1.pom | 70 + .../maven/its/plugins/maven-it-plugin/0.1/pom.xml | 70 + .../its/plugins/maven-it-plugin/maven-metadata.xml | 14 + .../apache/maven/its/plugins/maven-metadata.xml | 10 + .../maven-plugin-api/2.0/maven-plugin-api-2.0.jar | Bin 0 -> 10133 bytes .../maven-plugin-api/2.0/maven-plugin-api-2.0.pom | 23 + .../org/apache/maven/maven/2.0/maven-2.0.pom | 264 + .../0.1/maven-clean-plugin-0.1.jar | Bin 0 -> 6767 bytes .../0.1/maven-clean-plugin-0.1.pom | 70 + .../plugins/maven-clean-plugin/maven-metadata.xml | 14 + .../0.1/maven-compiler-plugin-0.1.jar | Bin 0 -> 8085 bytes .../0.1/maven-compiler-plugin-0.1.pom | 70 + .../maven-compiler-plugin/maven-metadata.xml | 14 + .../0.1/maven-deploy-plugin-0.1.jar | Bin 0 -> 6777 bytes .../0.1/maven-deploy-plugin-0.1.pom | 70 + .../plugins/maven-deploy-plugin/maven-metadata.xml | 14 + .../0.1/maven-install-plugin-0.1.jar | Bin 0 -> 6781 bytes .../0.1/maven-install-plugin-0.1.pom | 70 + .../maven-install-plugin/maven-metadata.xml | 14 + .../maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar | Bin 0 -> 6790 bytes .../maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom | 70 + .../plugins/maven-jar-plugin/maven-metadata.xml | 14 + .../org/apache/maven/plugins/maven-metadata.xml | 45 + .../0.1/maven-plugin-plugin-0.1.jar | Bin 0 -> 8007 bytes .../0.1/maven-plugin-plugin-0.1.pom | 70 + .../plugins/maven-plugin-plugin/maven-metadata.xml | 14 + .../0.1/maven-resources-plugin-0.1.jar | Bin 0 -> 8034 bytes .../0.1/maven-resources-plugin-0.1.pom | 70 + .../maven-resources-plugin/maven-metadata.xml | 14 + .../0.1/maven-surefire-plugin-0.1.jar | Bin 0 -> 6827 bytes .../0.1/maven-surefire-plugin-0.1.pom | 70 + .../maven-surefire-plugin/maven-metadata.xml | 14 + .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar | Bin 0 -> 168568 bytes .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom | 27 + .../artifact-id-inheritance/child/pom.xml | 32 + .../artifact-id-inheritance/pom.xml | 35 + .../basedir-aligned-interpolation/pom.xml | 60 + .../pom-with-unusual-name.xml | 39 + .../baseurl-interpolation/pom.xml | 38 + .../boolean-interpolation/pom.xml | 82 + .../build-extension-inheritance/pom.xml | 49 + .../build-extension-inheritance/sub/pom.xml | 75 + .../complete-model/w-parent/pom.xml | 31 + .../complete-model/w-parent/sub/pom.xml | 319 + .../complete-model/wo-parent/pom.xml | 313 + .../config-with-plugin-mng/pom.xml | 39 + .../consecutive_empty_elements/pom.xml | 14 + .../contributors-inheritance/child-2/pom.xml | 45 + .../contributors-inheritance/pom.xml | 35 + .../dependency-inheritance/maven-parent.xml | 31 + .../dependency-inheritance/pom.xml | 48 + .../dependency-inheritance/sub/pom.xml | 34 + .../pom.xml | 19 + .../sub/pom.xml | 17 + .../dependency-order/w-plugin-mngt/pom.xml | 68 + .../dependency-order/wo-plugin-mngt/pom.xml | 66 + .../dependency-scope-inheritance/pom.xml | 16 + .../dependency-scope-inheritance/sub/pom.xml | 19 + .../dependency-scope/pom.xml | 18 + .../dependency-scope/sub/pom.xml | 24 + .../developers-inheritance/child-2/pom.xml | 45 + .../developers-inheritance/pom.xml | 35 + .../distribution-management/pom.xml | 39 + .../dual-execution-ids/pom.xml | 28 + .../dual-execution-ids/sub/pom.xml | 43 + .../nexus-parent.xml | 29 + .../duplicate-exclusions-dependency/pom.xml | 33 + .../duplicate-exclusions-dependency/sub/pom.xml | 16 + .../empty-distMng-repo-url/pom.xml | 15 + .../resources-project-builder/empty-scm/pom.xml | 58 + .../equal-plugin-deps/pom.xml | 64 + .../equal-plugin-exec-ids/pom.xml | 83 + .../execution-configuration-join/pom.xml | 35 + .../execution-configuration-subcollections/pom.xml | 42 + .../execution-configuration/pom.xml | 58 + .../test/resources-project-builder/foo/sub/pom.xml | 418 ++ .../full-interpolation/pom.xml | 66 + .../pom.xml | 97 + .../sub/pom.xml | 84 + .../active-profile/pom.xml | 50 + .../active-profile/sub/pom.xml | 54 + .../no-profile/pom.xml | 41 + .../no-profile/sub/pom.xml | 45 + .../interpolation-cli-wins/pom.xml | 39 + .../jdk-activation/pom.xml | 105 + .../join-different-containers-same-id/pom.xml | 66 + .../licenses-inheritance/child-2/pom.xml | 47 + .../licenses-inheritance/pom.xml | 37 + .../limited-inheritance/child/pom.xml | 61 + .../limited-inheritance/pom.xml | 87 + .../mailing-lists-inheritance/child-2/pom.xml | 45 + .../mailing-lists-inheritance/pom.xml | 35 + .../managed-profile-dependency/pom.xml | 55 + .../managed-profile-dependency/sub/pom.xml | 55 + .../merged-filter-order/pom.xml | 44 + .../merged-filter-order/sub/pom.xml | 49 + .../w-plugin-mngt/pom.xml | 64 + .../w-plugin-mngt/sub/pom.xml | 64 + .../wo-plugin-mngt/pom.xml | 62 + .../wo-plugin-mngt/sub/pom.xml | 64 + .../w-plugin-mngt/pom.xml | 59 + .../w-plugin-mngt/sub/pom.xml | 59 + .../wo-plugin-mngt/pom.xml | 57 + .../wo-plugin-mngt/sub/pom.xml | 59 + .../merged-plugin-exec-order/w-plugin-mngt/pom.xml | 71 + .../w-plugin-mngt/sub/pom.xml | 71 + .../wo-plugin-mngt/pom.xml | 69 + .../wo-plugin-mngt/sub/pom.xml | 71 + .../resources-project-builder/micromailer/pom.xml | 124 + .../micromailer/spice-parent-9.pom | 103 + .../multiple-filters/pom.xml | 17 + .../multiple-repos/pom.xml | 44 + .../multiple-repos/sub/pom.xml | 45 + .../nested-build-dir-interpolation/pom.xml | 55 + .../parent-inheritance/child3.xml | 7 + .../parent-inheritance/pom.xml | 11 + .../parent-inheritance/sub/pom.xml | 9 + .../parent-interpolation/pom.xml | 16 + .../parent-interpolation/sub/pom.xml | 9 + .../parent-pom-packaging/pom.xml | 35 + .../parent-pom-packaging/sub/pom.xml | 40 + .../platform-file-separator/pom.xml | 40 + .../plugin-config-append/no-profile/pom.xml | 80 + .../no-profile/subproject/pom.xml | 70 + .../plugin-config-append/with-profile/pom.xml | 90 + .../with-profile/subproject/pom.xml | 80 + .../plugin-config-attributes/w-plugin-mngt/pom.xml | 62 + .../plugin-config-attributes/w-profile/pom.xml | 74 + .../wo-plugin-mngt/pom.xml | 53 + .../plugin-config-merging/child/pom.xml | 76 + .../plugin-config-merging/pom.xml | 72 + .../plugin-config-order/w-plugin-mngt/pom.xml | 68 + .../plugin-config-order/wo-plugin-mngt/pom.xml | 60 + .../plugin-config-properties/pom.xml | 30 + .../plugin-exec-config-order/w-plugin-mngt/pom.xml | 78 + .../wo-plugin-mngt/pom.xml | 70 + .../plugin-exec-goals-order/w-plugin-mngt/pom.xml | 66 + .../plugin-exec-goals-order/wo-plugin-mngt/pom.xml | 57 + .../plugin-exec-inheritance/pom.xml | 75 + .../plugin-exec-inheritance/w-merge/pom.xml | 48 + .../plugin-exec-inheritance/wo-merge/pom.xml | 43 + .../pom.xml | 56 + .../sub/pom.xml | 59 + .../plugin-exec-merging-wo-version/pom.xml | 55 + .../plugin-exec-merging-wo-version/sub/pom.xml | 58 + .../plugin-exec-merging/w-plugin-mngt/pom.xml | 58 + .../plugin-exec-merging/w-plugin-mngt/sub/pom.xml | 59 + .../plugin-exec-merging/wo-plugin-mngt/pom.xml | 56 + .../plugin-exec-merging/wo-plugin-mngt/sub/pom.xml | 59 + .../plugin-exec-order-and-default-exec/pom.xml | 71 + .../plugin-exec-order-with-lifecycle/pom.xml | 52 + .../plugin-exec-order/w-plugin-mngt/pom.xml | 76 + .../plugin-exec-order/wo-plugin-mngt/pom.xml | 67 + .../plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml | 72 + .../plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml | 64 + .../plugin-inheritance-merge-order/pom.xml | 67 + .../plugin-inheritance-merge-order/sub/pom.xml | 72 + .../plugin-inheritance-order/child/pom.xml | 51 + .../plugin-inheritance-order/pom.xml | 68 + .../plugin-inheritance-simple/pom.xml | 17 + .../plugin-inheritance-simple/sub/pom.xml | 20 + .../plugin-injection-merge-order/pom.xml | 133 + .../plugin-management-dependencies/pom.xml | 25 + .../plugin-management-dependencies/sub/pom.xml | 25 + .../plugin-management-duplicate/pom.xml | 39 + .../plugin-management-duplicate/sub/pom.xml | 64 + .../child/pom.xml | 53 + .../plugin-management-for-implicit-plugin/pom.xml | 61 + .../plugin-management-inheritance/pom.xml | 64 + .../plugin-merge-simple/pom.xml | 17 + .../plugin-order/nexus-parent.xml | 19 + .../resources-project-builder/plugin-order/pom.xml | 28 + .../pluginmanagement-inherited/pom.xml | 18 + .../pluginmanagement-inherited/sub/pom.xml | 17 + .../pom-encoding/latin-1/pom.xml | 36 + .../pom-encoding/utf-8/pom.xml | 36 + .../pom-inheritance/pom.xml | 188 + .../pom-inheritance/sub/pom.xml | 36 + .../prerequisites-inheritance/child/pom.xml | 36 + .../prerequisites-inheritance/pom.xml | 33 + .../profile-default-deactivation/pom.xml | 35 + .../profile-dependencies-multiple-profiles/pom.xml | 81 + .../profile-injected-dependencies/pom.xml | 75 + .../profile-injection-order/pom.xml | 68 + .../profile-module-inheritance/pom.xml | 18 + .../profile-module-inheritance/sub/pom.xml | 12 + .../profile-module/pom.xml | 24 + .../profile-plugin-mng-dependencies/pom.xml | 77 + .../profile-plugin-mng-dependencies/sub/pom.xml | 62 + .../profile-plugins/pom.xml | 52 + .../profile-properties-interpolation/pom.xml | 54 + .../properties-inheritance/pom.xml | 34 + .../properties-inheritance/sub/pom.xml | 40 + .../properties-no-duplication/pom.xml | 12 + .../properties-no-duplication/sub/pom.xml | 17 + .../repo-inheritance/pom.xml | 64 + .../reporting-interpolation/pom.xml | 6 + .../reporting-plugin-config/pom.xml | 51 + .../reporting-plugin-config/sub/pom.xml | 48 + .../jetty-parent.xml | 37 + .../single-configuration-inheritance/pom.xml | 41 + .../sytem-property-interpolation/pom.xml | 30 + .../resources-project-builder/unc-path/pom.xml | 41 + .../resources-project-builder/unc-path/sub/pom.xml | 57 + .../dep-mngt-in-profile/pom.xml | 49 + .../unique-dependency-key/dep-mngt/pom.xml | 44 + .../unique-dependency-key/deps-in-profile/pom.xml | 47 + .../unique-dependency-key/deps/pom.xml | 42 + .../artifact-repo-in-profile/pom.xml | 51 + .../unique-repo-id/artifact-repo/pom.xml | 45 + .../unique-repo-id/plugin-repo-in-profile/pom.xml | 51 + .../unique-repo-id/plugin-repo/pom.xml | 45 + .../child/pom.xml | 104 + .../unprefixed-expression-interpolation/pom.xml | 36 + .../url-append/child/pom.xml | 64 + .../url-append/parent/pom.xml | 53 + .../url-inheritance/another-parent/pom.xml | 36 + .../url-inheritance/another-parent/sub/pom.xml | 35 + .../url-inheritance/pom.xml | 74 + .../url-inheritance/sub/pom.xml | 35 + .../url-no-decoding/pom.xml | 64 + .../xml-coalesce-text/pom.xml | 567 ++ .../xml-markup-interpolation/pom.xml | 41 + .../xml-whitespace/pom.xml | 43 + .../xml-whitespace/sub/pom.xml | 49 + .../test/resources-settings/repositories/pom.xml | 29 + .../resources-settings/repositories/settings.xml | 55 + .../resources-settings/settings-no-pom/pom.xml | 13 + .../settings-no-pom/settings.xml | 20 + .../test-pom-and-settings-interpolation/pom.xml | 78 + .../settings.xml | 35 + .../org.apache.maven/maven-core/pom.properties | 1 + .../test/resources/META-INF/plexus/components.xml | 113 + .../src/test/resources/canonical-pom.xml | 55 + .../test/resources/dependencyManagement-pom.xml | 65 + .../test/resources/distributionManagement-pom.xml | 44 + .../t01/maven-test/jars/maven-test-a-1.0.jar | 1 + .../t01/maven-test/jars/maven-test-a-1.1.jar | 1 + .../t01/maven-test/jars/maven-test-b-1.0.jar | 1 + .../t01/maven-test/jars/maven-test-b-1.1.jar | 1 + .../t01/maven-test/jars/maven-test-c-1.0.jar | 1 + .../t01/maven-test/jars/maven-test-c-1.1.jar | 1 + .../t01/maven-test/jars/maven-test-d-1.0.jar | 1 + .../t01/maven-test/jars/maven-test-d-1.1.jar | 1 + .../t01/maven-test/jars/maven-test-d-1.2.jar | 1 + .../t01/maven-test/poms/maven-test-a-1.0.pom | 14 + .../t01/maven-test/poms/maven-test-a-1.1.pom | 14 + .../t01/maven-test/poms/maven-test-b-1.0.pom | 7 + .../t01/maven-test/poms/maven-test-b-1.1.pom | 7 + .../t01/maven-test/poms/maven-test-c-1.0.pom | 7 + .../t01/maven-test/poms/maven-test-c-1.1.pom | 7 + .../t01/maven-test/poms/maven-test-d-1.0.pom | 7 + .../t01/maven-test/poms/maven-test-d-1.1.pom | 7 + .../t01/maven-test/poms/maven-test-d-1.2.pom | 7 + .../test/resources/imports-repo/t01/p0/p1/pom.xml | 45 + .../test/resources/imports-repo/t01/p0/p2/pom.xml | 56 + .../test/resources/imports-repo/t01/p0/p3/pom.xml | 59 + .../test/resources/imports-repo/t01/p0/p4/pom.xml | 67 + .../src/test/resources/imports-repo/t01/p0/pom.xml | 26 + .../src/test/resources/local-repo/marker.txt | 1 + .../maven-test/jars/maven-test-a-1.0.jar | 1 + .../maven-test/jars/maven-test-b-1.0.jar | 1 + .../maven-test/jars/maven-test-c-1.0.jar | 1 + .../maven-test/jars/maven-test-d-1.0.jar | 1 + .../maven-test/poms/maven-test-a-1.0.pom | 23 + .../maven-test/poms/maven-test-b-1.0.pom | 23 + .../maven-test/poms/maven-test-c-1.0.pom | 16 + .../maven-test/poms/maven-test-d-1.1.pom | 7 + .../maven-test/poms/maven-test-d-1.2.pom | 7 + .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-e-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../poms/maven-test-snapshot-resolving-1.0.pom | 49 + .../apache/maven/MavenLifecycleParticipantTest.xml | 9 + .../apache/maven/execution/test-extension-1.jar | Bin 0 -> 4208 bytes .../junit/junit/3.8.1/junit-3.8.1.jar | Bin 0 -> 121070 bytes .../junit/junit/3.8.1/junit-3.8.1.jar.md5 | 1 + .../junit/junit/3.8.1/junit-3.8.1.jar.sha1 | 1 + .../junit/junit/3.8.1/junit-3.8.1.pom | 29 + .../junit/junit/3.8.1/junit-3.8.1.pom.md5 | 1 + .../junit/junit/3.8.1/junit-3.8.1.pom.sha1 | 1 + .../org/apache/apache/3/apache-3.pom | 82 + .../org/apache/apache/3/apache-3.pom.md5 | 1 + .../org/apache/apache/3/apache-3.pom.sha1 | 1 + .../3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar | Bin 0 -> 163984 bytes .../maven-artifact-3.0-SNAPSHOT.jar.md5 | 1 + .../maven-artifact-3.0-SNAPSHOT.jar.sha1 | 1 + .../3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom | 112 + .../maven-artifact-3.0-SNAPSHOT.pom.md5 | 1 + .../maven-artifact-3.0-SNAPSHOT.pom.sha1 | 1 + .../test/test-extension/1/test-extension-1.jar | Bin 0 -> 4208 bytes .../test/test-extension/1/test-extension-1.pom | 73 + .../test/test-extension/1/test-extension-1.pom.md5 | 1 + .../test-extension/1/test-extension-1.pom.sha1 | 1 + .../1/test-lifecycle-and-artifactHandler-1.jar | Bin 0 -> 2582 bytes .../1/test-lifecycle-and-artifactHandler-1.pom | 44 + .../1/test-lifecycle-and-artifactHandler-1.pom.md5 | 1 + .../test-lifecycle-and-artifactHandler-1.pom.sha1 | 1 + .../apache/maven/maven-parent/4/maven-parent-4.pom | 304 + .../maven/maven-parent/4/maven-parent-4.pom.md5 | 1 + .../maven/maven-parent/4/maven-parent-4.pom.sha1 | 1 + .../apache/maven/maven-parent/5/maven-parent-5.pom | 466 ++ .../maven/maven-parent/5/maven-parent-5.pom.md5 | 1 + .../maven/maven-parent/5/maven-parent-5.pom.sha1 | 1 + .../1.0-beta-2/wagon-provider-api-1.0-beta-2.jar | Bin 0 -> 46326 bytes .../wagon-provider-api-1.0-beta-2.jar.md5 | 1 + .../wagon-provider-api-1.0-beta-2.jar.sha1 | 1 + .../1.0-beta-2/wagon-provider-api-1.0-beta-2.pom | 21 + .../wagon-provider-api-1.0-beta-2.pom.md5 | 1 + .../wagon-provider-api-1.0-beta-2.pom.sha1 | 1 + .../wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom | 170 + .../wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5 | 1 + .../wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1 | 1 + .../plexus-active-collections-1.0-beta-1.jar | Bin 0 -> 15961 bytes .../plexus-active-collections-1.0-beta-1.jar.md5 | 1 + .../plexus-active-collections-1.0-beta-1.jar.sha1 | 1 + .../plexus-active-collections-1.0-beta-1.pom | 51 + .../plexus-active-collections-1.0-beta-1.pom.md5 | 1 + .../plexus-active-collections-1.0-beta-1.pom.sha1 | 1 + .../plexus-classworlds-1.2-alpha-10.jar | Bin 0 -> 42472 bytes .../plexus-classworlds-1.2-alpha-10.jar.md5 | 1 + .../plexus-classworlds-1.2-alpha-10.jar.sha1 | 1 + .../plexus-classworlds-1.2-alpha-10.pom | 94 + .../plexus-classworlds-1.2-alpha-10.pom.md5 | 1 + .../plexus-classworlds-1.2-alpha-10.pom.sha1 | 1 + .../1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar | Bin 0 -> 42636 bytes .../plexus-classworlds-1.2-alpha-7.jar.md5 | 1 + .../plexus-classworlds-1.2-alpha-7.jar.sha1 | 1 + .../1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom | 78 + .../plexus-classworlds-1.2-alpha-7.pom.md5 | 1 + .../plexus-classworlds-1.2-alpha-7.pom.sha1 | 1 + .../plexus-component-api-1.0-alpha-16.jar | Bin 0 -> 33149 bytes .../plexus-component-api-1.0-alpha-16.jar.md5 | 1 + .../plexus-component-api-1.0-alpha-16.jar.sha1 | 1 + .../plexus-component-api-1.0-alpha-16.pom | 63 + .../plexus-component-api-1.0-alpha-16.pom.md5 | 1 + .../plexus-component-api-1.0-alpha-16.pom.sha1 | 1 + .../plexus-component-api-1.0-alpha-32.jar | Bin 0 -> 36108 bytes .../plexus-component-api-1.0-alpha-32.jar.md5 | 1 + .../plexus-component-api-1.0-alpha-32.jar.sha1 | 1 + .../plexus-component-api-1.0-alpha-32.pom | 61 + .../plexus-component-api-1.0-alpha-32.pom.md5 | 1 + .../plexus-component-api-1.0-alpha-32.pom.sha1 | 1 + .../1.1.6/plexus-components-1.1.6.pom | 60 + .../1.1.6/plexus-components-1.1.6.pom.md5 | 1 + .../1.1.6/plexus-components-1.1.6.pom.sha1 | 1 + .../plexus-container-default-1.0-alpha-16.jar | Bin 0 -> 210679 bytes .../plexus-container-default-1.0-alpha-16.jar.md5 | 1 + .../plexus-container-default-1.0-alpha-16.jar.sha1 | 1 + .../plexus-container-default-1.0-alpha-16.pom | 56 + .../plexus-container-default-1.0-alpha-16.pom.md5 | 1 + .../plexus-container-default-1.0-alpha-16.pom.sha1 | 1 + .../plexus-container-default-1.0-alpha-32.jar | Bin 0 -> 238880 bytes .../plexus-container-default-1.0-alpha-32.jar.md5 | 1 + .../plexus-container-default-1.0-alpha-32.jar.sha1 | 1 + .../plexus-container-default-1.0-alpha-32.pom | 98 + .../plexus-container-default-1.0-alpha-32.pom.md5 | 1 + .../plexus-container-default-1.0-alpha-32.pom.sha1 | 1 + .../plexus-containers-1.0-alpha-16.pom | 49 + .../plexus-containers-1.0-alpha-16.pom.md5 | 1 + .../plexus-containers-1.0-alpha-16.pom.sha1 | 1 + .../plexus-containers-1.0-alpha-32.pom | 49 + .../plexus-containers-1.0-alpha-32.pom.md5 | 1 + .../plexus-containers-1.0-alpha-32.pom.sha1 | 1 + .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar | Bin 0 -> 168568 bytes .../plexus-utils/1.1/plexus-utils-1.1.jar.md5 | 1 + .../plexus-utils/1.1/plexus-utils-1.1.jar.sha1 | 1 + .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom | 27 + .../plexus-utils/1.1/plexus-utils-1.1.pom.md5 | 1 + .../plexus-utils/1.1/plexus-utils-1.1.pom.sha1 | 1 + .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar | Bin 0 -> 205043 bytes .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5 | 1 + .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1 | 1 + .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom | 61 + .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5 | 1 + .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1 | 1 + .../plexus/plexus/1.0.10/plexus-1.0.10.pom | 273 + .../plexus/plexus/1.0.10/plexus-1.0.10.pom.md5 | 1 + .../plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1 | 1 + .../plexus/plexus/1.0.11/plexus-1.0.11.pom | 308 + .../plexus/plexus/1.0.11/plexus-1.0.11.pom.md5 | 1 + .../plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1 | 1 + .../codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom | 205 + .../plexus/plexus/1.0.4/plexus-1.0.4.pom.md5 | 1 + .../plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1 | 1 + .../codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom | 259 + .../plexus/plexus/1.0.8/plexus-1.0.8.pom.md5 | 1 + .../plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1 | 1 + .../codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom | 257 + .../plexus/plexus/1.0.9/plexus-1.0.9.pom.md5 | 1 + .../plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1 | 1 + .../extension/test-extension-repo/repo-marker.txt | 1 + .../maven/lifecycle/LifecycleExecutorTest.xml | 9 + .../resources/org/apache/maven/lifecycle/pom.xml | 628 ++ .../org/apache/maven/plugin/PluginManagerTest.xml | 9 + .../maven/project/AbstractMavenProjectTestCase.xml | 9 + .../apache/maven/project/PomConstructionTest.xml | 13 + .../maven/project/workspace/buildFromFile/pom.xml | 8 + .../tests/project-caching/1/project-caching-1.pom | 8 + .../tests/project-caching/maven-metadata-local.xml | 11 + .../project/workspace/buildModelLineage/pom.xml | 7 + .../resolveParentPom/childAndParent/child/pom.xml | 10 + .../resolveParentPom/childAndParent/pom.xml | 7 + .../project/workspace/resolveParentPom/pom.xml | 10 + .../settings/PomConstructionWithSettingsTest.xml | 9 + .../org/apache/maven/toolchain/global.xml | 35 + .../toolchain/model/toolchains-jdks-extend.xml | 45 + .../toolchain/model/toolchains-jdks-extra.xml | 45 + .../maven/toolchain/model/toolchains-jdks.xml | 43 + .../resources/org/apache/maven/toolchain/user.xml | 35 + .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar | Bin 0 -> 168568 bytes .../plexus-utils/1.1/plexus-utils-1.1.jar.sha1 | 1 + .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom | 27 + .../plexus-utils/1.1/plexus-utils-1.1.pom.sha1 | 1 + .../maven-core/src/test/resources/pom.xml | 52 + .../project-dynamism/plugin-level-dep.pom.xml | 24 + .../test/resources/project-dynamism/pom-interp.xml | 28 + .../resources/project-dynamism/pom-relative.xml | 36 + .../src/test/resources/project-dynamism/pom.xml | 36 + .../src/test/resources/projects/bad-dependency.xml | 27 + .../src/test/resources/projects/bad-project.xml | 20 + ...oject-which-needs-directory-alignment-child.xml | 33 + .../project-which-needs-directory-alignment.xml | 135 + ...oject-which-needs-directory-alignment-child.xml | 29 + .../projects/build-path-expression-pom.xml | 14 + .../src/test/resources/projects/build.properties | 18 + .../child-which-inherits-from-super-model.xml | 28 + .../resources/projects/child-with-bogus-parent.xml | 29 + .../src/test/resources/projects/child.xml | 33 + .../projects/duplicate-plugins-merged-pom.xml | 48 + .../resources/projects/fully-populated-child.xml | 168 + .../grandchild-check/child/grandchild/pom.xml | 10 + .../projects/grandchild-check/child/pom.xml | 13 + .../resources/projects/grandchild-check/pom.xml | 7 + ...pom-resolves-from-property-based-repository.xml | 31 + .../projects/modelsource/module01/pom.xml | 12 + .../test/resources/projects/modelsource/pom.xml | 13 + .../src/test/resources/projects/project.xml | 162 + .../projects/versionless-managed-dependency.xml | 24 + .../maven-test/jars/maven-test-b-1.0.jar | Bin 0 -> 18874 bytes .../maven-test/jars/maven-test-b-1.0.jar.md5 | 1 + .../maven-test/poms/maven-test-b-1.0.pom | 21 + .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../jars/maven-snapshot-c-1.0-SNAPSHOT.jar | 1 + ...en-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version | 1 + .../maven-test/jars/maven-test-z-1.0.jar | 1 + .../resources/withActiveByDefaultProfile-pom.xml | 40 + .../apache-maven-3.3.3/maven-embedder/pom.xml | 144 + .../src/examples/simple-project/pom.xml | 39 + .../src/examples/simple-project/settings.xml | 26 + .../main/java/org/apache/maven/embedder/App.java | 28 + .../java/org/apache/maven/embedder/AppTest.java | 53 + .../main/java/org/apache/maven/cli/CLIManager.java | 271 + .../org/apache/maven/cli/CLIReportingUtils.java | 205 + .../main/java/org/apache/maven/cli/CliRequest.java | 120 + .../main/java/org/apache/maven/cli/MavenCli.java | 1610 +++++ .../cli/configuration/ConfigurationProcessor.java | 28 + .../SettingsXmlConfigurationProcessor.java | 290 + .../maven/cli/event/DefaultEventSpyContext.java | 38 + .../maven/cli/event/ExecutionEventLogger.java | 381 ++ .../internal/BootstrapCoreExtensionManager.java | 143 + .../maven/cli/logging/BaseSlf4jConfiguration.java | 45 + .../maven/cli/logging/Slf4jConfiguration.java | 47 + .../cli/logging/Slf4jConfigurationFactory.java | 91 + .../org/apache/maven/cli/logging/Slf4jLogger.java | 145 + .../maven/cli/logging/Slf4jLoggerManager.java | 111 + .../maven/cli/logging/Slf4jStdoutLogger.java | 306 + .../cli/logging/impl/Log4j2Configuration.java | 59 + .../cli/logging/impl/LogbackConfiguration.java | 61 + .../cli/logging/impl/Slf4jSimpleConfiguration.java | 63 + .../impl/UnsupportedSlf4jBindingConfiguration.java | 72 + .../transfer/AbstractMavenTransferListener.java | 90 + .../transfer/BatchModeMavenTransferListener.java | 32 + .../cli/transfer/ConsoleMavenTransferListener.java | 133 + .../cli/transfer/QuietMavenTransferListener.java | 31 + .../cli/transfer/Slf4jMavenTransferListener.java | 97 + .../src/main/java/org/slf4j/MavenSlf4jFriend.java | 35 + .../org/slf4j/impl/MavenSlf4jSimpleFriend.java | 40 + .../src/main/mdo/core-extensions.mdo | 88 + .../src/main/resources/META-INF/MANIFEST.MF | 7 + .../META-INF/maven/slf4j-configuration.properties | 22 + .../maven-embedder/src/site/apt/cli.apt.vm | 28 + .../maven-embedder/src/site/apt/index.apt.vm | 42 + .../maven-embedder/src/site/apt/logging.apt | 112 + .../maven-embedder/src/site/site.xml | 40 + .../src/test/embedder-test-project/pom.xml | 48 + .../src/main/java/org/apache/maven/App.java | 13 + .../src/test/java/org/apache/maven/AppTest.java | 38 + .../aggregate-mojo-failure/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 36 + .../aggregate-mojo-failure/project/pom.xml | 25 + .../bad-build-plan/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 35 + .../bad-build-plan/project/pom.xml | 25 + .../bad-dep-version/pom.xml | 33 + .../test-maven-ext/1/test-maven-ext-1.pom | 34 + .../bad-ext-direct-deps/project/pom.xml | 35 + .../1/bad-ext-plugin-dep-ver-maven-plugin-1.jar | Bin 0 -> 3166 bytes .../1/bad-ext-plugin-dep-ver-maven-plugin-1.pom | 55 + .../bad-ext-plugin-dep-ver/plugin/pom.xml | 57 + .../src/main/java/org/plugin/TestPlugin.java | 33 + .../bad-ext-plugin-dep-ver/project/pom.xml | 37 + .../1/bad-ext-plugin-maven-ver-maven-plugin-1.jar | Bin 0 -> 3166 bytes .../1/bad-ext-plugin-maven-ver-maven-plugin-1.pom | 54 + .../maven-metadata-local.xml | 12 + .../bad-ext-plugin-maven-ver/plugin/pom.xml | 57 + .../src/main/java/org/plugin/TestPlugin.java | 33 + .../bad-ext-plugin-maven-ver/project/pom.xml | 37 + .../bad-maven-version/pom.xml | 11 + .../bad-mg-dep-version/pom.xml | 35 + .../bad-non-dep-version/pom.xml | 35 + .../bad-profile-repo/pom.xml | 7 + .../bad-profile-repo/profiles.xml | 18 + .../config-rdonly-mojo-param/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 39 + .../config-rdonly-mojo-param/project/pom.xml | 47 + .../deploy-repo-creation-err/pom.xml | 41 + .../duplicated-attachments/plugin/pom.xml | 54 + .../src/main/java/org/plugin/TestPlugin.java | 50 + .../duplicated-attachments/project/pom.xml | 25 + .../1/err-loading-plugin-maven-plugin-1.jar | Bin 0 -> 3166 bytes .../1/err-loading-plugin-maven-plugin-1.pom | 55 + .../err-loading-plugin/project/pom.xml | 45 + .../org/apache/maven/errortest/dep/1/dep-1.pom | 16 + .../1/err-resolving-ext-plugin-maven-plugin-1.jar | Bin 0 -> 3166 bytes .../1/err-resolving-ext-plugin-maven-plugin-1.pom | 60 + .../err-resolving-ext-plugin/project/pom.xml | 18 + .../org/apache/maven/errortest/dep/1/dep-1.pom | 16 + .../err-resolving-project-dep/project/pom.xml | 27 + .../apache/maven/test/error/mojoFailure/App.java | 13 + .../maven/test/error/mojoFailure/AppTest.java | 38 + .../test-maven-ext-dep/1/test-maven-ext-dep-1.pom | 26 + .../test-maven-ext/1/test-maven-ext-1.pom | 34 + .../ext-deps-resolve-err/project/pom.xml | 35 + .../ext-plugin-artifact-missing-maven-plugin-1.pom | 55 + .../ext-plugin-artifact-missing/project/pom.xml | 37 + .../ext-plugin-realm-error/plugin/pom.xml | 49 + .../src/main/java/org/plugin/ComponentOne.java | 8 + .../src/main/java/org/plugin/ComponentTwo.java | 8 + .../src/main/java/org/plugin/TestPlugin.java | 39 + .../main/resources/META-INF/plexus/components.xml | 25 + .../ext-plugin-realm-error/project/pom.xml | 36 + .../1/ext-plugin-version-err-maven-plugin-1.jar | Bin 0 -> 3166 bytes .../1/ext-plugin-version-err-maven-plugin-1.pom | 50 + .../maven-metadata-local.xml | 10 + .../ext-plugin-version-err/plugin/pom.xml | 57 + .../src/main/java/org/plugin/TestPlugin.java | 33 + .../ext-plugin-version-err/project/pom.xml | 36 + .../ext-realm-error/ext/pom.xml | 38 + .../ext/src/main/java/org/ext/App.java | 13 + .../main/resources/META-INF/plexus/components.xml | 1 + .../ext-realm-error/project/pom.xml | 35 + .../interp-from-model/pom.xml | 7 + .../local-repo/org/test/bad-pom/1/bad-pom-1.pom | 9 + .../interp-from-project/project/pom.xml | 22 + .../load-extern-profiles-ioex/pom.xml | 7 + .../load-extern-profiles-xex/pom.xml | 7 + .../load-extern-profiles-xex/profiles.xml | 4 + .../missing-direct-invoke-mojo/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 36 + .../missing-module-pom/child1/pom.xml | 19 + .../child1/src/main/java/org/test/App.java | 13 + .../child1/src/test/java/org/test/AppTest.java | 38 + .../missing-module-pom/pom.xml | 13 + .../missing-parent-pom/pom.xml | 11 + .../missing-req-mojo-param/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 38 + .../missing-req-mojo-param/project/pom.xml | 25 + .../mojo-config-error/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 33 + .../src/main/resources/META-INF/maven/plugin.xml | 38 + .../mojo-config-error/project/pom.xml | 45 + .../mojo-exec-err/plugin/pom.xml | 49 + .../src/main/java/org/plugin/TestPlugin.java | 33 + .../mojo-exec-err/project/pom.xml | 26 + .../mojo-lookup-err/plugin/pom.xml | 54 + .../src/main/java/org/plugin/TestPlugin.java | 42 + .../mojo-lookup-err/project/pom.xml | 25 + .../parent-parse-ioex/child/pom.xml | 10 + .../parent-parse-ioex/pom.xml | 0 .../parent-parse-xex/child/pom.xml | 10 + .../parent-parse-xex/pom.xml | 7 + .../profile-activator-err/pom.xml | 39 + .../profile-activator-lookup-err/ext/pom.xml | 38 + .../ext/src/main/java/org/ext/App.java | 13 + .../main/resources/META-INF/plexus/components.xml | 16 + .../profile-activator-lookup-err/project/pom.xml | 46 + .../project-collision/mod1/pom.xml | 7 + .../project-collision/mod2/pom.xml | 7 + .../project-collision/pom.xml | 12 + .../project-cycle/dep/pom.xml | 12 + .../error-reporting-projects/project-cycle/pom.xml | 19 + .../project-dep-missing/pom.xml | 22 + .../apache/maven/test/error/mojoFailure/App.java | 13 + .../maven/test/error/mojoFailure/AppTest.java | 38 + .../project-mojo-failure/pom.xml | 17 + .../apache/maven/test/error/mojoFailure/App.java | 14 + .../maven/test/error/mojoFailure/AppTest.java | 38 + .../project-parse-xex/pom.xml | 25 + .../project-validation/pom.xml | 13 + .../repo-creation-err/pom.xml | 41 + .../test/eventing-projects/read-with-deps/pom.xml | 15 + .../read-with-deps/repo/tests/dep/1/dep-1.pom | 6 + .../eventing-projects/simple-read-project/pom.xml | 6 + .../test/extensions/META-INF/plexus/components.xml | 28 + .../java/org/apache/maven/cli/CLIManagerTest.java | 108 + .../apache/maven/cli/CLIReportingUtilsTest.java | 40 + .../java/org/apache/maven/cli/MavenCliTest.java | 110 + .../src/test/plugin-version-references/jar-pom.xml | 32 + .../plugin-version-references/maven-plugin-pom.xml | 36 + .../bad-module-non-recursive/badmodule/pom.xml | 14 + .../bad-module-non-recursive/goodmodule/pom.xml | 14 + .../test/projects/bad-module-non-recursive/pom.xml | 14 + .../test/projects/config-illegal/.mvn/maven.config | 1 + .../src/test/projects/config/.mvn/maven.config | 2 + .../src/test/projects/invalid-goal/pom.xml | 49 + .../project/pom.xml | 13 + .../src/main/java/org/codehaus/m2eclipse/App.java | 13 + .../test/java/org/codehaus/m2eclipse/AppTest.java | 38 + .../parent/1.0-SNAPSHOT/maven-metadata-company.xml | 11 + .../parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom | 18 + .../m2eclipse/parent/maven-metadata-local.xml | 11 + .../settings.xml | 23 + .../src/test/projects/optional-dep/pom.xml | 20 + .../readProject-missingModuleIgnored/pom.xml | 13 + .../modules/child1/pom.xml | 13 + .../readProject-withScmInheritance/pom.xml | 19 + .../org.apache.maven/maven-core/pom.properties | 18 + .../resources/pom-with-distribution-status.xml | 30 + .../test/resources/pom-without-dependencies.xml | 30 + .../maven-embedder/src/test/resources/pom.xml | 34 + .../maven-embedder/src/test/resources/pom2.xml | 48 + .../test/resources/settings/invalid-settings.xml | 24 + .../src/test/resources/settings/valid-settings.xml | 27 + .../apache-maven-3.3.3/maven-model-builder/pom.xml | 86 + .../building/AbstractModelBuildingListener.java | 37 + .../maven/model/building/DefaultModelBuilder.java | 1309 ++++ .../model/building/DefaultModelBuilderFactory.java | 243 + .../model/building/DefaultModelBuildingEvent.java | 64 + .../building/DefaultModelBuildingRequest.java | 408 ++ .../model/building/DefaultModelBuildingResult.java | 180 + .../maven/model/building/DefaultModelProblem.java | 175 + .../building/DefaultModelProblemCollector.java | 200 + .../model/building/DefaultModelProcessor.java | 84 + .../maven/model/building/FileModelSource.java | 83 + .../model/building/FilterModelBuildingRequest.java | 285 + .../apache/maven/model/building/ModelBuilder.java | 67 + .../maven/model/building/ModelBuildingEvent.java | 53 + .../model/building/ModelBuildingEventCatapult.java | 48 + .../model/building/ModelBuildingException.java | 180 + .../model/building/ModelBuildingListener.java | 40 + .../maven/model/building/ModelBuildingRequest.java | 338 ++ .../maven/model/building/ModelBuildingResult.java | 99 + .../apache/maven/model/building/ModelCache.java | 56 + .../apache/maven/model/building/ModelCacheTag.java | 132 + .../org/apache/maven/model/building/ModelData.java | 222 + .../apache/maven/model/building/ModelProblem.java | 117 + .../model/building/ModelProblemCollector.java | 41 + .../model/building/ModelProblemCollectorExt.java | 37 + .../building/ModelProblemCollectorRequest.java | 101 + .../maven/model/building/ModelProblemUtils.java | 171 + .../maven/model/building/ModelProcessor.java | 32 + .../apache/maven/model/building/ModelSource.java | 38 + .../apache/maven/model/building/ModelSource2.java | 56 + .../org/apache/maven/model/building/Result.java | 255 + .../maven/model/building/StringModelSource.java | 56 + .../maven/model/building/UrlModelSource.java | 46 + .../DefaultDependencyManagementImporter.java | 83 + .../composition/DependencyManagementImporter.java | 48 + .../inheritance/DefaultInheritanceAssembler.java | 255 + .../model/inheritance/InheritanceAssembler.java | 48 + .../AbstractStringBasedModelInterpolator.java | 271 + .../interpolation/BuildTimestampValueSource.java | 47 + .../model/interpolation/MavenBuildTimestamp.java | 70 + .../model/interpolation/ModelInterpolator.java | 54 + .../PathTranslatingPostProcessor.java | 67 + .../interpolation/ProblemDetectingValueSource.java | 87 + .../StringSearchModelInterpolator.java | 504 ++ .../interpolation/UrlNormalizingPostProcessor.java | 69 + .../apache/maven/model/io/DefaultModelReader.java | 134 + .../apache/maven/model/io/DefaultModelWriter.java | 118 + .../apache/maven/model/io/ModelParseException.java | 93 + .../org/apache/maven/model/io/ModelReader.java | 89 + .../org/apache/maven/model/io/ModelWriter.java | 74 + .../maven/model/locator/DefaultModelLocator.java | 42 + .../apache/maven/model/locator/ModelLocator.java | 44 + .../DefaultDependencyManagementInjector.java | 110 + .../DefaultPluginManagementInjector.java | 137 + .../management/DependencyManagementInjector.java | 44 + .../model/management/PluginManagementInjector.java | 44 + .../apache/maven/model/merge/MavenModelMerger.java | 729 +++ .../normalization/DefaultModelNormalizer.java | 135 + .../maven/model/normalization/ModelNormalizer.java | 54 + .../model/path/DefaultModelPathTranslator.java | 111 + .../model/path/DefaultModelUrlNormalizer.java | 84 + .../maven/model/path/DefaultPathTranslator.java | 66 + .../maven/model/path/DefaultUrlNormalizer.java | 65 + .../maven/model/path/ModelPathTranslator.java | 45 + .../maven/model/path/ModelUrlNormalizer.java | 42 + .../apache/maven/model/path/PathTranslator.java | 43 + .../org/apache/maven/model/path/UrlNormalizer.java | 39 + .../plugin/DefaultPluginConfigurationExpander.java | 83 + .../plugin/DefaultReportConfigurationExpander.java | 65 + .../model/plugin/DefaultReportingConverter.java | 240 + .../model/plugin/LifecycleBindingsInjector.java | 46 + .../model/plugin/PluginConfigurationExpander.java | 43 + .../model/plugin/ReportConfigurationExpander.java | 43 + .../maven/model/plugin/ReportingConverter.java | 43 + .../profile/DefaultProfileActivationContext.java | 259 + .../model/profile/DefaultProfileInjector.java | 249 + .../model/profile/DefaultProfileSelector.java | 143 + .../model/profile/ProfileActivationContext.java | 79 + .../maven/model/profile/ProfileInjector.java | 46 + .../maven/model/profile/ProfileSelector.java | 49 + .../profile/activation/FileProfileActivator.java | 192 + .../activation/JdkVersionProfileActivator.java | 224 + .../OperatingSystemProfileActivator.java | 168 + .../model/profile/activation/ProfileActivator.java | 59 + .../activation/PropertyProfileActivator.java | 126 + .../resolution/InvalidRepositoryException.java | 73 + .../maven/model/resolution/ModelResolver.java | 93 + .../resolution/UnresolvableModelException.java | 126 + .../model/resolution/WorkspaceModelResolver.java | 33 + .../model/superpom/DefaultSuperPomProvider.java | 87 + .../maven/model/superpom/SuperPomProvider.java | 42 + .../model/validation/DefaultModelValidator.java | 1076 ++++ .../maven/model/validation/ModelValidator.java | 54 + .../maven-model-builder/src/main/mdo/profiles.mdo | 399 ++ .../resources/org/apache/maven/model/pom-4.0.0.xml | 150 + .../maven-model-builder/src/site/apt/index.apt | 187 + .../src/site/apt/super-pom.apt.vm | 30 + .../maven-model-builder/src/site/site.xml | 40 + .../model/building/ComplexActivationTest.java | 60 + .../building/DefaultModelBuilderFactoryTest.java | 59 + .../model/building/SimpleProblemCollector.java | 89 + .../DefaultInheritanceAssemblerTest.java | 108 + .../AbstractModelInterpolatorTest.java | 494 ++ .../interpolation/MavenBuildTimestampTest.java | 38 + .../StringSearchModelInterpolatorTest.java | 505 ++ .../maven/model/path/DefaultUrlNormalizerTest.java | 85 + .../activation/AbstractProfileActivatorTest.java | 92 + .../activation/JdkVersionProfileActivatorTest.java | 185 + .../activation/PropertyProfileActivatorTest.java | 185 + .../validation/DefaultModelValidatorTest.java | 630 ++ .../src/test/resources/poms/factory/complex.xml | 49 + .../src/test/resources/poms/factory/simple.xml | 81 + .../inheritance/plugin-configuration-child.xml | 61 + .../inheritance/plugin-configuration-expected.xml | 87 + .../inheritance/plugin-configuration-parent.xml | 89 + .../validation/bad-dependency-exclusion-id.xml | 40 + .../poms/validation/bad-dependency-scope.xml | 69 + .../poms/validation/bad-dependency-version.xml | 43 + .../validation/bad-import-scope-classifier.xml | 38 + .../poms/validation/bad-import-scope-type.xml | 37 + .../resources/poms/validation/bad-modelVersion.xml | 25 + .../validation/bad-plugin-dependency-scope.xml | 70 + .../validation/bad-plugin-dependency-version.xml | 46 + .../poms/validation/bad-plugin-version.xml | 55 + .../poms/validation/bad-repository-id.xml | 50 + .../poms/validation/bad-snapshot-version.xml | 25 + .../test/resources/poms/validation/bad-version.xml | 25 + .../poms/validation/basedir-system-path.xml | 42 + .../validation/distribution-management-status.xml | 29 + .../resources/poms/validation/duplicate-module.xml | 31 + .../poms/validation/duplicate-plugin-execution.xml | 103 + .../resources/poms/validation/duplicate-plugin.xml | 81 + .../poms/validation/duplicate-profile-id.xml | 35 + .../resources/poms/validation/empty-module.xml | 30 + .../poms/validation/empty-plugin-version.xml | 34 + .../poms/validation/hard-coded-system-path.xml | 42 + .../poms/validation/incomplete-parent.xml | 30 + .../invalid-aggregator-packaging-pom.xml | 30 + .../resources/poms/validation/invalid-ids-pom.xml | 26 + .../resources/poms/validation/missing-1-pom.xml | 21 + .../poms/validation/missing-artifactId-pom.xml | 25 + .../missing-dependency-artifactId-pom.xml | 32 + .../validation/missing-dependency-exclusion-id.xml | 39 + .../validation/missing-dependency-groupId-pom.xml | 32 + .../missing-dependency-mgmt-artifactId-pom.xml | 34 + .../missing-dependency-mgmt-groupId-pom.xml | 34 + .../missing-dependency-mgmt-version-pom.xml | 34 + .../validation/missing-dependency-version-pom.xml | 32 + .../poms/validation/missing-groupId-pom.xml | 25 + .../poms/validation/missing-modelVersion-pom.xml | 25 + .../validation/missing-plugin-artifactId-pom.xml | 33 + .../missing-plugin-dependency-artifactId.xml | 41 + .../missing-plugin-dependency-groupId.xml | 41 + .../missing-plugin-dependency-version.xml | 41 + .../poms/validation/missing-plugin-version-pom.xml | 33 + .../validation/missing-report-artifactId-pom.xml | 33 + .../poms/validation/missing-report-version-pom.xml | 57 + .../poms/validation/missing-repository-id-pom.xml | 36 + .../validation/missing-resource-directory-pom.xml | 38 + .../resources/poms/validation/missing-type-pom.xml | 26 + .../poms/validation/missing-version-pom.xml | 25 + .../poms/validation/reserved-repository-id.xml | 50 + .../maven/apache-maven-3.3.3/maven-model/pom.xml | 132 + .../apache/maven/model/io/xpp3/package-info.java | 30 + .../org/apache/maven/model/merge/ModelMerger.java | 2924 +++++++++ .../org/apache/maven/model/merge/package-info.java | 24 + .../java/org/apache/maven/model/package-info.java | 25 + .../maven-model/src/main/mdo/maven.mdo | 3649 ++++++++++++ .../maven-model/src/site/apt/index.apt | 39 + .../maven-model/src/site/site.xml | 36 + .../maven-model/src/site/xdoc/navigation.xml | 35 + .../org/apache/maven/model/ActivationFileTest.java | 56 + .../org/apache/maven/model/ActivationOSTest.java | 56 + .../apache/maven/model/ActivationPropertyTest.java | 56 + .../org/apache/maven/model/ActivationTest.java | 56 + .../java/org/apache/maven/model/BuildTest.java | 56 + .../org/apache/maven/model/CiManagementTest.java | 56 + .../org/apache/maven/model/ContributorTest.java | 56 + .../maven/model/DependencyManagementTest.java | 56 + .../org/apache/maven/model/DependencyTest.java | 56 + .../maven/model/DeploymentRepositoryTest.java | 56 + .../java/org/apache/maven/model/DeveloperTest.java | 56 + .../maven/model/DistributionManagementTest.java | 56 + .../java/org/apache/maven/model/ExclusionTest.java | 56 + .../java/org/apache/maven/model/ExtensionTest.java | 56 + .../apache/maven/model/IssueManagementTest.java | 56 + .../java/org/apache/maven/model/LicenseTest.java | 56 + .../org/apache/maven/model/MailingListTest.java | 56 + .../java/org/apache/maven/model/ModelTest.java | 56 + .../java/org/apache/maven/model/NotifierTest.java | 56 + .../org/apache/maven/model/OrganizationTest.java | 56 + .../java/org/apache/maven/model/ParentTest.java | 56 + .../maven/model/PluginConfigurationTest.java | 56 + .../apache/maven/model/PluginContainerTest.java | 56 + .../apache/maven/model/PluginExecutionTest.java | 56 + .../apache/maven/model/PluginManagementTest.java | 56 + .../java/org/apache/maven/model/PluginTest.java | 56 + .../org/apache/maven/model/PrerequisitesTest.java | 56 + .../java/org/apache/maven/model/ProfileTest.java | 56 + .../org/apache/maven/model/RelocationTest.java | 56 + .../org/apache/maven/model/ReportPluginTest.java | 56 + .../java/org/apache/maven/model/ReportSetTest.java | 56 + .../java/org/apache/maven/model/ReportingTest.java | 56 + .../apache/maven/model/RepositoryPolicyTest.java | 56 + .../org/apache/maven/model/RepositoryTest.java | 56 + .../java/org/apache/maven/model/ResourceTest.java | 56 + .../test/java/org/apache/maven/model/ScmTest.java | 56 + .../test/java/org/apache/maven/model/SiteTest.java | 56 + .../apache-maven-3.3.3/maven-plugin-api/pom.xml | 91 + .../apache/maven/monitor/logging/DefaultLog.java | 131 + .../java/org/apache/maven/plugin/AbstractMojo.java | 198 + .../plugin/AbstractMojoExecutionException.java | 53 + .../org/apache/maven/plugin/ContextEnabled.java | 45 + .../main/java/org/apache/maven/plugin/Mojo.java | 72 + .../maven/plugin/MojoExecutionException.java | 80 + .../apache/maven/plugin/MojoFailureException.java | 69 + .../apache/maven/plugin/MojoNotFoundException.java | 85 + .../DuplicateMojoDescriptorException.java | 34 + .../descriptor/DuplicateParameterException.java | 31 + .../descriptor/InvalidParameterException.java | 37 + .../InvalidPluginDescriptorException.java | 38 + .../maven/plugin/descriptor/MojoDescriptor.java | 719 +++ .../apache/maven/plugin/descriptor/Parameter.java | 207 + .../maven/plugin/descriptor/PluginDescriptor.java | 445 ++ .../plugin/descriptor/PluginDescriptorBuilder.java | 358 ++ .../maven/plugin/descriptor/Requirement.java | 72 + .../java/org/apache/maven/plugin/logging/Log.java | 158 + .../maven/plugin/logging/SystemStreamLog.java | 196 + .../maven-plugin-api/src/main/mdo/lifecycle.mdo | 129 + .../maven-plugin-api/src/main/mdo/plugin.mdo | 525 ++ .../maven-plugin-api/src/site/apt/index.apt | 39 + .../maven-plugin-api/src/site/site.xml | 40 + .../descriptor/PluginDescriptorBuilderTest.java | 133 + .../plugin/lifecycle/LifecycleXpp3ReaderTest.java | 55 + .../src/test/resources/lifecycle.xml | 39 + .../maven-plugin-api/src/test/resources/plugin.xml | 89 + .../maven-repository-metadata/pom.xml | 63 + .../src/main/mdo/metadata.mdo | 371 ++ .../src/site/apt/index.apt | 52 + .../maven-repository-metadata/src/site/site.xml | 36 + .../maven-settings-builder/pom.xml | 85 + .../settings/building/DefaultSettingsBuilder.java | 277 + .../building/DefaultSettingsBuilderFactory.java | 71 + .../building/DefaultSettingsBuildingRequest.java | 160 + .../building/DefaultSettingsBuildingResult.java | 58 + .../settings/building/DefaultSettingsProblem.java | 166 + .../building/DefaultSettingsProblemCollector.java | 70 + .../settings/building/FileSettingsSource.java | 59 + .../maven/settings/building/SettingsBuilder.java | 40 + .../building/SettingsBuildingException.java | 90 + .../settings/building/SettingsBuildingRequest.java | 131 + .../settings/building/SettingsBuildingResult.java | 50 + .../maven/settings/building/SettingsProblem.java | 100 + .../building/SettingsProblemCollector.java | 41 + .../maven/settings/building/SettingsSource.java | 35 + .../settings/building/StringSettingsSource.java | 69 + .../maven/settings/building/UrlSettingsSource.java | 60 + .../settings/crypto/DefaultSettingsDecrypter.java | 110 + .../crypto/DefaultSettingsDecryptionRequest.java | 120 + .../crypto/DefaultSettingsDecryptionResult.java | 81 + .../maven/settings/crypto/SettingsDecrypter.java | 38 + .../settings/crypto/SettingsDecryptionRequest.java | 65 + .../settings/crypto/SettingsDecryptionResult.java | 71 + .../maven/settings/io/DefaultSettingsReader.java | 113 + .../maven/settings/io/DefaultSettingsWriter.java | 118 + .../maven/settings/io/SettingsParseException.java | 93 + .../apache/maven/settings/io/SettingsReader.java | 82 + .../apache/maven/settings/io/SettingsWriter.java | 74 + .../maven/settings/merge/MavenSettingsMerger.java | 142 + .../validation/DefaultSettingsValidator.java | 285 + .../settings/validation/SettingsValidator.java | 41 + .../maven-settings-builder/src/site/site.xml | 36 + .../DefaultSettingsBuilderFactoryTest.java | 53 + .../validation/DefaultSettingsValidatorTest.java | 244 + .../src/test/resources/settings/factory/simple.xml | 24 + .../apache-maven-3.3.3/maven-settings/pom.xml | 63 + .../org/apache/maven/settings/RuntimeInfo.java | 55 + .../maven-settings/src/main/mdo/settings.mdo | 1077 ++++ .../maven-settings/src/site/apt/index.apt | 36 + .../maven-settings/src/site/site.xml | 36 + framework/src/maven/apache-maven-3.3.3/pom.xml | 654 ++ .../src/site/resources/images/maven-deps.png | Bin 0 -> 73105 bytes .../src/maven/apache-maven-3.3.3/src/site/site.xml | 75 + .../apache-maven-3.3.3/src/site/xdoc/index.xml | 76 + .../src/site/xdoc/maven-deps.odg | Bin 0 -> 32324 bytes 4133 files changed, 576666 insertions(+) create mode 100644 framework/src/ant/apache-ant-1.9.6/CONTRIBUTORS create mode 100644 framework/src/ant/apache-ant-1.9.6/INSTALL create mode 100644 framework/src/ant/apache-ant-1.9.6/KEYS create mode 100644 framework/src/ant/apache-ant-1.9.6/LICENSE create mode 100644 framework/src/ant/apache-ant-1.9.6/NOTICE create mode 100644 framework/src/ant/apache-ant-1.9.6/README create mode 100644 framework/src/ant/apache-ant-1.9.6/WHATSNEW create mode 100644 framework/src/ant/apache-ant-1.9.6/bootstrap.bat create mode 100755 framework/src/ant/apache-ant-1.9.6/bootstrap.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/build.bat create mode 100755 framework/src/ant/apache-ant-1.9.6/build.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/contributors.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/fetch.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/get-m2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/lib/README create mode 100644 framework/src/ant/apache-ant-1.9.6/lib/libraries.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/lib/optional/hamcrest-core-1.3.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/lib/optional/junit-3.8.2.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/lib/optional/junit-4.11.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Integration/anttool1.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Integration/jext-plugin.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Integration/remacc.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Integration/toolmenu.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/LICENSE create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/BorlandEJBTasks.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/BorlandGenerateClient.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/ant.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/antcall.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/antlr.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/antstructure.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/antversion.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/apply.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/apt.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/attrib.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/augment.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/available.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/basename.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/bindtargets.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/buildnumber.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/cab.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/ccm.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/changelog.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/checksum.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/chgrp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/chmod.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/chown.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/clearcase.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/common.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/componentdef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/concat.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/condition.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/conditions.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/copy.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/copydir.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/copyfile.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/cvs.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/cvspass.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/cvstagdiff.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/cvsversion.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/defaultexcludes.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/delete.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/deltree.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/depend.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/dependset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/diagnostics.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/dirname.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/ear.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/echo.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/echoproperties.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/echoxml.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/ejb.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/exec.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/fail.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/filter.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/fixcrlf.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/ftp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/genkey.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/get.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/gunzip.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/gzip.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/hostinfo.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/image-classdiagram.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/image.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/import.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/include.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/input.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jar.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jarlib-available.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jarlib-display.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jarlib-manifest.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jarlib-resolve.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/java.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/javac.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/javacc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/javadoc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/javah.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jdepend.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jjdoc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jjtree.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jlink.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/jspc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/junit.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/junitreport.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/length.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/loadfile.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/loadproperties.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/loadresource.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/local.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/macrodef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/mail.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/makeurl.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/manifest.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/manifestclasspath.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/mimemail.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/mkdir.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/move.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/native2ascii.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/netrexxc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/nice.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/pack.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/parallel.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/patch.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/pathconvert.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/presetdef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/projecthelper.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/property.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/propertyfile.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/propertyhelper.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/pvcstask.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/recorder.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/rename.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/renameextensions.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/replace.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/replaceregexp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/resourcecount.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/retry.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/rexec.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/rmic.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/rpm.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/schemavalidate.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/scp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/script.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/scriptdef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sequential.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/serverdeploy.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/setproxy.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/signjar.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sleep.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sos.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sound.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/splash.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sql.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sshexec.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sshsession.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/style.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/subant.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/symlink.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/sync.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/tar.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/taskdef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/telnet.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/tempfile.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/touch.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/translate.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/truncate.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/tstamp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/typedef.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/unpack.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/untar.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/unzip.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/uptodate.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/verifyjar.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/vss.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/waitfor.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/war.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/whichresource.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/wljspc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/xmlproperty.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/xmlvalidate.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Tasks/zip.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/antlib.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/assertions.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/classfileset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/custom-programming.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/description.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/dirset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/extension.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/extensionset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/filelist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/fileset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/filterchain.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/filterset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/mapper.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/multirootfileset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/namespace.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/patternset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/permissions.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/propertyset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/redirector.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/regexp.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/resources.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/selectors-program.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/selectors.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/tarfileset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/xmlcatalog.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/Types/zipfileset.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/antexternal.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/anttaskslist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/argumentprocessor.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/base_task_classes.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/clonevm.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/conceptstypeslist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/cover.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/credits.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/develop.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/developlist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/dirtasks.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/favicon.ico create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/feedback.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/ide.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/ifunless.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/images/ant_logo_large.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/index.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/inputhandler.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/install.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/installlist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/intro.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/javacprops.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/listeners.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/platform.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/projecthelper.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/properties.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/proxy.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/running.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/runninglist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/stylesheets/style.css create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/sysclasspath.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/targets.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tasklist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tasksoverview.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/toc.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorial-HelloWorldWithAnt.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorial-tasks-filesets-properties.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorial-tasks-filesets-properties.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorial-writing-tasks-src.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorial-writing-tasks.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/tutorials.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/using.html create mode 100644 framework/src/ant/apache-ant-1.9.6/manual/usinglist.html create mode 100644 framework/src/ant/apache-ant-1.9.6/patch.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/antidote/WHAT-IS-THIS-P create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/ant-bin.wxs create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/ant-msi.wxs create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/ant-update.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/changelog.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/RequiredHeader.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-config create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames-sortby-check.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-text.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-xdoc.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/common2master.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/coverage-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/jdepend-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/jdepend.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames-xalan1.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/junit-noframes.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/log.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/manifest create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/maudit-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/mmetrics-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/performance/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/README.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-antlr/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bcel/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bsf/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-log4j/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-oro/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-regexp/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-resolver/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-xalan2/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-logging/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-net/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jai/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-javamail/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jdepend/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jmf/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jsch/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit4/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-launcher/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-netrexx/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-swing/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-testutil/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/poms/pom.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/printFailingTests.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/tagdiff.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/asf-logo.gif create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/buildfiletest-base.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/antclassloader.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/case.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/containersrc/test/SpecialSeq.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/directoryscanner.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/dispatch/dispatch.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target-imported.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/executor.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/extended-taskdef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/immutable.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.inc create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/relative.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.inc create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/relative.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/simple.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/included_file.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/included_file.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/included_file.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/included_file.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.inc create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/relative.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/simple.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/loaderref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/src/Task1.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/location.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/taskcontainer.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/notarget.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/targetlevelant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/toplevelant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/unknownelement.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/concat.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/dynamicfilter.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/escapeunicode.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.head.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headAllSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLines.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLinesSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headtail.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tail.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailAllSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLines.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLinesSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailSkip.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/linecontains.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/negatelinecontains.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.double.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/stripjavacomments.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/head-tail.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/escapeunicode.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.small.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/linecontains.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.double.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.mustache.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/sample.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/stripjavacomments.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/tokenfilter.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/abstractcvstask.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.topleveltest.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/ant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/references.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.current-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antstructure.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/available.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bar.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/basename.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bunzip2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bzip2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/calltarget.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/Bar create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/zap/Eenie create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/classloader.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/A create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/B create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/condition.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/antversion.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/http.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfailure.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfileselected.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreachable.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreference.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/issigned.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/apassword.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/nosign.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/pass.jar create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/parsersupports.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/typefound.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/xor.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.filterset create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/expected/utf-8 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/input/iso8859-1 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copydir.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copyfile.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/cvspass.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/defaultexcludes.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/delete.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/deltree.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dirname.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dynamictask.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/echoxml.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/email/mail.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/exec.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/parrot.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/spawn.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.gz create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5sum create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.pattern create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.svf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/copy.filterset.filtered create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fail.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter1.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter2.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter3.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filterdefs.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/expected.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/input.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/foo.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/get.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gunzip.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gzip.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/a.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/b.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/bad.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/c.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_bad_import.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_same_target.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/imported.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/importtargetfirst.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/recursive-selfimport.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/same_target.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential-inner.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget-inner.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/serial.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/targetfirst.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamedImport.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/initializeclass.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.stdin create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/jar.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/java.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/java/ClassToJavadoc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/javadoc.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/loadfile.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/macrodef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/makeurl.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifest.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Alpha.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Beta.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test1.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test2.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test3.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test4.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test5.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test6.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test7.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/mkdir.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/move.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/multimap.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nice.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nopermissions.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.g create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/extended.calc.g create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.g create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.tree.g create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/depend.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/A.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/B.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/C.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/D.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/E.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/A.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/B.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/A.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/B.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/ContainsOnlyInner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/MethodParam.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/A.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/B.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/expected/de/template.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/resources_ger_DE.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/template.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/translate.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/image.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/badimage.jpg create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/largeimage.jpg create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/input/org/example/Foo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jdepend/jdepend.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/default.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/simple.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/xml.jsp create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jspc.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/cdataoutput.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/matches.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/teardownlistener.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-import.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.coins.CoinTest.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.util.UniqueStringTest.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/ZEROBYTES-sampleproject.package.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/junit-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/expected/iso8859-1.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/input/iso8859-1.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/net/ftp.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/propertyfile.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/pvcs.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/schemavalidate.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script/scriptdef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script_reference.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/sos/sos.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/splash-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/unix/symlink.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/vss/vss.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/about.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/apache.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/books.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/catalog create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc-in-ns.xsd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.dtd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/docwithentity.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema-invalid.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-ns-no-location.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/entity.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/iso-2022-jp.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/utf-8.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/validate.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xmlvalidate.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xslt.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/parallel.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/pathconvert.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/presetdef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property2.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property3.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property4.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property5.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest1.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest2.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest3.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest4.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest5.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest6.result create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rename.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/result.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/source.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/value.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/rmic.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/AntTimestamp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestamp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestampImpl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/signjar.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/skinconfig.dtd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sleep.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/build.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/data.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printFilename.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printParams.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/testNewerStylesheet.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/genericsubant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test1/mysubant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test2/mysubant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sync.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/tar.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/taskdef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/template.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test.antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test2.antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelantcall.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelsubant.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/touch.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typeadapter.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typedef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/untar.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/unzip.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/uptodate.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/war.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/whichresource.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlns.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-original.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-override.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-original.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-include.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-override.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-original.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-multi.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-original.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-include-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-input1.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-locations.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-paths.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-references.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/input1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/locations.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/multi.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/original.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/override.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/paths.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/references.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.dtd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_needscat.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_withdtd.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/testkeystore create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/addtype.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionMain.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description3.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description4.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filelist.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterset.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterseta.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetb.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetc.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetd.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile1 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile2 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/flexinteger.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset1.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset2.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset3.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mapper.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/define.mapperresult.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/globmapper.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/regexpmapper.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/scriptmapper.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/poly.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/redirector.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/javaresource.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/resourcelist.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/tarentry.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/scriptselector.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/signedselector.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlfragment.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/simple.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/unusual.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/etc/yearcheck.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntClassLoader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntTypeDefinition.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessorRegistry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildEvent.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ComponentHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultDefinitions.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Diagnostics.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DirectoryScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttributeNS.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfigurator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfiguratorNS.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElement.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElementNS.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicObjectAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Evaluable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Executor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitStatusException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExtensionPoint.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/FileScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/IntrospectionHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Location.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/MagicNames.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Main.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/NoBannerLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PathTokenizer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Project.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectComponent.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelperRepository.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PropertyHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/RuntimeConfigurable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/SubBuildListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Target.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Task.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskConfigurationChecker.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TypeAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnknownElement.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedAttributeException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedElementException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/XmlLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/AttributeNamespace.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/EnableAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfBlankAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfSetAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfTrueAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/defaultManifest.mf create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/Dispatchable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseFilterReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ChainableReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ClassConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ConcatFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/EscapeUnicode.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ExpandProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/HeadFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContains.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/PrefixLines.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ReplaceTokens.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SortFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StringInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripJavaComments.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineBreaks.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineComments.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SuffixLines.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TabsToSpaces.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TailFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TokenFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/UniqFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/AntXMLContext.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/DefaultExecutor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelper2.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/SingleCheckExecutor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/DefaultInputHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/GreedyInputHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputRequest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/SecureInputHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/AntMain.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/LaunchException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Launcher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Locator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/BigProjectLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/Log4jListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/MailLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/ProfileLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SilentLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SimpleBigProjectLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/TimestampedLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/defaults.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader2.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader5.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/GetProperty.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalPropertyStack.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/NullReturn.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseNextProperty.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/PropertyExpander.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/package.html create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractJarSignerTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ant.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntStructure.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Antlib.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntlibDefinition.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Apt.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AttributeNamespaceDef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AugmentReference.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Available.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/BUnzip2.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/BZip2.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Basename.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/BindTargets.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/BuildNumber.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CVSPass.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Checksum.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Chmod.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Classloader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CloseResources.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CommandLauncherTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Componentdef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Concat.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ConditionTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Copy.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CopyPath.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Copydir.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Copyfile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Cvs.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/DefBase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Definer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Delete.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Deltree.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/DependSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/DiagnosticsTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Dirname.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ear.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Echo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/EchoXML.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Exec.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ExecTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Execute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ExecuteJava.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ExecuteStreamHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ExecuteWatchdog.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Exit.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Expand.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Filter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/FixCRLF.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/GUnzip.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/GZip.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Get.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/HostInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ImportTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Input.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/JDBCTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Jar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Java.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Javac.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Javadoc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Jikes.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/JikesOutputParser.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/KeySubst.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Length.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LoadResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Local.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LogOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/LogStreamHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MacroDef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MakeUrl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Manifest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ManifestClassPath.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ManifestException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/MatchingTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Mkdir.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Move.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Nice.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Pack.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Parallel.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Patch.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/PathConvert.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/PreSetDef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ProcessDestroyer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ProjectHelperTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Property.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/PropertyHelperTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/PumpStreamHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Recorder.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/RecorderEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Redirector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Rename.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Replace.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/ResourceCount.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Retry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Rmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/SQLExec.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/SendEmail.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Sequential.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/SignJar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Sleep.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/StreamPumper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/SubAnt.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Sync.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/TaskOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Taskdef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/TempFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Touch.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Transform.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Truncate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Tstamp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Typedef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Unpack.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Untar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/UpToDate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/VerifyJar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/WaitFor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/War.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/WhichResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison2.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison3.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLiaison4.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTLoggerAware.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XSLTProcess.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/XmlProperty.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Zip.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/AptCompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/AptExternalCompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterExtension.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/CompilerAdapterFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Gcj.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Javac12.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Javac13.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/JavacExternal.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Jikes.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Jvc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/compilers/Sj.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/And.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/AntVersion.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Condition.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Contains.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Equals.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/FilesMatch.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/HasFreeSpace.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/HasMethod.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Http.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsFailure.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsFalse.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsFileSelected.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsLastModified.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsReachable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsReference.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsSigned.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/IsTrue.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Matches.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Not.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Or.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Os.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ParserSupports.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ResourceContains.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ResourceExists.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/ResourcesMatch.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Socket.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/TypeFound.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/condition/Xor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsUser.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsVersion.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/cvslib/RedirectingStreamHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/defaults.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/EmailAddress.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/EmailTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/Header.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/Mailer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/Message.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/MimeMailer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/PlainMailer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/email/UUMailer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/CommandLauncherProxy.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/Java13CommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/MacCommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/OS2CommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/PerlScriptCommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/ScriptCommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/VmsCommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/launcher/WinNTCommandLauncher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Cab.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Javah.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Native2Ascii.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/PropertyFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Rpm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/SchemaValidate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Script.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/TraXLiaison.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/XSLTTraceSupport.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheck.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckin.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckinDefault.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCheckout.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMCreateTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/CCMReconfigure.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ccm/Continuus.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCLock.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkattr.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkbl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkdir.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMkelem.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMklabel.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCMklbtype.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCRmtype.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnlock.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/AntAnalyzer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileIterator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/ClassFileUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/Depend.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/DirectoryIterator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/JarFileIterator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ClassCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/ConstantPoolEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/DoubleCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FieldRefCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/FloatCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/IntegerCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/InterfaceMethodRefCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/InvokeDynamicCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/LongCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodHandleCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodRefCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/MethodTypeCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/NameAndTypeCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/StringCPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/depend/constantpool/Utf8CPInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandGenerateClient.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/DescriptorHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EJBDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/GenericDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/InnerClassFilenameFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JbossDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/JonasDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WeblogicTOPLinkDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ejb/WebsphereDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/Compatability.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/Compatibility.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/DeweyDecimal.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/Extension.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionResolver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtensionUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/ExtraAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibAvailableTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibDisplayTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibManifestTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/JarLibResolveTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/LibraryDisplayer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/Specification.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/AntResolver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/LocationResolver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/extension/resolvers/URLResolver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/i18n/Translate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/image/Image.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/AbstractHotDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/GenericHotDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/HotDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/JonasHotDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/ServerDeploy.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/j2ee/WebLogicHotDeploymentTool.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJDoc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JJTree.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javacc/JavaCC.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Gcjh.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/JavahAdapterFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/Kaffeh.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/javah/SunJavah.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/ClassNameReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/JlinkTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jlink/jlink.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspC.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspMangler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/JspNameMangler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/WLJspc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/DefaultJspCompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JasperC.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/jsp/compilers/JspCompilerAdapterFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/BriefJUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/CustomJUnit4TestAdapterCache.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/DOMUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/Enumerations.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/FailureRecorder.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/IgnoredTestListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/IgnoredTestResult.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskMirror.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskMirrorImpl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutErrSummaryJUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/PlainJUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/SummaryJUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrash.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestIgnored.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestListenerWrapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLJUnitResultFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/DefaultNative2Ascii.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/KaffeNative2Ascii.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/Native2AsciiAdapterFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/native2ascii/SunNative2Ascii.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPConfigurator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTaskConfig.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTaskMirror.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTaskMirrorImpl.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/MimeMail.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/RExecTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/SetProxy.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/net/TelnetTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/PvcsProject.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDefBase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/sound/SoundTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashScreen.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/splash/SplashTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/AbstractSshMessage.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Directory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/LogListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHSession.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHUserInfo.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/Scp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessage.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpFromMessageBySftp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessage.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/testing/BlockFor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/testing/BuildTimeoutException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/testing/Funtest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/unix/AbstractAccessTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/unix/Chgrp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/unix/Chown.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/unix/Symlink.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKIN.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCHECKOUT.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCREATE.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSGET.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSHISTORY.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSLABEL.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/ForkingSunRmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/KaffeRmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/SunRmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/rmic/XNewRmic.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/AbstractFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/AntFilterReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ArchiveFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ArchiveScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Assertions.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Commandline.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/CommandlineJava.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Comparison.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/DTDLocation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/DataType.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Description.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/DirSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/EnumeratedAttribute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Environment.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileList.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FilterChain.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FilterSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FilterSetCollection.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/FlexInteger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/LogLevel.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Mapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Parameter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Parameterizable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Path.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/PatternSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Permissions.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/PropertySet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Quantifier.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/RedirectorElement.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Reference.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/RegularExpression.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Resource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ResourceCollection.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ResourceFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ResourceLocation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/Substitution.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/TarFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/TarScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/TimeComparison.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/XMLCatalog.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ZipFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/ZipScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/conditions/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/defaults.properties create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/mappers/CutDirsMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/mappers/FilterMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/AbstractScriptComponent.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/ScriptCondition.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/ScriptFilter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/ScriptMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/ScriptSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Arc.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/BasicShape.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/ColorMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Draw.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/DrawOperation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Ellipse.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/ImageOperation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Rectangle.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Rotate.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Scale.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/Text.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/optional/image/TransformOperation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resolver/ApacheCatalog.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resolver/ApacheCatalogResolver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resolver/package.html create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/AbstractClasspathResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/AbstractResourceCollectionWrapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/AllButFirst.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/AllButLast.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Appendable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ArchiveResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Archives.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/BCFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/BZip2Resource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/BaseResourceCollectionWrapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/CompressedResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ContentTransformingResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Difference.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/FailFast.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/FileProvider.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/FileResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/FileResourceIterator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Files.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/First.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/GZipResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ImmutableResourceException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Intersect.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/JavaConstantResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/JavaResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Last.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LazyResourceCollectionWrapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/LogOutputResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MappedResourceCollection.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/MultiRootFileSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/PropertyResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ResourceDecorator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ResourceList.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Resources.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Restrict.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/SizeLimitCollection.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Sort.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/StringResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/TarResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Tokens.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Touchable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/URLProvider.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/URLResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/Union.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/ZipResource.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Content.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Date.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/DelegatedResourceComparator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Exists.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/FileSystem.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Name.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/ResourceComparator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Reverse.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Size.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/comparators/Type.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/And.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Compare.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Date.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Exists.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/InstanceOf.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Majority.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Name.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/None.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Not.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Or.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/ResourceSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/ResourceSelectorContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Size.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/resources/selectors/Type.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/AbstractSelectorContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/AndSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/BaseExtendSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/BaseSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/BaseSelectorContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/ContainsRegexpSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/ContainsSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/DateSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/DependSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/DepthSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/DifferentSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/ExtendFileSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/FileSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/FilenameSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/MajoritySelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/MappingSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/NoneSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/NotSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/OrSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/PresentSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/ReadableSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SelectSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SelectorContainer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SelectorScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SelectorUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SignedSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/SizeSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/TokenizedPath.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/TokenizedPattern.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/TypeSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/WritableSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/Algorithm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/Cache.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ChecksumAlgorithm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/DigestAlgorithm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/EqualComparator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/HashvalueAlgorithm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/selectors/modifiedselector/PropertiesfileCache.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/spi/Provider.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/types/spi/Service.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/Base64Converter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ChainedMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ClasspathUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/CollectionUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/CompositeMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ConcatFileInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ConcatResourceInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ContainerMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/DOMElementWriter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/DOMUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/DateUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/DeweyDecimal.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/FileNameMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/FileTokenizer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/FileUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/FirstMatchMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/FlatFileNameMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/GlobPatternMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/IdentityMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/IdentityStack.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/JAXPUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/JavaEnvUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/KeepAliveInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/KeepAliveOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LayoutPreservingProperties.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LazyFileOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LazyHashtable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LeadPipeInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LineOrientedOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LineOrientedOutputStreamRedirector.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LineTokenizer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LinkedHashtable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/LoaderUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/MergingMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/OutputStreamFunneler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/PackageNameMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ProcessUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/PropertyOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ProxySetup.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ReaderInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ReflectUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ReflectWrapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/RegexpPatternMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ResourceUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/RetryHandler.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/Retryable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ScriptFixBSFPath.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ScriptRunner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ScriptRunnerCreator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/SourceFileScanner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/SplitClassLoader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/StringTokenizer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/StringUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/TaskLogger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/TeeOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/TimeoutObserver.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/Tokenizer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UUEncoder.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UnPackageNameMapper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/UnicodeUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/VectorSet.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/Watchdog.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/WeakishReference.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/WorkerAnt.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/XMLFragment.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/XmlConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/AbstractAnalyzer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/DependencyAnalyzer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/bcel/AncestorAnalyzer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/bcel/DependencyVisitor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/depend/bcel/FullAnalyzer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/FacadeTaskHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/facade/ImplementationSpecificArgument.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/java15/ProxyDiagnostics.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/optional/JavaxScriptRunner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/optional/NoExitSecurityManager.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/optional/ScriptRunner.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/optional/WeakishReference12.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/JakartaOroMatcher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/JakartaOroRegexp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpMatcher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/JakartaRegexpRegexp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/Regexp.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/RegexpFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/RegexpMatcher.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/RegexpMatcherFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/util/regexp/RegexpUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/version.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/bzip2/BZip2Constants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/bzip2/BlockSort.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/bzip2/CBZip2InputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/bzip2/CBZip2OutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/bzip2/CRC.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/ErrorInQuitException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/MailMessage.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/mail/SmtpResponseReader.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarArchiveSparseEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarBuffer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarInputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/tar/TarUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/AbstractUnicodeExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/AsiExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/CentralDirectoryParsingZipExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ExtraFieldUtils.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/FallbackZipEncoding.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/GeneralPurposeBit.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/JarMarker.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/NioZipEncoding.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/Simple8BitZipEncoding.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnicodeCommentExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnicodePathExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnixStat.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnparseableExtraFieldData.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnrecognizedExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/UnsupportedZipFeatureException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/Zip64ExtendedInformationExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/Zip64Mode.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/Zip64RequiredException.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipConstants.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipEightByteInteger.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipEncoding.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipEncodingHelper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipEntry.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipExtraField.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipFile.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipLong.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipOutputStream.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipShort.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/zip/ZipUtil.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/resources/org/apache/tools/ant/taskdefs/javadoc-frame-injections-fix.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/resources/org/apache/tools/ant/types/resources/comparators/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/resources/org/apache/tools/ant/types/resources/selectors/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/ant create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/ant.bat create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/ant.cmd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/antRun create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/antRun.bat create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/antRun.pl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/antenv.cmd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/complete-ant-cmd.pl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/envset.cmd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/lcp.bat create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/runant.pl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/runant.py create mode 100644 framework/src/ant/apache-ant-1.9.6/src/script/runrc.cmd create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/antunit-base.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/bugfixes/README.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/bugfixes/br50866/br50866-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/bugfixes/br50866/common.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/bugfixes/br50866/middle.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/bugfixes/bugzilla-43324-stackoverflow-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/ant-attribute-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/bindtargets-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/classloader-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/createtask-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/dirscanner-symlinks-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/extension-point-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/extension/include-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/extension/module1.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/location/location.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/location/src/task/EchoLocation.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/magic-names-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/nested-elements-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/nested-text-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-extension-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-extension-ref.xmlref create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-extension.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-targets-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-targets-ref.xmlref create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-cross-targets.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import-common.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import-commonref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import-ref.xmlref create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import2-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/projecthelpers/build-many-import2-ref.xmlref create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/ref-propertyhelper-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/ref-psyntax-hint-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/target-test-helper.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/target-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/uuencode/src/task/BaseTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/uuencode/src/task/UUDecodeTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/uuencode/src/task/UUEncodeTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/core/uuencode/uuencode-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expandproperties-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/sort.sortComparator.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/sort.sortDefault.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/sort.sortReverse.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/sortuniq.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/uniq.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/expected/unique-columns.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/input/sort.sortDefault.test create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/input/uniq.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/input/unique-columns.txt create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/replacetokens-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/sort-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/striplinecomments-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/suffix-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/filters/uniq-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/junit-frames.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/junit-noframes.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/propertyhelpers.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/ant-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/antcall-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/apt-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/apt/AptExample.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/apt/Distributed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/apt/DistributedAnnotationFactory.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/apt/DistributedAnnotationProcessor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/augment-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/broken_cd.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/bunzip2-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/bzip2/expected create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/bzip2/multiple.bz2 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/checksum-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/commandlauncher/commandlauncher-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/concat-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/antversion-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/equals-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/filesmatch-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/hasfreespace-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/hasmethod-text.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/islastmodified-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/resourcecontains-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/condition/resourceexists-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/copy-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/cvs.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/checkoutlist create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/checkoutlist,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/commitinfo create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/commitinfo,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/config create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/config,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/cvswrappers create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/cvswrappers,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/history create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/loginfo create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/loginfo,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/modules create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/modules,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/notify create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/notify,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postadmin create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postadmin,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postproxy create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postproxy,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/posttag create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/posttag,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postwatch create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/postwatch,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/preproxy create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/preproxy,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/rcsinfo create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/rcsinfo,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/taginfo create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/taginfo,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/val-tags create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/verifymsg create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/CVSROOT/verifymsg,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/ant module 2/test.txt,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/antmodule1/foo.txt,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/cvs/repository/antmodule3/yet another test.txt,v create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/defaultexcludes-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/delete-and-symlinks-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/delete-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/dependset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/dirname-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/ear-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/echo-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/echoxml-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/exec/apply-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/exec/exec-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/exec/expected/utf-8 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/exec/input/iso8859-1 create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/exec/parrot.sh create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/fail-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/get-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/gzip-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/hostinfo-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/import-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/import-url-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/a.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/b.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/nested.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/override.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/w.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/x.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/y.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/importtests/z.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/include-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/jar-spi-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/jar-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/java-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/javac-dir/bad-src/Bad.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/javac-dir/good-src/Simple.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/javac-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/javadoc-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/length-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/loadproperties-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/loadresource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/local-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/macrodef-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/manifest-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/manifestclasspath-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/move-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/depend/depend-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/funtest-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/javah-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/junit/junit-formatter-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/junit/junit-outputtoformatters-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/junit/junit-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/junit/src/ExampleTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/junit/xmlformatter-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/native2ascii-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/propertyfile-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/propertyfilelayout-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/replaceregexp-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/unix/symlink-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/optional/windows/attrib-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/parallel-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/pathconvert-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/property-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/propertyfile-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/propertyhelper-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/replace-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/retry-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/rmic-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/secure-input.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/signjar-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/subant-helper/echo.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/subant-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/sync-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/tar-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/taskdef-antlib-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/taskdef-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/tempfile-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/touch-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/truncate/truncate-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/unzip-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/uptodate-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/utf-16.expected create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/utf-16.expected.windows create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/war-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/web.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/whichresource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/xmlproperty-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/xmlproperty.inline-expansion.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/xmlproperty.multi.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/xslt-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/xslt/printParams-invalid.xsl create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/zip-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/taskdefs/zip/Bugzilla-42940.zip create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/build-embedded-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/conditions/isreference-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/conditions/matches-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/cutdirs-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/defer-reference-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/fileset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/filterset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/firstmatch-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/javaresource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/mapper-ref.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/mappers/glob-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/mappers/packagemapper-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/modified-selector-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/path-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/patternset-invert-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/patternset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/propertyset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/archives-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/comparators/test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/concat-resource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/fileresource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/files-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/first-last-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/javaresource-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/latepath-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/multirootfileset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/resourcelist-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/resources-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/selectors/name-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/selectors/readwrite-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/selectors/test-componentdef.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/selectors/test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/tokens-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/resources/utf-16.in create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/depend-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/different-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/filename-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/modified-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/present-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/readwrite-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/selectors/select-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/tarfileset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/antunit/types/zipfileset-test.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/AntAssert.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/AntClassLoaderDelegationTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/AntClassLoaderPerformance.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/AntClassLoaderTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/BuildFileRule.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/BuildFileTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/CaseTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DefaultLoggerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DirectoryScannerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DispatchTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskAbstract.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskInterface.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskOk.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskOkNonTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskWithNonPublicExecute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskWithNonVoidExecute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskWithoutDefaultConstructor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskWithoutExecute.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/DummyTaskWithoutPublicConstructor.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ExecutorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ExtendedTaskdefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/FileUtilities.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ImmutableTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IncludeTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/IntrospectionHelperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/LoaderRefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/LocationTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/MockBuildListener.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/PickOneTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ProjectComponentTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ProjectHelperRepositoryTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/ProjectTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/PropertyExpansionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/PropertyFileCLITest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/TaskContainerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/TopLevelTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/UnknownElementTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/XmlLoggerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/ConcatFilterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/DynamicFilterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/EscapeUnicodeTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/HeadTailTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/LineContainsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/NoNewLineTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/ReplaceTokensTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/StripJavaCommentsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/filters/TokenFilterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/launch/LocatorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/loader/AntClassLoader5Test.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AbstractCvsTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntLikeTasksAtTopLevelTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntStructureTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AntlibTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/AvailableTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/BUnzip2Test.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/BZip2Test.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/BasenameTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/CVSPassTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/CallTargetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ChecksumTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ConcatTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ConditionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/CopyTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/CopydirTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/CopyfileTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DeleteTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DeltreeTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DemuxOutputTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DirnameTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DynamicTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/DynamicTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/EchoTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/EchoXMLTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ExecTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ExecuteJavaTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ExecuteWatchdogTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/FailTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/FilterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/FixCrLfTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/GUnzipTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/GetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/GzipTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ImportTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/InitializeClassTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/InputTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JavaTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JavacTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/JavadocTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/LoadFileTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/MacroDefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/MakeUrlTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestClassPathTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ManifestTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/MkdirTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/MoveTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/MultiMapTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/NiceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ParallelTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/PathConvertTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/PreSetDefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ProcessDestroyerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/PropertyTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ProtectedJarMethodsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/RecorderTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/RenameTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ReplaceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/RmicAdvancedTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/RmicTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/SQLExecTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/SignJarTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/SleepTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/StyleTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/SubAntTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/SyncTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TStampTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TarTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TaskdefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TaskdefsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TestProcess.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TimeProcess.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TouchTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TypeAdapterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/TypedefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/UntarTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/UnzipTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/UpToDateTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/WarTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/WhichResourceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/XmlPropertyTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/XmlnsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ZipExtraFieldTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/ZipTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/AntVersionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/ContainsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/EqualsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/HttpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsFailureTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsFileSelectedTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsReachableTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsReferenceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsSignedTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/ParserSupportsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/TypeFoundTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/condition/XorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParserTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/dir1/B.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/dir2/A.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/email/EmailAddressTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/email/EmailTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/email/MessageTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ANTLRTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/BeanShellScriptTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JavahTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/JspcTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/Native2AsciiTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/PropertyFileTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/PvcsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ReplaceRegExpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/RhinoReferenceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/RhinoScriptTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/RpmTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/SchemaValidateTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/TraXLiaisonTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/XmlValidateCatalogTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/XmlValidateTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/XsltTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/depend/DependTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/i18n/TranslateTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/image/ImageTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/BatchTestTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/DOMUtilTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitClassLoaderTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitReportTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestListenerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitVersionHelperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/NoVmCrash.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/Printer.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/Sleeper.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/SuiteMethodTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/TearDownOnVmCrashTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/TestFormatter.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/VmCrash.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/XMLFormatterWithCDATAOnSystemOut.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregatorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/net/FTPTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/script/ScriptDefTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/ssh/ScpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/taskdefs/optional/vss/MSVSSTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/AddTypeTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/AssertionsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/FileListTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/MapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/PathTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/PatternSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/PermissionsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/PolyTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/RedirectorElementTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/ResourceOutputTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/TarFileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/XMLCatalogBuildFileTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/XMLCatalogTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/ZipFileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/mappers/GlobMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/mappers/MapperResult.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/mappers/RegexpPatternMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/optional/ScriptMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/optional/ScriptSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/optional/depend/ClassFileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/FileResourceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/JavaResourceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/LazyResourceCollectionTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/MultiRootFileSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/ResourceListTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/resources/TarResourceTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorRule.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/BaseSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/ContainsRegexpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/ContainsSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/DateSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/DependSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/DepthSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/FilenameSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/MockAlgorithm.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/MockCache.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/MockComparator.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/ModifiedSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/PresentSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/README create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/SignedSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/SizeSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/TokenizedPatternTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/types/selectors/TypeSelectorTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/Base64ConverterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/ClasspathUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/CollectionUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/DOMElementWriterTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/DateUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/DeweyDecimalTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/FileUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/GlobPatternMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/JAXPUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/JavaEnvUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/LayoutPreservingPropertiesTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/LazyFileOutputStreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/LineOrientedOutputStreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/LinkedHashtableTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/LoaderUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/PackageNameMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/ReaderInputStreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/ResourceUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/StringUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/SymlinkUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/UnPackageNameMapperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/UnicodeUtilTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/VectorSetTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/XMLFragmentTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/facade/FacadeTaskHelperTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/facade/ImplementationSpecificArgumentTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/JakartaOroMatcherTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/JakartaOroRegexpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/JakartaRegexpMatcherTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/JakartaRegexpRegexpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/Jdk14RegexpMatcherTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/Jdk14RegexpRegexpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpMatcherTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/ant/util/regexp/RegexpTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/bzip2/BlockSortTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/bzip2/CBZip2StreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/mail/MailMessageTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/tar/TarEntryTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/tar/TarOutputStreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/tar/TarRoundTripTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/AsiExtraFieldTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ExtraFieldUtilsTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/UTF8ZipFilesTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ZipEncodingTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ZipEntryTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ZipLongTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ZipOutputStreamTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/apache/tools/zip/ZipShortTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/AbstractTestMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/AbstractTestNotMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/JUnit4Skippable.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/MultilineAsserts.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/NonTestMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/Output.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/TestNotMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/ThreadedOutput.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/Timeout.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/junit/XmlParserTest.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/tasks/TaskdefTestContainerTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/tasks/TaskdefTestSimpleTask.java create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/tasks/antlib.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/tasks/antlib2.xml create mode 100644 framework/src/ant/apache-ant-1.9.6/src/tests/junit/org/example/types/TypedefTestType.java create mode 100644 framework/src/maven/apache-maven-3.3.3/DEPENDENCIES create mode 100644 framework/src/maven/apache-maven-3.3.3/LICENSE create mode 100644 framework/src/maven/apache-maven-3.3.3/NOTICE create mode 100644 framework/src/maven/apache-maven-3.3.3/README.md create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/README.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/m2.conf create mode 100755 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvn.cmd create mode 100755 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnDebug.cmd create mode 100755 framework/src/maven/apache-maven-3.3.3/apache-maven/src/bin/mvnyjp create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/logging/simplelogger.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/conf/toolchains.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/lib/ext/README.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/bin.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/main/assembly/src.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/build.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/deploySite.sh create mode 100644 framework/src/maven/apache-maven-3.3.3/doap_Maven.rdf create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0-sources.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-ant-tasks-2.1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/DefaultArtifactVersionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/FileSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Problem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/ProblemCollectorFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/Source.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/StringSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/main/java/org/apache/maven/building/UrlSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemCollectorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/DefaultProblemTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/FileSourceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/ProblemCollectorFactoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/StringSourceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/java/org/apache/maven/building/UrlSourceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-builder-support/src/test/resources/source.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactStatus.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeployer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/ArtifactDeploymentException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstallationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonConfigurationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/GroupRepositoryMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataBridge.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/MetadataUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataReadException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/UnresolvedArtifacts.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/WarningResolutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/InversionArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/resolver/filter/TypeArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/DefaultRuntimeInformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/execution/RuntimeInformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultMavenProfilesBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/MavenProfilesBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfileManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/ProfilesConversionUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/DetectedProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/FileProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/OperatingSystemProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/profiles/activation/SystemPropertyProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/InvalidProjectModelException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/MissingRepositoryElementException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/PathTranslatingPostProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/DefaultModelValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/reporting/MavenReportException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/DefaultMirrorSelector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MavenArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraphNode.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/MirrorSelector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/UserLocalArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/VersionNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/ChecksumFailedException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/MavenArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/TransferListenerAdapter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/UpdateCheckManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonConfigurationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/ConflictResolverNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ArtifactTransformationManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/DefaultArtifactTransformationManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/LatestArtifactTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/ReleaseArtifactTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/SnapshotTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathContainer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/ClasspathTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultClasspathTransformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolutionPolicy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/GraphConflictResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolution.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionRequestTypeEnum.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataRetrievalException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataTreeNode.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumentationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/paramdoc.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/mdo/profiles.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/project.paramdoc.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/rootless.paramdoc.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin-expressions/settings.paramdoc.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/main/resources/META-INF/maven/plugin.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/AbstractArtifactComponentTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/ArtifactUtilsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/DefaultArtifactTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/ArtifactDeployerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/deployer/SimpleArtifactMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/factory/DefaultArtifactFactoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerMock.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/installer/ArtifactInstallerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/metadata/TestMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/repository/MavenArtifactRepositoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolutionExceptionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestFileWagon.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/TestTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilterTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/FilterHashEqualsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/OrArtifactFilterTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilterTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/testutils/TestFileManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/artifact/transform/TransformationManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/profiles/manager/DefaultProfileManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/EmptyLifecyclePluginAnalyzer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/ProjectClasspathTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestArtifactResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestMavenRepositorySystem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/project/path/DefaultPathTranslatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/MirrorProcessorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/LegacyRepositorySystemTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/PerLookupWagon.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/StringWagon.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonA.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonB.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonC.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/WagonMock.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/AbstractConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultClasspathTransformationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolutionPolicyTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/DefaultGraphConflictResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/java/org/apache/maven/repository/metadata/TestMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/repository-system/maven-core-2.1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/artifact-install/artifact-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p0-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p1-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p2-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p3-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t00/maven/poms/p4-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p0-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p1-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p2-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p3-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t01/maven.t01/poms/p4-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/p3/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/p2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t02/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t03/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-b-2.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/jars/t04-c-2.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-b-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/maven-test/poms/t04-c-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t04/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-a-2.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-b-2.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/jars/t05-d-1.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-a-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-b-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/maven-test/poms/t05-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t05/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-b-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/jars/t06-d-1.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-b-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/maven-test/poms/t06-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t06/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-b-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/jars/t07-d-1.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-b-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/maven-test/poms/t07-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t07/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-b-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/jars/t08-d-1.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-b-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/maven-test/poms/t08-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t08/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/jars/t09-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/maven-test/poms/t09-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/p2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t09/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/jars/t10-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/maven-test/poms/t10-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t10/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t11/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p0/1.0/p0-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/maven/p1/1.0/p1-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/modules/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/inheritance-repo/t12scm/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/marker.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/deployer/ArtifactDeployerTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/installer/ArtifactInstallerTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactResolverTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/project-with-scoped-dependencies.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-compile-dep.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-default-dep.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-provided-dep.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-runtime-dep.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-compat/src/test/resources/projects/scope/transitive-test-dep.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/lifecycle-executor.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/plugin-manager.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/project-builder.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ArtifactFilterManagerDelegate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildAbort.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/BuildFailureException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultMaven.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DefaultProjectDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/DuplicateProjectException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/InternalErrorException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/Maven.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MavenExecutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/MissingModuleException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectBuildFailureException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectCycleException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ProjectDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/ReactorReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/SessionScoped.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/InvalidRepositoryException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/ArtifactFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/factory/DefaultArtifactFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/DefaultArtifactHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/ArtifactHandlerManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/handler/manager/DefaultArtifactHandlerManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/AbstractArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataRetrievalException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/metadata/ResolutionGroup.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/DefaultRepositoryRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/RepositoryRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/ArtifactRepositoryMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataDeploymentException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataInstallationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataParseException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/MetadataReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/DefaultResolutionErrorHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionErrorHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AbstractScopeArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/AndArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/CumulativeScopeArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionSetFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ScopeArtifactFilter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/bridge/MavenRepositorySystem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ArtifactClassRealmConstituent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmConstituent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmManagerDelegate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/ClassRealmRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BasedirBeanConfigurationPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurationValuePreprocessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/BeanConfigurator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/configuration/internal/DefaultBeanConfigurator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/AbstractEventSpy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyDispatcher.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/eventspy/internal/EventSpyRepositoryListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/DefaultExceptionHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/exception/ExceptionSummary.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/AbstractExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildFailure.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSuccess.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/BuildSummary.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequestPopulator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/ReactorManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/SettingsAdapter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/MojoExecutionScoped.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScope.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeCoreModule.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeModule.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExtensionEntry.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/internal/aether/LoggingRepositoryListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifeCyclePluginAnalyzer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/Lifecycle.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleMappingDelegate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/LifecyclePhaseNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MissingProjectException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/NoGoalSpecifiedException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildThreadFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/CompoundProjectExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultExecutionEventCatapult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultMojoExecutionConfigurator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultProjectArtifactFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionEventCatapult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleStarter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorBuildStatus.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ReactorContext.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/singlethreaded/SingleThreadedBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecycleMapping.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/model/plugin/DefaultLifecycleBindingsInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventDispatcher.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/monitor/event/EventMonitor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/BuildPluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CacheUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CompoundMojoExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/CycleDetectedInPluginGraphException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultExtensionRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginArtifactsCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginDescriptorCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginDescriptorException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/InvalidPluginException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/LegacySupport.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MavenPluginValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginArtifactsCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginConfigurationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginContainerException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginDescriptorParsingException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginExecutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginIncompatibleException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginLoaderException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginManagerException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultLegacySupport.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultPluginManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PlexusUtilsInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/PluginDependencyResolutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/ValidatingConfigurationListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/internal/WagonExcluder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/DefaultPluginPrefixRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/NoPluginFoundForPrefixException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/PluginPrefixResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/prefix/internal/DefaultPluginPrefixResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/DefaultPluginVersionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultDependencyResolutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectHelper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultModelBuildingListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DefaultProjectRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DependencyResolutionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/DuplicateProjectException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ExtensionDescriptorBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/InvalidProjectVersionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProject.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingHelper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectDependenciesResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectRealmCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/ReactorModelPool.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ArtifactWithDependencies.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/AttachedArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMavenMetadataCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/DefaultMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/InvalidDependencyVersionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/PluginArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/project/path/PathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/EnvironmentUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactDoesNotExistException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferFailedException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferResource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalArtifactRepository.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/LocalRepositoryNotAccessibleException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/RepositorySystem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataRetrievalException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/DefaultMetadataResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ResolutionGroup.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/RuntimeInformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformation.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScope.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/session/scope/internal/SessionScopeModule.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/MavenSettingsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsConfigurationException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/settings/SettingsUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchain.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/MisconfiguredToolchainException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcher.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/RequirementMatcherFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/Toolchain.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManagerPrivate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/DefaultToolchainsBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/building/ToolchainsBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsParseException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/io/ToolchainsReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/DefaultJavaToolChain.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchain.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/java/JavaToolchainImpl.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/java/org/apache/maven/toolchain/merge/MavenToolchainMerger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/extension.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/mdo/toolchains.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/maven/extension.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/META-INF/plexus/default-bindings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/build.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/main/resources/org/apache/maven/project/standalone.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/artifact-handlers.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/configuration-management.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/default-bindings.apt.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/getting-to-container-configured-mojos.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/inheritance.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/lifecycles.apt.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/offline-mode.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/plugin-execution-isolation.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/apt/scripting-support/marmalade-support.apt create mode 100755 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-class-diagram.png create mode 100755 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor-sequence-diagram.png create mode 100755 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/DefaultMavenTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenLifecycleParticipantTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/MavenTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/ProjectDependenciesResolverTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/artifact/handler/ArtifactHandlerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/configuration/DefaultBeanConfiguratorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/exception/DefaultExceptionHandlerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/execution/scope/internal/MojoExecutionScopeTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DefaultLifecyclesTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingMojoExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/DelegatingProjectExecutionListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/EmptyLifecyclePluginAnalyzer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MavenExecutionPlanTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/MojoExecutionXPathContainer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuildListCalculatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/BuilderCommonTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ConcurrencyDependencyGraphTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculatorImplTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/PhaseRecorderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/BuildPluginManagerStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/CompletionServiceStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/DefaultLifecyclesStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ExecutionEventCatapultStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifeCyclePluginAnalyzerStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleTaskSegmentCalculatorStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LoggerStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/MojoExecutorStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginPrefixResolverStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/PluginVersionResolverStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependenciesResolverStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStubTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExceptionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/PluginParameterExpressionEvaluatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyLifecycleExecutor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ExtensionDescriptorBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/MavenProjectTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/TestMetadataSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/DefaultMavenMetadataCacheTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributeIterator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomAttributePointer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodeIterator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomNodePointer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/project/harness/Xpp3DomPointerFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/LegacyRepositoryLayout.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestArtifactHandler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnectorFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/repository/TestRepositorySystem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/rtinfo/internal/DefaultRuntimeInformationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/PomConstructionWithSettingsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/settings/SettingsUtilsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerPrivateTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/DefaultToolchainTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/RequirementMatcherFactoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/DefaultToolchainsBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/building/ToolchainsBuildingExceptionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-a/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/module-b/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/default-maven/cyclic-reference/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/mojo-configuration/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-basic/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/main/java/org/apache/maven/lifecycle/test/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/remote-resources.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-multiple-executions/src/main/mdo/supplemental-model.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-executor/project-with-plugin-level-configuration-only/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-listener-dependency-injection/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-a/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/module-b/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/lifecycle-listener/lifecycle-participant-reactor-dependency-injection/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/mng-5003-plugin-realm-cache/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-contributing-system-scope-plugin-dep/tools.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-build-extensions-plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.1/a-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/0.2/a-0.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/a/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/0.1/b-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/b/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/0.1/c-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/c/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/0.1/d-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/d/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/0.1/e-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/repo/org/apache/maven/its/mng3906/e/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/plugin-manager/project-with-plugin-classpath-ordering/sub/settings-template.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/jre/placeholder.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/jdk/lib/tools.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/it0063/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/consumer/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/dependency-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/dependency/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-builder/mng-3023/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/jre/placeholder.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/jdk/lib/tools.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/it0063/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/projects/project-dependencies-resolver/project-with-exclusions/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/0.1/a-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/a/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/0.1/b-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/b/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/maven-it-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/0.1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-it-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/its/plugins/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven-plugin-api/2.0/maven-plugin-api-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/maven/2.0/maven-2.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/0.1/maven-clean-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/0.1/maven-compiler-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-compiler-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/0.1/maven-deploy-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-deploy-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/0.1/maven-install-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-install-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/0.1/maven-plugin-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-plugin-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/0.1/maven-resources-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-resources-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/0.1/maven-surefire-plugin-0.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/remote-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/artifact-id-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-aligned-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/basedir-interpolation/pom-with-unusual-name.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/baseurl-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/boolean-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/build-extension-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/w-parent/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/complete-model/wo-parent/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/config-with-plugin-mng/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/consecutive_empty_elements/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/child-2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/contributors-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/maven-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-management-with-interpolation/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dependency-scope/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/child-2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/developers-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/distribution-management/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/dual-execution-ids/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/nexus-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/duplicate-exclusions-dependency/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-distMng-repo-url/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/empty-scm/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-deps/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/equal-plugin-exec-ids/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-join/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration-subcollections/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/execution-configuration/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/foo/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/full-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/id-container-joining-with-empty-elements/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/active-profile/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/inherited-properties-interpolation/no-profile/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/interpolation-cli-wins/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/jdk-activation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/join-different-containers-same-id/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/child-2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/licenses-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/limited-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/child-2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/mailing-lists-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/managed-profile-dependency/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-filter-order/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/micromailer/spice-parent-9.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-filters/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/multiple-repos/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/nested-build-dir-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/child3.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-interpolation/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/parent-pom-packaging/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/platform-file-separator/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/no-profile/subproject/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-append/with-profile/subproject/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-merging/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-config-properties/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/w-merge/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-inheritance/wo-merge/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-version-insensitive/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging-wo-version/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-and-default-exec/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order-with-lifecycle/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-inheritance-simple/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-injection-merge-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-dependencies/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-duplicate/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-for-implicit-plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-management-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-merge-simple/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/nexus-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/plugin-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pluginmanagement-inherited/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/latin-1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-encoding/utf-8/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/prerequisites-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-default-deactivation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-dependencies-multiple-profiles/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injected-dependencies/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-injection-order/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-module/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugin-mng-dependencies/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-plugins/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/profile-properties-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/properties-no-duplication/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/reporting-plugin-config/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/jetty-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/single-configuration-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unc-path/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps-in-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-dependency-key/deps/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo-in-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/artifact-repo/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo-in-profile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unique-repo-id/plugin-repo/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/unprefixed-expression-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-append/parent/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/another-parent/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-inheritance/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/url-no-decoding/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-markup-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-project-builder/xml-whitespace/sub/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/repositories/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/settings-no-pom/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources-settings/test-pom-and-settings-interpolation/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/canonical-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/dependencyManagement-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/distributionManagement-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-a-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-b-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-c-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/jars/maven-test-d-1.2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-a-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-b-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-c-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/maven-test/poms/maven-test-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p3/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/p4/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/imports-repo/t01/p0/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/marker.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-a-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-c-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/jars/maven-test-d-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-a-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-c-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/maven-test/poms/maven-test-d-1.2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/jars/maven-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/local-repo/snapshot-test/poms/maven-test-snapshot-resolving-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/MavenLifecycleParticipantTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/execution/test-extension-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/junit/junit/3.8.1/junit-3.8.1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/apache/3/apache-3.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-extension/1/test-extension-1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/core/test/test-lifecycle-and-artifactHandler/1/test-lifecycle-and-artifactHandler-1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/4/maven-parent-4.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon-provider-api/1.0-beta-2/wagon-provider-api-1.0-beta-2.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-active-collections/1.0-beta-1/plexus-active-collections-1.0-beta-1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-10/plexus-classworlds-1.2-alpha-10.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-classworlds/1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-16/plexus-component-api-1.0-alpha-16.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-component-api/1.0-alpha-32/plexus-component-api-1.0-alpha-32.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-components/1.1.6/plexus-components-1.1.6.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-16/plexus-container-default-1.0-alpha-16.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-container-default/1.0-alpha-32/plexus-container-default-1.0-alpha-32.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-16/plexus-containers-1.0-alpha-16.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-containers/1.0-alpha-32/plexus-containers-1.0-alpha-32.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/repo-marker.txt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/LifecycleExecutorTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/lifecycle/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/plugin/PluginManagerTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/AbstractMavenProjectTestCase.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/PomConstructionTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromFile/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/1/project-caching-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildFromRepo/tests/project-caching/maven-metadata-local.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/buildModelLineage/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/childAndParent/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/project/workspace/resolveParentPom/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/settings/PomConstructionWithSettingsTest.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/global.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extend.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks-extra.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/model/toolchains-jdks.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/apache/maven/toolchain/user.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.jar.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/org/codehaus/plexus/plexus-utils/1.1/plexus-utils-1.1.pom.sha1 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/plugin-level-dep.pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-interp.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom-relative.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/project-dynamism/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-dependency.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/bad-project.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment-child.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/project-which-needs-directory-alignment.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/base-directory-alignment/subproject/project-which-needs-directory-alignment-child.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build-path-expression-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/build.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-which-inherits-from-super-model.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child-with-bogus-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/child.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/duplicate-plugins-merged-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/fully-populated-child.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/grandchild/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/grandchild-check/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/module01/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/modelsource/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/project.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/projects/versionless-managed-dependency.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/jars/maven-test-b-1.0.jar.md5 create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/maven-test/poms/maven-test-b-1.0.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-1/snapshot-test/jars/maven-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/remote-repo-2/maven-test/jars/maven-test-z-1.0.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-core/src/test/resources/withActiveByDefaultProfile-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/main/java/org/apache/maven/embedder/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/CliRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/ConfigurationProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/DefaultEventSpyContext.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfigurationFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLogger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jLoggerManager.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jStdoutLogger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/BatchModeMavenTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/QuietMavenTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/MavenSlf4jFriend.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/java/org/slf4j/impl/MavenSlf4jSimpleFriend.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/mdo/core-extensions.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/MANIFEST.MF create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/cli.apt.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/index.apt.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/apt/logging.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/main/java/org/apache/maven/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/aggregate-mojo-failure/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-build-plan/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-dep-version/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-direct-deps/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-dep-ver-maven-plugin/1/bad-ext-plugin-dep-ver-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-dep-ver/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/1/bad-ext-plugin-maven-ver-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/local-repo/org/apache/maven/errortest/bad-ext-plugin-maven-ver-maven-plugin/maven-metadata-local.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-ext-plugin-maven-ver/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-maven-version/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-mg-dep-version/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-non-dep-version/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/bad-profile-repo/profiles.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/config-rdonly-mojo-param/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/deploy-repo-creation-err/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/duplicated-attachments/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/local-repo/org/apache/maven/errortest/err-loading-plugin-maven-plugin/1/err-loading-plugin-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-loading-plugin/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/local-repo/org/apache/maven/errortest/err-resolving-ext-plugin-maven-plugin/1/err-resolving-ext-plugin-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-ext-plugin/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/local-repo/org/apache/maven/errortest/dep/1/dep-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/main/java/org/apache/maven/test/error/mojoFailure/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext-dep/1/test-maven-ext-dep-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/local-repo/org/apache/maven/errortest/test-maven-ext/1/test-maven-ext-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-deps-resolve-err/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/local-repo/org/apache/maven/errortest/ext-plugin-artifact-missing-maven-plugin/1/ext-plugin-artifact-missing-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-artifact-missing/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentOne.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/ComponentTwo.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/plugin/src/main/resources/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-realm-error/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.jar create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/1/ext-plugin-version-err-maven-plugin-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/local-repo/org/apache/maven/errortest/ext-plugin-version-err-maven-plugin/maven-metadata-local.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-plugin-version-err/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/java/org/ext/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/ext/src/main/resources/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/ext-realm-error/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-model/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/local-repo/org/test/bad-pom/1/bad-pom-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/interp-from-project/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-ioex/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/load-extern-profiles-xex/profiles.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-direct-invoke-mojo/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/main/java/org/test/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-module-pom/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-parent-pom/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/missing-req-mojo-param/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/plugin/src/main/resources/META-INF/maven/plugin.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-config-error/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-exec-err/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-ioex/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/child/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/parent-parse-xex/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-err/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/java/org/ext/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/ext/src/main/resources/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/profile-activator-lookup-err/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/mod2/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-collision/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/dep/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-cycle/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/main/java/org/apache/maven/test/error/mojoFailure/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/main/java/org/apache/maven/test/error/mojoFailure/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-parse-xex/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/project-validation/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/error-reporting-projects/repo-creation-err/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/read-with-deps/repo/tests/dep/1/dep-1.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/eventing-projects/simple-read-project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/extensions/META-INF/plexus/components.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/CLIReportingUtilsTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/jar-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/plugin-version-references/maven-plugin-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/badmodule/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/goodmodule/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/bad-module-non-recursive/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config-illegal/.mvn/maven.config create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/config/.mvn/maven.config create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/invalid-goal/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/main/java/org/codehaus/m2eclipse/App.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/maven-metadata-company.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/repository/org/codehaus/m2eclipse/parent/maven-metadata-local.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/optional-dep/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-missingModuleIgnored/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/modules/child1/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/projects/readProject-withScmInheritance/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/META-INF/maven/org.apache.maven/maven-core/pom.properties create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-with-distribution-status.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom-without-dependencies.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/pom2.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/invalid-settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-embedder/src/test/resources/settings/valid-settings.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelBuildingListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FileModelSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEvent.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingEventCatapult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCache.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelCacheTag.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelData.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorExt.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemCollectorRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSource2.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/StringModelSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/building/UrlModelSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/composition/DependencyManagementImporter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/InheritanceAssembler.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/BuildTimestampValueSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/MavenBuildTimestamp.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/PathTranslatingPostProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ProblemDetectingValueSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/UrlNormalizingPostProcessor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelParseException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/io/ModelWriter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/DefaultModelLocator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/locator/ModelLocator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultDependencyManagementInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DefaultPluginManagementInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/DependencyManagementInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/management/PluginManagementInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/DefaultModelNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/normalization/ModelNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultModelUrlNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/DefaultUrlNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelPathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/ModelUrlNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/PathTranslator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/path/UrlNormalizer.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultPluginConfigurationExpander.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportConfigurationExpander.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/LifecycleBindingsInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/PluginConfigurationExpander.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportConfigurationExpander.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileSelector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileActivationContext.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileSelector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/FileProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/OperatingSystemProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/ProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/PropertyProfileActivator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/InvalidRepositoryException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/UnresolvableModelException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/resolution/WorkspaceModelResolver.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/superpom/SuperPomProvider.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/java/org/apache/maven/model/validation/ModelValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/mdo/profiles.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/apt/super-pom.apt.vm create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/ComplexActivationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/building/SimpleProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/MavenBuildTimestampTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/path/DefaultUrlNormalizerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/AbstractProfileActivatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/profile/activation/PropertyProfileActivatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/complex.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/factory/simple.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-child.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-expected.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/inheritance/plugin-configuration-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-exclusion-id.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-scope.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-dependency-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-classifier.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-import-scope-type.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-modelVersion.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-scope.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-dependency-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-plugin-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-repository-id.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-snapshot-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/bad-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/basedir-system-path.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/distribution-management-status.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-module.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin-execution.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-plugin.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/duplicate-profile-id.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-module.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/empty-plugin-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/hard-coded-system-path.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/incomplete-parent.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-aggregator-packaging-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/invalid-ids-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-1-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-artifactId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-artifactId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-exclusion-id.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-groupId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-artifactId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-groupId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-mgmt-version-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-dependency-version-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-groupId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-modelVersion-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-artifactId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-artifactId.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-groupId.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-dependency-version.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-plugin-version-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-artifactId-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-report-version-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-repository-id-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-resource-directory-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-type-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/missing-version-pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/resources/poms/validation/reserved-repository-id.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/package-info.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/package-info.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/main/mdo/maven.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/site/xdoc/navigation.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationFileTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationOSTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationPropertyTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ActivationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/BuildTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/CiManagementTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ContributorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DependencyTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeploymentRepositoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DeveloperTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/DistributionManagementTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExclusionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ExtensionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/IssueManagementTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/LicenseTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/MailingListTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ModelTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/NotifierTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/OrganizationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ParentTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginConfigurationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginContainerTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginExecutionTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginManagementTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PluginTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/PrerequisitesTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ProfileTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RelocationTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportPluginTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportSetTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ReportingTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryPolicyTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/RepositoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ResourceTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/ScmTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-model/src/test/java/org/apache/maven/model/SiteTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/monitor/logging/DefaultLog.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojoExecutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateMojoDescriptorException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/DuplicateParameterException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidParameterException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/InvalidPluginDescriptorException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Parameter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/Requirement.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/lifecycle.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/main/mdo/plugin.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/java/org/apache/maven/plugin/lifecycle/LifecycleXpp3ReaderTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/lifecycle.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-plugin-api/src/test/resources/plugin.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/main/mdo/metadata.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-repository-metadata/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactory.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/FileSettingsSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuilder.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsBuildingResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblem.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsProblemCollector.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/SettingsSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/StringSettingsSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/building/UrlSettingsSource.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecrypter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/DefaultSettingsDecryptionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecrypter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionRequest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/crypto/SettingsDecryptionResult.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsParseException.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsReader.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/io/SettingsWriter.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/merge/MavenSettingsMerger.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/SettingsValidator.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/building/DefaultSettingsBuilderFactoryTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings-builder/src/test/resources/settings/factory/simple.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/java/org/apache/maven/settings/RuntimeInfo.java create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings/src/main/mdo/settings.mdo create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/apt/index.apt create mode 100644 framework/src/maven/apache-maven-3.3.3/maven-settings/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/pom.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/src/site/resources/images/maven-deps.png create mode 100644 framework/src/maven/apache-maven-3.3.3/src/site/site.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/src/site/xdoc/index.xml create mode 100644 framework/src/maven/apache-maven-3.3.3/src/site/xdoc/maven-deps.odg (limited to 'framework') diff --git a/framework/src/ant/apache-ant-1.9.6/CONTRIBUTORS b/framework/src/ant/apache-ant-1.9.6/CONTRIBUTORS new file mode 100644 index 00000000..e78bd62e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/CONTRIBUTORS @@ -0,0 +1,417 @@ +Amongst other, the following people contributed to ant: + +Adam Blinkinsop +Adam Bryzak +Adam Sotona +Adrian Nistor +Aleksandr Ishutin +Alex Rosen +Alexei Yudichev +Alexey Panchenko +Alexey Solofnenko +Alfred Theorin +Alison Winters +Andreas Ames +Andreas Mross +Andrew Eisenberg +Andrew Everitt +Andrew Stevens +Andrey Urazov +AndrĂ©-John Mas +Andy Wood +Anil K. Vijendran +Anli Shundi +Anthony Goubard +Anthony Green +Anthony Wat +Antoine Baudoux +Antoine Levy-Lambert +Anton Mazkovoi +Arjan Veenstra +Arnaud Vandyck +Arnout J. Kuiper +Aslak HellesĂ´y +Atsuhiko Yamanaka +Avik Sengupta +Balazs Fejes 2 +Bart Vanhaute +Benjamin Burgess +Ben Galbraith +Ben Gertzfield +Benoit Moussaud +Bernd Dutkowski +Bernhard Rosenkraenzer +Brad Clark +Brant Langer Gurganus +Brian Curnow +Brian Deitte +Brian Felder +Brian Repko +Bruce Atherton +Cedomir Igaly +Charles Hudak +Charlie Hubbard +Chris Povirk +Christian Knorr +Christian Schmidt +Christoph Gysin +Christoph Wilhelms +Christophe Labouisse +Christopher A. Longo +Christopher Charlier +Clark Archer +Clemens Hammacher +Clement OUDOT +Clive Brettingham-Moore +Conor MacNeill +Craeg Strong +Craig Cottingham +Craig R. McClanahan +Craig Richardson +Craig Ryan +Craig Sandvik +Curt Arnold +Curtis White +Cyrille Morvan +D'Arcy Smith +Dale Anson +Dale Sherwood +Dan Armbrust +Daniel Henrique +Daniel Ribagnac +Daniel Spilker +Daniel Trebbien +Danno Ferrin +Danny Yates +Dante Briones +Davanum Srinivas +Dave Brondsema +Dave Brosius +David A. Herman +David Crossley +David Gärtner +David S. Johnson +David Kavanagh +David LeRoy +David Leal +David M. Lloyd +David Maclean +David Rees +Denis Hennessy +Derek Slager +Devon C. Miller +Diane Holt +dIon Gillard +Dmitry A. Kuminov +Dominique Devienne +Donal Quinlan +Don Brown +Don Ferguson +Don Jeffery +Drew Sudell +Edison Guo +Eduard Wirch +Edwin Woudt +Eli Tucker +Emmanuel Bourg +Eric Barboni +Eric Olsen +Eric Pugh +Erik Costlow +Erik Hatcher +Erik Langenbach +Erik Meade +Ernst de Haan +Frank Harnack +Frank Somers +Frank Zeyda +Frantisek Kucera +Frederic Bothamy +Frederic Lavigne +Gary S. Weaver +Gautam Guliani +Gene-Sung Chung +Georges-Etienne Legendre +Gero Vermaas +Gerrit Riessen +Gilbert Rebhan +Gilles Scokart +Glenn McAllister +Glenn Twiggs +Greg Nelson +Greg Roodt +Greg Schueler +GrĂ©goire Vatry +GĂĽnther Kögel +Harish Prabandham +Haroon Rafique +Hiroaki Nakamura +Holger Engels +Holger Joest +Ignacio Coloma +Ingenonsya France +Ingmar Stein +Irene Rusman +Isaac Shabtay +Ivan Ivanov +J Bleijenbergh +Jack J. Woehr +James Duncan Davidson +Jan Cumps +Jan Matèrne +Jan Mynarik +Jan Stolze +Jason Hunter +Jason Pettiss +Jason Salter +Jason Yip +Jay Dickon Glanville +Jay Peck +Jay van der Meer +JC Mann +J D Glanville +Jean-Francois Brousseau +Jean-Louis Boudart +Jeff Gettle +Jeff Martin +Jeff Tulley +Jeff Turner +Jene Jasper +Jeremy Mawson +Jerome Lacoste +Jesse Glick +Jesse Stockall +Jim Allers +Joerg Wassmer +Joel Tucci +Joey Richey +Johann Herunter +John Elion +John Sisson +Jon Dickinson +Jon S. Stevens +Jon Skeet +Jose Alberto Fernandez +Joseph Walton +Josh Lucas +Juerg Wanner +Julian Simpson +Justin Vallon +Keiron Liddle +Keith Visco +Kevin Connor Arpe +Kevin Greiner +Kevin Jackson +Kevin Ross +Kevin Z Grey +Kim Hansen +Kirk Wylie +Kristian Rosenvold +Kyle Adams +Lajos Veres +Larry Shatzer +Larry Streepy +Les Hughes +Levi Cook +lucas +Lucas Werkmeister +Ludovic Claude +Maarten Coene +Magesh Umasankar +Maneesh Sahu +Marcel Schutte +Marcus Börger +Mario Frasca +Mariusz Nowostawski +Mark A. Ziesemer +Mark DeLaFranier +Mark Hecker +Mark R. Diggory +Mark Salter +Markus Kahl +Martijn Kruithof +Martin Landers +Martin Poeschl +Martin van den Bemt +Martin von Gagern +Mathieu Champlon +Mathieu Peltier +Matt Albrecht +Matt Benson +Matt Bishop +Matt Foemmel +Matt Grosso +Matt Humphrey +Matt Small +Matt Wildig +Matthew Hawthorne +Matthew Inger +Matthew Kuperus Heun +Matthew Watson +Matthias Bhend +Michael Bayne +Michael Clarke +Michael Davey +Michael J. Sikorsky +Michael McCallum +Michael Montuori +Michael Newcomb +Micheal Nygard +Michael Saunders +Miha +Mike Davis +Mike Roberts +Mike Williams +Miroslav ZaĹĄko +mnowostawski +Mounir El Hajj +Nathan Beyer +Nick Chalko +Nick Fortescue +Nick Crossley +Nick Pellow +Nicola Ken Barozzi +Nico Seessle +Nigel Magnay +Oliver Merkel +Oliver Rossmueller +Ondra Medek +Omer Shapira +Oystein Gisnas +Patrick Altaie +Patrick C. Beard +Patrick Chanezon +Patrick G. Heck (Gus Heck) +Patrick Martin +Paul Austin +Paul Christmann +Paul Galbraith +Paul King +Paulo Gaspar +Pavan Bayyapu +Pavel Jisl +Pawel Zuzelski +Peter B. West +Peter Donald +Peter Doornbosch +Peter Hulst +Peter Janes +Peter Reilly +Petr Kureš +Phil Hanna +Philip Hourihane +Phillip Wells +Pierre Delisle +Pierre Dittgen +riasol +R Handerson +Ralf Hergert +Rami Ojares +Randy Watler +Raphael Pierquin +Ray Waldin +Remie Bolte +RenĂ© Krell +Richard Evans +Richard Steele +Rick Beton +Robbie Gibson +Robert Anderson +Robert Clark +Robert Flaherty +Robert Shaw +Robert Streich +Robert Watkins +Roberto Scaramuzzi +Robin Green +Robin Power +Robin Verduijn +Rob Oxspring +Rob van Oostrum +Rodrigo Schmidt +Roger Vaughn +Roman Ivashin +Roman Savko +Ronen Mashal +Russell Gold +Ryan Bennitt +Sam Ruby +Sandra Metz +Scott Carlson +Scott Ellsworth +Scott Johnson +Scott M. Stirling +Sean Egan +Sean P. Kane +Sebastien Arod +Shiraz Kanga +Sebastian Kantha +Simon Law +Simone Bordet +Stefan Bodewig +Stefan Heimann +Stefano Mazzocchi +Stephan Strittmatter +Stephane Bailliez +stephan +Stephan Michels +Stephen Chin +Stephen Goetze +Steve Cohen +Steve Langley +Steve Loughran +Steve Morin +Steve Wadsworth +Steven E. Newton +Sudheer Chigurupati +Takashi Okamoto +TAMURA Kent +Taoufik Romdhane +Tariq Master +Thomas Aglassinger +Thomas Butz +Thomas Christen +Thomas Christensen +Thomas Haas +Thomas Quas +Tim Boemker +Tim Drury +Tim Fennell +Tim Stephenson +Tim Whittington +Timoteo Ohara +Timothy Gerard Endres +Tom Ball +Tom Brus +Tom Cunningham +Tom Dimock +Tom Eugelink +Tom May +Tomasz Bech +Trejkaz Xaoza +Ulrich Schmidt +Uwe Schindler +Valentino Miazzo +Victor Toni +Vimil Saju +Vincent Legoll +Vitold Sedyshev +Volker Leidl +Waldek Herka +Wang Weijun +Will Wang +William Bernardet +William Ferguson +William Webber +Wolf Siberski +Wolfgang Baer +Wolfgang Frech +Wolfgang Glas +Wolfgang Werner +Xavier Hanin +Xavier Witdouck +Yohann Roussel +Yuji Yamano +Yves Martin +Zach Garner +Zdenek Wagner diff --git a/framework/src/ant/apache-ant-1.9.6/INSTALL b/framework/src/ant/apache-ant-1.9.6/INSTALL new file mode 100644 index 00000000..83c11675 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/INSTALL @@ -0,0 +1,2 @@ +For installation instructions see the manual in the docs subdirectory +or online at . diff --git a/framework/src/ant/apache-ant-1.9.6/KEYS b/framework/src/ant/apache-ant-1.9.6/KEYS new file mode 100644 index 00000000..fb21736d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/KEYS @@ -0,0 +1,1497 @@ +This file contains the PGP keys of various developers. + +Users: pgp < KEYS + gpg --import KEYS +Developers: + pgp -kxa and append it to this file. + (pgpk -ll && pgpk -xa ) >> this file. + (gpg --list-sigs + && gpg --armor --export ) >> this file. + +Type Bits/KeyID Date User ID +pub 1024/FEECAAED 1998/11/11 Stefan Bodewig + Stefan Bodewig + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.3i + +mQCNAzZJoiMAAAEEAMzhUxTOC20Nprp6K4nLTiARt+EXii/dovNWWcfzZcYXi/lX +r3zpUTTZxlKQpd4RaHjFmGgoOraZE4jCRFARVcFJgYmGUKpcWJZO7YKL36WUizTM ++dyB2ycOtzlty1W5VmRL3FGqo67pKA9F/QHg3NSu9hY1W9xPPK7Kq3f+7KrtAAUR +tCBTdGVmYW4gQm9kZXdpZyA8Ym9kZXdpZ0Bib3N0LmRlPokAlQIFEDZSrGXHcgyK +jiW9zQEBshEEAMlG4qVjKp4/agdJG56M6izx9oaKecFLXHQJrFUy3w2PvZHFYtXc +osXKorX6bPrE8uB57MxbY2WapKeVRodlG0+j39vAf501duK8q2rktfWt9Cl4JjJ4 +DbWhSWfV1ci62u2gCxwYQe22F9Wh+vhOR5NK9RTbSKhupdlFsnrk/i7xiQCVAwUQ +NkmiI67Kq3f+7KrtAQGdxQQAlcFOzSv7G6M4uGbgvw7IGgrhx7rawtIyv9hLXgVC +7ua9xaZV8G0Fl9gh8RnbdcZ4R/aT+KIiAFaslfZ3t6hlC4MTbnAJqvdS/NO98ZkJ +YvnzZSKHflAbd5gyE7IVxBC9/xRlF/Wls5sYNwb6RjoRCaOjxN/y3WCLa3Va101v +zNy0I1N0ZWZhbiBCb2Rld2lnIDxib2Rld2lnQGFwYWNoZS5vcmc+iQCVAwUQOxIo +BK7Kq3f+7KrtAQGn6gP/SBACdHakA4H//otpyESSrk4PmyOaYF0Kyok43Gee2mT+ +m9+jZ3jLcC0oav6iH+otL/lhk9t/JDM8LjD2kAkdWWoIvvuPyCx97gOzojIo0Ve2 +1wuxJTF/VIjwyOtE8FzE7p4tkc6EubVpeZkV9Pq9HFRBCUcyKJDLnF4tbstScLU= +=OBLe +-----END PGP PUBLIC KEY BLOCK----- + + +pub 1024D/51898504 2001-05-29 Conor MacNeill +sig 3 51898504 2001-05-29 Conor MacNeill +sig 5F6B8B72 2002-01-11 Stefan Bodewig +uid Conor MacNeill +sig 3 51898504 2001-05-29 Conor MacNeill +sig 5F6B8B72 2002-01-11 Stefan Bodewig +sub 1024g/D1ECBA5D 2001-05-29 +sig 51898504 2001-05-29 Conor MacNeill + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBDsTqygRBACiZckNdclTlQFonLaIKBFGhMy0KKByw0x8XA4iwdbCXuF6xNIc +HIFHajJ74AHchQ4d8xtomBy6b8yvFgWVeaZensvn69BlLeqGdyeJRzfPt6TgRnzZ +2eWhb0HXdG3JwxL/2BabDhHfs4YJOrgB/vhRFQku6oCMRiBPtJj2werD6wCg0/zp +jacYTw6+CR+sVvneCNyySFED/R3j10c4RnR8djgv1jKT8CKPuHYraupI9INEe+I6 +7qWjtJ02GzvMO6TElAtUsf4aysu45GgwkwEBnuG6mYb3Pq0V2c5tJc2A3Tj3DrdR +i3HUNwurbus76I0sPyyENPu12QPeC6mvWLEsxVJ9o0hRKFayGvYUmrwWK9UFLjvp +p9cXBACDHgLn7MAVLqUdYhRrUj/M+GOUpvBikEgoJJrEUmb5X4+++dffMh5HBIO4 +5LA11qEKuM2xnKqOilP7NLYXz1Fe0ocqv0jsHB4SprFTTai7ma31uwuRQvCQXVv1 +yJ5CLqYda64h/UA2kmmR2dfopmvDogYEMz/HU5voozxe7BEI7bQhQ29ub3IgTWFj +TmVpbGwgPGNvbm9yQGFwYWNoZS5vcmc+iFcEExECABcFAjsTqygFCwcKAwQDFQMC +AxYCAQIXgAAKCRCBBGRPUYmFBDgIAKCZztXqKhK6kXOnoGy7opCNmWU0lwCgsPDa +4m+ruW3ch0rfbqtR75S52R+IRgQQEQIABgUCPD6eTgAKCRCiEVrhX2uLcqCcAKCr +1Wylqju9YjBi5Twej9ze69JFBQCeOaMgo6yjnkcV3PnVInLlaMwPr5q0LUNvbm9y +IE1hY05laWxsIDxjb25vckBjb3J0ZXhlYnVzaW5lc3MuY29tLmF1PohXBBMRAgAX +BQI7E6xMBQsHCgMEAxUDAgMWAgECF4AACgkQgQRkT1GJhQTY0ACgmZmKheHzjPJs +5hybpyvnvEiPYqYAn2+ryxdtz8XyOMExGRmHNlhG7svsiEYEEBECAAYFAjw+nlUA +CgkQohFa4V9ri3JYYACg1WN+NCptfKVP1mbrIa+0ajztsiIAnAn+m70iwRRFZCxr +jcULoY5SjyTLuQENBDsTqy0QBACfsCxJ6iCtgX8zjlVtMsMfDqu72x5sYatWKn8c +u+4Oj5mi0x6azZIhwCa+K3ihLVOyG1mCRnzztGTIxWYRhq3TESIVOfgm+NgLGrmA +XUTFyCT+21TExLCpuVZKmUHsWXLxDtfQ1diPeQpiQ8+Fvb/4jLGFjFIrQ2VjtFQn +kumkSwADBgP9H0bF4hdMuVEcSJ9imxSoJshcOOA3Vd2+YiCTZhBygWM49wY5jNos +/DArIjNCE53IlOu/UtHB2jqkSqjF0soGYsUjeCWouiTP9hLuMKPjnqj9ryJPTDKz +nTCZ4TuB5CtzrKTlWLmPCPpFsGqe4KjMeKg/mqGqjPKl97xgStK9N9GIRgQYEQIA +BgUCOxOrLQAKCRCBBGRPUYmFBMM6AJsF3FFyZGEmbt9aGG1W/u0oI9mcLgCfQyJ+ +aalbspazea4J9zgi59SSwOM= +=cBdR +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024R/697ECEDD 2000-04-06 Henri Gomez +sig 697ECEDD 2000-04-06 Henri Gomez + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQCNAzjsydwAAAEEAMpwFU/ci3/wR3ryCGp9Exr+Rx/hTQ7hWAJcVw8ejlBXlT4T +yITlRUs0HGfRWxME2J55PuXXsIEPZzjfozNtvOyq8WlLlJ7iaiyWxVRoPJ25sSEj +C9etm6wjj4E66ZgzuElZkm1m69uEsCHPPNuz1oQ/g1O+SmIVxIYirlxpfs7dAAUR +tBxIZW5yaSBHb21leiA8aGdvbWV6QHNsaWIuZnI+iQCVAwUQOOzJ3IYirlxpfs7d +AQFQyQQAj0D9G0hEL7SQGaSCkkoXwvamQw42N8+tNm+jfWHWdE4HAiVlhJmI2GyD +sdcXVAcR8R7ILIRB5AY7a3bF+qMk0r+vO6oR878RKKn9AvtaAIOnrh6tr0tiPwf5 +XDUMySxIWJEF3SmJAy9Lq3bAl5GMzZCFHiS0NW2gtWgmr/u1RuM= +=6l+I +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024R/397DCAD5 2002-07-03 Henri Gomez +sig 397DCAD5 2002-07-03 Henri Gomez + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQCNAz0i0UUAAAEEALXePN6IHne0W96YRMnR+4EXB6402QY5f8ZLcnSUZUH55Fb1 +qcZGBc3WRKlPiUvwBD+eVYgCpNSXF/H+oV1mawxNJN5XwqBEpfYmY8MRIPcqa61h +bJc3LBSm1qNf05G5Cwxeed+OgVm0r1HBy6DAgDHAqNlkC8DZ/BVgqMA5fcrVAAUR +tCpIZW5yaSBHb21leiA8aGdvbWV6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD6JAJUD +BRA9ItFFFWCowDl9ytUBASNyA/458T84LUVhqq6Y9fPBAfcFMWY2kehuDWsQEXkO +46XoK+AnFZCkKuyDLqPHchVUO5pK/gZYsDK/xJkfh3u4FTDTsecb9wFmIeyayVIN +SI8o6l8EZzDX/PGwqEwzxHrbQkIgIktNn5ApIoazvdBpbkQfNj1vr2wWoMYPLAWM +8xzecA== +=UmZ8 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/307A10A5 2002-07-18 Henri Gomez +sig 3 307A10A5 2002-07-18 Henri Gomez +sub 2048g/862B8F70 2002-07-18 +sig 307A10A5 2002-07-18 Henri Gomez + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBD02vbERBAC1v8fR6gjERpaz4UMfdy0hRVWCPSbOdF+Swm/IenjVzErco6zb +MTa13umUNrDPBy/tTWiCCZrOnqi7fgDzWqPEqrXJjKAFVLEWE6MmKylPPEPG1/bm +idkNGERSAZduvhKv777PzvEJJ/8eGe3wy/O8NbgIjCPtr4UklwCZS8cFuwCg8oMO +UdT8qZRtzdxdAyu1m5fUb+MD/3IKJYWXsdtb6iBphCU4f/BoyjVC9EZJ1ywLuiVM +siKbuaDUaXU9nWcbNKv+fx8uZ1NaadpfLokqqhnWcpnSiqw8HNR7SwsF1D33rkXK +O4FSuVss/tIoqGdWFcJyPkP4yP5shxqR335narVw2vDa0+BiWkALbA2qVsSIdZDB +LeFZA/47AMBS0U2BRk2rQT8LmMuFl7mR+wNBM4n7FUGdxsGn3TcYd4pXTNrEQPrV +YNdooKlikgGk4hgFnIFX09Spmimqgq0goFue81rttVdZZ4uep8dTghY6gwmvcOxX +jATbhWStBhdu9B35kzfHc+1QihD5Z94u4uyWIVBIzikcdiY8LbQqSGVucmkgR29t +ZXogPGhnb21lekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+iFcEExECABcFAj02vbEF +CwcKAwQDFQMCAxYCAQIXgAAKCRAZMdaEMHoQpYijAKCCP68ndU/kTXR9XAKLvibC +3S8+1QCfUFQYte3Jo+MHKaWjsu9JGptRzo+5Ag0EPTa93RAIAKlsRJ5gOGTFsmaR +W9k6MIh4c/MCy7J7HUxT5xTdHROa+3zUh+FAE/JaOx9ZtZtH863DFHA8cP4L+tpi +PjBT6g2E94dwGcuH/OiSSCT4JSBukbGbOuLLdmFXqUl8+4gsL90Xal67FtNLwyLG +1n7geLir0byD+OT7VLA5w+6G0NOpJEveV/FIa2qLgdRZ8vz73ybgMh18hBUrUmro +jncp0rln2VU7VCH1C2aClKm7kK4mGAjIFIzKbguK+kM3b8NDHmXKpT6syyCtIM3h +prkV1TUCAFqLI32aSdlTN79lpeA2zDga9k4/4X/RDHsFpRN2neRFGTNUtuUgYpQQ +E5zWBmMAAwUH/RiGxyeBsad923IwE1+GAjxFl2tqF9xWk0J6yTnSK4nfhYAE9evV +jwDEok9jRl4ILCcXx6YN/d/lWNuSbARKHz/3hLiTouPpwd3SSJ8is2x9PgpJz5JX +cD0y1SkbPLvs3jH3ZmdcxZpuAmJeI/typqFKK5pWP44oXIH+XH/8nWDtmLEBkgKQ +/ATQWenMTmZ6MIJ6aWKWGkO9QS6iYRz3PPPGQ1O8W02CeprM2wBtlb8J1Z3RxNhM +rZcg/1Qi3V3D1HI4zw6tAFmDeBb8J4PaBQzqlhzx2EBTbfwNPhV8AlPvpxHEeGGn +v+O1yhZr33SnyZdINNoNDn+owVMdmkobe9GIRgQYEQIABgUCPTa93QAKCRAZMdaE +MHoQpRsTAJ4qst3MhLm48fBAEnzuzi/BIKr+AgCfYaCB/AvPoncQbHc8BcNGRimR +P9A= +=hQhz +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/EDF62C35 2002-04-10 Magesh Umasankar +sig 3 EDF62C35 2002-04-10 Magesh Umasankar +sig 3 5F6B8B72 2003-03-07 Stefan Bodewig +sub 1024g/B5FFC53F 2002-04-10 +sig EDF62C35 2002-04-10 Magesh Umasankar + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.0 (GNU/Linux) + +mQGiBDy0ebgRBADuKIKD8PuJ4wKEV1h2AprwJjxCRx8vn48XNwfLZuvhw8cpArtK +rZwhoGPPUPEEXgtTNerlKq4VwpAwcnvRz7oC/7aWkUbcR2sAyhfe2scohwPgw7Xv ++isWC0NDPdrxvXG/PUOG/cnELunr51ymybBqBxUd2gMhYIxPo67D+YPYLwCgwcZp +yc/6kJa116ESWHrti342GD8D/1srpnRs9CiS1DQF1uZ1wW4vzj4VD61tKsjdWD8D +V573R22iMDLSj4oMB536WxUH7snz8XsAKm/peqJ6G9m0smtmWA1ago5yzQj70WqF +xzWBhHn2I/YfAQ8pb2s9q1lClj8elnCxT65L27ydBAZteejb2VqjtQ6iGy86PUT2 +wRUvBADZmoV1eIZJEM5NnxBv1EtvRYZtIQEzZ8dO2A1LOS7qlVr8IypljNPLGhzX +VHNvVsjC9QMUSWeBsDedvQHQ3hJpIMnTI32XE1V4gX06gfVTZdhf2fLTtwnsHZp0 +oumqshGDVRhNJJdDYLikxWOxOfkNveKEqJFvtuBR+ZqqluQKebQlTWFnZXNoIFVt +YXNhbmthciA8dW1hZ2VzaEBhcGFjaGUub3JnPohXBBMRAgAXBQI8tHm4BQsHCgME +AxUDAgMWAgECF4AACgkQ76Pnee32LDWSRwCfeASWXvpdt7bSFPMtszU/7uPEktsA +n23mYUN5WKJA1ZreW+0CcZ2ESnOviEYEExECAAYFAj5ogYgACgkQohFa4V9ri3IW +YACgsxGig0PL0M86rJsA/IpXjBdg3ysAoJzsoUZ/7s2BxDfzF/FRTVIzS+TMuQEN +BDy0eb8QBACBVb9YDJRp9Irzmq71Jf9FIPw+4g/cWpF3t/Eb7eSzMcOvTAXyNIWz +aaOjHre7lFctHfq8ls/6gR7uqajiAnfQcfTcu7pp+F5KsU0Embt83SFzZ3aoJwET +mB/LqUyrrGDiue3lU+flJO7UmcsRvtk0+BDkyCeB9HgfdpXbBLCyuwADBQP+PNxX +4e1tg3ZJo/xNEnD2Re3HjmQRrr0RYJLUGjgQrAEONSgowx3IW8/JssmNJVjnYm0q +jSKsb8rergCFJhPNZ8Dd/k00pKcrq+IN6j7WTYLqPce87zrGAZUtmDwDSp5mxy5E +xWJJxsgBPk4YBQLzJt21A3BgK/i24Sze2VLbaZuIRgQYEQIABgUCPLR5vwAKCRDv +o+d57fYsNa8xAJ4mLfonZbd64+YY9rfvhIh3Vsl3AACeLPPKtma2K6XCfhTBEDnj +hzSr4vo= +=lBfF +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/5F6B8B72 2001-05-28 +uid Stefan Bodewig +sig 3 5F6B8B72 2001-05-28 Stefan Bodewig +sig 51898504 2002-01-11 Conor MacNeill +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 2261D073 2003-03-17 Astrid Kessler (Kess) +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 75A67692 2003-03-18 Erik Abele +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +sig 3 8103A37E 2003-04-04 Andre Malo +sig 3 5F6B8B72 2001-05-28 Stefan Bodewig +sig D6298F01 2003-04-27 Paulo Henrique Gaspar Jorge +sig 0CAA68B4 2004-11-11 Patrick Rentsch +sig 2FE28BCF 2005-07-01 Harald Wilhelm (HAWI) +sig 5793498F 2005-07-21 Tim Ellison +sig E4136392 2005-07-21 Noel J. Bergman +sig 8408F755 2005-07-21 Christian Geisert +sig 2 FC243F3C 2005-07-20 Henk P. Penning +sig 3 EC140B81 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 EE65E321 2005-07-20 Martin Kraemer +sig 3 A99F75DD 2005-07-21 Rodent of Unusual Size +sig 3 3642CB4B 2005-07-20 Martin Kraemer +sig 3 302DA568 2005-07-21 Rodent of Unusual Size (DSA) +sig 3 2C312D2F 2005-07-21 Rodent of Unusual Size +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 E04F9A89 2005-07-22 Roy T. Fielding +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 E41EDC7E 2005-07-24 Carsten Ziegeler +sig 3 F39B3750 2005-07-24 Colm MacCarthaigh +sig 1CD4861F 2005-07-25 Eran Chinthaka +sig EA1BA38D 2005-07-25 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 333E4E84 2005-07-26 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig 152924AF 2005-07-29 Sander Temme +sig 3 9C85222B 2005-07-24 Henning Schmiedehausen +sig 3 9978AF86 2005-07-25 [User ID not found] +sig 3 2A623F72 2005-07-25 [User ID not found] +sig 3 F8EA2967 2005-07-26 [User ID not found] +sig 3 C152431A 2005-07-27 Steve Loughran +sig DE885DD3 2005-11-25 Sander Striker +sig CE419C8F 2007-01-05 Upayavira +sig E222DE4F 2007-05-02 Mathias Herberts +sig 911203E4 2007-05-02 [User ID not found] +sig F12F6072 2007-05-05 [User ID not found] +sig 3 990ED4AA 2007-05-02 Knut Anders Hatlen +sig 3 311A3DE5 2007-05-05 Ruediger Pluem +sig 3 88817402 2007-05-06 Thomas Vandahl +sig 5F298824 2007-05-06 Simon Pepping +sig 4CEED75F 2007-05-06 Nick Burch +sig 4358C584 2007-05-06 Vincent Hennebert +sig 0B7E6CFA 2007-05-06 Sami Siren +sig 3 01530235 2007-05-02 Luc Maisonobe (SpaceRoots) +sig 40581837 2007-05-08 Nick Kew +uid Stefan Bodewig +sig 3 5F6B8B72 2003-03-07 Stefan Bodewig +sig 3 F88341D9 2003-03-17 Lars Eilebrecht +sig 3 2261D073 2003-03-17 Astrid Kessler (Kess) +sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 75A67692 2003-03-18 Erik Abele +sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE +sig 3 8103A37E 2003-04-04 Andre Malo +sig 51898504 2005-06-21 Conor MacNeill +sig 0CAA68B4 2004-11-11 Patrick Rentsch +sig 2FE28BCF 2005-07-01 Harald Wilhelm (HAWI) +sig 5793498F 2005-07-21 Tim Ellison +sig 8408F755 2005-07-21 Christian Geisert +sig 3 EC140B81 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 EE65E321 2005-07-20 Martin Kraemer +sig 3 A99F75DD 2005-07-21 Rodent of Unusual Size +sig 3 3642CB4B 2005-07-20 Martin Kraemer +sig 3 302DA568 2005-07-21 Rodent of Unusual Size (DSA) +sig 3 2C312D2F 2005-07-21 Rodent of Unusual Size +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 E04F9A89 2005-07-22 Roy T. Fielding +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 E41EDC7E 2005-07-24 Carsten Ziegeler +sig 3 F39B3750 2005-07-24 Colm MacCarthaigh +sig 1CD4861F 2005-07-25 Eran Chinthaka +sig EA1BA38D 2005-07-25 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 333E4E84 2005-07-26 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig 152924AF 2005-07-29 Sander Temme +sig 3 9C85222B 2005-07-24 Henning Schmiedehausen +sig 3 9978AF86 2005-07-25 [User ID not found] +sig 3 2A623F72 2005-07-25 [User ID not found] +sig 3 F8EA2967 2005-07-26 [User ID not found] +sig 3 C152431A 2005-07-27 Steve Loughran +sig DE885DD3 2005-11-25 Sander Striker +sig E222DE4F 2007-05-02 Mathias Herberts +sig 911203E4 2007-05-02 [User ID not found] +sig F12F6072 2007-05-05 [User ID not found] +sig 3 990ED4AA 2007-05-02 Knut Anders Hatlen +sig 3 311A3DE5 2007-05-05 Ruediger Pluem +sig 3 88817402 2007-05-06 Thomas Vandahl +sig 4CEED75F 2007-05-06 Nick Burch +sig 4358C584 2007-05-06 Vincent Hennebert +sig 0B7E6CFA 2007-05-06 Sami Siren +sig 3 DE8884A0 2007-05-07 Xavier Hanin +sig 3 01530235 2007-05-02 Luc Maisonobe (SpaceRoots) +sig 40581837 2007-05-08 Nick Kew +uid Stefan Bodewig +sig 3 5F6B8B72 2005-05-31 Stefan Bodewig +sig 51898504 2005-06-21 Conor MacNeill +sig 2FE28BCF 2005-07-01 Harald Wilhelm (HAWI) +sig 5793498F 2005-07-21 Tim Ellison +sig 3 EC140B81 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 EE65E321 2005-07-20 Martin Kraemer +sig 3 A99F75DD 2005-07-21 Rodent of Unusual Size +sig 3 21D0A71B 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 3642CB4B 2005-07-20 Martin Kraemer +sig 3 302DA568 2005-07-21 Rodent of Unusual Size (DSA) +sig 3 2C312D2F 2005-07-21 Rodent of Unusual Size +sig 3 CC78C893 2005-07-22 Rich Bowen +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 E04F9A89 2005-07-22 Roy T. Fielding +sig 3 87315C31 2005-07-23 Raphaël Luta +sig 3 E41EDC7E 2005-07-24 Carsten Ziegeler +sig 3 F39B3750 2005-07-24 Colm MacCarthaigh +sig 1CD4861F 2005-07-25 Eran Chinthaka +sig EA1BA38D 2005-07-25 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 333E4E84 2005-07-26 Chathura Kamalanath Herath (Apachecon Europe 2005) +sig 152924AF 2005-07-29 Sander Temme +sig 3 9C85222B 2005-07-24 Henning Schmiedehausen +sig 3 9978AF86 2005-07-25 [User ID not found] +sig 3 2A623F72 2005-07-25 [User ID not found] +sig 3 F8EA2967 2005-07-26 [User ID not found] +sig 3 C152431A 2005-07-27 Steve Loughran +sig DE885DD3 2005-11-25 Sander Striker +sig E222DE4F 2007-05-02 Mathias Herberts +sig 911203E4 2007-05-02 [User ID not found] +sig F12F6072 2007-05-05 [User ID not found] +sig 3 990ED4AA 2007-05-02 Knut Anders Hatlen +sig 3 311A3DE5 2007-05-05 Ruediger Pluem +sig 3 88817402 2007-05-06 Thomas Vandahl +sig 4CEED75F 2007-05-06 Nick Burch +sig 4358C584 2007-05-06 Vincent Hennebert +sig 0B7E6CFA 2007-05-06 Sami Siren +sig 3 01530235 2007-05-02 Luc Maisonobe (SpaceRoots) +sig 40581837 2007-05-08 Nick Kew +sub 1024g/24774157 2001-05-28 +sig 5F6B8B72 2001-05-28 Stefan Bodewig + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2 (GNU/Linux) + +mQGiBDsSIk4RBADSCj6rUjV64tYCGT1DYKYR7GthyWpNdGHSYLbETBcDatAe1dzQ +5NsCgfrlybfyeY+y1lxr3T9bqf6zJWDw/718wff96qmmv1qzexSYtmIrj+h53V82 +EXwWOFuYMJisuxdT940iQzosm3GOv4MJdEg3oI2SgfEyRQQ6vO4Ob5rHDwCg5taZ +nrHOrXx2dIGHxpxRZ0SUl30D/jmtttFjYOQ3LBMriikz5mh2sK3ZnoSRF4o5O0zW +Ve6e2SFXOEjVjImKsH6KCbdQNelrAdgiyOoXClyQKsQ27pncbdWo6bO0E3POJZVm +XaeW7iudHVr63rU5PViXObIQrdQl0D59j5brKj4vdlTyUw8kaHPvbKPDEOwvZq4Y +LJQ5BACA1YilTeXRJqwFsNlpcxCHwlULD4QUVP496prQWf1B7Z6g0KvLGrQsO0Vn +Jcn+fEqukysTJixSXCPebosltd4RalJIupVYkp4w6MJ7biaDAlLuNhDcI/AiXTmV +dXUedVXIaM8I3Ne23gucwbAyc0Hvb+3cSAKRhl/azFQhuHBvlrQjU3RlZmFuIEJv +ZGV3aWcgPGJvZGV3aWdAYXBhY2hlLm9yZz6IaAQTEQIAIAIXgAIZAQUCSgkegwUL +CQgHAwQVCgkIBRYCAwEAAh4BABIHZUdQRwABAQkQohFa4V9ri3IWMwCghs0wCe4g +GMPBq6jtBXK46e4aHKIAoNn+9NX6NlhF04qaHyDBhXK2HMmuiEYEEBECAAYFAjw+ +1Y8ACgkQgQRkT1GJhQSdkgCeM6RDHUF/E334TtiLPgw7GpmNJSkAoNCLQCW/9VHr +V+ZHsodnXUnaD4dIiJkEEwECAAYFAj513wwACgkQPo+38viDQdknZAPlHNiMnR+L +Uavo2yOYiJT+W9+8+qNs2grYDZ+WSYujaWT2NJrUCYXQRM6gKDyFlkcJvHI9lF2y +YMkVetllZVN1TJkeEdtbHncNHcdq+ZUQR0NkFKTF9d1K7UI2rfWxt1y6a13TcUjp +JXzbtw/OXX9EZSI6QQt4rSFlvci9J3mIRgQTEQIABgUCPnXawQAKCRDu0eo5ImHQ +c0W4AJ9vuq4wlkc6TmmmZPF/gZVLluHcTgCeItrnvzyS11xkIETk6v4b7K4gaiiI +PwMFED51qhr9b4jGIdCnGxECRAUAoOaVZW5CdZ9oYr3PwI/i8RJN+JfJAKCmd/XI +lYOCpa9Qc4C855pM8NFw6YhGBBARAgAGBQI+d6QQAAoJEBU/oM11pnaSL+sAn1DT +HmbhITeEw0ZSgyBLQw2ZhcM5AJ0ZrRBbZ9lbgHXBKOJQiLpWBj4XsYhGBBARAgAG +BQI+yi6WAAoJENvSRfyzsqEsF/AAoNXq7Cp/0AwEmWvhoTjmtY6eVYB5AKCMFhBU +dYWNXVyalPTq8ThswNUnr4hGBBMRAgAGBQI+jc4sAAoJEMppOXSBA6N+kUoAn1Nj +6YqarQg0sL2KrFsQROM3A6fSAKCyl40SpfVJSO33fYuPci9dHp+QCIhXBBMRAgAX +BQI7EiJOBQsHCgMEAxUDAgMWAgECF4AACgkQohFa4V9ri3IsngCfbIpJDWj6UgXY +7rBH8To12BgB+RIAn3jw72WJzplAtShVTmuMlRFS+FUNiEYEEBECAAYFAj6sazwA +CgkQqywx6dYpjwFkeQCeOkJrnO5r2hWDhX4ACPPLObZvXLIAnR0VHAgkEH1W/t7B +4zdDYdBBZrd5iEYEEBECAAYFAkGS8mMACgkQ5BNhMwyqaLQs9ACgio5zJcieYLpp +igvSYLBfubUVrXUAnRKZJ6MACpH6fpoz2vkc2dh69tbSiEYEEBECAAYFAkLFMoEA +CgkQm/IjRS/ii88aCQCfd1cIawDqpkYU86f3JEjcN85ntFcAni0m8WR6s+bkh3fd ++EIrSRsru3uQiEYEEBECAAYFAkLfRQIACgkQQeoJoFeTSY8XxQCdFd+XEWqyDkCx +37gaIQAG4dHpwiUAoOZ/K5OHyTJCNFaBUDtpCh7hL8TPiEYEEBECAAYFAkLfkncA +CgkQAQVmvOQTY5L3SgCgiEi5/1vYvJrKoAdl0hRWU57ieUIAn2n08BQfMZJQ439a +NW/CnIK8jPBPiEYEEBECAAYFAkLgNdAACgkQc84u+4QI91XdNQCgoBB1ebohIfli +nAPlvI37pFHuu0MAoJ4yMtbKZMaq0xIBnxV9c5uu99tGiEYEEhECAAYFAkLerWMA +CgkQi5YpQ/wkPzxD7ACgqKnyeb/fjVS8vov4FePxeLju4msAn1SCGaiF9gEf+qIa +ZUnjcT7JDJ96iJwEEwECAAYFAkLerG8ACgkQMaY9luwUC4Ea9gP/WON+0xIWOvWP +7mKkg/+X0ukW+mbjE426qKtG/B0vNrTKpElmz8ttR+oajqbg20LazoEUuA9ZXjLP +fsdWA+vFkxgV6qIdtxYPMamPm7ytEBOmgMowYXUftGteqM5fxLlceHiwdUlynG2f +mtMqvPnd2OCezSFRx3W6nvAiIjoLZpCInAQTAQIABgUCQt7H0wAKCRA34/Rf7mXj +IcAUA/4nDlQbnToSSDOZkFj1CoGL8TjsVgzrO3r3S3x38uQQTFAE/AGBY4mtHgNc +YmiJaC2hN1Y+mlEGu/80Rjv185ZfJsFEerU6Y/9tRJJ1So9AAe5AmvGpD9ysXae5 +geB+k+epIMSuf9WMeTRUCbQs9ufGZLV5a8jqstv+btcrzNaY9oicBBMBAgAGBQJC +32x4AAoJEJrNPMCpn3XdRBkD/iNi0Y6A3afDG9ZL/K4JrOPgHUFWC/DgAEBme4AY +62agUsT0uXlz+Mu1Ps2E0t26ejScuVMMvqpXg7iJ2+3yKzsnX0ySEXW6/696XEpe +3TFn1iVOmMElPKxakn3t/jr6SDepo9jqD5P5CJR4GsDsG3iKIisWdDf81ZXpf86y +7A5eiEYEExECAAYFAkLeuuUACgkQMsnkzjZCy0vmSQCdHGC6jOEVo96yyospTq7b +L+EEeioAoNMKIZy5qFLXXZbSNvsj7mDRg2c8iEYEExECAAYFAkLfbHoACgkQUI6u +xTAtpWhYhQCaAvqVBsTX5s4c+sTOo06BNMdzHIUAoIwpThAKq936Szy/3Gfv8K3g +s5NOiEYEExECAAYFAkLfbHwACgkQ3bpkuiwxLS9z8ACfYeocOK4J204xwbXgEdUJ +QyvHK2UAoKz2AF1I2b8Ebu7vTUZLNFV1QMtwiEYEExECAAYFAkLgyTgACgkQXP03 ++sx4yJNbEgCfRcj6QKHVHQtYVXdCYKUbrj97wAoAnimqV15cvz1siDjUK9K/aTsk +GwajiEYEExECAAYFAkLg7MsACgkQybWm7OLXdN8UoQCdFfqef8My1xhn6mLd9WTL +LaIewTQAnRXGh/Af4hVG0KwtZcJEA464nCoJiEYEExECAAYFAkLg7TwACgkQW5aA +EOBPmol+JwCeLxZjKNisjgP4AxV5BCKR+5SU9NoAoIwPF/7B2NmGNR0t3EZze8wp +NhQ0iEYEExECAAYFAkLg7V8ACgkQN/aP9QFa/IqerACfafKJi4s8LYV2JxNfQKHg +mRXzeIIAoNBHOzukDCdxIvmYJfamItnCP45giEYEExECAAYFAkLiYm8ACgkQbZiN +F4cxXDH8HwCgq8P29CwMX7PKhRmY3T32APsOaMEAnjdd/WvzVBFtTcJFWkH6iF4L +8EQpiEYEExECAAYFAkLjVb4ACgkQEy5J1OQe3H56DACcDPfWLO5cDkeKFCvIP8mc +4p4KkfkAoJITROldIRxXqUiML1oTJxieuHJfiEYEExECAAYFAkLjZNoACgkQdcqi +o/ObN1CItACgsJhqBxeZTaSrRVNk3aj6ciAJrgEAoIxPXYTvIpnWBr4/WMbN0jpV +0TGEiEYEEBECAAYFAkLkbxIACgkQjON2uBzUhh/gZQCbBpIqkCEuIbd6tqChz3Pz +cIGiZbgAnjluBFHl4l1/NHtP9fEYCgl8nbCviEYEEBECAAYFAkLkkr4ACgkQBJE0 +Quobo42f+QCgjtO6EOdDRiruCi6gKvwM1a2eRwcAn0XUELm5AZezL5E0rEfIM2FB +iMi5iEYEEBECAAYFAkLlwh0ACgkQYRlqLjM+ToS9pwCfUEgO834XY/clWzkw/VLB +fe7MLZQAmwdz0nleOHYWFBrnYgEz53d4MxUPiEYEEBECAAYFAkLqY/QACgkQsr68 +QBUpJK/oMQCfc7M9KpApCWW7eE22PlLoN1sPK+4AoJdwE8TsDM2Pmehk9K+uHIx6 +FoRviEYEExECAAYFAkLj7WcACgkQMoZOQZyFIitClACfWpH0+V/N6vuucWZ7bsMm +2BcmM3oAn3fF5qqovlog4/PcgvKCToNEF8uWiEYEExECAAYFAkLlELcACgkQUnkv +r5l4r4YUZwCgg7vJpDpUXnuNvgc5RHgG7UYhRQYAoIEKHsrswh6XzVn5yQRkfjdB +/A0OiEYEExECAAYFAkLlEaQACgkQa3OhBipiP3JA4QCffb8NgQssOQXaVR0dSwPC +eU2nQPUAn15EAjykVZsUi2tZWqEM08SNOKI9iEYEExECAAYFAkLmmWIACgkQaOuM +dvjqKWd7AQCbBpwyitQ77kd9KIT6y95Im1vmWt8AnAnkNTBctVtMfwddYTG+xLka +OllOiEYEExECAAYFAkLnYVAACgkQbpR1lMFSQxqIRACffQqUXTgOa4hyHYQBUwrl +GEqmWt4AnRMXVGhd47loS27MmiEiWwDlkNjJiEYEEBECAAYFAkOHn54ACgkQZjW2 +wN6IXdOr9gCgh2fn26W0DSL5WZATvvQkwZeJNiMAnR6+0AlUK8uFSFIVhl+RZMnY ++XFwiEYEEBECAAYFAkWdnk0ACgkQIYJJVs5BnI/0SgCeKCw39INy9ISFunlAojYg +SInHfokAn2vU8q4JNjg13qNeclZN9kmN9mbWiEYEEBECAAYFAkY44sMACgkQFUWz +/uIi3k+qvACffppBpoY82MEvDV7c4/6cjw544CQAoJAPCdZA/LRqICJm0iFbDrwh +sSb6iEYEEBECAAYFAkY4558ACgkQY9CtrpESA+QrAACglRB/VdEmovbyWdMDmsTd +yw4kha4An0uKwZeKHfBR3cC2s7MvqqmMoz9jiEUEEBECAAYFAkY8kyoACgkQmHDv +8/EvYHIkCgCYgXQZTJ8VmHwSX3pXOxnMhp7mbACeIPXwcPvmfP709nfgQ8/GpT2z +9ISIRgQTEQIABgUCRjkasQAKCRDh4fKwmQ7UqhZKAJ9iraDBstzeXPMtst3x+ZXd +LQm7cgCfWDDgaQOa8CoM5/+7WCtkyasP6BiIRgQTEQIABgUCRjxQRwAKCRBMBCgY +MRo95eP4AKCuEQU6fjPy/cPEiqhGH23J2YEr7gCfS8vBTEU4sRbOomTEuINPxb96 +OZmIRgQTEQIABgUCRj2gkgAKCRAuuUaCiIF0AgOBAJ0bJmFzA9WkG5FmfaP4ieG9 ++SCbXACgw+2wcOA/B94LKRtjhJT6j6zSiDmIRgQQEQIABgUCRj4VvwAKCRA+Km/C +XymIJIvcAJ9QSE4mCQldVnpbYwLTCk+xHDqhcQCggT9P3/rHIzIvv1tJ+A1ZJPvX +OcqIRgQQEQIABgUCRj3WeAAKCRD1wmAWTO7XXwpbAJ4mr2IxFtx0ppkefxx0l0TJ +6cFkrQCdEFbc+aMxRKhK9SCAWi3mq1UqEWiIRgQQEQIABgUCRj31AAAKCRCgctTQ +Q1jFhByKAJ9SIielTuD3StxPQpBkAkYP6Ld88ACgg1oPX9ryJA7YuhMD7byXQsET +zD+IRgQQEQIABgUCRj4FxQAKCRACpaYFC35s+k/GAJ9/VDyw2vNzk1xjcu/QZCa3 +gGI2zgCfeG8klJ78bAGknzxBlK3XtmoNqASISgQQEQIACgUCRjj3hAMFAzwACgkQ +c92MFgFTAjVJogCeL+3FTTVR5snJx9qbGQsgv23ZaT0An2Hy1CcXVklcYBF7Lbnb +Agbe1HpfiEYEEBECAAYFAkZAtkMACgkQbQvHOkBYGDePegCbBe6rmz9/kYDV7w5p +vwnugVsvbiEAniTfLW7NW8z1SRBWf6lMH3clGAs8iEYEEBECAAYFAkZMRFMACgkQ +HyEjw2vYcqB22gCg1np1JYFYPqCB3ekZts3K+pn7RkwAnRWd6HmtjRolZdrZfkqQ +DJKmd5zviEYEEBECAAYFAkZMfQEACgkQD0UKJmIQv8DJYgCfW0C9rDAToLU+0BKL +YCiWwtFJ98MAn2HvQ3CDhv8WTm+av36lETLqhjnfiEYEEBECAAYFAkZSb1kACgkQ +MsHW7w8UO8GGZwCg0l2T1O/OpOECXs/vYE2649wNTaYAoLrUpLKYev8uHAfc53lZ +6LE0h1T0iEYEEBECAAYFAkZSb2AACgkQy66+OaRsTKHZbwCdFSloWJh3uuTLk87a +St4uYeZrKToAoIrN7epZxeu9n9e6hqVOLz85zc3TiEYEEBECAAYFAkZe1aoACgkQ +mobXzNGq6mD+cwCg3k4BRrRi6pjrY/UggHjhiHWSD1YAniDQn1MVB620Ik2cVL7h +R1V0ZL6biEYEEBECAAYFAkalTCwACgkQOb5RoQhMkROqQwCdHhIdklVR341azVFB +O6aGArSOP2QAn0WtSIiqaLTEQ57+ir62FxRYBQdWiEYEEBECAAYFAkatzFQACgkQ +M81nM69exFIdRgCfSGft6KIZ+CTEPIGr8lp8oOpNaHMAn1NCXZTJOW+r0G5ply4h +lu8UXC4AiQEcBBABAgAGBQJHwH2YAAoJEBllhVDDEQYRZ4cH/3XnLW6UAdDd4k0x +l2lUAj9gB7ITUbejCwvnFqUyKAE9P38boBHNfc6cliQUOz4ITWDPhiinbjNnJHgl +p9vK0o4R/tFFyGImIvbmu1C8lyO2BJPgF2yMNrBgZhx0+IkAG3R4iy9JFIDGgddj +LQSP4TX3uRUFUXEAhHzGA//XP4tnC3CisvOsuoc6ZjyZGSt/HUzZoKf+wsdJlfab +iK3QpD8lSOw8KEZF54JUC8uaYGuBGs7ih4FcO+Aqb52UAx4/+13eEdAognVF2Hba +iI+G2jEekyAwD0bP3DWyg+9fGBtnwtDMj0OrHklvA8qoHxAMvXHIGhxjqZBOFehh +8DNEB6SIRgQQEQIABgUCScqH2QAKCRDJx5JOUQR9Zj6WAJwOtRlhq45DedrYNH54 +QIJSFw3XJQCfQI9fZl6zmKWSm1nJqXRC+awKmwyIRgQQEQIABgUCSc/UtQAKCRAk +waN4agF7F75XAJ0TyTdCMGIZGCooM/xr3w+qvyZLgACg0W8O9WOf0qwSVgynmh2v +QggUiyKIRgQQEQIABgUCSdI2jwAKCRCusBoVO3x1sZHiAKClsXinnJfHMQYewFPq +y16zr//f4ACgulnu+ObADHMquuGCw4BLwrvqMIK0IFN0ZWZhbiBCb2Rld2lnIDxi +b2Rld2lnQGJvc3QuZGU+iF8EExECABcFAjsSOYEFCwcKAwQDFQMCAxYCAQIXgAAS +CRCiEVrhX2uLcgdlR1BHAAEByboAoNoD/9Jgm/alxfAYELz05LMa/HLeAKDWTHqq +7rMkppZoTUv2gWpVzrk5RIhGBBARAgAGBQI8PtWVAAoJEIEEZE9RiYUE0LMAn22/ +u01Lo3Bo5lDxxHSkayUkYq25AKCm20yaGFGtTDJW4Rdz50pfut1AwoiZBBMBAgAG +BQI+dd8PAAoJED6Pt/L4g0HZWboD4gPGJi0y93+Zp37uFGgpe8PkB10HVLCe9B0l +7R7BK0UFhnFl004td2RWeALAAnOI8ZlxCahwQdUys34zF77c5fQ8Rn7co46wBSL5 +9Oi/bG9/wRYqBf13SWL2ITK1UDgzRznZrds9MLQqSL8oBjebyg28CZPBYH10FKig +UUMwiEYEExECAAYFAj512scACgkQ7tHqOSJh0HOu5gCcDO9Ou8NA2+gChoNAn6j/ +J2owDxkAnA0Q5AMezP7rKdsw+hCYqZSp8QhIiD8DBRA+daoh/W+IxiHQpxsRAiSn +AJ4id/ijcLliSH/EGh1UiaunYK9zLwCgyfeZ7mnhKXauba2NXFMlm3axSvuIRgQQ +EQIABgUCPnekGgAKCRAVP6DNdaZ2kikaAKCJMBE/oJ/4ko7FRpUWvQv0MLmhRwCg +jEXsPmY5Ur8AVynVzE2TcEu12reIRgQQEQIABgUCPsouMgAKCRDb0kX8s7KhLABs +AKCU2ntXY/DhTnvki6igzrvttl/ynACfZTZNwePs9imtT6phGTInelrsXLKIRgQT +EQIABgUCPo3ONQAKCRDKaTl0gQOjflg/AJ4khT+aic33qc/iMmMC5+URcxt6ZQCg +leruhUJi44Kpav9PdVbQMzdb52eIRgQQEQIABgUCQZLz6wAKCRDkE2EzDKpotDZH +AJ4xwN/htv44yNFQnACTYsc322HjZACfTd9WoxRkRWY6tVd9YgumNc0swMiIRgQQ +EQIABgUCQsUyhgAKCRCb8iNFL+KLz+ClAJ99ddEJ5l/VW/mKHvTITZleDSv+uwCg +lgqx3HQrlqp+gTPKIEKPkjjom+GIagQwEQIAKgUCQuE4ECMdIFRoaXMgd2FzIGEg +am9iIGFkZHJlc3MgYW5kIEkgcXVpdAAKCRCiEVrhX2uLcvEYAKCJD7CVpr2Iw657 +kO6G3Is8xKa6IgCgiStyJgU5/dUEEPQctZ8ZVZSrHNGIRgQQEQIABgUCQt9FDAAK +CRBB6gmgV5NJj+d2AJ9QRCXhFzmee7cbhlfejg7LBsXsMQCfce2/Wz+if56L7WaZ +Lpn893CAzu+InAQTAQIABgUCQt6scQAKCRAxpj2W7BQLgXUkA/96klgNlfh+VTSx +rwCUW1JE5j87qDeJWrnN5ibVYPd7TE45hNeWQie2RgWGpsHNlDekVh9aZuHMJb9N +zRGKAAJ2augQQuvDKt8sge+ydRMXsLkAvpK4VBmobqqgyO0cV3ooMyizawMRndVc +MbVu5b6Gkdj2tZEko/Nv9KBJ61MJ64icBBMBAgAGBQJC3sfZAAoJEDfj9F/uZeMh +rGYEAKJgLDFku3GdpF/BI4GQBKqadLygF3Igq9Np310sTcLOI2ARb4B18Tvq9CyR +4PEvdlVC5uEpaJozgHthTadjGTgg1WmiTWqG31s3U+zL5NLdK+k8qqrxGLzFzhk8 +PB1wJwImJcvLmJHm3HeIGycdEzn4swgmD4uI6p39mcGyCCONiJwEEwECAAYFAkLf +bHkACgkQms08wKmfdd2sxAP/e8W2cqyypPqYHs05nTxNzD5wLl72ABWvljfdf5mA +97sEl3q48234j3sUN1Uk6c21NlK+eRBn8Lv1ihyLTJkACgdiXNFvi1eC4vLhQMGO +PcGW8+wI4olmsqftvG+2hNt4eCMead6IjAK7LNKgDWEBjGI+WIOvC5UJBO50cNXG +OXWIRgQTEQIABgUCQt667QAKCRAyyeTONkLLSxJgAJ9faCKziDmN6nQeMoAECTfV +vIdTRACgjnb3h8sc54gcosIh28qb7uBUuf6IRgQTEQIABgUCQt9sewAKCRBQjq7F +MC2laDoHAJ9VC11NFs0+BAYWoZBJSUEnjn3F9gCgsqGPrxhTBkHlWAh4iiumq31t +ZHaIRgQTEQIABgUCQt9sfQAKCRDdumS6LDEtL3hJAKCEHj7lHAZHRk7LLbFQDh7o +iY7plACgiORbBhF3VWn1JCglbk51Kq5hJy2IRgQTEQIABgUCQuDJOwAKCRBc/Tf6 +zHjIk6wAAJ4qjf2FNE1VXK+PnL2iFP1h7f8L4wCfbtoQqsaDE1vCrnSobEUT6nfq +Pt+IRgQTEQIABgUCQuDszAAKCRDJtabs4td03yLQAKCz5pbjUWdyEHQr85R0He3Q +uDiLkgCgz6XQ/LFLdcmwDAj4lsKbRpHdUDyIRgQTEQIABgUCQuDtQAAKCRBbloAQ +4E+aiRuoAJwLeKfpT6aqNLBvrusHnNNjROFi5wCgjhXup7RcdMNTDBY6BGj83NHu +TU6IRgQTEQIABgUCQuJibwAKCRBtmI0XhzFcMZwOAKCLkKunJnUNy7QgowvTkV+/ +DyU+FgCfScvQFzMSj1Gk1ViDbK0n5i2MpQWIRgQTEQIABgUCQuNVwAAKCRATLknU +5B7cfur2AJ9XnFPKjlIPsbrZVJRuNh96py7FfACgoC5yGwyRq9hYK3SMGGAu5MmQ +WpSIRgQTEQIABgUCQuNk2wAKCRB1yqKj85s3UB1kAKClSCLmqecNSlVeFOwlSijh +TjzmxgCg5eYxuHJo4wf2D2d1gWbloc8xt/2IRgQQEQIABgUCQuRvFAAKCRCM43a4 +HNSGH1JzAKCoUQuAh01aTLbbUS4WCMrOAQblagCfdwFlsT48wWEBnJSFAiXaEcRt +UkiIRgQQEQIABgUCQuSSxwAKCRAEkTRC6hujjcShAJ9EK1u8wehMaZLt2ZnexHIC +PhbtagCgkN+i7LXBnm1IwlP5cGbmgW3BJRKIRgQQEQIABgUCQuXCIAAKCRBhGWou +Mz5OhEAfAJsHEwc1jK9tiYBvWRMS3zJ0XrrShgCffOyuZlrBNeuO9s8T9WkL7/vC +nOmIRgQQEQIABgUCQupj+AAKCRCyvrxAFSkkrxWDAJ9oJHjkm3MWfPS/iMK6iipo +UaAfzQCfYFygT+mws9MQIZEMoTi/sk0AOcKIRgQTEQIABgUCQuPtagAKCRAyhk5B +nIUiKxsGAJ4mMBcsZ/PlqEN2CjOoNits7PFYbwCeLuEXDDEcUAh7jb46wvrHB5EP +jp+IRgQTEQIABgUCQuUQtwAKCRBSeS+vmXivhlvNAJ4wGMXMO8EgWYrlU0i+9wrd +6N0M/ACgvODXK0oKDcDQ55t8xf2evmJA7HCIRgQTEQIABgUCQuURpQAKCRBrc6EG +KmI/cl6+AJ4kaPB7Ois5KuLwhbEwmpO3e07OQQCgw1kJOjcCZwogIWG1222By45k +1YCIRgQTEQIABgUCQuaZYgAKCRBo64x2+OopZ+DxAJ91h0aGRvukGqAWEafe4nnT +6xj9CACfU91kJ9G1WB2T8lW/fkXt8mnlrUKIRgQTEQIABgUCQudhVwAKCRBulHWU +wVJDGgmCAJ9DsO7lkpvuigmPoIX6d7vufFW5iACeMsXW1nX0DWf6E9pPgDaeZ+db +a1GIRgQQEQIABgUCQ4efngAKCRBmNbbA3ohd09++AJ9GFjNIUutctozuFNreIeS2 +xATWJQCfTUwt6nd4R13f5U0+iOsTwWVX6h2IRgQQEQIABgUCQ4efngAKCRBmNbbA +3ohd06v2AKCHZ+fbpbQNIvlZkBO+9CTBl4k2IwCdHr7QCVQry4VIUhWGX5Fkydj5 +cXCJARwEEAECAAYFAkfAfZgACgkQGWWFUMMRBhFLagf6AqFi2y+DPg+duogX5hHs +lLpeRVXbqEqX9bB2BzzinUhTmmRpEpiVnCkTd69scXh/ZVTECfA2zBYV67gp3eit +UB7CDSeLZwqQCIz42uF5ADq9oj+j6uf8pPmsk9qO4VZcr7mUwJ4tDy6znG7Qg5H7 +y4HRRQ8cwodDIa2jpLdQ+v9+fms4Nq5j/IJRmHjT7Ha6n78arpl8DlBtjjG0dpmK +fBB9n68MbiFLX19yIxO98X/nEoDCk6DuLX79Ratt4jEr08YCyJ4PfAqJKUy+F5jr +Knp3G/qj6H2N72vHZLzoZRfZjBzbpN3V9rPossxQauoRqmU5M9wFDnBoqyszMMU+ +KokBHAQQAQIABgUCR8B9mAAKCRAZZYVQwxEGEWeHB/915y1ulAHQ3eJNMZdpVAI/ +YAeyE1G3owsL5xalMigBPT9/G6ARzX3OnJYkFDs+CE1gz4Yop24zZyR4JafbytKO +Ef7RRchiJiL25rtQvJcjtgST4BdsjDawYGYcdPiJABt0eIsvSRSAxoHXYy0Ej+E1 +97kVBVFxAIR8xgP/1z+LZwtworLzrLqHOmY8mRkrfx1M2aCn/sLHSZX2m4it0KQ/ +JUjsPChGReeCVAvLmmBrgRrO4oeBXDvgKm+dlAMeP/td3hHQKIJ1Rdh22oiPhtox +HpMgMA9Gz9w1soPvXxgbZ8LQzI9Dqx5JbwPKqB8QDL1xyBocY6mQThXoYfAzRAek +tCpTdGVmYW4gQm9kZXdpZyA8c3RlZmFuLmJvZGV3aWdAZnJlZW5ldC5kZT6IYAQT +EQIAIAIbAwIeAQIXgAUCSgkeigULCQgHAwQVCgkIBRYCAwEAAAoJEKIRWuFfa4ty +6SoAn2X4c0dOTQp0dk+ofvPDMtNWBbIXAKDdrSAnSP/iaXIouTg9ncAERnXFgoiZ +BBMBAgAGBQI+dd8PAAoJED6Pt/L4g0HZhpID51GCXx5Q60No2CVrjw73vZ+KVfTr +8iJZSsi3X1C47C1l8OCZvnzECYFq9hhKL9WWCMktvqxg2aW8/78WgVW4KjPEz3Yl +88cFPABauJPhJuHyl0efAci0iY7yy82utbKTRyXp5xFBad7U6RLK+GzbrmqEWIbY +is06jbqAvtMfiEYEExECAAYFAj512scACgkQ7tHqOSJh0HOZXACfRTqAC+LhzLqh +1668bBFTybxCdvwAoIGjkethM4lKnKqXZv9Wctz+E9toiD8DBRA+dao4/W+IxiHQ +pxsRAlrLAKCp5Eet21hghQweWCbX2Sfp0Kt0wACg9W8xv5CE0KSB7E9rwmNcgZpV +mwWIRgQQEQIABgUCPnekGgAKCRAVP6DNdaZ2kvvSAJ9JBZVwMzoYbuK+X4JTFbsO +W0wHdACgrWEV9hElP/rbBPL7l1rbDAhniOWIRgQQEQIABgUCPsouuwAKCRDb0kX8 +s7KhLEnHAKCqht/V9susaEGuep74heYgo/6ExQCcCysfRsihFG0jPX/yEOwLGT4R +0+eIRgQTEQIABgUCPo3ONQAKCRDKaTl0gQOjfsWIAJ9R2xmpnF0w2EhY591OYpNr +0GvJ7gCgv7lDNNYLHZ/u9RIgJJq45R+h/TCIRgQQEQIABgUCQrgKqwAKCRCBBGRP +UYmFBNDFAJ93FhVVtNwg7jLgO00lKk3/3lgEVgCgvxo0Jz2dPoOzWw8OvGUmN5PF +rrqIRgQQEQIABgUCQZLz+QAKCRDkE2EzDKpotBiEAJ9ZqXR8/8Ffvq0lNkJ+0d9r +JXzXaQCgyT6qZ5nDeDFJpPdMmRHhwHSZq4SIRgQQEQIABgUCQsUyhgAKCRCb8iNF +L+KLz92FAJ9c/C9RJy3SGLbVq09c7NBPPS8+AQCeLBc3EqtjTtzmbBEH4fRegq1H +t1KIRgQQEQIABgUCQt9FDAAKCRBB6gmgV5NJjyFIAKDhfzgs3KPp/97Biee5tPmq +hizsIwCfWwvOgdoUb5GmZRpv53t08woBRp6IRgQQEQIABgUCQuA10wAKCRBzzi77 +hAj3VbBKAJ9oavMNCVLXyabt0pjFJBWSwRZt/gCePKcZox146ASRqaJF8OIvQn2+ +egaImwQTAQIABgUCQt6scQAKCRAxpj2W7BQLgRg1A/d5x83A1kegLg8Q72g6dcUf +KCWR6I3mfbFkkUH34jSShdO773Yxm8oKolm0JrUzPagZwMRIgaUqSXpgYbxkyorz +5G/R/PCkHto6qMAztyCaKyFTE/nlBQfuKZ+XPpBSw/yIRu6IWdqwSHOOy+thRbg9 +fXrMbzHFXpawRauu2VeCiJwEEwECAAYFAkLex9kACgkQN+P0X+5l4yGPbwQA6q4L +s5TTiRZFrxJIHVVwgh9kz9zlLj2fSULWyX25INZ59YQpzCE2qTSZRBN8sowe5BKQ +ZJlLcir91UsDg7KX4rP6bOsyUSJ3v9kecarU9/B3/7GLnKDGVHHoqRQKAi2DqpCi +SsE6WDNONNXVKbsadcvC6uTdEg7U1vXyjDbPY4qInAQTAQIABgUCQt9seQAKCRCa +zTzAqZ913XpNBADS498IdhQrpMnbH0s6oIxQ6ZFY4gcW07QnqfOn5WizKxdx9InX +JBgozFH/yaLLQbI8AqS9lZQrb4cJeWYCM5vJbnHh7qatoguYb1DdCIyriFzC22T+ +wxPi33L8PNpyrfCTT6Y6LF4jIcrEGZrNl37jT+n/xMvCeY2gdmdiQmFiQYhGBBMR +AgAGBQJC3rrtAAoJEDLJ5M42QstLwa4AoJXwrbSMRRqlUy06v54T50RTB1/WAKDO +GdOaE7jxcRlkuEc8Qswm976bAIhGBBMRAgAGBQJC32x7AAoJEFCOrsUwLaVoIqQA +n0wc28m+1XNI69hWQ4lyRVEgQqBGAJ0fsklpnnZHCVhEkrakbLQ/E+9pjohGBBMR +AgAGBQJC32x9AAoJEN26ZLosMS0v+UQAoJvPJaWA8ctG2Bff7mxW76gsOovWAJ46 +0KDi0QbUOEJiD0fk//R0XjnknIhGBBMRAgAGBQJC4Mk8AAoJEFz9N/rMeMiTV8UA +n36HHFAVjudWCBDNJm7KqZyh7WsKAJ9sU4g4KN047W0SbJAA7sPkJwE0C4hGBBMR +AgAGBQJC4OzMAAoJEMm1puzi13TfGz8An3irX0FipvIvirhSUyKDE7wDeuUEAJ9g +PRtcLRDeFc4Oh35077YLrN9q0YhGBBMRAgAGBQJC4O1AAAoJEFuWgBDgT5qJwJMA +n3hd5dZRNloo0BdAZjzH6r5MgNlHAJ0UM7nOz1sj9J8nRqCb3xFBwclbO4hGBBMR +AgAGBQJC4mJvAAoJEG2YjReHMVwxAuoAoKiAof3Y87dYurmnSQDs7WXP88ZdAJ40 +dTmjNicUfsKit5aEkxCl9bjqQYhGBBMRAgAGBQJC41XAAAoJEBMuSdTkHtx+60cA +niVi5i8j86YN56+uY+wMahkSXg31AJ0U9jmvOXQDNNsIHWJY9xXoz7jRc4hGBBMR +AgAGBQJC42TbAAoJEHXKoqPzmzdQwPoAnjmnjGqxCQz22Y2jd8vz3+Twfwr9AKDB +j4z0kxrf4hydmgK38ndDBP0edohGBBARAgAGBQJC5G8UAAoJEIzjdrgc1IYfpZ0A +n1WzxheVFpcxW8SvsSpmNg2yl2+cAJ46aAMX30kTtT2ZUFB4FpUvjWngs4hGBBAR +AgAGBQJC5JLHAAoJEASRNELqG6ONH2wAoKPWAiV7uR6aHP0lad6xwmJk7hDGAKCL +dquqzy/yW25IpG0amrrBJxbLc4hGBBARAgAGBQJC5cIgAAoJEGEZai4zPk6ET/MA +njlQCKWhvqvRu7iYFQsg2dCW443yAKCYIPjawX4TXjgbruZktT0hg87UPohGBBAR +AgAGBQJC6mP4AAoJELK+vEAVKSSvB38An1oDZWDSwVpp/53o5cdJujbLU9grAJ0X +YbLrL+kW3CjaFVLncRhuF5t5xohGBBMRAgAGBQJC4+1qAAoJEDKGTkGchSIr+o0A +njIqK/E4OJrK0XPhX134+VJZ9N3eAJ90U2hylPkr+EoBHnF5VtEWJVWunohGBBMR +AgAGBQJC5RC3AAoJEFJ5L6+ZeK+GQvYAmweV9Ky/w7aRqbYjTtdg3U0Ks7DDAKDl +qSRYN1u8wK+2pVY6pcdLdb0uCohGBBMRAgAGBQJC5RGlAAoJEGtzoQYqYj9y2GsA +oIrkKoVWsuxRPHtOWWuvbHkMBeAmAJwMQVTcr17v9WngLkot4gurcsLxaIhGBBMR +AgAGBQJC5pliAAoJEGjrjHb46iln3W0AnR3w53mDPp1l0/6GDqqIWpi75PIkAJ9S +yyYZC4gjDmvf24hduMyrfjI2h4hGBBMRAgAGBQJC52FXAAoJEG6UdZTBUkMaINAA +oKf5u3fzXTT9MOtOVcqyVgnaIHhvAJ9hPhaRQUIMryWg+pJcw0TTWC3O9YhGBBAR +AgAGBQJDh5+eAAoJEGY1tsDeiF3TYA4An1FTBiWVfw9UBHZ8K05EZjG9+ykeAJ0S +w1jLCrauKil0I2G5rizXR2tREIhGBBARAgAGBQJGOOLIAAoJEBVFs/7iIt5PB/wA +oJihHU6IgWsNcADF1yo4/vD01PPNAJ401g1Y1dn2Z4/Il2jiuzE8dNYDEYhGBBAR +AgAGBQJGOOeiAAoJEGPQra6REgPkF3AAnAhbVLxHJk0+XswLDLFj20SQKrcKAJ4x +XaigKAQ5D6/Of1SPPRoX7bTEXYhGBBARAgAGBQJGPJMqAAoJEJhw7/PxL2By3XsA +oKONmq8YyhYqvpafW9dX7k6r4pg5AJ9Sjki0Wqrm1AYXxAYGc8fZIesIf4hGBBMR +AgAGBQJGORq5AAoJEOHh8rCZDtSqiDoAnR8FA/yGXEAd6gP0AoioyMHj6e0KAKCA +dnxXUB/eSwN98EkeVwSPpiBLG4hGBBMRAgAGBQJGPFBHAAoJEEwEKBgxGj3l+XYA +n2Okz5W6SabKyirUGjF30lr9BP8VAKCBqsPWR50O8vcG0lDLkp1tuW+63YhGBBMR +AgAGBQJGPaCSAAoJEC65RoKIgXQCTFkAoIq89nYh6AmxcqwQFeYiloD+FGv0AJ41 +la0vkis1JUIDM3FNO8xw5VbNZIhGBBARAgAGBQJGPdZ4AAoJEPXCYBZM7tdfcxkA +nAsMAnhrvQNVPQJs/P5ysQTKHXZ7AKCGrxUFi5FQ93oEuWBGqw/xHcMfVIhGBBAR +AgAGBQJGPfUFAAoJEKBy1NBDWMWESn4AnjHzaapJEaIYFhc/39hIRm5n0dl9AJ9l +AXqmz+YQSqJKQ/cchdKbLdhSGYhGBBARAgAGBQJGPgXFAAoJEAKlpgULfmz6xg8A +n1EFGiCeI1C+7BUDqI5xlPps6WB5AJ9cUoE8g1ipE/QtCVYcOUhD53yxY4hGBBMR +AgAGBQJGPwYxAAoJEAP2jL3eiISgjbsAoLzdvLd5d8mADMZDFLi9ywPLk4pBAKCt +23xxWAwNSj5W+uPGLL6R0IEb6IhKBBARAgAKBQJGOPeHAwUDPAAKCRBz3YwWAVMC +NT3pAJ0d+kpqF2GHoIhFEisRwox0J52J2wCfc5nQgpaGmgyMqodqq+cdoybHIx2I +RgQQEQIABgUCRkC2TAAKCRBtC8c6QFgYN2F+AJ9l6y2ms478IKVMFRI/SghwKvRW +AQCeJIR6hCR46QY0IqKhkHy9mfzaiPaIRgQQEQIABgUCRkxEUwAKCRAfISPDa9hy +oOhdAJ45vxMRMgaHj1548DkUttPv0cdYHQCdGlc//bHVnJwwlUFz/1O4sXwDttaI +RgQQEQIABgUCRkx9AQAKCRAPRQomYhC/wO8fAJ44L3d9QLaMvMvcI78aMBJH2y2d +SgCfe9xYYMuYvf9qElihil/7a/9p68CIRgQQEQIABgUCRlJvWQAKCRAywdbvDxQ7 +wRIDAJ9xo4egUgVo6h/N7A5nMBuT3dZ6jACgy2Oc2uFYYhGvBAgQpHqESZf4suOI +RgQQEQIABgUCRlJvYAAKCRDLrr45pGxMoYJUAKC/iURBlu5JKxZJqUJ6D2kzYuo4 +tQCgxTpvpDWKqrGIM8OeA/PbdUJqTkCIRgQQEQIABgUCRl7VqgAKCRCahtfM0arq +YMd8AKDHCkES+rZ5lM7aewuV+/ouOknGQACfePMsXa5L4OKjA3szncnZkcc6Wl6I +RgQQEQIABgUCRqVMLgAKCRA5vlGhCEyREz3aAKCFX/1eYbphSmP2KYfgHkhg6Hf1 +UwCgtjZrJUNnuhsPGRK+Fooeds3MatGIRgQQEQIABgUCRq3MVwAKCRAzzWczr17E +UvI9AKC1QzfFpES4rgb6+6lqzYYO2JW9SwCgtZkhqsaH5evRZiIglzjHmfgPJjeJ +ARwEEAECAAYFAkfAfZgACgkQGWWFUMMRBhEjoAgA4cFAPqtCYVpEf0Nc7eciqxpU +LGLaUCOuDfMZiz1kSkXi4FiDAKbSfrcGAPmLh+8AiQbID+1PKItsfWs5ZjuBzJw2 +toF7OKSWxNKUSJoT+SapGGrs3qbywZWRi82dcwqSxPyZmsQfLXONJRePwgWy4+RB +Nvo38j1hKZclf8xMI4w1wJMUs34Xae9BGMoLhpuJ+jOCoG4JE3cUdf7hvhyJKtMh +xrAiYVYmVlurShtNF3Czhq5tm80Jb9m1wlZRFgvUE6m/2XWwPjjS0lnZnoBFVZ0H +lMd47b0YOu8ieS1wNgkqtpRwBqBBH2XOM4kR5p/uT7rJN9yav6z1fEEgmV5TG4hG +BBARAgAGBQJJyofZAAoJEMnHkk5RBH1mxrcAnj6+e5JOVqw2yHEYGIL5d+z9iURf +AKCR6Y89jMFzzv2rEPbArCxOeGmurrQkU3RlZmFuIEJvZGV3aWcgPHN0ZWZhbkBz +YW1hZmxvc3QuZGU+iGAEExECACACGwMCHgECF4AFAkoJHooFCwkIBwMEFQoJCAUW +AgMBAAAKCRCiEVrhX2uLcoYCAKC4KNTcBwjOEIfMOgFsF3uTQTvL5QCfQ2960jGi +s9Jye9Ly/fI1CBMVQxiIRgQQEQIABgUCQrgKqwAKCRCBBGRPUYmFBP0VAKCPH0b7 +S+TylV1uBuYcYnWIb/RJzwCeJvRTMPnWNjVz+CVOvVzJTH4ol5mIRgQQEQIABgUC +QsUyhgAKCRCb8iNFL+KLz3iqAKCXRZWdGjBVbj3IBFl3kvh3xF2gsgCcD3H79mbV +DRNMxpGArFQ1hqQFzleIRgQQEQIABgUCQt9FDAAKCRBB6gmgV5NJjzHQAJ9IfkjK +kiEuFxUhznsghAQ8bsBWnACgoT0kWSB3iUepLIDoWhhGtDIS5FSInAQTAQIABgUC +Qt6scQAKCRAxpj2W7BQLgebOBACAFFpEKETO3ZHbjMnPogACNr6EZCQxzGTIXrXS +yWQs68VcH54wUOA4yk3cGpfH2pgAxYjaHejTJRvDKvGrPGlKHgCZFy4+wHzo17pW +9J1aKk2sUWlT67snDVdMun/i8WxD9yz299cXR6iCxPfP2HIMEqbsxWJaXITo7drW +SjO35YicBBMBAgAGBQJC3sfZAAoJEDfj9F/uZeMhRawEAM9wfn9sBIsFzQRQbAO+ +ll83f8ki++A4Anj6DXQ4xRmClUxqahL1BjxxeQhE+Qomq1IebDJr0Se34XB0g3J7 +bzr/i9QmEwEqnDJfWVobv1Ugjy+1jzErlZBhm8hnCI+zPnrWKLk0n78vzJ5RrnVa +TTV+OW5r4rdVZ86yKYHtpVSoiJwEEwECAAYFAkLfbHkACgkQms08wKmfdd0HDQP8 +DDD+1FQU8PPPe+Kuf2bJOO7Ycrej4JF1I/Gbs2HH3xXgOZsRv6WJ41M/ovxJLYrp +VqQA2YF/Gxwguwrf4lPk+4spFdabguiJK0d2/KZAtnLsjIzdYcoY01IKGT3xkPwI +DErNFSmxX6bKCUePcFNHYZ6dDBHFFcYVTsdo/wbAe6aIRgQTEQIABgUCQt6wsgAK +CRD9b4jGIdCnG30UAKDCxsPZksKIcvj7tbHQEwm+PV5+DwCg7PorUCgIvTIWnID8 +zRWDBG4ACXaIRgQTEQIABgUCQt667QAKCRAyyeTONkLLS/d2AJwM7BQIQgqLA0qA +75R2EjHFXQKZWACgo7iaANHxIRc/Nw19j8CxNbWJRJ6IRgQTEQIABgUCQt9sewAK +CRBQjq7FMC2laIx3AJsF0Hjrm4N21EwdrmhS9PHKQL2KdgCgjlus2GyuCzafgb9J +HVhBDrhelkmIRgQTEQIABgUCQt9sfQAKCRDdumS6LDEtL7MWAKC6rQU6ZjSS6gVn +wswutaqBwfwtvwCgv2mMGJf2hnYVaNNqV5WIFAuycmOIRgQTEQIABgUCQuDJOwAK +CRBc/Tf6zHjIk9TlAJ9dbM2HowI5oD6hGSnADhI2dKfBrQCg4O9WtFiRzLqC1TgC +Asbigqy+JDiIRgQTEQIABgUCQuDszAAKCRDJtabs4td0311pAJ9L3yUe7GUeDqMz +d3WLWatclf7ruQCeOenA9nhyKgHASeEK/ZXQXDDBW0uIRgQTEQIABgUCQuDtQAAK +CRBbloAQ4E+aibNVAJ4wnAfcA/rtUs3+Hu9nNn8ar/2Q5wCfe6W+k9yHjd7hZWnY +HdnCkAZkOMeIRgQTEQIABgUCQuJibwAKCRBtmI0XhzFcMezQAKCnk+So0Anm4kLD +wl+srHvIB7b6jACgqROBN5MeEGXQm+Gan2VSt+nvTZ+IRgQTEQIABgUCQuNVwAAK +CRATLknU5B7cflR0AKCTAlfhPFwHPXnBo+5IROopwNQnsQCgh2vHS9VRZRt5I9is +NDaNf1biCQmIRgQTEQIABgUCQuNk2wAKCRB1yqKj85s3UK9XAKCELi7ymxtLxdwY +fdfV3dxd63mV2wCgjgaUlQqFXjx5mXnRsgy4S6cS9yuIRgQQEQIABgUCQuRvFAAK +CRCM43a4HNSGH5/sAJ9JVHMVwBwHD8PN3DQq8hHEumn8twCfVQSXooNY2P744K+8 +k6lLO8nOH6GIRgQQEQIABgUCQuSSxwAKCRAEkTRC6hujjb+qAJ0Z+AoGDYe122wR +AOYAKayl9f9e0QCeKetoll6NZ+Rm/NKbFJGP6fYywIuIRgQQEQIABgUCQuXCIAAK +CRBhGWouMz5OhDd7AJ40l37cLZcSxfPt3M7/aOPgVGpa5wCfciaEynzuHDfIQD/v +tXrZb2m0+NeIRgQQEQIABgUCQupj+AAKCRCyvrxAFSkkrwQsAJwM8IqtXQk/TBiQ +i6Fyq/HHm5/zvACg5atZV8F+r7jVRhT1SJ+FaVsaQDiIRgQTEQIABgUCQuPtagAK +CRAyhk5BnIUiKwuyAJwOljL2++fVQ0BSKRvFSvS+fSu3KACeJxsOhbyCd3o3rqwa +VeY5FFi+Fm+IRgQTEQIABgUCQuUQtwAKCRBSeS+vmXivhv0OAJ0Sg/UEnB/IAoqj +HzKoBivCMYDtrQCfVY3IDKRHbbLNfWBSDERWCTpHXtiIRgQTEQIABgUCQuURpQAK +CRBrc6EGKmI/cqGBAKDEgTewzt6TjmCkI9RrYjF46a9H4wCeJPh4bmTymcfwRGn6 +0h0a9Mz1mKaIRgQTEQIABgUCQuaZYgAKCRBo64x2+OopZ3lEAJ9w4EWAgRUMxf0U +d1zoygYDQedAgQCeJPHSbk62Ej11NljNGN1zdwzRHuSIRgQTEQIABgUCQudhVwAK +CRBulHWUwVJDGkOfAKCgQM+50dTktJDaDd8gVOGBKRiSIgCgkT9gdtDac0m9s2IH +Aqktk0mc0U+IRgQQEQIABgUCQ4efngAKCRBmNbbA3ohd05uvAKCjMnn4GpnZhjWF +S7iN0LIXgxm5PwCfYodjKF5zSbIROx79dJ41Gg0/VxWIRgQQEQIABgUCRjjiyAAK +CRAVRbP+4iLeTznPAKCaIUKdiySarhu//zEVn67y9q/szACcDUob1L2ac1R1FHB9 +XE4fTf/PV1KIRgQQEQIABgUCRjjnogAKCRBj0K2ukRID5FlVAJoDhc0dijUvPmOK +ILkX6fG5g73DugCePsOrjW+YIc5+T9qeVMzHyfm2opuIRgQQEQIABgUCRjyTKgAK +CRCYcO/z8S9gctnJAKCc7DZ7JzXgaB4ImiwB2dyGMFUC8QCgitOFKEw1y4+V1dNN +3kZYL4P/M/uIRgQTEQIABgUCRjkauQAKCRDh4fKwmQ7UqvVYAJ9BjHLDyGmR56xK +lKF3qVq1+jAmgwCfQR+0qbVWaSIaVS1DCg8yUr2txOeIRgQTEQIABgUCRjxQRwAK +CRBMBCgYMRo95VO1AKCewEwAscfj9VfTxswF6BL6zNj8rACfW/3kG7zPI2dSjWJz +GYPQYPAa0smIRgQTEQIABgUCRj2gkgAKCRAuuUaCiIF0AjxRAKCu9kiQfvVmSrVZ +b9HK8Mazhut+hwCfY5guSOz96KH5dJ2585cm5wPyT5mIRgQQEQIABgUCRj3WeAAK +CRD1wmAWTO7XX04yAJ4/ZvOfsexCgIQRuoREg1/D9bniKgCfTcKh9dLFkPjlD3yI +w/NCc1L0/ruIRgQQEQIABgUCRj31BQAKCRCgctTQQ1jFhJmBAJ0TPZlIksq1EnAY +tTTSb/tHpXxNUACfd/m3jaTHdJljRXGI7UBsVHnL0nWIRgQQEQIABgUCRj4FxQAK +CRACpaYFC35s+iQnAJ0eGzB7NIQtXLEgyuphyW0nBppVrQCcDj6tm1MCKXA7f4zV +1R0u30jrUeCISgQQEQIACgUCRjj3hwMFAzwACgkQc92MFgFTAjV92QCeI+02yLkS +qmdJlMBVfVE9joT/pBAAnjJlywot38PS8FtodliCfNvqn6VIiEYEEBECAAYFAkZA +tkwACgkQbQvHOkBYGDcfVwCfbS6bS20V1ElnuQBAofsmi0yjbzoAn3eztrDQIrh+ +/BkXIJo7IF0Ny+gViEYEEBECAAYFAkZMRFMACgkQHyEjw2vYcqBPqACg1jy6peeP +fEuvYJEKfJBNG7FVwPwAn3y5/eBtZdRefj90FeIiS3dr3D3siEYEEBECAAYFAkZM +fQEACgkQD0UKJmIQv8AfLQCfeHzJB6tJdA4bjPEcJKi0sMFceCwAnAovkjdUhF2a +JrpK2cr4bZhm5RbhiEYEEBECAAYFAkZSb1kACgkQMsHW7w8UO8FdFACfSFzmzz3l +ZmB+qclUq7q+YVgd3hYAnRyNi3iYLUVrk746XsvzWcv8UonRiEYEEBECAAYFAkZS +b2AACgkQy66+OaRsTKE0LgCfYZfXtB9Er7iKXoDfhNuuDIdKmqQAniGNC3piLBCg +gMPpJ5vQp2KsptvJiEYEEBECAAYFAkZe1aoACgkQmobXzNGq6mC8pQCfeV2ib+Ym +o/KQ+jYsr1BxYVFCOmsAoO312vLgv8Q46hucGIq9aN2isEnEiEYEEBECAAYFAkal +TC4ACgkQOb5RoQhMkRPl4wCfebfolpLZYdGk48JuUwd2shtkicwAoMGAdNOSoXyn +I/6/b9jsxQl8qmwZiEYEEBECAAYFAkatzFcACgkQM81nM69exFIBlgCg0CUQ1h61 +lCLBjE9+/Kvskrh1QAgAn0gXeq1NKEuepDB6hQo7fVZrSpF8iQEcBBABAgAGBQJH +wH2YAAoJEBllhVDDEQYR8ZEIALAYFxipk7FfpDbEnUrTI237QugKjpvrX9n7CdHx +JLnwOBr1g2/e/RMgoJHH8yqP8iQPGMfZXCVLM6ME/EoUQAVT0M0I1QsBVxTIXyPq +QIzCv6zibLYyEXDlQDNVB4hqdhozzxyjGruqbn75zfb8mlTMoj9lElNhVIdcUOVL +2xHkBy6g/YpmuZb/pt4HXBOUyWkmFK8zBMxhXw5bOuOP2zSJk9rZt7wdKNj3iC+/ ++936yXZzqWFuUOq0RX61RtW8e3SJfowGFBd728snsiD0IFLTXor62aBfBJ5yiGKF +UBM8LQ27FcJasfo7a8SiBbJOO/OsyQ1lRvLS85kM+XZDXZaIRgQQEQIABgUCScqH +2QAKCRDJx5JOUQR9Zlt8AKCAMAc8652qgKVPdH0XJbzoq6ykNwCgkTboPY7d+GFy +EwNCHk+0PAmkPru0KFN0ZWZhbiBCb2Rld2lnIDxzdGVmYW4uYm9kZXdpZ0BlcG9z +dC5kZT6IdwQwEQIANwUCQsVK6jAdIEkgbm8gbG9uZ2VyIGhhdmUgYWNjZXNzIHRv +IHRoYXQgZW1haWwgYWRkcmVzcy4ACgkQohFa4V9ri3LW7wCdEc6hdCr094a8LG+c +hTd+OzGxfFUAnR3FvtuG8sv367Knk0ybMnpOM/4hiEYEEBECAAYFAj53pBoACgkQ +FT+gzXWmdpL1ewCeOSe7lOufhc3mfTXs7eSvqECt89oAn0VM+YgQHbfdVp32YE7H +t6N6GPf0iJkEEwECAAYFAj513w8ACgkQPo+38viDQdkP7QPmPZXPi7m6wRiLofsT +lHCbBrR+ehWoSSqCmHQjN1DGRtamGE6X8QbMIttD+NLp+uTx8j/E0sGUdPnWkky6 +fwt1f3AYeoAgCXNvPoewsC6mZn3FMdEo6vJc43FmhsUfumOtunvGNBnXdM8GSCJ+ +RBS/ASMjRrECF12/14xwgyyIVwQTEQIAFwUCPD7aNgULBwoDBAMVAwIDFgIBAheA +AAoJEKIRWuFfa4tys/4AoND5QhEdyVIypBvCUHv5SCaAKcd/AKDFthtZTrjF+eEY +lktPLRtI9zjeE4hGBBMRAgAGBQI+jc41AAoJEMppOXSBA6N+jAIAoIcAeCIKt2QB +PnAthnUk4DhlmM7FAKCA0Iz9ZutXGb2l+p8s7hhF3+Y9L4hGBBMRAgAGBQI+ddrH +AAoJEO7R6jkiYdBzi84AnRddvByuDodl5KaCSdpe6k9aYkLqAJoC/ud28X0M478K +lmacVVjb+PqzBIg/AwUQPnWqLv1viMYh0KcbEQJ6DwCff918LRigFUyEvYj04C12 +so87JNUAn0RNFw+P1/SR9Mr/JQmOzJVhlwdriEYEEBECAAYFAkLFMoYACgkQm/Ij +RS/ii8+wZwCfRvfW6NyBoAp7oS9ILRHNYh2GbhsAnRYGs1hSaGK4rGxm/fmqxj+D +vqI2iQEcBBABAgAGBQJHwH2YAAoJEBllhVDDEQYRqFAH/28B/f92MsQX9ZRJG1v9 +EDGVx1U+pcE16a7iplCP4QuUR6uA2EUe9fptzZfX2iT2nr2XgCB3x2NHf0rzNpTA +M3OtqKQhXdvS3EWzWqR8UaDf6dxKN57B4QONRIhuImf3m9DWFNwIr3oOtO25Q+tG +7YcZen/zbwU5O23CEakNsysxGEHn/3BPjRyA1FE7NVLrAmxFu8LXBUD9y3HNNetM +4WlucnObqw5cBFsZMtnGcVLs3suTAsxwrnBo7jq/DbZVvzUZtEkGdV7LpSWkivSr +q0+h9Gzug8EcYTjrdR6LFA5xGan6R9zrSe4mxe7vja10fmGEdIOQIapgO/iOWDR8 +3MG5AQ0EOxIiVBAEAM1SlkvEK5MrMnW0ybtv9eMCG89gqIvd2gBnpcAsF0sX+dCa +WHWNy5HL3dBak/G3BJ8+NzAksfL5Srm0LVKcfVjBiG+IsbUoSyeJQGuhSZXYcnIc +/3Z8Ujcs+TfFurG8uHU1cWnNK5aMYwDrqxmp4Ru0zLYHw4tHBBKF0cgFaCsjAAMF +A/49aSZuDaatppSaBOzCt7wIYCsGBxX5ZibrJqr0gLUbhXU9eaWzCawOWwCvpQN0 +lTjoYVkwiLZaYUkdqsSQgHAU3jjKlIuaIRXApEkTb8Jg7R/vNAdwXoZRLBCjZPGd +5qGtnIezsZ2+lxFx+bRieUL8fUInemXwWl8e23PMisgm+IhOBBgRAgAGBQI7EiJU +ABIJEKIRWuFfa4tyB2VHUEcAAQENMgCgnc22kj8TfjktU6u4SUUqud25ZZcAn0B2 +b0zPjKjGuiwdKSnkFbNcFS3g +=UxMc +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/C152431A 2005-07-18 [expires: 2010-07-17] +uid Steve Loughran +sig 3 C152431A 2005-07-18 Steve Loughran +sig 2 FC243F3C 2005-07-20 Henk P. Penning +sig 3 302DA568 2005-07-21 Rodent of Unusual Size (DSA) +sig 3 2C312D2F 2005-07-21 Rodent of Unusual Size +sig 3 E04F9A89 2005-07-22 Roy T. Fielding +sig 8103A37E 2005-07-20 Andre Malo +sig 5793498F 2005-07-21 Tim Ellison +sig E4136392 2005-07-21 Noel J. Bergman +sig 1CD4861F 2005-07-25 Eran Chinthaka +sig EA1BA38D 2005-07-25 Ajith Harshana Ranabahu (Made at Apachecon 2005) +sig 3 21D0A71B 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 3642CB4B 2005-07-20 Martin Kraemer +sig 3 2261D073 2005-07-20 Astrid Kessler (Kess) +sig 3 E2D774DF 2005-07-22 Sylvain Wallez +sig 3 015AFC8A 2005-07-22 Bertrand Delacretaz +sig 3 E41EDC7E 2005-07-24 Carsten Ziegeler +sig 3 F39B3750 2005-07-24 Colm MacCarthaigh +sig 3 9C85222B 2005-07-24 Henning Schmiedehausen +sig 3 9978AF86 2005-07-25 Christoph Probst +sig 3 2A623F72 2005-07-25 Christoph Probst +sig 3 F8EA2967 2005-07-26 Brian McCallister +sig 3 A99F75DD 2005-07-21 Rodent of Unusual Size +sig 3 EC140B81 2005-07-20 Dirk-Willem van Gulik (http://www.anywi.com/ - Senior partner) +sig 3 EE65E321 2005-07-20 Martin Kraemer +sig 152924AF 2005-07-29 Sander Temme +sig 3 87315C31 2005-07-23 RaphaĂ«l Luta +sub 2048g/59066D7B 2005-07-18 [expires: 2010-07-17] +sig C152431A 2005-07-18 Steve Loughran + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.2 (GNU/Linux) + +mQGiBELb2+oRBADhgEV29jhAMg4dFJN9fjeIjN7+J0Lj3rcLBWc5RTlM33DTOCFM +BCIE9B/RXJuVhGgi7fUuB+WsHz7XMgZRn+5nqIKGecIxwEUtZCfwsaV6Id3abt30 +wccyYDTSV95gQie+bbwWF44ao7n/CaR1WUU/Nx5b26nY2EzOrQcgP1qYEwCgynnc +NU1N3zd1cIYr5hQVqvdazKsEAMbYAm5WsjBlLBrolxs/smx4vxZYJaA3gUqTz9WY +D08rDsotVIMoosYF0b4b3WxcePJ68N1pkF3U+zo8bIZJThT91nAfMh29ZAcSyRqg +Mkd25OcrrjykeF7OavuFSwhvYoDdlwsvkuijHY3weXyhpjvzi+GzvZoONo3zSl4g +aWncA/4vu6k7XZUZ6B9DbJLJ4Xqq8uhD7uT4417uCQdozIWgKE4ThM2WffhV2IgY +W6IXg+o6AqY1qiMLSYYdeRsVkQ/GVss+sR++cbsO5ijDGfvlWPfGxIcA+P+alAwf +KY9M45IB8E92DUDru6ImrDHMeOrlDNPRusxRyZ4SiSJYNcgBtLQiU3RldmUgTG91 +Z2hyYW4gPHN0ZXZlbEBhcGFjaGUub3JnPohhBBMRAgAhBQJC29vqBQkJZgGABgsJ +CAcDAgMVAgMDFgIBAh4BAheAAAoJEG6UdZTBUkMaZugAnjJVyMa1FYEm/9811Whm +K06kGzXbAJ4rgRTBOcuyVbmbOAeYCgqloOxky4hGBBIRAgAGBQJC3rlGAAoJEIuW +KUP8JD88RewAn3LmpnmnLlYnlQW7+byITmKLO9gwAKCi0GGQz0QUq9tFG4YeF7Rp +UCl8ZIhGBBMRAgAGBQJC32y8AAoJEFCOrsUwLaVof1cAoLX3ROO9ufH+QXYlBuy6 +HA5SgofAAJ9aON/jC3WmrxT9Lz/DlIBKVI9TZohGBBMRAgAGBQJC32zBAAoJEN26 +ZLosMS0vCycAnjFhGc63FoWHwzpfVoocrBm8yQTHAJ47Kle1Tr+fBnlkYsAg0xY6 +12VZ9YhGBBMRAgAGBQJC4PEqAAoJEFuWgBDgT5qJY6IAnj2jxdReXh3eBRr+easP +bboH9Lu0AKCSoT0Gt+pM+G7XM8vQbZjsyjDhrohMBBARAgAMBQJC3t+3BYMJYv2z +AAoJEMppOXSBA6N+4VAAnRfGDGvU4qDop0EdApmHCExFDHFDAJ9/3xZDnJjEeSGr +l2JyOPJfbv/k0YhMBBARAgAMBQJC30/tBYMJYo19AAoJEEHqCaBXk0mPRKwAoI0M +FDyhr2PON57N4614Po16a9ZNAJ0SGKJtMOIxgoDHSf6SYuFy+8sBLYhMBBARAgAM +BQJC35MFBYMJYkplAAoJEAEFZrzkE2OSgcsAnjKv4POPmFUYhDGH+GCcxSyM9LPo +AJ0TPnoLf74lUroWD5+rlhTPD9eMHYhMBBARAgAMBQJC5HvtBYMJXWF9AAoJEIzj +drgc1IYfdCAAoIKybYLGd4yGE8NcrvnGaPSXx6NXAJ4zrIPA9tQu23tOHarZxSqg +7AWGh4hMBBARAgAMBQJC5JCBBYMJXUzpAAoJEASRNELqG6ONWZsAniJvvMiDR61N +rV5Y7xx/3/id/ekWAJ9MNUUQAXTES1dkywQVHVp6C8QFvohMBBMRAgAMBQJC3rR1 +BYMJYyj1AAoJEP1viMYh0Kcb26oAn2JuF355Lq6PIEvnhEr+SA3noxS8AJ9msBXz +nHsORsz8mB4WZ4DMAYEH0YhMBBMRAgAMBQJC3rvoBYMJYyGCAAoJEDLJ5M42QstL +Cu0An2vCOimm9iyRJekvlh7IcsrXVDksAJ9S1iVXBgyRuWBkbcuRk9OLs/TnwohM +BBMRAgAMBQJC3twlBYMJYwFFAAoJEO7R6jkiYdBz3gkAn3b48pHpjPG5DCbfp0oT +/WN9IqYlAJ47CLk2xg7e8N53WTmYfL+F/c/ZrohMBBMRAgAMBQJC4O0jBYMJYPBH +AAoJEMm1puzi13Tf+KgAnjviBj4kvC9ABiWR70t4BU3y8kgJAJ9qmj71qWjrek/L +Cb3+fAmlASx82IhMBBMRAgAMBQJC4O20BYMJYO+2AAoJEDf2j/UBWvyKJywAnjSC +smaB18utPgHthVW0qDQ+DDmNAJ9a64uKqcDI7u1cDEbi3nL5ELztCohMBBMRAgAM +BQJC41snBYMJXoJDAAoJEBMuSdTkHtx+SyUAn19MjVdnPdxKdiXjpMRWwOs5fhTL +AJ9AGh+TvyOt877cfLVaywPK+GhN0ohMBBMRAgAMBQJC42UQBYMJXnhaAAoJEHXK +oqPzmzdQe9gAoL7BugDd1NniX/ZNqs0aD7Y1uUfhAJ0b4p34ZYPWFg1CyUduwYlx +MAOqo4hMBBMRAgAMBQJC4+3gBYMJXe+KAAoJEDKGTkGchSIrHl8An0ERlWCCDHYy +0jlbsVcQ4FOS9qe6AJ4sLF02AltG01bK1kpvnKXxHFVYoIhMBBMRAgAMBQJC5RDw +BYMJXMx6AAoJEFJ5L6+ZeK+GWEkAoIl+GM1cgJosSMsMG0NqXog9yqeKAJ9aJ0Xr +j7JP5abRyjROroIUCUcc4ohMBBMRAgAMBQJC5RHdBYMJXMuNAAoJEGtzoQYqYj9y +IawAn3TzgRnJPfl4gg2kwIlJtD/a4ql5AJ43+Bbg3EWh2RVaLB7QpA1pAsRFB4hM +BBMRAgAMBQJC5pnVBYMJW0OVAAoJEGjrjHb46ilnWz8An1WpumoYARq3Le1VG0vu +SkQcdg8SAJ488MHNQRq2fyQFk9uIstWriQfa7YicBBMBAgAGBQJC32y2AAoJEJrN +PMCpn3Xdsl0D/j7J+/vobH/4+pmWCWv3okqBbbd9PH/NJTC3B7KU+p8bFdIIZWYh +n9SPXRdLoUlbKnqYw6+x0Ktn/9oWqwTM2b1bOHoMEUy/hPDM1ZK2gGDU11BFbfC4 +zkXowbq2xCHLyaQXqj5Wju01PT/wj8bw5A0E2rzv2iUA2ilXJE1vQdx+iKIEEwEC +AAwFAkLerQ0FgwljMF0ACgkQMaY9luwUC4H6jAP+L3lvntIdecj0QlnD4gTkdLn+ +nbOPT0G9MPSjA3ML9Bqeoh/uD2TeHS0dqb67DpIzhKV/zu6vrOhsXHXNiCjR4lxR +YHBg0PoxLJkggpjdAduk5vcM2ZgRJZQojsQ9CunxnmA/YCRCEEUPFeKj/5p1aFGm +uPsl2zwggHxbdOBY1maIogQTAQIADAUCQt7IywWDCWMUnwAKCRA34/Rf7mXjITNS +A/9YB8srHD2WbpZy5P/cN6WjPshYgx0lVFOifFdXgD4AUzgJ3VmtH1NI0Rkgadcw +8PdJYAynH/Hdz4PJ8wIEkmMFEe6TKB3BCjCGY8+Ti6R/VrlkizIGL0HzAUzNc+g2 +D1NI8725Idx+XNSOSBcOBZ3mwPVo1k67X1rF8BoYAeo8TohMBBARAgAMBQJC6mYn +BYMJV3dDAAoJELK+vEAVKSSv8BwAniQzr7l/ihVvAhvNUnpJzFWfr6tfAJ93Mama +D+Fz4kgEVjnO5j8MrM6JtIhMBBMRAgAMBQJC4mNBBYMJX3opAAoJEG2YjReHMVwx +Pr4AmQGWlApW3C1VbkuRgVs8pj6/ejXqAKC1z3D5mMpj83yyejnBjxDjXTLsUbkC +DQRC29vxEAgA05PNdXcVOSTsYuizTCbdBU9i3qUBkAyqPmDE6hkWI+7fnr8KAUUo +UghWwhxqBngpv48o3mE+bC+l/cTH+DuHIOsszpSK5ydufyitXi7piYk4RS+UNbyl +b4BU5qGodwWwXC9wKBIjXL5rK2KjKh4Ovh0WogtZ1fwc5NzQkjcfbner9WsAmjtd +nmVV2vZhJdDlxf3BBM9ai2R2IRvfhF61QFZcr2ehqAdsiDix8p0ugpC/oQS8h8pg +GQebz7aNeSjh/Vb3dsdo8CaLvHp1nM5aVCDRqoCfoeKUbRfwwwKxtc1cyYzOHD1f +KG9BuvtL4y4JQ/gDCsQVKdAAoiktu8Ks9wADBQf/fGkVYIh7w0+8xSIvez1DKirX +rl1J3XNvOYIa1qlBk65hllXnFXeXqoOLQpvygcwNRfil3AGcpwzwlNloem3ozjnt +IFvYJYzB6q4SMl1/a5uLrcc2frq8tbG0RhU+ZEhWR6sIEOBQhkKZ9LZbJ1tK9buJ +M0meaIt5gVLAVbI5vf+2Lvmlv0+E/a4Zn2exl1RcBYATNZT1gC55m0z5PMzG6Bc4 +tOAhPEo3WpfNjIrFeXcB0ksk4mfDIWKlA0mc8A+faKSSMdiDpeU4H4uZy5pE/hVv +2VyE3Ej5PoA3DajRzgQ69YlojTYnfnPyJErCBZhtZXTtRY7aDm9/xBT7FZ06RIhM +BBgRAgAMBQJC29vxBQkJZgGAAAoJEG6UdZTBUkMakjEAoINKV6yLAdbBhXhvMsqK +0N6XOghJAJ4mSgdwgv+sIOaPKQqCm+PL2M0lPw== +=4TlI +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/AA0077B0 2006-06-13 +uid Kev Jackson (apache key) +sig 3 AA0077B0 2006-06-13 Kev Jackson (apache key) +sub 2048g/8A6DD738 2006-06-13 +sig AA0077B0 2006-06-13 Kev Jackson (apache key) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.1 (Darwin) + +mQGiBESOfuoRBADiCLjvY8EG8cDrfNvPaVJr1/8d8GDoLjBCeJWl50M7j1IQDB+r +rzBPXOzhoqiNRbZMkpjv8ofa5hVOQitVS4B69FA07RbuiQNTKg142h8ogtJeAI1g +eXuTZtmGE47TOpj7FMG8bHOmoJdQMkzUsdOhEAyqRu4noknuuIKgsE1kYwCgnhaH +9KBlpKaRG7Bb2BH6da+wmKUEAIaBeZ1aSQodUzDqnGjCd4hZbpzjyWg7O5BylNhK +ogMY95BvwFRD8WFdSvhvH9VKBtSuNqg/6gIkqAljRRESVxL4QrzlYSqF513kK1ds +lUTmqU9Dvaf7dkH+MYnkPVTP5tMZVCT7HEt4F6HcqlaZKlz5jsu3R53KBx6XZATc +SEGbA/wOournJ64We8sXTJGHFupvSLBy3nh68mPLaplzTnH2al1DLBnoF2giC32v +ZGG+e12kWE+fyyQ3pdAIRHgVjZ/ckPmcmxnVcYrhzbgV99fo2+JRh2SVrLrmvw+G +CKiUtNHn0HS1klBKSj+3ML1AQQlbyfrcVSf0Fefug51BqoqU+rQqS2V2IEphY2tz +b24gKGFwYWNoZSBrZXkpIDxrZXZqQGFwYWNoZS5vcmc+iF4EExECAB4FAkSOfuoC +GwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQoL/5PaoAd7BnTACff9f8Y2RFB7O7 +Wjncyb1XbEwJB/gAninrR0isW9jGx49GmSnQCjtO9k34uQINBESOfzMQCACP+GP2 +x2nE2JxjUUjj16ftOxUivbL8L9ksplx41n7yeRvu+RzOXcjlonuld0LYxprNsHGv +mbAoZj93QozHQIMfC2kfnia+hxCcBPMbev9RPCqgogpb90BtV0f9HGyWXs2QTgWG +R2hyjq/RpwtA3obSXw3pb1CnXW4stV65WAdd72KDc66wRR1gmjxKQx6b1dGcC+E4 +HyOgu2CDtr1ULPeI5U4BA4y8FLgDfYwkxp6vj5ViegGP7GlMa3bSgNRGsYX7VwgZ +pmI8WY4B5k3/Pyv2Toe6/5zTmKH8WlyZd00ede/tbFTqQLg+EylAcWJ8c3asood+ +SjCwTuD8l8a0wpO3AAMHB/9GXkbBUE8cbMTaS4yj7UL5iWRVhSPo9IzMSrzaXmZN +8ykX96ud35BCEfmYgty3USMk90Rs/PbwB4Mh3h1ZTXqRWcfOXzJ8kMabm2RANyf2 +H2DvGKoFPtpX/9I13vo9qRLRHVRENNg+3JCa1ii8cq7h8bWvTT0VxX/rOG0cl8nO +XkHTUARR19cGPf6XkHEcl+u1pAxIJGqY/gVowjyFGZs+RXFl/q/Vrgu+lvvxmryd +yEdeGdsBvQ9M0KKr98w1RiJnDUkSqI711xwlVk14Uu6Xke0oB3bbpe4UxD52avAC +yEzYY7vbpe6XS2+dOcZxWE3eur6SfsucAkj4Ib72mchhiEkEGBECAAkFAkSOfzMC +GwwACgkQoL/5PaoAd7BQAwCeJFb9yZvOWfdf73A7t2MvPXn1y6kAnRquMmA5eVdh +HbAUXWyYuT2OHOSD +=F2q3 +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/DE8884A0 2007-04-27 Xavier Hanin +sig 3 DE8884A0 2007-04-27 Xavier Hanin +sig 5F298824 2007-05-06 Simon Pepping +sig A99F75DD 2007-05-03 Rodent of Unusual Size +sig E222DE4F 2007-05-02 Mathias Herberts +sig 911203E4 2007-05-02 [User id not found] +sig 302DA568 2007-05-03 Rodent of Unusual Size (DSA) +sig 2C312D2F 2007-05-03 Rodent of Unusual Size +sig F12F6072 2007-05-05 Fred Vos +sig 3 311A3DE5 2007-05-05 Ruediger Pluem +sig 3 88817402 2007-05-06 Thomas Vandahl +sig 01530235 2007-05-02 Luc Maisonobe (SpaceRoots) +sig 5F6B8B72 2007-05-12 Stefan Bodewig +sig 9C85222B 2007-05-14 Henning Schmiedehausen +sig 4358C584 2007-05-06 Vincent Hennebert +sig 0B7E6CFA 2007-05-06 Sami Siren +sig 4CEED75F 2007-05-07 Nick Burch +sig 40581837 2007-05-08 Nick Kew +sig 6BD872A0 2007-05-17 Michael Busch (Lucene Committer) +sig 6210BFC0 2007-05-17 Jean-Frederic Clere +sig 3 990ED4AA 2007-05-06 Knut Anders Hatlen +sig 0F143BC1 2007-05-22 Matt Hogstrom +sig A46C4CA1 2007-05-22 Matt Hogstrom +sig 152924AF 2007-05-23 Sander Temme +sub 1024g/A5EB8D3D 2007-04-27 +sig DE8884A0 2007-04-27 Xavier Hanin + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.3 (MingW32) + +mQGiBEYxng4RBACQpDi0ebPGdHVAdV14aK47MzFkFJEbCisBgcZ2OT/pyPjVTN+9 +Q3NtIusVuY/yEeO4+tb+YTbBiwNsx5p91Rder0prBBVPr9TGN8bV81hnSHfVCR+O +oqrLj2Onv1qsMslOuZR2m1d/i6cFIKV0CV9EWOcEJZ6UEP9CXP29ZzjdRwCg5NgW +YfergzvpVtON0E5UvjFnGmUD/AoWhJ0CRxw8xj/EAGS4xXO83Ydf6ucu2PwqUOSZ +N2mMWyBpr12sQH+iMjWJW25GNobwJBKzfvrojujvlU4uyNIyD40sPeH0UrTwLbL/ +Kek9zp9NxZ9wawjzZvdp8sdrOZ54o59/7flAjL3iqJRtLQSeyQsfZaOSNRxsAUiI +obn3A/9SEtJdF6HM6C7V57WdKIHv6uVocdZNN3zig2T9uP2Uq1VMIEYtllRNX/4V +9Vq+2KdV72DnlMuZIA++o1n57d/LgUmbDd72AAZGNJaFq39CV9YElXziO7BVOjAg +MH9kNxCywcjcw8EFa3NCFcOKMESBn5sHu1nw/Iu1Z9TtagnJwrQlWGF2aWVyIEhh +bmluIDx4YXZpZXIuaGFuaW5AZ21haWwuY29tPoheBBMRAgAeBQJGMZ4OAhsDBgsJ +CAcDAgMVAgMDFgIBAh4BAheAAAoJEAP2jL3eiISgw0gAoKcAgjjfQWlqnQNRJQ+8 +A7H5ioIZAJ9qApxb1iH8ulGHjiBOjiSgQq0SNohGBBARAgAGBQJGPhhDAAoJED4q +b8JfKYgkB8AAn28euVJz8OQZvoSw89voHvcVzewGAJ4lm2R0FCSIRfmHCl+5aSYw +TazeNYicBBABAgAGBQJGOgiqAAoJEJrNPMCpn3Xd8Z8D/1Z/ml/qcIf1yDiYQTu8 +O+/so0ZlfTYlEF6XrW6WjZDIhNVAAT+Rk1E3q+FvZfMq1BV1mubsCXRtcwt1Br3z +MWIuJ7lBZl+T1Nu2sxH9H7FAvY7Bk8p5WecIaVdNyFxC98vGYAFs0aRRGSeCFbEu +oW5XXxUAkkWpIT/aG2y3t4G3iEYEEBECAAYFAkY45CgACgkQFUWz/uIi3k/mCwCf +WUNeKG4a3hgDhMOyZ1FGFpDnle0AnR1yXWaEazJD5wyTtnnSE/Ajk4L3iEYEEBEC +AAYFAkY46MoACgkQY9CtrpESA+SOtgCeMIh7BKJeSezB+h1JQmUyg6EuNWMAn3pN +aMYYEj1LL8R/2ZxBNbU9njNXiEYEEBECAAYFAkY6CKoACgkQUI6uxTAtpWhrvwCf +c2uhmeog5475d9hTQg94MqEo8cEAoJOp95BdZ7xd9ayJwL4LmBVYaIMAiEYEEBEC +AAYFAkY6CKoACgkQ3bpkuiwxLS9rvwCffwzrqfIJghWUoXhJsa/m/PSLiogAoM3j +x2xt5sG1sQQbzM+U4VHhRmWAiEYEEBECAAYFAkY8xoUACgkQmHDv8/EvYHKBZgCe +PkYoQsESFkBkVyiSVueICUvg4G0An3rqc8/Beip9a2YF+7UYsKKJ1e5OiEYEExEC +AAYFAkY8UYgACgkQTAQoGDEaPeVNwQCdE4UB1RW+mjtYEbgxkZSjdaV3IKgAn1Sy +hoOrn3S20OhaZht5Y0EksVVEiEYEExECAAYFAkY9o64ACgkQLrlGgoiBdAKz3ACf +RkJXrvpQVQlk9//+O0W4BvggGxMAoPyvjRXm+Ie+nPAII74kL7croRWsiEYEEBEC +AAYFAkY4+5AACgkQc92MFgFTAjXIMgCfXfRlxPUwlzLWotr0BGQVK39JXyEAnRht +cgH/yscqbkvi2JvaVWkV/T9JiEYEEBECAAYFAkZGEjgACgkQohFa4V9ri3KpJwCg +4v63DT9Ll4+mqnAC1/HWIgSfQ8sAoN+EQ15zUuI0nuSyG6UCw/UUZX82iHEEEBEC +ADEFAkZIxWEqHEhlbm5pbmcgU2NobWllZGVoYXVzZW4gPGhwc0BpbnRlcm1ldGEu +ZGU+AAoJEDKGTkGchSIrkUgAnjI6jBaidqIjKhusVm6ihmG6LEIdAJwJnc6YRNyY +88MWtd0XRghD6ST174hGBBARAgAGBQJGPfdgAAoJEKBy1NBDWMWEYEYAn0RS69vJ +1EVod7WxAecb0F4tyJcBAJsEnTiTRMoNmJmRe6w3WqhqdLQUeYhGBBARAgAGBQJG +PhN/AAoJEAKlpgULfmz6aJIAmwcQI5XDWrLDzSFRJFuW3F1zl7P0AJ9GQYDvu4mI +c9ZCcaLdukbY2e6FGIhGBBARAgAGBQJGPyoEAAoJEPXCYBZM7tdfbQ8AoJVSPa3g +Cmc5ghLz1X12r/QBHPPKAJsH6g/0hcAou2ZUfVhOE7VJhpeGkohGBBARAgAGBQJG +QLz1AAoJEG0LxzpAWBg3cXAAoI2rKauHeIDRwh05S8iNGKTtEaPMAKCMHrqbLsbl +0P7XxTpZ4EKSvOkQ6IhGBBARAgAGBQJGTEaDAAoJEB8hI8Nr2HKgtRoAnReqmHxs +MbATTtCEF+WbTqREe1+JAJ9pM5VmM/Apfh1hPM8i55Q96BP1h4hGBBARAgAGBQJG +TIFwAAoJEA9FCiZiEL/A4j0AnAsAjAu6nDTd73TM3S80JtbuatX8AJ0WBRJk5ZZI +TmnMyz2yp6k57tyeRohGBBMRAgAGBQJGPbLbAAoJEOHh8rCZDtSqCOQAn0SVan9j +r55MJrDGk8D3M5pQvTd8AJ9uU45i0OQUP+zY5LSacNtOzSy6MIhGBBARAgAGBQJG +Una1AAoJEDLB1u8PFDvBK+EAoMjrujpsE1XQs3YxDwz5HHSWv9E7AKCJLU0W2MbF +OIgs9Smxz2LbuYH7lIhGBBARAgAGBQJGUnbGAAoJEMuuvjmkbEyh9uMAoJ2fBgZo +2kl+jOzhQnXHHDHzyLyAAKCR8Z6tloKXkhPRIV/N/OjwIW0i54ipBBARAgBpBQJG +U8qkIBxTYW5kZXIgVGVtbWUgPHNhbmRlckB0ZW1tZS5uZXQ+IhxTYW5kZXIgVGVt +bWUgPHNjdGVtbWVAYXBhY2hlLm9yZz4eHFNhbmRlciBUZW1tZSA8c2FuZGVyQG1h +Yy5jb20+AAoJELK+vEAVKSSveJAAniq8wB4b/DdGTK9Ygmu5Y76tqsw/AJsHGkn3 +5JyiHbXCvVujWmPtY1/OZbkBDQRGMZ4PEAQA+T0YRtd2aeXU+AOJnrhChy0dptVt +CE6PW9LrwZGqeV4THNWhdYuWRWlyzgU4HSfuk1Svu3WKMbnwp+Fv8fU6MmidOvEJ +p9IV1l4DidIXyhAacwpCN11hXvj5cHdF4KhJr/NG9oedin6nQoQFRQ7EfkUjAXOf +MCZnSps9XBJdy3cAAwUEAIGrITayVmWfUgjPvQg8L+4R2i31XQ70HIELQtYDs0Ln +iWrwZuO+aLI6Jw1RbZii6DM2QsVdZj+v36S2KJTvXeJVyb51d0uXYFxre1uCZrb2 +I1Lle8v3GVQvlrTpmZIPhOTotskKFWUCh2jqgLaEvJPpRWgIRXPF4g12nBXcLLXE +iEkEGBECAAkFAkYxng8CGwwACgkQA/aMvd6IhKDVtQCeKdUGQS0lD0nAJsGiSbKg +gLwEM0sAn0dUIIsbxE0fTHQVIQK4bII82UhZ +=jwNf +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/B80602AE 2008-10-22 +uid Maarten Coene (CODE SIGNING KEY) +sig 3 B80602AE 2008-10-22 Maarten Coene (CODE SIGNING KEY) +sig 5F6B8B72 2009-02-02 Stefan Bodewig +sub 2048g/9C7184FE 2008-10-22 +sig B80602AE 2008-10-22 Maarten Coene (CODE SIGNING KEY) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.9 (Cygwin) + +mQGiBEj/pNYRBADN+YqWzDBLrOgiUCul5TWVLgUReY2VMaWh3Z732AMPJb1dlbtW +B8sRqyvtQxKIPIItl6oaom5yzuqc8leXQCJBVRnnBkv8cMomhOD/AuzaA82egttI +C+CHt/akaUPhgrzhry7TZ7lVtJZ04FJ9WaE+LKAZcnlhCWOSF330pRB8bwCg8E5k +4TF9z2cmwfRmMwJxruRpN1cEAJ0yo22TkjSksXFmQf0eKVEPaHmrsEjNzIECcz8m +JrggYDfXIgC2s758D7uhUTlJM7u1L2KTZmiZgiFp6WOw6DnPlBf4PRD03038fAQn +rGtfC/B7DcgMLS4tCPlGEyeh9H8RphaVSXVCN5IgRV4x0vIhyx7kVz1ZWbAlLEQx +KHp8BAC3/K9yVkRDa6m+HAZvRP60zxWAwIdiX1R/9CCRtI4uSaLz1Iiw0jni1YkE +tFe+z5PNa89Dy1bgFWJKxtG1jQVfHIt6nEz2C4z3Xk02+PxmJH/Dj84EOiLfxzvp +Hm2hA57GrNjJuvG7C7GVFy+bQh8DCkzJfGAaplSgzqyVmP/l5bQ2TWFhcnRlbiBD +b2VuZSAoQ09ERSBTSUdOSU5HIEtFWSkgPG1hYXJ0ZW5jQGFwYWNoZS5vcmc+iGAE +ExECACAFAkj/pNYCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBb4LqMuAYC +rpMmAKCNSdXDiaOex6L8UmKiGbkEah3llgCgotsI/YjRzQNSvmGfqrgkch6f0tqI +RgQQEQIABgUCSYbTIwAKCRCiEVrhX2uLckjKAJ9f0JEsAJIJDn80SMIHaEXhJj9N +tgCeL29JGbUoYjTq8LpoMrl3ZhDaqEy5Ag0ESP+k1hAIALRxgmE+fbedOgRhLl4w +pZyt3A/EXiZBY/9UDRAWpviCp4S3cQ5cjhv3glj8IAHw2ntuEJ2ksjG5r/swQ38z +quTdDY4YT/Qd5NDlSX+KOGL69mda6kFFiNeJerDcM0FPjiV3MWcNp4IwJTs45EX2 +ep17a0oUG2AhDjL8c/32elHzXtkzoMPQzBWqHdTO4gkp/2iLw/bTpfEJLtWKsWJS +lgnLobisAnWjFBo/NgtjxaxGjwIjTn4OZNQaBi3P46PP9FEj4Hp791i1YvkBYrIg +BaQY96Fexd/7FKyvBefUmlxZPyY7I/OI11KWifJoSj1qPxZb+90UQN2r9zySDdpQ +h0MAAwYH/jkSE2KTx5R/vU+bnz11Kx3NRq6kxCQBGUclPGgUxk7iSWfHggQ/0U3m +1TI8GL687dwb8AO+f2b4nov4g4umdoddu9gPlHvpBcQ1BGx8JqcWJJ+F7lWUeVw+ +bqp5Qcttm9ldw1HEbUF0l81VFpLNDV6p5z3zrXGE84fk2BEMzD23IhMwNnWDsDVu +2S46h6BuK8sdTzgP5GTXw/7c7xG2zgfMHVUBWtuz5P6D8vl9gHu6unuLIcKspOgI +Vl2ygZ2VsxGUscyR9soLrem7hZaaQJfJqH757X3K8SuGZY36mH69Ziwzs1gQlof6 +bgumh74P8Xu+StvFwdZn1+aFsqcoDwuISQQYEQIACQUCSP+k1gIbDAAKCRBb4LqM +uAYCrpuxAJ9NYy3kPGHYAZuFSeygBt3aV1acGACeP9bIj81YOQn45Dvgmb7zqYBU +g7o= +=jpcP +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/3B7C75B1 2007-05-29 +uid Gilles Scokart (at apache) +sig 3 3B7C75B1 2007-05-29 Gilles Scokart (at apache) +sig 51047D66 2009-03-25 Tony Stevenson +sig 01530235 2009-03-26 Luc Maisonobe (general purpose) +sig 6A017B17 2009-03-29 H.-Dirk Schmitt +sig 5F6B8B72 2009-03-30 Stefan Bodewig +sig B1313DE2 2009-03-30 Robert Burrell Donkin (CODE SIGNING KEY) +sig 40581837 2009-03-31 Nick Kew +sub 2048g/82AE20EE 2007-05-29 +sig 3B7C75B1 2007-05-29 Gilles Scokart (at apache) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.9 (Cygwin) + +mQGiBEZcIBkRBAD5fm+1xVyIldiodrRlBF+LIcyKhX/tXyn7BL82cf/8UwxHdcqm +9/cihYQH1ywj3fiVEKdnoHWTtZyvNtA2c2JUUJfqlD81SZKi+pnRzDpnBLmliaYN +CZNo4jlk5/Ft3fWjHe3pYISDrJkMsbfdN59CHtgor88UVaTRANIrc044RwCgv2p4 +kZjazZhUnALYfUGBKTiMnhsEALk8pYW3uVtk7Qlor7KNx5YfSmaIxi/LQnk9i8LQ +r+N0ZA/vMPMxwA7l1hsuQA/LgElTzS5E9caqVP+n+RL0wMNDfova5tar8LgGa8Wl +GC1A4aEF3DUTLuKwdW20ZV3ai7ROaoDwGcMzxQxJwffMVlsto0DgX+cw17g6ld2u +/jpABADf6DfQn170yeCwA7v/iQcSau3vDquMIDGCfE7USUEWop91pi9hs7lEkoDG +V/uDC+XpT2jFD6z4p2bhdD6CL3xXk1PbR/4W9Z/hzQQs7IeKtxb2ZPUkmTGkHa1b +1AXBjk0COaYbFMDHC/1M7tSJVitOjJgn6SzvvpebPzZCPPJhu7QwR2lsbGVzIFNj +b2thcnQgKGF0IGFwYWNoZSkgPGdzY29rYXJ0QGFwYWNoZS5vcmc+iGAEExECACAF +AkZcIBkCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCusBoVO3x1sSe3AJ42 +g9VSRlSotQF09SOUOSy+OT09HgCgjdxpDK9DePZJQqNvFiFlVHosOFiIRgQQEQIA +BgUCScqJzQAKCRDJx5JOUQR9ZnA3AJ95e/9F+PbyG644fqHRbNRaoPK7IwCgklmM +i91C3XHtkJIFlkIcrSDYmauIRgQQEQIABgUCScvpOwAKCRBz3YwWAVMCNefhAKCe +NXk2pgPR+IQ5DTynLD9I3zpt5wCfSslyVN1eFyOB98cAvcQ6ZSvQ41CIRgQQEQIA +BgUCSc/ynAAKCRAkwaN4agF7F//ZAKDlEUat3dBPe35MUAd+nLumAx0IwQCg4wsJ +5gf8UUWQGRn9kQqoCpENhXuIRgQQEQIABgUCSdDLeQAKCRCiEVrhX2uLcs3xAJ9f +MNVQ2cvirIAWAWBOWNVxRuBVgQCgmxIdCpUQxXCB4wJkNjjTqY5X+KGIRgQQEQIA +BgUCSdDjEgAKCRDVM051sTE94urLAKCc1IeUJf+Mjssykz1bz9qCoN9KCQCfZ5+q +4QJxgiOzLSjvNBSBSKrSdUmIRgQQEQIABgUCSdJ1/wAKCRBtC8c6QFgYNxLjAJsH +jscYS54FPhD6UQrm40U4hRKD8wCeODdDmprYA+G6BBF3CM7uXK4H2Mi5Ag0ERlwg +HxAIAJXnRz/mS9LlEoHKCvvoY58OAPIjaSqfdNLWGBSjXOsPKSRIb44PmakBGp8r +xCZdgwIRv/qHzkBVjiYD0k4XkftCwrz2yGkzcIgXl6kW3kCkwkrNckFoDmTCGshP +BuTKJctwIDWQW38ORfObOs5dRCzmvfI6S75JYUAi/EEHDtXuo3UjLPEWVEA9xoOn +kUo4MehCRgOh40J3GDyeOaC9/2aXOBLOdNJpciyX/035/rxxIE+FgwYVssfnmph7 +rguczh1VXWtP9URTUHJYis71wCjil1AYxHwTHg791pwde3JifieyNYLCUK4jS0XH +RybeIzrq68pHQGVakrV8alIf86MAAwUH/1PtIDR2YthX7Mwo08H0DLaDpU5sioAg +rU6NytREJR6VHDgRlwFn4FT1skx0yZw4TjoOoHfs5u59pnalRjPitpWPaNRK2Se7 +HsWv83nCZVqXxgi0Zr5xsNdeohOMcKlFhJfu7Q4UgCX9RjMDFVBWdPeeU2vNDdMd +B5XgmQIls7bq6skeX2nZCa+R1M2QK5ckd+qOYGj1Qu2eJbfq0Tgo21s3tgX5Y1nD +wD3VnBV8oqfUNanAnp/km4XlWwI8dk6f5GliWJ7/aKFOkg5IoAjJ3CPfLBrPC+ns +TEuMtaOLk0Bb1rIisXn7Pz4b3EpzetD/lJdVahLy5Ko2lE+OQW3sFJCISQQYEQIA +CQUCRlwgHwIbDAAKCRCusBoVO3x1sd/FAJ9xjqbygtW21vUNcztbWJroKaL/DACe +PEZ4/iF5mYiEb2kEZmS6aRhVxuA= +=w8bP +-----END PGP PUBLIC KEY BLOCK----- + +pub 1024D/7BF8BE8E 2008-06-18 +uid Nicolas LalevĂ©e +sig 3 7BF8BE8E 2010-01-21 Nicolas LalevĂ©e +sig 3 7BF8BE8E 2008-06-18 Nicolas LalevĂ©e +sub 2048g/64443553 2008-06-18 +sig 7BF8BE8E 2008-06-18 Nicolas LalevĂ©e + +pub 4096R/971731FB 2010-01-29 +uid Nicolas LalevĂ©e +sig 3 971731FB 2010-01-29 Nicolas LalevĂ©e +sig 7BF8BE8E 2010-01-29 Nicolas LalevĂ©e +sig 0642FA40 2010-01-31 Lionel Porcheron +sub 4096R/9A54153C 2010-01-29 +sig 971731FB 2010-01-29 Nicolas LalevĂ©e + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.10 (Darwin) + +mQGiBEhY+uIRBACUmSXD8kBukXrvlRHNVCvo1mMNyaGhHbkf2oF1Sr8o/g10wRLF +1zh2Ohgux/Z0gbjumhT4WG/kADsk0r8vSeuiquwyhHIg9ZXBgs4/JFtSbVrahxkG +gWIhr1cLKYSAeFe20w/Bn3zBUtfKVN3VaDyDFJkgOsu/0mXPU+3JbcV/CwCg9M14 +Pk3MtDg2xgfoVlm3CiT1byED+wS8Rmm9+spz8oMA8vKxKtIb5vvlnnIdaSs69XtT +1Iv2aDpCIlYh820G2mghll2f9rfTn7aiiL8ohyQ55N5tSwVdMrUKbsW2o8IreXuJ +XvGxuSAxpWgKluuH42uHXitO06Ir55mkhHG6M06cMn3hEXU4gJRegCUQW41vrCgn +zorKA/0ZOdFGhN0NCACB3o/bjQFINs5MpDpkPZOYkb0PSgtqto75jZQEMqk4vvlp +Z0430MSzA66WSU9rPv9b2Ck7+/bqxFx972tSygUg3w2mSvqab2z//HVB6XQm+R1b +3XGaEMM19nG3K8XJMKolhcrvwbT8OS1ZajEJlvEt0jpfk7rYpLQtTmljb2xhcyBM +YWxldsOpZSA8bmljb2xhcy5sYWxldmVlQGhpYm5ldC5vcmc+iGEEExECACECGwMC +HgECF4AFAktYr7EFCwkIBwMFFQoJCAsFFgIDAQAACgkQSDwjxnv4vo7YZQCeNnaq +c5+4/3NSQjyPNnRBse17FS8AoL8BQSWRvCzlti3VBA7UOamcNM+eiGAEExECACAF +AkhY+uICGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRBIPCPGe/i+jhSdAJ4y +bjviXLP22CAsOZh7hn3rkL49MQCfUnJIv8ErY+I1EH+sWMNnj91aY5K5AgwESFj6 +5hAIAKO3XJPcBZBLwpYtOcRZqyUSOQ9uHe5iRtqEFP3fqibVvIEMq7jeMa3q+Y+0 +i6wSbDEnKS3VfTv5JXyIXyK5k9bN8+BclzXGuyzFrz05b3XmkaNZuHHtyfPzj1bt +FO0K1Bh8utejday12ZK8gfEaTZaG14027BdYtoR2YzrilXXzxc740nDOlgAU9pwk +DqWR8gMOUf4l0mLGwG0F66CZJsIY8x580afbCUOTaXXyp9wHMK4ko9zm6+dFT/4c +D41eovaqP+GSxyBow6A9pSD8nFI/YrcrfxvPb2DMLhkBYG5VzYYOisRY/nFot04i +lc0v2HNV7RWrylXzlVRIo9SqC2sAAwUH+Jr/O+GDP3kOmmE7iCCg16KfP67wG/oN +1+pYtSDTSgn4f/Ec+HO6vbkc5A+nfetMdgGnbVnFIdZl9BcNb3xqCQMkGcmEFvmJ +YilxGfqngnu+8kPXJMEfHHTcEXGUme0YaPrJeQHiu2C75n9uuvUMtPO+kCfxfEY1 +TMPnHpDKwTGWuOLdI0hzoLSOPBuKpha7Im4SqQq5vHQ0xJmGSwYR5+l2Weob3nU0 +miyCAT4+3FMTQrQ5N6nX8tb8wqRT85sgwMXyXszz9TQ0g+Q5RLmE4jHP3sPEUhbt +k5LBxPZyxwwzFHgDHmleHP1lzKCHi2K4ed3j/IqOVrhpMSSW8kI9/IhJBBgRAgAJ +BQJIWPrmAhsMAAoJEEg8I8Z7+L6ODs4AnRqXRAlzNAepkDiRwtJS++ecE0sPAKDA +OVV69v0Yz7/QqRrLRB66xTj2kZkCDQRLYwO/ARAApAAIbR+GIZgckHwL4vlPeMM4 +eG9gAina2Lkk1h8YuwkeryEKXwE6ggQOjqvv+MiqV7EhFL2EIDDL68YG8Hmih6Ml +gzlrDwiQILvx9KGKAVRQGiknDz3thgK7rZ0FINdkB0OP04NB7vGX3i+dZfSknN5m +WWucQDxxtN/b6QsLOnsepxdYPU6fcMLvrgXBMwhbFkWjcsv4rkwWRWcx8KUTADOJ +vbndMnbMp24DMv5VNYISri+VJ4PKEZyFBeG4NT4KhL7/tJ104D9zERWu8mWA2bNP +hl1hy3woX4ueBmAUdvKuzFgAEnV98ZTzIGdEPrWVz/T6RccRjwpfxKB7kNVzaPC9 +lNoOPRqK5ir3wVhPYAdE+cNJ0IZ0X37PSJlp+ZHEraR9iGI2AIG7bBwvvtcDqMLk +r78aY8RrAY3+fXScE+yBMynTKWxQXoRJJAZhEJbwA7WVMw5ms+ooPmqYCNwEoOe+ +0KeNC3fxkbFsU9Nt7kqVKmqMAUsOonNAB161JURhzAoYbeiYStq7ln9nEQ+yuZsb +eLs+j6vyAqw0QmuIphaFevz0oeXXPDIoSRMpDiVmrfn/T+283ilZOlYEt08YhSqJ +68CtGhVes3vdx/m4t5Lr2GK8Y8ogOuwdM7v+JJNbhlgYu6CSp+rHsdnh6Zi8zhFG +OMKAzPnorBE7MbzgrxcAEQEAAbQtTmljb2xhcyBMYWxldsOpZSA8bmljb2xhcy5s +YWxldmVlQGhpYm5ldC5vcmc+iQI3BBMBCgAhBQJLYwO/AhsDBQsJCAcDBRUKCQgL +BRYCAwEAAh4BAheAAAoJEDeg4GKXFzH73nEQAJZD8Ol1LfaD4AoA5gR7eo1VuIjT +SkwdufYyo9PPuimMZEt8hZk0bq56Q5g6uxkJqegeBbDTarreBVx5liy4NovqWknd +UqSMANmB5tRtlUmcTTjcz/1BJ4ynb/Ty/YqRljrFf0+yWII9Il3H/gCwHnv2cXun +Iu+x7y1wKuJg2Dg976jIBh1949Jddqz+Hs0NzTuxs56I5yf/mMsVz3QtplgsIPXB +0xBVK5W/HY6Jx9j4qpjWLklZ2TDftzoYdO+mj/RK4n0xxeA2HdK3+XFvJ4fn9xY/ +9l/fk2ElM/4zUAKFDeyYyAw/x34nJJF1KDcp46GaXPM3CkvTweYEsJ5rruuBTYLb +IZxBCHSBsCZwHHCai8+aj3tQywoq7tyLtWfWdiNE03xJumv3O0Zk7XXmAAo9fhgo +91fI4r1hkyy8GGZasXeMz6xyRFzEJyNP9O6a9iAt7w4zlf/J6WrG6n3RchAp8wPi +tvTW6hgZdgr2pP4a7i29lzUBmLbGhOYN9sgbZxgRUiHGee/F++KNV48FG72VgNTj +LYPnxvL7fx8YZkMiWLfEqlMyt7Dy8kyF4SnWH563kOVzfAxKdxLgNWfll4bBA99m +Yvx7b0H/UTAvo474PvJyAPYR51P0Ekq3OSIcSreH39I4as0WNjRNOoWpO4IQP+3y +tIaD+8bMnmhR6l/NiEYEEBEKAAYFAktjBtsACgkQSDwjxnv4vo5v2gCgyeuyy3UJ +dJjdR7NGhGSCHIn27QkAoMQ99L7qjlYOsvkmSPdPSWwpV03qiQEcBBABAgAGBQJL +ZXYVAAoJEGrA8Y4GQvpA8egH/A9b3bfHKLCLGtpn859V1IoLRqioze33dr3I2AaC +CEaxQQbDQZeJWB7eKtnB8O1YuqPTFHH3H9xfyj5DtA2SzhaE1hSHPlYNgGTkfTaB +0NncbD708yAisyilKbDilBnmcxwLbACadO7BCHE47FAbMT97qm0Y270SgN7bwh2+ +14SCjsivVAoRUtYshJxpEQAFYBNi76yi1w5ZEptPCvobI4dcabwYb3rZXVKBb+20 +OU0oeVS1wpf33A8xH1TQc3KtcXgEAwNz4opEZAgWc79km+2BCLTxidHSJylqkrPC +QWo12Du7hPwZzeBKl5wCwOq2qzbFBfB9yVIePrE7CUrNHEq5Ag0ES2MDvwEQAMFy +Z3VaTm01L6Lv3BSvBNydsRvnK3jeBKlWsiysI7uJrzYBIIcWcyE6lDjobmEegu3Z +7lef3/5NmzR2QRhxro/oWXhzZqTfmnLIvUiqRLGD+e7tGrabIabWqjies55lCZaE +vJOFLoEoIgzCPhRcPidfnHfbctq0KIkkP3jbdWmqcY8Y5na2t210jXiDRdGGwPKY +G+2Q+4UUsfFvHS8Q9nZJdmm87hWWa0XUMYOmbE0ffewad2LF3PpT2NK/qX/7jqdX +N/nnSoMQrAuJBmJAQBtdDfgN6Wddm5cedoc2fDcsm3rLamS9dgW7mrNfcIvt3ECw +nlV1rReASPU3CTsuwFxB89VPHOemQ1o52IpW+zO/g/11q5ycmzjteBbL6uL4vZRB +G7VUCi2fKpWa16FhSeZ2+8FMUW3YiS/LL5r1mtovZZdhY543nzuHUYCigqUVvzUj +Dhn3wXgjNNmZbDLPExSacMgvbafeDAGSLtXd6Q4RkFbtxtmwwDmg8e17QW6OKQQ5 +jd5devg2UM053Bji8+SnRq3LgqgvaG90fT85JqtlnbeGjV3CiTizeHbz8ucQ+HtV +uJewGj9HMuRM1Mgw1UHZ+k+5PVkMxmMN5M3O92a1DtYtFxXAK6bbiHb4QA8kSScN +HljHA+lJYfYrQY1vVgbHuCkoE1aTJv0W9B28CwolABEBAAGJAh8EGAEKAAkFAktj +A78CGwwACgkQN6DgYpcXMfvZ4w//QphYIrHnVmlEj3GUXX+DU1vhrHbpFMcqWkSA +xHTDWgbrJdOyf9iMperYo0/3u+DnGR/vcb1LvpIeOtNgAd6SYeSmerE3CZlV/0kD +LyA6OfyinX8vxaXxgcObxrpcB7rpvom7xVE0tUB6vJtGF9dfKQ/VVFtQ2812Xv22 +cFcAZ1jIqYsIZ/TK9aqRl2DqMTCpLWWaoR61hlTc/TeAud67hCDxHZfuQpXrQ0RW +5dIlg5dKSlluT3dq9XZ36LctgKpy6lX3OzJts+W3YN7fkKKxHtCBqltUiUAQDZVs +SJTbV9mheymgLJPqcK7ZUi2HDoi2w993KRUa2GSmQpU0qBaWPJQapY3CueAsSCV5 +rMb6BIfHGr96bDogi0h7vgxieG8TrZrW4J6SDvvzmiIAZhKM78kBBzQ1m8i4xqeW +a+0ddwNcvOEM7G3uH1P3rThHdkIkcPixAGaRXjsOBRVawdNCouf/YcRZakxBIhHA +wfDfgVHPFr/UMZC4iMEt9OdF1uWMe/9Eu9LxF6BzN8VkAmJ5F2f5izl0P6nnmQ4/ +BSG8P9yd+0IMyBAXSeMkYSJVZF2EII1qa/zpWYMx9emOkdL7m666NgwdXrcVf/bw +9EG82hI9O6HI2jQAPMH9WPoungOiOh+TT90IKX5eI+cW0TaR8JeG5A2oYB9Yxr/q +wepeqtU= +=gSlB +-----END PGP PUBLIC KEY BLOCK----- + +pub 4096R/9711DBFC 2010-03-11 +uid Jon Schneider +sig 3 9711DBFC 2010-03-11 Jon Schneider +sub 4096R/3DAD980A 2010-03-11 +sig 9711DBFC 2010-03-11 Jon Schneider + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.10 (MingW32) + +mQINBEuY8zUBEACcQbEoZkXl296KesX/bjX1aCatSIEGIZGiWWTfABqzx55tmfsI +BBx1HuuVcBlwMZfeTIb5Oe0IQaZ5h7wEl/ezzwQxOezHTwvAbwnZ4oZOrbs7p7D4 +5I90vsw7rn3bPMBV8xuCgV8t2YFmLH0pzX6+gwmSoVfk+RuxRWfqhHJaVzqNYk6q +iit6NLm2O4PUEeqHWl30RaYPlKabwhoBoFfAzEGIoE3BgukSukO7JmhXGhcS6fLG +V3/2qvzQmb62PwtuHarIHtaPq4lE0DME0+cXZtLEgMq2nMtPxSssYHk71PhaP4+0 +iu7AwgMfAUbNDFJoAc5M0gq2TAoJk3YZrtisTUhSjMIiKrLB8MvnZZ+MWK1/E+Aq +XXocerbgK5fFpk7yeEiqvU1/h+S7WSqIDDOqZWeiKCrrIQZAJvz2f5Ak4A8eyYhv +KXDOwty+q4FL3V76VwWsA7fS8ib9PZqahowaG34DNCflUO3Xj5F9Gk71eBbb894E +Jboq+n7K7Ayo1jRKu8i+HF6KHiPgWcRvpIbJuQxpjxW4c8Kxqf5iGTXyP7dwRWyQ +k+DZ2RKzzNBLXCKyQ5TJtgiHXUEwAW21nCaPijOiqjII00GdoA9oZgliX3O3jKsq +S3llZqwldE97ycfxWenOLn5g47yiCUFqK7/UtJizwYKJC6J3pliC7Kz9UQARAQAB +tCVKb24gU2NobmVpZGVyIDxqc2NobmVpZGVyQGFwYWNoZS5vcmc+iQI3BBMBAgAi +BQJLmPM1AhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRCNbQrQlxHb/BpI +D/iB+WagSbCHgwy+vt0ImiPMggmoxemyf8f1Uv1fz0C9gSH6mY6/ovLrXF0YIBGq +SP8OlTtcz7eKMJPsvJ2n3GrwXyCYLNbL3QUOoHZjnTpmO/vqTtP3jNceoVzW7vle +PwMTgp6Nme0/DQ8Hqdgjinwd/E8BY8AFpNdr2ZaWwVHT9fjKpxdGTQG0iZIesluB +XppnqkltNwBkSdxyVpRXaLhMSjlQyx3S2sGZDJPO7ydiR0EnxzkWP8WqNyEkI80R +n0neYL4HCnwufsCE+sDBiz4p1v6ekUil0Gv0seK+24U+LsEoc6zZatgXzwJ6XEGC +0L6eNZ6al6TzxhKxq6byzb7XQxASV0CiZKQTTY0yh400+cgFwa3p02hFnvl7skB3 +f6u20tmnQi4xb2f7W++z215qPpbsLHTggmAIguX0oF2aTYBjNDLyu0LCMnm2uhzF +Lf/kl77V7AUAWHKdRTDhblTsFL2G/O5i8aDGMbyG82ZieOe2LFqZ1EcqD6ODrLP5 +hhyEYmnlEcb6VSQyQwFwF0E6X4MiZbo0ieLwYEI1P6nSfjKr6Ejuk2EwvQe5TTnM +OwB0a/4jv/U4A3NE26wJKca3LSml3eYPEsOqE7+X7225z6+YeGPGEYCUCu6HI/Wu +0VDsZ0SjoHYlMyx6q+bvbLhwBBUJLP6aKiGeptDUHYCmuQINBEuY8zUBEADd1HYa +7X6JLzEyPZOaddJqR6RZoBKBxmfqxcNv+jO4BehqVEEh7f+Fj/P80JwlyjLiL+1N +tlf/ejfMXrhjqK5uNbVyKRtwwlgztWook+8zJ0xMeYth6UXdFdhrUTs41R4QSUai +c8X+kEQex1TgjCXeDBiBJgUEpnMIc2OOIZgEHpverdOE3X0WYXqHppC0FCzYBTix +x8gw6bsgn/Z2mGMTmzHtm1OtIp9mWJQtY+tLa6+3sWiedClrQcWtUIxPqDh68Ckh +Lwc05TRGryqZ40zU8mF68DQ9GQB7+FUADkViT5l/cGZa1XCEyPI72IjdH4WY2Qxl +ivXoItQgUPgVBo1aeeoVYFr43iCFMVPKp3qOJTeJGg/qezc3X1TZXNQ3E6vY5XO5 +9d4CpduJ1uOjk4NSSnfpUG+Y/LrCrx8yqO2Uhh23S6KhO5Bx7ar65YBBFhFhc2aP +sqRfqUSACaDKmO7VvxarYcjvbqb1zzwCzXzGhb3LqIuik8ydkoBB91BDouNM5J3u +O2KHVhRrnPncyDtL9FQ7Ru7T7NnFdtxZ17BSM6Z7DUHs+PJe+EYBzMN7UDkV7eJ8 +/2HC59QaY+NoNYPyNHOwkTNQyn5kMIwoTVBndqBlSdp5vR+8n/nJ7RNOF+pPeEfd +hs1rzfZy/+1wP4PWWh1Cj34ZrQjpfDKBKYiXoQARAQABiQIfBBgBAgAJBQJLmPM1 +AhsMAAoJEI1tCtCXEdv8XNwQAI9dF7lvrIz/7D5t0+u43k6dSGVH76tMQXv6yo4u +tyuKoRieR315SjjgCGZ817bHM3frxyIXLk+PMT7Brbi2DKoftVVLpmVDbSsv2Pi+ +mqez8XjJFoRZNgwbWESjtcNJY10ukwQ9VT5+73kVNIQdbizK51hK13+Etd9UGr6p +2MZOe+nV5bbKnEdCxrRricbGTOju5x5i5DEZzWGa8W2JZKHsEF/l3qrfYbmn0AMg +vXw5Robo38ZxxuH3l6O3GEed4aUNLJSmu3gIl32uANLE5kg/OYbupmAuvwBCn7/D +xAB7LY38Tg4zIrWfhQCzP5IAyxYOZSFgsggpJ6foilOLCgJul8Vq19HV98FsWf/M +sE5azSIfJI/Z5EWpbaM0xu56nbJ2O18mN0Y3ojz5/ewZo9+ODRm+buCI+Muz5Gs2 +iNoi9D8jtudc46l1OASP7n9e+WQDCd/IwwsUXHqT4+EkM/ZIj31W1+mBZtzIPBCU +37ibGfpt4W8GC9DtsDk+r0A0+4RurzVYTR0P8iTb4uq0i/ffBPBLVTS1E9D/WcGP +2DX7YW9e6LhY1kIbjrLR/rDHi95sx8QOCBMridpy8RlXdwWKU/kZ9s5gCYBVKBhj +/w98LUqT07uWFU98kDugW15Ng8OCogpaueDYi6hA4A6c66EhjdKH9JzigxfxjSkD +udvp +=oSat +-----END PGP PUBLIC KEY BLOCK----- +pub 1024D/265B4C63 2003-08-18 +uid Antoine Levy-Lambert (Apache Ant Committer) +sig 3 265B4C63 2003-12-06 Antoine Levy-Lambert (Apache Ant Committer) +sig 3 5F6B8B72 2003-12-12 Stefan Bodewig +uid Antoine Levy-Lambert (Apache Ant Committer) +sig 3 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) +sig 3 5F6B8B72 2003-12-12 Stefan Bodewig +sub 1024g/A3060393 2003-08-18 +sig 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) + +pub 4096R/710038F5 2010-11-02 +uid Antoine Levy-Lambert (CODE SIGNING KEY) +sig 3 710038F5 2010-11-02 Antoine Levy-Lambert (CODE SIGNING KEY) +sub 4096R/84F32FDC 2010-11-02 +sig 710038F5 2010-11-02 Antoine Levy-Lambert (CODE SIGNING KEY) + +pub 4096R/82A7FBCD 2010-11-02 +uid Antoine Levy-Lambert (CODE SIGNING KEY) +sig 3 82A7FBCD 2010-11-02 Antoine Levy-Lambert (CODE SIGNING KEY) +sig 62B2963F 2010-11-04 Dan Poirier +sig 7C408737 2010-11-04 Joseph Edward Bergmark (CODE SIGNING KEY) +sig 02E9F65B 2010-11-04 Luc Maisonobe +sig EFB55DF1 2010-11-05 Luciano Resende (Code Signing Key) +sub 4096R/70EC4C9A 2010-11-02 +sig 82A7FBCD 2010-11-02 Antoine Levy-Lambert (CODE SIGNING KEY) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG/MacGPG2 v2.0.16 (Darwin) + +mQGiBD9AzmcRBACMqgb7IFvC/nLxw7mUAgHENeZXY3JOQJ8wVBevIbbMEeFvzHE2 +diFydqUXocPexduYr0ahkf033WvWdAiNqDLfVW/HFOsc1TpjbHkqPUHtJ62Ya5tg +nH4UGN9BYZfMbfVDOSz41lYwmfK5HYgpZN/sBQBSKf2qgoFB+LxYaae8YwCgrWlu +fYhf7fkKbbdSf3BGS67ggNkD/0VvkXkw1SEnPaqrkKGkPKomCTb2auGxcYYI3/rP +1m+SGRf0gE1NtocmIEitiR6WvfKUjoMAXSCp5KdnUXmO9rwzkM002KCA7K5CY+e/ +2bLDuiQ3rNiD4mFfG6M+UnmZ+GMFba1p9Cp4PqLNLsCHz67t7hEsscTZQ8mZ9xKM ++GCsA/9P+XFM7JDn9MLhYab9qo1CkceBkthUP6jWGjuAZ00elmBCkpkzNv5aIzss +xih2GpaU/tmcMjw8FGp0dTwzqdpmbZBLjunRnuBTir4m4l5G9rwl4JbfK1PVqk4a +VKkh9W7/yqBcEfNcsfJO9cqaQ+PzcnCoDiD9UHEBYzUhrCKwhLRCQW50b2luZSBM +ZXZ5LUxhbWJlcnQgKEFwYWNoZSBBbnQgQ29tbWl0dGVyKSA8YW50b2luZUBhbnRi +dWlsZC5jb20+iFsEExECABsFAj9AzmcGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ +hhTWqyZbTGMnOgCeJV2gI+1CIxMR7dcIhXjPkiusreIAn2SGOsPS0o89l0EIVuc9 +J2F03aB+iEYEExECAAYFAj/ZwioACgkQohFa4V9ri3J8CACgiGlh+td0BAnJPq19 +ovEQR2DJ02MAoLP203EF+BLPpykeTcGp8UEWmeGQtEBBbnRvaW5lIExldnktTGFt +YmVydCAoQXBhY2hlIEFudCBDb21taXR0ZXIpIDxhbnRvaW5lQGFwYWNoZS5vcmc+ +iF4EExECAB4FAj/SSwYCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQhhTWqyZb +TGOh/QCfbrSoipMlizyGT6c8BOPEd9zzfi0AnRRTqTDzXzsGk4CG/BJME9CCm7Ts +iEYEExECAAYFAj/ZwiMACgkQohFa4V9ri3IOVACgh2QHS1+cVjvM4eLjls1bJwWi +o5IAoLtAszHrwHS5qrhvr2rtnlyyyV2guQENBD9AzmkQBACNpBfqi2PweozCtxoX +PqzKdRDKqCw7TOrDR6lbP3z/ov/1SN5Vc0XqNzBSGqwBcmGWtneABkX7n4uzJrC5 +wvX/TZ/DkMvypPyeNVMu+/ZMlzdbx06OUDKr6Fy/NtaI7cN1rw+Igyv22Q8ilhhg +s/5Rdj84EtJkWQjVRml6wXSAZwADBwP/TqyhOC4sA5YrePYGH8i46h0SU9dXjfEF +JijC8vXZ+BNQHQVK3fjEXedZL8Zvvp1bsMu7Muz9SMnqygM1unp2NGxLRd/9315p +Qh0VStYKn0xq13ybOKr0Gsyx5yyl3Nzlu/1qAR0es/zN4jV7/IQi3R2GOvezcpHX +mkbsYiZAhu2IRgQYEQIABgUCP0DOaQAKCRCGFNarJltMYxcsAKCSJJUABlXYnLBj +b+WtmAzu0JjZNACdFJ4KIATJDK/5ajFq5+irOpodoHeZAg0ETM+HJwEQAMkzgJCo +lSOgkvzsTcjy/4ySwS56VgyFdYpZis8QqbEGCe8xKT+d9FYi5sBTw/jGpIy4weig +NKRRW4NLYgriWJANksBaaPOKvczGAOLWzh2aPfifaGF/puIVT8yCubH6ecxr0Wy/ +lN54Rpi7cmpp+CEbhUTR+7xNGCMt3f9brtOlC6qYN3tJ7PPcfNBjJr0Ts+fPt8lT +RZlBhVa9iEUVYoqMnZQEBmYkg+FxSrFlLw7/WLMKaKGHAV7QbpIxhaDvQ7bMM6qW +c4plt10+wtZtJV3MB6TIRSYaEF87hXCif7mJY8KkCN8XkAxFlQhqEY/gJTOs73DS +Z5+LJKUOF+0+66B31tN5gQq5yNBGd55OEA9iOM87hhQb4e0IuZGvq2vxxK1OL6Q5 +apr141c0ZxHLKaG2YCqM0B42mW84V2mO/Xu25HUjmXGrkpEd61KaodffS5g7SWj3 +jb0X1w/+QGQXnWdTPWuWu/SrpnJb9kBpk/awrBbh6/gz9Uug6WVw3jBaYvfm2gEf +eKVYXa8AtBDSDuytXSXCSNRKY6Hd27ohUKMRBLEtz6Z+WgTKS11u9ip6ewG9irtk +cJQmloGjgaQTLmTXJaZ9UkaEh8uH/LinhIDHk+ilht7z2+CN7S3kOX094v1AnvlA +OchoDd7Wn1KqSoiM6WO5pccPdnU/j4LSoeVDABEBAAG0PEFudG9pbmUgTGV2eS1M +YW1iZXJ0IChDT0RFIFNJR05JTkcgS0VZKSA8YW50b2luZUBhcGFjaGUub3JnPokC +OAQTAQIAIgUCTM+HJwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQDmn4 +CXEAOPVsEQ//Vv4CTUrXTvuaPTNR1x08nntcF5RY+2GGNlT5Cs6EzRbiB3GmKFKu +Qxp0Ucgr+Yg1NTa7jOP2TbMwo8/FCD6i/Q5pWTISs7CdahnqKx37a33F1Hz1bNqV +0Jhi5oJS/sVniYG0d4ZcUl5FkD/gDXgNbUDaB1Vi3I9bU+agwrsLoXrFWDpDPxrg +PGDV3grvqfEp7K2HvPl2B6mUQHYHbIZ9FgjRLRIjOzjMr33RkVtg2QrLaUiOlJ3r +i0xpWf2kMKDMej6M3vFP7PTacRHwqZMxZMWZ2WaviuC943pK0gWwUyJgkkYSrfql +LkzIq3DwKPUneuuInNS4bab8YjwuGYSd/Fnj11P8emTEHwkIIKFyH0LxO2JKw8tV +BosgExmS39P99tGjAOp4Qg1E00exl2mxtIiKI359DS3DYhjEhb5EDH1gVAh5GL2s +Y/NiI4VANomiuzkzCybVYaMwjRpaIkCKemXN0BXb8r7e3CLXn4BA3KHIpuZH4Yz7 +I6RpVuyTOrayM62czy9mxF64Pnwp0gRUJhWC3a2BTYXV5vAtW89BrFB7ArENUKGd +q81lUXVocAk/1LnMxy5fveS5yuUMxPM0fRBwzgARfyv+0HdsjzVmKZZKfjKPOjB5 +YWtOFtdFSdCzYnpIGyoPuUU34v8LuzRwMdBDrODb5LfvX3lMw7YvIkq5Ag0ETM+H +JwEQANOvLBAACFpbL82gr5fP0xfL/fG+oSrAqumUsXmxnCcxHOzDoEvExxebVnL+ +102IXIMV3eQqEaZuqcUYGBjkMt216u5btuSoSsVDrwRI8T3/9fXsB/jdvlCzsq7b +pImEFh7VDQc/jC21pP7r1G81Tt7zWB8oWYBbGXJMGsacaNg6449Z/0Ctp+gi+T5L +jIq1b9apD/+ucg9kGdlKFlLJ8zMwc77hG3LWkoli1cbLgYKk4RKahboFmoEVnM9S +ypdFfDZuSCB+7PvitjfqEao+fOCYOG0b3ykdcYXSVitFSnHe9T1DLjvKBy9qMtbA +GkdD61xEl0MtifQxKkya/n2Fg438HUeU7ltcFLlKd4XAzmsh9PXy2Gpj/lbNYpsD +DDMZafyfFfkLYYZasN4/+Ak+f5T1OuUqByIlesAPGReFtnUI+yXM9qEImProy+R5 +gNkBPN1AnNWvy2pi+ZUUI+35NW49uee35p5LNzMiP3hd2W+rDHWhE9y3oVFkpzbL +lXwF7AMQGtMNE6i82XfahDyiMRo9BzssTSdYc1+5OO+5buXWuZUibYmGc5yDQ6qv +0Yhlry4uoBMLJQcVCMkFh/os0gB4hgzI/MkhuEIYIBZcjGTzIzeGnB+0hB3ODiqt +LmrR2IiK56EkJ+UGfQ6Niankx+1M+OtSFXc9oWP4RacT8yaZABEBAAGJAh8EGAEC +AAkFAkzPhycCGwwACgkQDmn4CXEAOPW/3w//Wd3DfhQTXa1LoenNuuALnF9zIJQr +scLXc9HRO41x+0oCxi+ePDhCSiTWKWA4t74PsgLurdwXnQlcFU8rdSeWSalnO0gr +f0Rs+OHl4ICK3AWAgzZjFDh4J5Pyr7fVteGlUlKRgCCy/rGMwwSnCGLQYa9W1/ZE +KYZzLvFk0S/AoSv2iw6BxWUYVZVO7EzRzLoauLXQX6HyFyTpaH2soYbs1Xnp8t/u +w47PDnWXpYAaM0P1pD0T6krYp3M8YdNySGiXaZTkHBP2bj0PllGQHB/RjOyUrv95 +USYZj60O430OyvjlIBDq+BBL/ZLEbMdUIFJJ6WO1F1nIr8MowpTNqeEBpEaqOY6A +lV0j9fZWX2qJKIxQayq5OjfWL6Y7juJUuDBBZUzPtKSmcwGtg3HsCL0SWoz8JT4p +hPOXy4Zk1NMn4F4oIwRrGrcB2lmBaQmoBWBP63g5rObADL0wsyabfYuVRTE7PoSg +iCEN7wONrFjXrpB+WWG36d8nrETyMKALr96YL+1T4VNs0sllYbrkowRe2ioMKj9r +t61UPOGhPekw0HA7pDS1n+nGMMU+efLKKCvcKFKq/TDdjK2jPg1JQ1Xq8O4fDwRf +ibUXyvYwswAqOqQ0nHH5QSj9pov3tsXhJWWDVIWKMFhk+U1Sans9txHEQKJl8L5k +KiqgPxg3Tk50+6aZAg0ETM+LbwEQAN5ZRgD4sZJ6ClxoWjlmMM1c9632/isnzXJM +unkZeCA3gjx++uhZexCdSD36aQZ7dAFSwvrJLHRrjsszl/uc1H7FaBmkZ7E8sjNI +/oulUtMhcLe0TYy6MRSdl8aBqll4slZNfcl7iYk4PCmk2eR4sdMPMEsQC2kcglDW +HDeJfG0RozFgJ46QVRCktRWTrrACQcvuHLizl0+4nMZ76yexNre7Rrgo6kE5Mapl +0UXog6qM9ngV5cVxh2/wDex5fmXvB9uNTusEQIFo8qaZPBtapAAeoIShyUWispqi +kos5t410OzlGfBHsDb0cq4SU44bAXJmkZv/95JECEy8mZjsbywU4MCDjAf1lC4d9 +K7lcwHQS9rE2Xw1suXfD/VjQy9obpLLROk1DGLJC0aige0BbhMOa+mXgKVzSKcKv +PdmcUHcdm0dIy/LYZhC9Ja0uv37Sc9Ri55k3DU6DgdBu2dZgy7q9bBzLpqPIyTPs +XxUlczjhT6KxZYDeyghbwJYQ+miasY2VHeY9aZHYXXhDHIo2eEaut1y/9a7i4auA +aYnaADj/gmryBm6rb+r/MIMbfZ5htB4l6aoI/8BJygzq38LrWwUvzQ3p/N5+jA5N +uJWexAbG9hEc7nbbwINwp1b0P35eqSxhtr5wGdSNor5zScHazaPjPxHKP7WiATj8 +a1p0MlEHABEBAAG0PEFudG9pbmUgTGV2eS1MYW1iZXJ0IChDT0RFIFNJR05JTkcg +S0VZKSA8YW50b2luZUBhcGFjaGUub3JnPokCKwQTAQIAFQIbAwIeAQIXgAUCTM+M +LAUVCgkIAgAKCRBe+tn+gqf7zcwkEAC3VkVY4TGXoj3CDnjCL9nwkxAyK+JagXSw +7g8FMjqWW7YAIU8TprZxtOJUcnSXioVtT8dhKBfaasu34EpMrUYEIPNp5BNzhxIf +f9hXVrcuOZ1k0nJRlSc4IKSsrognoCDm340ma8AOMARVkrz7tXdqdlDPWVjMvqn/ +5/KReaIHQUNRqjypIIdM5mgaE41F1+uAyqLqcxvf4YQtu0NNGMizGZd37bH+5wMF +BT7S6CesAVPogcfnMdoMN1wO2yOzWKlg49U91DLUY3XHGOQnqVnTnVQ/xzLEj/vf +0PlLoY+3Yn9WEaonkMgco9un71xZ9s4DnR4WE+7QJYU2cgSPFB5DbAZ925qcNK/x +wOpKfRyBPN4zdjWE8Vjd25EcjZLsxgPiSlPpbyIJD6Ot61uoqekinNlAo44sleg8 +rNAAYnajlD/1La+Q/grQnHcujOt/w/ya3LG/cTpz7wkUhxhnmMwmxrVlEFaM24Qk +PwbQE/Wuwdvm/hYX5o4F1b7DQ9WepNZ4ahb/ztbsIg2my7JLN4RPDWZ++EMt5K6w +G+34vn8RfuSu4GHT8TAoexDsAEWzFo67F+dAosrvfw+HBBm3hNEz4tRkKP4SPqmo +dE8IXUffF+VFeFH0NLsvIwfpdW90XNxnSlnrc8aVpdvuE3qXqjQICo10LEJuxZRa +hNggNMtUNIkCfQQQAQIAZwUCTNK+FSEcRGFuIFBvaXJpZXIgPHBvaXJpZXJAYXBh +Y2hlLm9yZz4gHERhbiBQb2lyaWVyIDxwb2lyaWVyQHBvYm94LmNvbT4dHERhbiBQ +b2lyaWVyIDxkYW5AcG9pcmllci51cz4ACgkQnPorAWKylj8WUxAAmxx/NESLJp0r +A+fW8dQ08jGZ1Xf1laNCEd1eb6FXr/Z2xsKPFq6okBiiw6cm2wiwp7DBBHxQatyb +AJNLAGVg8wpHUPgUguFOY1LyLRZ9i2SKKmWG0jzQ7svWELxssHFUnMW8dwtk3qAb +o8pKvOKf4ol3qoKfN3Xq8ZBXAGkQaTIOJzGSfau+dH5NbhMcqZEoKGOAcOsLiIHZ +Cnos9KqFMxqBlTMyJWO9YP8dY3mGHUWV0gsYfE32bHM3auaA2Ynzxtor/jMBATeq +hTWjRAD1H92/HZ9vRBKwpHHpjsF+21aL9TZv5D2OmFYeN7/G1tyRcLYLrhDa7tnx +r5S/ePdypMZ2IUaC0umMKrc8ZrAtK/2N4ZmnHKoScCJHjup66cLCVVFGXHb2hEM9 +2fPFog2//s78Cw1DAxaNE4jjmR4QWXmQZUqA8AymIfgsi+nI9rWMWnpTCC6DGG9+ +j7GbIpPdRscqoyAiPl2lBpZerLirTa1GMuDqqGuNiv6YmEvxNVleOlPYCCQr1vY5 +ltJz34zckBNJAH/7woggqoyGiLa456ruDzU77qxUCy5ulFTOWsVtltojnlxgKBML +8f0uThQZN+0HydPb4uP3k5aLNL1ktiSo/XlIP2/AO69Bi4YZzERYsETm2zFLWx1P +MN+R0l/BAjRskTCX+H92fG5OkGjkmR+JAlwEEAECAEcFAkzS16tAHEpvc2VwaCBF +ZHdhcmQgQmVyZ21hcmsgKENPREUgU0lHTklORyBLRVkpIDxiZXJnbWFya0BhcGFj +aGUub3JnPgAKCRCw2ZG0fECHN8OVD/Y8+R4R9aNkuZJ76SCHOIhxjKtMhk44muAZ +FQwB+CG7HY4b/869+JdAOrwsOYr75h3vkz1vkU8FOr2LAu6PdiXDKpEs9wkPDGFx +Rg9yePaX2DbAh0Ch1ucR1FZvr3QqO+L0ri1lfUUl76n/QfZtHXfuoPgsYIjsbv6g +90mxHFJxxmowgX5gWKYaVm6OFN7xYiAC18Ia8LfReNIZO0XyaOq2/NoLuIVyguyi +C3RuVnvAk92/6YCPgZNiH1lN1kLmkoNvGpY6CFkCI9LKZ9xRCbs7Dbkoz7I+EYla +zfRf5mLjsrI+nVmFHvicvuw3ZtCCAImMdZ+Z53CHwd2N2v81lqnxUyCDPJf4Mxcw +Jq7Hf9hYZUBS9Ehj3nfCmJwOVUMrXYXurKinDAcyoYmlA2iqdzUdM3d9xFGjexsl +cUhZusggmOvBc3bK5BLZXUm009B5LYz4BGUAVsmN8vXekRgevszz5GcZBKElgRds +9DQaO4sbgrskq2TXHzBI7e9GiEcUyErZ8fdsbea5zrPoW2/x74Kq93VtQCuWPDOJ +Nq95l0J6bmiaVZuUTO5YIHFts7jphvA4gMf/4Lnzhzkcwftgi9OwyDBbpTyfdno+ +hsYBrBFQP4L7DLaGewHt46Iggil7Y9oMO0Yo7JtCsRnDtZYxc4rveg8vRg2xIl4y +NJlDNzNciQIcBBABCgAGBQJM0p5uAAoJEJrilv0C6fZbqooQAOpWpMdzXdmDG2fe +BffHiY2sabhX7B+tBRw+SIvmGw+ZvWvy3Tp2xFy7+PgCJhs/wbjyI3tCyx+DPb5C +ybZpDjferuhbKA/PVgnJozUhYtwLFQ7bRyvlLq3ZSZZawVn2bbIHn1knjohz+0hB +90zVX6vXhjPNZwL8vzPa3jMMNPDbd4E7w0VB63sWTKXq/pTy5SFGfscunxOsDMbj +KcW1VtSszH68aywefZV9DbmjSDEgNRiqwtj+WxD3rp3fARBO+4o5yIsjWu1wGL+n +59atHZJp34dAJFgOTJ2Jtykyuh3G76k4XKLemgUsu4aWFAlNIWt/f41cT5WmQe4z +YG4yWLE/KWpIc5Jn2p3wlQpKqwl/+F3pkOpqPZmZkYjn4ORCMg1Q0eOzfiaheofv +T78N0j8020z1lf5ojmEtGHoOzwz076Z3TGP256a4F37ZzibM7KFBn4iwjVrgqfFa +62Q5WG+q2rdmpQ5B2eXAYNxg66DiMcfR3zHJeMz3UpOZcygIUZ63N6VK7+WgNPtO +swBmXUxa5L35+a616/vvPtCEBlvJtDQz22BIvp/RpYaJ1k5K58uy0hj0oXZlD3q7 +BJSgPhgYOOqO79ZOwbgqGB9is5yegDXtXctV4FGuj601C+qtUHbRLmGio3XSMnmy +FCOJpZW41tJYo9uQz7dRHIzGsBpSiIAEEBECAEAFAkzTeLE5HEx1Y2lhbm8gUmVz +ZW5kZSAoQ29kZSBTaWduaW5nIEtleSkgPGxyZXNlbmRlQGFwYWNoZS5vcmc+AAoJ +EPOfGH3vtV3xs08AniczpMS0xOouROjBIHLC+RlBdMwAAJ0ZiOfPrr5+C9Glo317 +omxwZ0obvbkCDQRMz4tvARAAoqAcqn4cTgkAEACgeJQJoPKYAAyZwISGNTgqnnSr +BtN91af3XoVybrnXvlzFc6CkyWQ5T44yMaSfM/ZCYMpFCLtzssTlk3R8ASd7aIQR +/ydoB5vaPZ424NjSfsNLiF1NR868R8iFPHphegw3P2UeFT8rw/arcdJ5lXQ/J66p +63t9BlggU4piIMl/JPrtVawVLelYMYy3zw/RdnmrvU1qrZBGno5QkRhRlOXqQBTv +FlWVZT0GtC+lNha/MqEqW5YkACVPYqpmYk2aoNH5+Gj/yBpWap1o8GsVZKZQUMx6 +CPAT9GcTrOlFqFbFG1kL0iOQgOlggQ0Kba5LN1VXUl7ESsu7NYEXDqDdbjduVDMR +UsFrhTPUOf/kRNPjMPmGih0RP1s0woe3M4dsLaZEcAu88HHMCcaiOfBPAFU84upM +fEgh0BIcmTVwAaSftD5gzmZKY3YXfaS0cD6RaZBWuzecHNDLLEgzuhNbUtmtylx1 +X57tep9Mh2tKDFrqBxlhg3M73+mGdE6zgsWhgOeAMATII8mzM90zLh4bg9RBxdp+ +PnoJEbuZVdIX2bNJPt/u4LdAV/czozPjkZtZ60VSkEYyUnZ2dNKUOv5tujkY4dm1 +V+R9uR25C4fLopnE/AN26+GYePrbBaghEUh7ugg7HlTEXPz2JsfvpjPIaao0V1+A +bEUAEQEAAYkCHwQYAQIACQUCTM+LbwIbDAAKCRBe+tn+gqf7zYEvEACoszB5B68Z +QrcOBSWvk4l0xWLNfZQIl0M5WoNEoNj6Vt1CzIXadRFxHu1m0gnDLW3brquRuxTe +acho1iqinNw0pP7yODNW5p5ftKdvFlB7NNemVxzNZn1Q4cSkbI7GdYFiU9WQf7lB +TQpzFhjJSbJEMHtQrYOqw1wGNPZThEfNXwFLwe+0RF25gEQwuTkRdnpKarBeZiax +8zkuOmTLWmrI5Dq0dsYi6YotuHaSa3cFjGo+gp2cj+mBljaW8BXAIjzNunjMKqkV +XNA+Eh3w8FIx7NYZfrbDz4II3naYLb3x3IEwb6g7sTnCexFyTcS2RMJOqPBG2Zh6 +UI73B3AGkWDMsUyDMPVCVOEWUsT94tPBDZCrvdOpVu99OeMqESuaIuPELEbSIrsU +aDCyJDnIWVExk69szQl/4HOM+u9WBtSmG94WOCT7T+ypPcfFBPpUvxx6VriWKRQX +yKUlVCJVET4UpDHIwVUpIsmFmjxZfTlhe7pny8/a03/EnvGImuLYoxhfzP3VRapr +86fwCseMxAPW3gnl6zvGZrIM6ZS09tdyTIOiHUHMcXvWpyxdw+7EXHuncpEB5m0U +Ci8LBeDYqitVqqakgdKGAl8pfwaIJ9DsE5Sv/IHKFmieLa9PEh/2S/4hCD31atIK +3PimOFurhebU3wOU0wEkNb/3IYLk+MFQOA== +=1STU +-----END PGP PUBLIC KEY BLOCK----- + +pub 2048R/AAE4CBCD 2014-01-27 +uid Charles Duffy +sig 3 AAE4CBCD 2014-01-27 Charles Duffy +uid Charles Duffy +sig 3 AAE4CBCD 2014-01-27 Charles Duffy +sub 2048R/886E0B44 2014-01-27 +sig AAE4CBCD 2014-01-27 Charles Duffy + +pub 4096R/87C39319 2014-01-27 [expires: 2024-01-25] +uid Charles Duffy (CODE SIGNING KEY) +sig 3 87C39319 2014-01-27 Charles Duffy (CODE SIGNING KEY) +sub 4096R/CEE42EB1 2014-01-27 [expires: 2024-01-25] +sig 87C39319 2014-01-27 Charles Duffy (CODE SIGNING KEY) + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.14 (GNU/Linux) + +mQENBFLmW14BCACcK3JRugJ67/+EssTjqFd5/9AxZR5iVumLvyzAG+JVL4wd9Vb9 +kh9uHaGNHUNSHgp25RIq9k6ML3Oha7IIzw9DvYFMkTJa1m+LZvbunmC4UPe8OgDJ +j84mFcKrl9ew9QnGzxMBI5S3bIEBOe+I3apxZh+dL0WTWz60yKsE3Fo7Tc0+fkTH +XBMw+GfaOQDenckIAM+nWv9JqdZWo0EnkjUwCudpqAvApJd7LJlZJjEAh9wfuE+Y +L5YGTHN5ddui/lErCVFYZH8Ojd6AhnnJZWuc6yNW44BhPtSXskmYTzGc8z413Ml6 +SSRAQ55oItfFeqml2n5OsONhAFjCyNt7ukP7ABEBAAG0IUNoYXJsZXMgRHVmZnkg +PGNoYXJsZXNAZHlmaXMubmV0PokBNwQTAQIAIgUCUuZbXgIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQ4xVjcarky81lmQf499s7X5f2lEOz9xr0bIWbtWLg +MkdwX/OZL0jJTjIvv3034x/ijuSzF2U3rfIh3AQASEIX1AGJVAAAjaum2OFdD0Ea +VBH0shgtBIAkJXSEUqa3Jb1XmzmlS8ALMga/uiEmadIByjHyemYC5AGYo2AjTMgT +I6ARSfwpOuTRQ+wEZaJjFaGnCd5ZI48T34laIfcLGKYRcg/bYBVh4OKol86eNgKP +M+yAGIaFozbbgEEzSabLoiTGXwxscxefElmAZY7TNeI3rcFFxY/Sew5SrqjnzbAf +JH3EO3GIOitK8NHCxKPD/F5p//tEs7Z0Vaor/ejhFIHnuALDghK8wCvEcwkhtCFD +aGFybGVzIER1ZmZ5IDxjZHVmZnlAYXBhY2hlLm9yZz6JATgEEwECACIFAlLmjUoC +GwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEOMVY3Gq5MvNmdkH/iSA78+C +lQOwkjijvOy1Y1w9ey7ySoK2L45I/Z+FesLQlVkyHuPnfpaGrmSrBlHNEIS7Gs/X +DvS1UBNtGXb4EiKM9nvgYp7GEniiEOWMUBpqAVPRFER8BbLkTdoNn3LBziMdaAj/ +eeASRPH6pu9wp3t/2nI1b1mj5kFg2ewRbicUBhoR57Lgv5qWAuOpBRqlSPp6lSdE +x8pvfiW7eI31ovmzvuXMJrffxVEDyhmjwXnA8y1QLsRxiP5g6yBTqE7B29tSP0XP +TqkH1q53rvnmfPQ4EP76c0SXURdSILsbJAWM6MxshqhcOPy8TMzvUG50/86UNAyL +5FHE9NGR4C6rgja5AQ0EUuZbXgEIALp/M7maUGh2ODWjdDIt87j4ilMUo9xZupeO +vsEYVB3lvDmwzfEe+FAQGm1sbcdLZ/AMiwf6blUs4/s2RZKuApWUREWqMrodu/ej +1ozY6RUN6tXfaSmmK2ECnAu9m0hnRqdmU1eVcAsrlI95/stQzJY6xUfr948Yz/nT +oA6WUXIIiDys6mcyvux6Lno/hbxiNw9LULK62q0Jh6g/ErxiuHzv2sXsi0M7ZYLz +VkZdopa5Zq8/8WXl9VK4DfO0UlZsI+7Ucvzn8JOX7fmRJ571bEJkzmRaRrEXtJaY +9g3TE5xB2Oy0DXBCeEMqqqRrJXPqmV7m9ODMmSFACGwRFmSn7p8AEQEAAYkBHwQY +AQIACQUCUuZbXgIbDAAKCRDjFWNxquTLzXcRCACZi3ySYQdz7Qj/JD27qL/u+16x +369z8dG+ncglQT5DWnCbnyITDnsE58Oh50V3nBT3KMFMELNpgUag8l7yPaRGRcDY +Xwag+DpDWaOD3G4BWyqpC9+hdlSBsW013YLnnGfuvjSLv0hFV27EMA6MFnmHgcPA ++xIV6j08PhFvYsUH69yA4u93ey8CAH/Qv3tGIRxcUvp1hqWLsxnqc3LAq4kepydY +ZX/2ppslj02OkKGPsgv6ParKGMESBjx2Td8ZwnzFc4AiYXqpvuMQx95TxC+eitBX +UKMdQR4SRJBdZWnZLLoPvzgH08TtE9Y1UraJVVm+gIPqeYLqux+6y3ujRo3ZmQIN +BFLmYdEBEAC+GgyACiLyLycJ54GUJanMRAhB49SLpi7oLnbfnCPqiey4sOugVZf7 +XhS01wokzjsRpOgy35qEK03T4lsMEaYcEEhJYPN90RhjY7VGPfGgVGrXjZjPJHKL +lTH85wV1zyAGmNyI/Kcd0WiWxVifSEqDDrV8dTvJQEq/PHoEpvXwVygjEuYbbBmK +j7LKbvFqnEbK63SLmCpq9AITQ12ysy+SysHp0dFw5haSLB2oK9CO/hXKc1fohI1H +Kx1vn6wCHouCyo3svuXzLaUAyPJboNFL0D46uiiv29pc3bsS6NLkiWa/I6v8oxpS +Q2bDCb8aGRl71D8dLYtx7FQvvQmtN7Mzbp7nbcw6O6EFX8BrsOWDBXw/+K+rzR4k +Hu+wA+SSwbOsMAk/uP8cgk0p8agLvv66Y2tHXv+A3aowBZ1CPNy89Fo44QMib1Mz +mRHMrh6UCwHznLRdA66SgfUItgO5G0glc6sjlQNdzhoO3fDg6ltD/pyW6a4S9cP3 +yv3YH0gOgAHHpVVJP0MJZi3lh1Oh9zdwqy/DFKebFdVZdbXHPWxO61jVl6m640mA +rAQ438ro4N0nZ9afsgNT7hXms4Cx9qda6R5RVt6hA7NMo6agZE976ptgsQXttsYf +tVJqs7acu9S6LCLrpx9elt4DMeH6KQQAwvAy0qRQcfs6uOGsgGvflQARAQABtDRD +aGFybGVzIER1ZmZ5IChDT0RFIFNJR05JTkcgS0VZKSA8Y2R1ZmZ5QGFwYWNoZS5v +cmc+iQI+BBMBAgAoBQJS5mHRAhsDBQkSzAMABgsJCAcDAgYVCAIJCgsEFgIDAQIe +AQIXgAAKCRBxk7nQh8OTGehGEACF69wQMCC+yGNvQ+xV0IfTUGwKIK/vT/eHbr5p +FiF6Hyui3JEx8L+UAecnKJVZBUz8s3AQ8wVqA5p+ttDCw0hoUSDolc3Jpp3mrcQo +Ckx6JRpc+fDloDN8txakc2wGphQSpIwps/qe9vPy/84eqhmGo5f6GjoUY4cEWH82 +zrWQRHEoNfOTr5POPCexJy+0rTKGXvrCyIcQdSHf7a0V3AXoFQYgqFT42sn2Pj7/ +EjSe70qCZPBY+ytQykKenOLx1fq2FuORsiU8E+DhjyPpfO62pabDwPsi+ZXy6o3D +Q/wAYSgpO0GfIcTaQM/8gkmOTLpiRnuwukUmSH/4VuAj4rz+hMBqjZtnR8FeVJvO +gnOljNJjtXcVcHVNWT6cUr8IC1VKvJZoGbjZf5mlwyd3Cye9oGVvoEXTq5xVY8+R +COIUcC41gOhC9RJadHXkGCN12jC6uOmCohSkrVZ3hb8n2hHxFFgPN11NYCGTu5fV +pg3CJA00uPFSJF8+grl4cFPX7mqD4lO6yKHWGHwTCXxo9S2DuZrnAmKNAt6Z9otB +B+c0i+6dKpV8yBy0ChUmYNOh251RPMNt1FHPFGAhiE7rdZw6iuwWO5R3/AvTy//v +lRt5c0QJImVCf6eu18HPwcgw/f6EXQaE26DlytnuXdddjwKyY7Nv1ECT15V8w67I +ZgrzKbkCDQRS5mHRARAAp9sydQ7GeAv+hkY694iDPSEYmLwsNrpFAdHrHe3u30XL +8VwSHkEY2x18tmFcEKo737+3seblDkzoHMMSn1uC66RxHsfJeA3CfpxMgTr5jGy1 +emNoKrE+lEi1v3CE4rg21UD42IafZMHKnsQnnkSyyYIvcTjw81lslS/iYbn8juUN +4u5hMjYgV+LTy06P/ZPB9koHj5DiM6iXWf45wy6OctlhyGGAzYPN8bagqBlcBZ8k +9JnNrViKV4ZOV4ToE42ZQXPs31TOyXalcUbiZGaeKMH9iV6V0yciS5YcrnxFWLqO +RS0yjMR6uCkEyJVAGI/l9KDPZHFtDW3hDGo7eny6qJjIVbDA6vM7Az67fcegVAC5 +v3G7fWKyc2E64ygv34OhMWtKMe0X37YRmPupmAZA/fd49Tk9sEu7BYaHpjgW3bu2 +wC5fTYcXbBx1mzhY9VWvlsqpzaZKPihqKcTHEwQiXRsFCDiog5uVJ2dY8DSpjl7y +lEasG+pMIglZW+Dt4/U1RNzGGitcdBXZBcC6vZ8MK3D5ifQPcxRoA5OLeOHfaWLm +fHGuIpKwdjs/SdovY7wibTbZcNjRqQmYm4TRE12B6ICvqQRdA0WtA4hZ8kXKeB7A +VkcT5DCI86BI8zc3vq5dOql4eGVe0fZ4KBwNHv/Thi21iP04ahaBFpXVb15/8YMA +EQEAAYkCJQQYAQIADwUCUuZh0QIbDAUJEswDAAAKCRBxk7nQh8OTGWGfD/9Ata00 +8MJ6VhD+w0kRmXAx628lE2VlYlbz6gqsUxo/uXQJ1+U3RVwGEzJGYxRSXzcCCGB4 +AhVSaUZB2XuKCXxDWA5KxBim9XgaZ55jdrtoBPk4QoYVy9rx+hiyRTkhbaBTgr4m +SF1+GeovG6NMI1HJ526uuUw9bjbDBcixDDEc4HnuezJhvXagciRbJP7KBPrXqLR8 +LIQnfrVE9/C01SLpTfu4ibsv7C+xKQOEGbChhfvXazqgd614kYi6Akj27UpadSQw +8YiU7kS0H9IrYZLL66Nfxlb+9DT1rP0gDA8FSuRO1iW0hqigIeMQrcLAocQS51ck +IZ1RqzLF0TmurOBO/DOqfY70HPyb022tM4hYE4iZ1/GBS8bq7v1yYE7AWb55YQ2O +JxV6wSUOBwLxEh8PBMhiwFLaObEOPgkubxGT/YvWEjmK0CoZKy74R7MnxgnceRoF +QV44gC6CuttGoElueBpjULs1lnKFKA/qwv2ltITMHe81LHVjg96YgsApXOKCkK01 +KH9pznkHhcEAVA0XJ6b4c1TeCQzz7YxPlVU4nxW/fECv7ZgWCBZ1MRrXXRtEViGz +G3GJoHIALPVs33ykG7MKFFqpbJHHc95hcOzs8eVh2/jD53CXILjbhKEGGbejFlx+ +RHkiOuu1l6jXCeh/J1R6YidjsDjKWlRkHifMmw== +=j+uw +-----END PGP PUBLIC KEY BLOCK----- diff --git a/framework/src/ant/apache-ant-1.9.6/LICENSE b/framework/src/ant/apache-ant-1.9.6/LICENSE new file mode 100644 index 00000000..cdf6ff8b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/LICENSE @@ -0,0 +1,272 @@ +/* + * Apache License + * Version 2.0, January 2004 + * http://www.apache.org/licenses/ + * + * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + * + * 1. Definitions. + * + * "License" shall mean the terms and conditions for use, reproduction, + * and distribution as defined by Sections 1 through 9 of this document. + * + * "Licensor" shall mean the copyright owner or entity authorized by + * the copyright owner that is granting the License. + * + * "Legal Entity" shall mean the union of the acting entity and all + * other entities that control, are controlled by, or are under common + * control with that entity. For the purposes of this definition, + * "control" means (i) the power, direct or indirect, to cause the + * direction or management of such entity, whether by contract or + * otherwise, or (ii) ownership of fifty percent (50%) or more of the + * outstanding shares, or (iii) beneficial ownership of such entity. + * + * "You" (or "Your") shall mean an individual or Legal Entity + * exercising permissions granted by this License. + * + * "Source" form shall mean the preferred form for making modifications, + * including but not limited to software source code, documentation + * source, and configuration files. + * + * "Object" form shall mean any form resulting from mechanical + * transformation or translation of a Source form, including but + * not limited to compiled object code, generated documentation, + * and conversions to other media types. + * + * "Work" shall mean the work of authorship, whether in Source or + * Object form, made available under the License, as indicated by a + * copyright notice that is included in or attached to the work + * (an example is provided in the Appendix below). + * + * "Derivative Works" shall mean any work, whether in Source or Object + * form, that is based on (or derived from) the Work and for which the + * editorial revisions, annotations, elaborations, or other modifications + * represent, as a whole, an original work of authorship. For the purposes + * of this License, Derivative Works shall not include works that remain + * separable from, or merely link (or bind by name) to the interfaces of, + * the Work and Derivative Works thereof. + * + * "Contribution" shall mean any work of authorship, including + * the original version of the Work and any modifications or additions + * to that Work or Derivative Works thereof, that is intentionally + * submitted to Licensor for inclusion in the Work by the copyright owner + * or by an individual or Legal Entity authorized to submit on behalf of + * the copyright owner. For the purposes of this definition, "submitted" + * means any form of electronic, verbal, or written communication sent + * to the Licensor or its representatives, including but not limited to + * communication on electronic mailing lists, source code control systems, + * and issue tracking systems that are managed by, or on behalf of, the + * Licensor for the purpose of discussing and improving the Work, but + * excluding communication that is conspicuously marked or otherwise + * designated in writing by the copyright owner as "Not a Contribution." + * + * "Contributor" shall mean Licensor and any individual or Legal Entity + * on behalf of whom a Contribution has been received by Licensor and + * subsequently incorporated within the Work. + * + * 2. Grant of Copyright License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * copyright license to reproduce, prepare Derivative Works of, + * publicly display, publicly perform, sublicense, and distribute the + * Work and such Derivative Works in Source or Object form. + * + * 3. Grant of Patent License. Subject to the terms and conditions of + * this License, each Contributor hereby grants to You a perpetual, + * worldwide, non-exclusive, no-charge, royalty-free, irrevocable + * (except as stated in this section) patent license to make, have made, + * use, offer to sell, sell, import, and otherwise transfer the Work, + * where such license applies only to those patent claims licensable + * by such Contributor that are necessarily infringed by their + * Contribution(s) alone or by combination of their Contribution(s) + * with the Work to which such Contribution(s) was submitted. If You + * institute patent litigation against any entity (including a + * cross-claim or counterclaim in a lawsuit) alleging that the Work + * or a Contribution incorporated within the Work constitutes direct + * or contributory patent infringement, then any patent licenses + * granted to You under this License for that Work shall terminate + * as of the date such litigation is filed. + * + * 4. Redistribution. You may reproduce and distribute copies of the + * Work or Derivative Works thereof in any medium, with or without + * modifications, and in Source or Object form, provided that You + * meet the following conditions: + * + * (a) You must give any other recipients of the Work or + * Derivative Works a copy of this License; and + * + * (b) You must cause any modified files to carry prominent notices + * stating that You changed the files; and + * + * (c) You must retain, in the Source form of any Derivative Works + * that You distribute, all copyright, patent, trademark, and + * attribution notices from the Source form of the Work, + * excluding those notices that do not pertain to any part of + * the Derivative Works; and + * + * (d) If the Work includes a "NOTICE" text file as part of its + * distribution, then any Derivative Works that You distribute must + * include a readable copy of the attribution notices contained + * within such NOTICE file, excluding those notices that do not + * pertain to any part of the Derivative Works, in at least one + * of the following places: within a NOTICE text file distributed + * as part of the Derivative Works; within the Source form or + * documentation, if provided along with the Derivative Works; or, + * within a display generated by the Derivative Works, if and + * wherever such third-party notices normally appear. The contents + * of the NOTICE file are for informational purposes only and + * do not modify the License. You may add Your own attribution + * notices within Derivative Works that You distribute, alongside + * or as an addendum to the NOTICE text from the Work, provided + * that such additional attribution notices cannot be construed + * as modifying the License. + * + * You may add Your own copyright statement to Your modifications and + * may provide additional or different license terms and conditions + * for use, reproduction, or distribution of Your modifications, or + * for any such Derivative Works as a whole, provided Your use, + * reproduction, and distribution of the Work otherwise complies with + * the conditions stated in this License. + * + * 5. Submission of Contributions. Unless You explicitly state otherwise, + * any Contribution intentionally submitted for inclusion in the Work + * by You to the Licensor shall be under the terms and conditions of + * this License, without any additional terms or conditions. + * Notwithstanding the above, nothing herein shall supersede or modify + * the terms of any separate license agreement you may have executed + * with Licensor regarding such Contributions. + * + * 6. Trademarks. This License does not grant permission to use the trade + * names, trademarks, service marks, or product names of the Licensor, + * except as required for reasonable and customary use in describing the + * origin of the Work and reproducing the content of the NOTICE file. + * + * 7. Disclaimer of Warranty. Unless required by applicable law or + * agreed to in writing, Licensor provides the Work (and each + * Contributor provides its Contributions) on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied, including, without limitation, any warranties or conditions + * of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + * PARTICULAR PURPOSE. You are solely responsible for determining the + * appropriateness of using or redistributing the Work and assume any + * risks associated with Your exercise of permissions under this License. + * + * 8. Limitation of Liability. In no event and under no legal theory, + * whether in tort (including negligence), contract, or otherwise, + * unless required by applicable law (such as deliberate and grossly + * negligent acts) or agreed to in writing, shall any Contributor be + * liable to You for damages, including any direct, indirect, special, + * incidental, or consequential damages of any character arising as a + * result of this License or out of the use or inability to use the + * Work (including but not limited to damages for loss of goodwill, + * work stoppage, computer failure or malfunction, or any and all + * other commercial damages or losses), even if such Contributor + * has been advised of the possibility of such damages. + * + * 9. Accepting Warranty or Additional Liability. While redistributing + * the Work or Derivative Works thereof, You may choose to offer, + * and charge a fee for, acceptance of support, warranty, indemnity, + * or other liability obligations and/or rights consistent with this + * License. However, in accepting such obligations, You may act only + * on Your own behalf and on Your sole responsibility, not on behalf + * of any other Contributor, and only if You agree to indemnify, + * defend, and hold each Contributor harmless for any liability + * incurred by, or claims asserted against, such Contributor by reason + * of your accepting any such warranty or additional liability. + * + * END OF TERMS AND CONDITIONS + * + * APPENDIX: How to apply the Apache License to your work. + * + * To apply the Apache License to your work, attach the following + * boilerplate notice, with the fields enclosed by brackets "[]" + * replaced with your own identifying information. (Don't include + * the brackets!) The text should be enclosed in the appropriate + * comment syntax for the file format. We also recommend that a + * file or class name and description of purpose be included on the + * same "printed page" as the copyright notice for easier + * identification within third-party archives. + * + * Copyright [yyyy] [name of copyright owner] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +W3C® SOFTWARE NOTICE AND LICENSE +http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + +This work (and included software, documentation such as READMEs, or other +related items) is being provided by the copyright holders under the following +license. By obtaining, using and/or copying this work, you (the licensee) agree +that you have read, understood, and will comply with the following terms and +conditions. + +Permission to copy, modify, and distribute this software and its documentation, +with or without modification, for any purpose and without fee or royalty is +hereby granted, provided that you include the following on ALL copies of the +software and documentation or portions thereof, including modifications: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, the W3C Software Short Notice should be + included (hypertext is preferred, text is permitted) within the body + of any redistributed or derivative code. + 3. Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE +NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT +THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY +PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION. + +The name and trademarks of copyright holders may NOT be used in advertising or +publicity pertaining to the software without specific, written prior permission. +Title to copyright in this software and any associated documentation will at +all times remain with copyright holders. + +____________________________________ + +This formulation of W3C's notice and license became active on December 31 2002. +This version removes the copyright ownership notice such that this license can +be used with materials other than those owned by the W3C, reflects that ERCIM +is now a host of the W3C, includes references to this specific dated version of +the license, and removes the ambiguous grant of "use". Otherwise, this version +is the same as the previous version and is written so as to preserve the Free +Software Foundation's assessment of GPL compatibility and OSI's certification +under the Open Source Definition. Please see our Copyright FAQ for common +questions about using materials from our site, including specific terms and +conditions for packages like libwww, Amaya, and Jigsaw. Other questions about +this notice can be directed to site-policy@w3.org. + +Joseph Reagle + +This license came from: http://www.megginson.com/SAX/copying.html + However please note future versions of SAX may be covered + under http://saxproject.org/?selected=pd + +SAX2 is Free! + +I hereby abandon any property rights to SAX 2.0 (the Simple API for +XML), and release all of the SAX 2.0 source code, compiled code, and +documentation contained in this distribution into the Public Domain. +SAX comes with NO WARRANTY or guarantee of fitness for any +purpose. + +David Megginson, david@megginson.com +2000-05-05 diff --git a/framework/src/ant/apache-ant-1.9.6/NOTICE b/framework/src/ant/apache-ant-1.9.6/NOTICE new file mode 100644 index 00000000..a9957fc0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/NOTICE @@ -0,0 +1,9 @@ +Apache Ant +Copyright 1999-2015 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +The task is based on code Copyright (c) 2002, Landmark +Graphics Corp that has been kindly donated to the Apache Software +Foundation. diff --git a/framework/src/ant/apache-ant-1.9.6/README b/framework/src/ant/apache-ant-1.9.6/README new file mode 100644 index 00000000..95109410 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/README @@ -0,0 +1,97 @@ + + A N T + + + What is it? + ----------- + + Ant is a Java based build tool. In theory it is kind of like "make" + without makes wrinkles and with the full portability of pure java code. + + + Why? + ---- + + Why another build tool when there is already make, gnumake, nmake, jam, + and others? Because all of those tools have limitations that its original + author couldn't live with when developing software across multiple platforms. + + Make-like tools are inherently shell based. They evaluate a set of + dependencies and then execute commands not unlike what you would issue on a + shell. This means that you can easily extend these tools by using or writing + any program for the OS that you are working on. However, this also means that + you limit yourself to the OS, or at least the OS type such as Unix, that you + are working on. + + Makefiles are inherently evil as well. Anybody who has worked on them for any + time has run into the dreaded tab problem. "Is my command not executing + because I have a space in front of my tab!!!" said the original author of Ant + way too many times. Tools like Jam took care of this to a great degree, but + still use yet another format to use and remember. + + Ant is different. Instead a model where it is extended with shell based + commands, it is extended using Java classes. Instead of writing shell + commands, the configuration files are XML based calling out a target tree + where various tasks get executed. Each task is run by an object which + implements a particular Task interface. + + Granted, this removes some of the expressive power that is inherent by being + able to construct a shell command such as `find . -name foo -exec rm {}` but + it gives you the ability to be cross platform. To work anywhere and + everywhere. And hey, if you really need to execute a shell command, Ant has + an exec rule that allows different commands to be executed based on the OS + that it is executing on. + + The Latest Version + ------------------ + + Details of the latest version can be found on the Apache Ant + Project web site . + + + Documentation + ------------- + + Documentation is available in HTML format, in the docs/ directory. + For information about building and installing Ant, see + docs/manual/index.html + + + Licensing + --------- + + This software is licensed under the terms you may find in the file + named "LICENSE" in this directory. + + This distribution includes cryptographic software. The country in + which you currently reside may have restrictions on the import, + possession, use, and/or re-export to another country, of + encryption software. BEFORE using any encryption software, please + check your country's laws, regulations and policies concerning the + import, possession, or use, and re-export of encryption software, to + see if this is permitted. See for more + information. + + The U.S. Government Department of Commerce, Bureau of Industry and + Security (BIS), has classified this software as Export Commodity + Control Number (ECCN) 5D002.C.1, which includes information security + software using or performing cryptographic functions with asymmetric + algorithms. The form and manner of this Apache Software Foundation + distribution makes it eligible for export under the License Exception + ENC Technology Software Unrestricted (TSU) exception (see the BIS + Export Administration Regulations, Section 740.13) for both object + code and source code. + + The following provides more details on the included cryptographic + software: + + For the SSH family of tasks ( and ) Ant requires the + JSch library as well as the + Java Cryptography extensions + . Ant does not + include these libraries itself, but is designed to use them. + + Thanks for using Ant. + + The Apache Ant Project + diff --git a/framework/src/ant/apache-ant-1.9.6/WHATSNEW b/framework/src/ant/apache-ant-1.9.6/WHATSNEW new file mode 100644 index 00000000..9a6d4782 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/WHATSNEW @@ -0,0 +1,6263 @@ +Changes from Ant 1.9.5 TO Ant 1.9.6 +=================================== + +Changes that could break older environments: +------------------------------------------- + +Fixed bugs: +----------- + + * ArrayIndexOutOfBoundsException when ZIP extra fields are read and + the entry contains an UnparseableExtraField. + https://issues.apache.org/jira/browse/COMPRESS-317 + +Other changes: +-------------- + * Hidden resource is published now. It reads the + value of a specified java constant. + + +Changes from Ant 1.9.4 TO Ant 1.9.5 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * The ReplaceTokens filter can now use token-separators longer than + one character. This means it can be used to replace mustache-style + {{patterns}} and similar templates. This is going to break code + that invokes the setters on ReplaceTokens via the Java API as their + parameters have been changed from char to String. It may also + break build files that specified multi character tokens and relied + on Ant silently ignoring all but the first character. + Bugzilla Report 56584 + + * The changes that added 's support for gzip encoding + automatically uncompressed content that would not have been touched + before - like when downloading .tar.gz files. A new flag has been + added to control the behavior and its default will make work + as it did in 1.9.3. I.e. if you want it to work like 1.9.4 + you have to explicitly set tryGzipEncoding to true. + Bugzilla Report 57048 + +Fixed bugs: +----------- + + * TarArchiveInputStream failed to read archives with empty gid/uid + fields. + Bugzilla Report 56641 + + * TarArchiveInputStream could throw IOException when reading PAX + headers from a "slow" InputStream. + + * XMLJunitResultFormatter could throw NullPointerException if Java + cannot determine the local hostname. + Bugzilla Report 56593 + + * URLResource#getLastModified tried to access the connection to the + URL without making sure it was established, potentially leading to + a NullPointerException when using FTP. + Bugzilla Report 56873 + + * Long-Name and -link or PAX-header entries in TAR archives + always had the current time as last modfication time, creating + archives that are different at the byte level each time an + archive was built. + + * runant.py should now work as well when the path of the Java executable + contains spaces. + github pull request #1 + + * now supports nested and elements. + Bugzilla Report 47002 + + * complete-ant-cmd.pl now also knows about the -file option. + Bugzilla Report 57371 + + * the br-replace template inside the XSLT stylesheets used by + could cause stack overflows or out-of-memory errors + when applied to big outputs. + Bugzilla Report 57341 + + * removed spurious warning about unclosed ZipFiles when reading the + archive failed. + Port of https://issues.apache.org/jira/browse/COMPRESS-297 + + * FileUtils.rename which is used by several tasks can throw a + NullPointerException if the "normal" renameTo operation fails and + an exception occurs while rename falls back to copying and deleting + the file. + Bugzilla Report 57533 + + * complete-ant-cmd.pl would incorrectly suggest words from the build + file description. + Bugzilla Report 51931 + + * complete-ant-cmd.pl now also completes tasks without a description. + Bugzilla Report 57542 + + * LocalPropertyStack could run into ConcurrentModificationException + when tasks spawned new child threads that accessed the properties. + Bugzilla Report 55074 + + * TarEntry's constructor with a File and a String arg didn't + normalize the name. + + * Between 1.8.4 and 1.9.0 TarInputStream started to parse file + names using the platform's default encoding rather than as ASCII. + This has been a breaking change that has never been marked as such + (in fact it went unnoticed). In order to allow and + to work on platforms who's encoding doesn't match the + encoding of file names inside the archive, both now support + encoding attributes. + The attribute has also been added to for symmetry. + Bugzilla Report 57822 + +Other changes: +-------------- + + * it is now possible to provide proxy configuration to signjar + when using the timestamped authority. + Bugzilla Report 56678 + + * complete-ant-cmd.pl now also analyzes the ANT_ARGS environment + variable. + Bugzilla Report 57371 + + * ported some of the write-optimization of Commons Compress 1.10 to + the ZIP package + + * adapted unit tests to Java9 and added "javac1.9" as valid option + for javac's compiler attribute. + + * performance improvements for + Bugzilla Report 57588 + + * MailLogger can now add CC and BCC addresses. + Bugzilla Report 57789. + + * 's buffer size has been increased from 1k to 100k to match + and . + github pull requests #8 and #9 + + * The tar package can now deal with group and user ids bigger than + 0x80000000. + https://issues.apache.org/jira/browse/COMPRESS-314 + https://issues.apache.org/jira/browse/COMPRESS-315 + + * has new attributes fileMode and dirMode that control the + permissions on the remote side when sending data via SSH. + Bugzilla Report 43271. + + * New and resource collections can be used + to select all but a given subset of a resource collection. + Bugzilla Report 57834. + +Changes from Ant 1.9.3 TO Ant 1.9.4 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * the prefixValues attribute of didn't work as expected + when set to false (the default). + It is quite likely existing build files relied on the wrong + behavior and expect Ant to resolve the value side against the + properties defined in the property file itself - these build files + must now explicitly set the prefixValues attribute to true. + Bugzilla Report 54769 + + * when matching an entry of a zip/tarfileset against a pattern a + leading slash will be stripped from the entry name. Most archives + don't contain paths with leading slashes anyway. + This may cause include/exclude patterns that start with a / to stop + matching anything. Such patterns only used to work by accident and + only on platforms with multiple file system roots. + Bugzilla Report 53949 + + * DirectoryScanner and thus fileset/dirset will now silently drop all + filesystem objects that are neither files nor directories according + to java.io.File. This prevents Ant from reading named pipes which + might lead to blocking or other undefined behavior. + Bugzilla Report 56149 + + * BuildFileTest and BaseSelectorTest have both been deprecated in + favour of BuildFileRule and BaseSelectorRule respectively, and the + tests that previously extended these base tests have been converted to + JUnit 4 tests using the new "rule"s. Any external test that sub-classed + a test in the Ant workspace, rather than BuildFileTest, will need + changed to either use JUnit4's annotations, or be modified to + extend BuildFileTest directly. This will not affect any tests that are + being executed by Ant's junit or batchtest tasks that are not specifically + testing Ant's code. + +Fixed bugs: +----------- + + * / failed when the importing file was loaded from an + URI or a jar and it imported a file from the local file system via + an absolute path. + Bugzilla Report 50953 + + * could import the same resource twice when imported via + different resource types. + Bugzilla Report 55097 + + * several calls to File#mkdirs could fall victim to a race condition + where another thread already created the same directory. + Bugzilla Report 55290 + + * created '/' rather than './' for the parent + directory of the given jarfile. + Bugzilla Report 55049 + + * 's fixlastline="true" didn't work when using certain filter + readers. + Bugzilla Report 54672 + + * several places where resources are read from jars will now + explicitly disable caching to avoid problems with reloading jars. + Bugzilla Report 54473 + + * AntClassloader will now ignore files that are part of the classpath + but not zip files when scanning for resources. It used to throw an + exception. + Bugzilla Report 53964 + + * caused a NullPointerException when no destdir was set. + Bugzilla Report 55949 + + * would still include the + Main section of the fileset manifests if there was no nested + manifest or manifest attribute. + Bugzilla Report 54171 + + * reading of compiler args has become more defensive + Bugzilla Report 53754 + + * without force="true" would not only fail to overwrite a + read-only file as expected but also remove the existing file. + Bugzilla Report 53095 + + * would remove symbolic + links to not-included files. It will still delete symlinks to + directories that would have been followed even if they are not + explicitly included. exclude-Patterns can still be used to + preserve symbolic links. + Bugzilla Report 53959 + + * Sometimes copy-operations using NIO FileChannels fail. Ant will + now try to use a Stream based copy operation as fallback when the + Channel based copy fails. + Bugzilla Reports 53102 and 54397 + + * Javadoc.postProcessGeneratedJavadocs() fails for Classes that + extend Javadoc + Bugzilla Report 56047 + + * TarInputStream will now read archives created by tar + implementations that encode big numbers by not adding a trailing + NUL. + + * the isExists() method of URLResource returned false positives for + HTTP and FTP URLs. + +Other changes: +-------------- + + * initial support for Java 1.9 + + * can optionally pass System.in to the remote process + Bugzilla Report 55393 + + * now supports capturing error output of the executed + process and setting a property from the return code. + Bugzilla Report 48478 + + * now has an option to fail if javadoc issues warnings. + Bugzilla Report 55015 + + * has a new outputencoding attribute. + Bugzilla Report 39541 + + * changes to JUnitTestRunner and PlainJUnitResultFormatter to make + OutOfMemoryErrors less likely. + Bugzilla Report 45536 + + * changes to DOMElementWriter to make OutOfMemoryErrors less likely. + Bugzilla Report 54147 + + * has a new attribute binaryOutput that prevents Ant + from splitting the output into lines. This prevents binary output + from being corrupted but may lead to error and normal output being + mixed up. + Bugzilla Report 55667 + Bugzilla Report 56156 + + * the nested elements of now have an optional + inputEncoding attribute that can be used to specify the encoding of + files read that don't use the platform's default encoding. + Bugzilla Report 56258 + + * The task now explicitly accepts and supports the gzip content encoding. + Bugzilla Report 49453 + + * A new resourcecollection type acts like a union + of s and s that share the same configuration but + have different base directories. + Bugzilla Report 48621 + + * has a quiet attribute that makes the task log errors only + when enabled. + GitHub Pull Request #1 + +* has now a threads attribute allowing to run the tests in several threads. + Bugzilla Report 55925 + +* addition of a new ProcessUtil class providing the process id of the current process + +* changes to allow to run the JUnit testcases of Ant in parallel, + by making them use unique temporary directories + +Changes from Ant 1.9.2 TO Ant 1.9.3 +=================================== + +Fixed bugs: +----------- + + * swallowed the status code of nested tasks. + Bugzilla Report 55539. + + * a race condition could make tasks of parallel builds to + interfere with each other. + Bugzilla Report 54393. + + * 's mailport still didn't work properly when using smtps. + Bugzilla Report 49267. + + * using attributes belonging to the if and unless namespaces + made macrodef fail. + Bugzilla Report 55885. + + * Ant 1.8 exec task changes have slowed exec to a crawl + Bugzilla Report 54128. + + * Apt is not available under JDK 1.8 + Bugzilla Report 55922. + + +Other changes: +-------------- + + * Documentation fix for if/unless attributes. PR 55359. + + * tar entries with long link names are now handled the same way as + entries with long names. + + * Addition of 'skipNonTests' attribute to and + tasks to allow the tasks to skip classes that don't contain tests. + + * now supports a nested to specify filters. + Bugzilla Report 55794. + + * 's params can now be typed. + Bugzilla Report 21525. + + * build of Mac OS X pkg installer + Bugzilla Report 55899. + +Changes from Ant 1.9.1 TO Ant 1.9.2 +=================================== + +Fixed bugs: +----------- + + * Parsing of zip64 extra fields has become more lenient in order to + be able to read archives created by DotNetZip and maybe other + archivers as well. + + * TarInputStream should now properly read GNU longlink entries' names. + Bugzilla Report 55040. + + * and used to be too restrictive when evaluating + whether a given set of options is compatible with spawning the new + process. + Bugzilla Report 55112. + +Other changes: +-------------- + + * will now post-process the generated in order to mitigate + the frame injection attack possible in javadocs generated by Oracle + JDKs prior to Java7 Update 25. The vulnerability is known as + CVE-2013-1571. + There is an option to turn off the post-processing but it is only + recommended you do so if all your builds use a JDK that's not + vulnerable. + Bugzilla Report 55132. + +Changes from Ant 1.9.0 TO Ant 1.9.1 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * Users who have their own ProjectHelper implementation will need to change it because the import and include tasks + will now default the targetPrefix to ProjectHelper.USE_PROJECT_NAME_AS_TARGET_PREFIX. + Users using the default ProjectHelper2 with ant need not worry about this change done to fix Bugzilla Report 54940. + + +Fixed bugs: +----------- + + * Corrected XSLTC error in . + Bugzilla Report 54641. + + * Provide more control over Zip64 extensions created by and + related tasks. In particular no Zip64 extensions will be used at + all by the task family by default - this is required for jars + to be readably by Java5. + Bugzilla Report 54762. + + * Fixed loading of external dependencies in JUnit task. + Bugzilla Report 54835. + + * Target rewriting for nested "include" only works when "as" is specified. + See also "Changes that could break older environments" + Bugzilla Report 54940. + + +Other changes: +-------------- + + * strict attribute added to . + Bugzilla Report 54889. + + * simplifying Execute.getEnvironmentVariables since we are only running on Java 1.5 or higher now + + * Added conditional attributes. + Bugzilla Report 43362 + + * Recommending to upgrade jsch to 0.1.50, particularly if you are using Java 1.7. + jsch is the library behind the sshexec and scp Ant tasks. + Versions of jsch older than 0.1.50 fail randomly under Java 1.7 with an error message "verify: false" + +Changes from Ant 1.8.4 TO Ant 1.9.0 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * Ant now requires at least Java 1.5 to compile and to run + + * FixCRLF used to treat the EOL value ASIS to convert to the system property + line.separator. Specified was that ASIS would leave the EOL characters alone, + the task now really leaves the EOL characters alone. This also implies that + EOL ASIS will not insert a newline even if fixlast is set to true. + Bugzilla report 53036 + + * The CommandLauncher hierarchy that used to be a set of inner + classes of Execute has been extracted to the + org.apache.tools.ant.taskdefs.launcher package. + + * Any FileResource whose represented File has a parent also has a basedir. + + * Removing the Perforce Ant tasks replaced by tasks supplied by Perforce Inc. + + * Setting the default encoding of StringResource to UTF-8 instead of null + + * Upgrade JUnit 4 to JUnit 4.11 + +Fixed bugs: +----------- + + * Made VectorSet faster. + Bugzilla Report 53622. + + * Incorrect URLs in Ant child POMs. + Bugzilla Report 53617. + + * Subclasses of JUnitTask did not correctly find junit.jar. + Bugzilla Report 53571. + + * External XML catalog resolver failed to use project basedir when given an + unmentioned relative path like the internal resolver does. + Bugzilla Report 52754. + + * Fixed some potential stream leaks. + Bugzilla Reports 52738, 52740, 52742, 52743. + + * Updated documentation to fix spelling errors / broken links. + Bugzilla Reports 53215, 53291, 53202 + + * Unable to override system properties. It was not possible not to override + system properties from the command line (or from a property file). + Bugzilla Report 51792 + + * by default fails when run on JDK 8. + Bugzilla Report 53347. + + * ExtensionPoint doesn't work with nested import/include + Bugzilla Report 53405. + + * failed to strip the non-matched parts with + handledirsep="true". + Bugzilla Report 53399. + + * filter caused a NullPointerException when input + was empty. + Bugzilla Report 53626. + + * now supports HTTP redirects using status code 307. + Bugzilla Report 54374. + + * ssh tasks prompt for kerberos username/password under Java 7 + Bugzilla Report 53437. + + * Zip task on that excludes certain files by way of the mapper resulted in a NullPointerException + Bugzilla Report 54026 + + * The ant launcher script should properly detect JAVA_HOME on + MacOS X 10.7 + Bugzilla Report 52632 + + * Depend task does not handle invokeDynamic constant pool entries - java.lang.ClassFormatError: Invalid Constant Pool entry Type 18 + Bugzilla Report 54090 + + * Base64Converter not properly handling bytes with MSB set (not masking byte to int conversion) + Bugzilla Report 54460 + + * The size resource comparator would return wrong results if file + sizes differed by more than 2 GB. + Bugzilla Report 54623 + + * Unable to encode properly into UTF-8 when the system property file.encoding is + set to ANSI_X3.4-1968. + Bugzilla Report 54606 + + * JUnit4 tests marked @Ignore do not appear in XML output + Bugzilla Report 43969 + +Other changes: +-------------- + + * merged the ZIP package from Commons Compress, it can now read + archives using Zip64 extensions (files and archives bigger that 4GB + and with more that 64k entries). + + * a new task can be used to configure the + CommandLauncher used by Ant when forking external programs or new + Java VMs. + Bugzilla Report 52706. + + * merged the TAR package from Commons Compress, it can now read + archives using POSIX extension headers and STAR extensions. + + * merged the BZIP2 package from Commons Compress, it can now + optionally read files that contain multiple streams properly. + + * will now properly expand files created by pbzip2 and + similar tools that create files with multiple bzip2 streams. + + * now supports a new "posix" option for longfile-mode which + will make it create PAX extension headers for long file names. PAX + extension headers are supported by all modern implementations of + tar including GNU tar. + This option should now be used in preference to "warn" or "gnu" as + it is more portable. For backwards compatibility reasons "warn" + will still create "gnu" extensions rather than "posix" extensions. + + * The ProjectHelper class now exposes a method to be used by third party + implementations to properly resolve the binding between target extensions + and extension points. + Bugzilla Report 53549. + + * Make extension point bindable to imported prefixed targets + Bugzilla Report 53550. + + * Add the possibility to register a custom command line argument processor. + See org.apache.tools.ant.ArgumentProcessor and manual/argumentprocessor.html + + * add the possibility to suppress stdout in the sshexec task. + Bugzilla Report 50270. + + * add an encoding attribute to the contains selector. + This will be useful to use the contains selector if the encoding of the VM is different from the encoding + of the files being selected. + + * support for GNU Classpath. + Bugzilla report 54760. + +Changes from Ant 1.8.3 TO Ant 1.8.4 +=================================== + +Fixed bugs: +----------- + + * Ported libbzip2's fallback sort algorithm to CBZip2OutputStream to + speed up compression in certain edge cases. Merge from Commons + Compress. + + Using specially crafted inputs this can be used as a denial of + service attack. + See http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2098 + +Changes from Ant 1.8.2 TO Ant 1.8.3 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * The Enumeration returned by AntClassLoader#getResources used to + return null in nextElement after hasNextElement would return false. + It has been changed to throw a NoSuchElementException instead so + that it now adheres to the contract of java.util.Enumeration. + Bugzilla Report 51579. + +Fixed bugs: +----------- + + * Removed buggy duplicate JAR list in RPM mode. + Bugzilla Report 52556. + + * Launcher fixed to pass the right class loader parent. + Bugzilla Report 48633. + + * mishandled ${line.separator}. + Bugzilla Report 51049. + + * did not work in embedded environments on JDK 7. + Nor did when using Xalan redirects. + Bugzilla Report 51668, 52382. + + * Encoding of unicode escape sequences by the property file task + Bugzilla Report 50515. + + * The code that implicitly sets the -source switch if only -target + has been specified in was broken for Java 5 and 6. + Bugzilla Report 50578. + + * MailLogger ignore the Maillogger.starttls.enable property. + Bugzilla Report 50668. + + * Delete task example does not work + Bugzilla Report 50816. + + * 's proxy handling has been delegated to + internally so the two tasks are consistent. 's way of not + setting a proxy caused problems with other Java libraries. + Bugzilla Report 50888. + + * Include task breaks dependencies or extension-points for multiple + files. + Bugzilla Report 50866. + + * Read on System.in hangs for forked java task. + Bugzilla Report 50960. + + * FileResource specified using basedir/name attributes was non-functional. + + * Resource collection implementation of mapped PropertySet returned + unusable resources. + + * The hasmethod condition failed with a NullPointerException when + ignoresystemclasses is true and Ant tried to load a "restricted + class" - i.e. a class that the Java VM will only accept when loaded + via the bootclassloader (a java.* class). + It will now fail with a more useful error message. + Bugzilla Report 51035. + + * Exec task may mix the stderr and stdout output while logging it + Bugzilla Report 50507. + + * Missing space between "finished" and timestamp in task/target + finish message from ProfileLogger. + Bugzilla Report 51109. + + * Redirecting the output of a java, exec or apply task could print in the + error output stream some "Pipe broken" errors. + Bugzilla Report 48789. + + * ZipFile failed to clean up some resources which could lead to + OutOfMemoryException while unzipping large archives. + A similar problem in ZipArchiveOutputStream has been fixed as well. + Bugzilla Report 42696. + + * quiet attribute added to the copy and move tasks, to be used together + with failonerror=false, so warnings won't get logged + Bugzilla Report 48789. + + * System.in was closed and not readable anymore by the DefaultInputHandler + when Ant is used via its Java API. + Bugzilla Report 51161 + + * only supported a single non-fileset resource collection even + though the manual said it could be multiple. + + * didn't work properly when working on resource collections. + Bugzilla Report 51462. + + * cause a NullPointerException if it was used in a target + that was invoked by multiple targets from the command line. + Bugzilla Report 50894. + + * The ZipFile class could read past the start of the file if the + given file is not a ZIP archive and it is smaller than the size of + a ZIP "end of central directory record". + + * would create the empty package-info.class file in the wrong + directory if no destdir was specified. Note it may still pick the + wrong directory if you specify more than one source directory but + no destDir. It is highly recommended that you always explicitly + specify the destDir attribute. + Bugzilla Report 51947. + + * packagemapper now honors the handleDirSep attribute. + Bugzilla Report 51086. + + * the attributes of macrodef tasks had their values run through + property expansion twice. Still true by default, but can be disabled. + Bugzilla Report 42046. + + * jvc doesn't like it if source file names in argument files are + quoted. + Bugzilla Report 31667. + + * ZipFile didn't work properly for archives using unicode extra + fields rather than UTF-8 filenames and the EFS-Flag. + + * Access to DirectoryScanner's default excludes wasn't synchronized. + Bugzilla Report 52188. + + * When a Project instance was created by a custom tasks its + createTask method didn't work. + Bugzilla Report 50788. + +Other changes: +-------------- + + * -f/-file/-buildfile accepts a directory containing build.xml. + + * The , and now support a new maxmemory + attribute. + Bugzilla Report 50513. + + * the documented inputstring attribute of sshexec has been + implemented and the actually existing attribute inputproperty + documented. + Bugzilla Report 50576. + + * The concat task now permits the name of its exposed resource + by means of its 'resourcename' attribute. + + * The expandproperties filter now accepts a nested propertyset + which, if specified, provides the properties for expansion. + Bugzilla Report 51044. + + * will no longer filter out the very + first line of the stacktrace containing the original exception + message even if it matches one of the filter expressions. + + * Upgraded to Apache AntUnit 1.2 + + * Provide read access to Mkdir.dir. Bugzilla Report 51684. + + * and have a new attribute performGCOnFailedDelete + that may - when set to true - help resolve some problems with + deleting empty directories on NFS shares. + Bugzilla Report 45786. + + * and used to log at level INFO to signal a + property hasn't been set when the resource was empty even if the + quiet attribute was set to true. They will now use VERBOSE + instead. + Bugzilla Report 52107. + + * has a new attribute createMissingPackageInfoClass that can + be set to false to prevent Ant from creating empty dummy classes + used for up-to-date-ness checks. + Bugzilla Report 52096. + + * URLResources#isExists has become less noisy. + Bugzilla Report 51829. + + * The task has a new optional attribute retryDelay that can + be used to make the task sleep between retry attempts. + Bugzilla Report 52076. + + * has new attributes that control the signature and digest + algorithms. + Bugzilla Report 52344. + + * Initial support for Java 8. + + * can optionally create a pseudo terminal (like ssh -t) + Bugzilla Report 52554. + +Changes from Ant 1.8.1 TO Ant 1.8.2 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * Prior to Ant 1.8.0 the task and several other tasks would + overwrite read-only destination files. Starting with 1.8.0 they + would only do so under special circumstances. Ant 1.8.2 now + consistently won't replace a read-only file by default. The same is + true for a number of other tasks. + The , and tasks now have a new force attribute + and has a new forceReadonly attribute that can be used to + make the task overwrite read-only destinations. + Bugzilla Report 49261. + + * Removed ant-nodeps.jar; it is now merged into ant.jar. + + * DOMElementWriter#encode used to employ special code before encoding + ampersands so that { remained { rather than being turned + into &#123;. This is no longer the case, ampersands will now + be encoded unconditionally. + Also DOMElementWriter#encodeData will treat CDATA sections containing a + literal "]]>" sequence different now - it will split the CDATA + section between the second "]" and ">" and create two sections. + This affects task as well as the XML logger or JUnit + formatter where ampersands will now always get encoded. + In addition DOMElementWriter will now replace the characters \t, \r + and \n in attribute values by entity references. + Bugzilla Report 49404. + + * The list elements returned by ProjectHelper#getExtensionStack are + now String arrays of length 3 rather than 2 in order to support the + onMissingExtensionPoint attribute. + Bugzilla Report 49473. + + * When using properties defined + inside the same file will only get used in expansions if the ${} + reference uses the same prefix. This is different from Ant 1.8.1 + but is the same behavior Ant 1.8.0 and earlier exhibited. + A new attribute prefixValues can be used to re-enable the behavior + of Ant 1.8.1. + Bugzilla Report 49373. + + * The files and directories used by Git, Mercurial and Bazaar to + store their information are now excluded by the defaultexcludes. + Bugzilla Report 49624. + + * The task no longer generates TestListener events - which + have been introduced in ant 1.7.0 - by default. The task has a new + attribute enableTestListenerEvents and a new "magic" property + ant.junit.enabletestlistenerevents has been added that can be used + to reinstate the old behavior. + +Fixed bugs: +----------- + + * hostinfo now prefers addresses with a hostname over addresses without + a hostname, provided the addresses have the same scope. + For local lookup, no IP address will be put in NAME / DOMAIN anymore. + For remote lookup, if a host name was provided and only an IP address is + found, the IP address will no longer overwrite the host name provided to the + task. + Bugzilla Report 49513 + + * mmap-based file copy problems under JDK 1.4 on Linux. + Bugzilla Report 49430. + + * The Sun JVM tries to mmap the entire file during a copy. + For large files this is not feasible. + We now explicitly request to copy at most 16 MiB per request. + Bugzilla Report 49326. + + * DemuxInputStream.read() should return unsigned values + Bugzilla Report 49279. + + * The MIME mailer ignored the port parameter when using SSL. + Bugzilla Report 49267. + + * ignored the classpath when using the default TraX processor. + Bugzilla Report 49271. + + * 's totalproperty only worked reliably if the same file + name didn't occur inside more than one directory. + Bugzilla Report 36748. + + * could fail to download files from remote subdirectories under + certain circumstances. + Bugzilla Report 49296. + + * will now produce better diagnostics when it fails to delete + a temporary file. + Bugzilla Report 49419. + + * Ant would often scan directories even though there were known to + only hold excluded files when evaluating filesets. This never + resulted in wrong results but degraded performance of the scan + itself. + Bugzilla Report 49420. + + * failed for long command lines on OS/2. + Bugzilla Report 49425. + + * did not handle encodings well for stdout/stderr. + Bugzilla Report 49418. + + * could issue a warning about multiple versions of Ant on the + CLASSPATH if two CLASSPATH entries differed in case on a + case-insensitive file system. + Bugzilla Report 49041. + + * The resource collection was checking every resource even if + we actually just want the first one, like in the example of use of + resourcelist in the documentation (getting the first available resource + from a mirror list). + + * A race condition could lead to build failures if multiple + tasks were trying to create the same directory. + Bugzilla Report 49572. + + * the toString() method of the Resources class - and thus any + ${toString:} expansion of a reference to a element - + didn't iterate over its nested elements if it hadn't done so prior + to the toString invocation already. + Bugzilla Report 49588. + + * in parallel mode didn't work together with a nested + if maxparallel was <= 0 (the default) or no source + files matched. + Bugzilla Report 49594. + + * didn't work for manifests added via + s that used the prefix or fullpath attributes. + Bugzilla Report 49605. + + * would cause an error unless the prefix + attribute has been specified. + Bugzilla Report 49755. + + * If forked, after finished was still reading the input stream + for a bunch of characters, then stealing them from a following . + Bugzilla Report 49119. + + * Ant could be leaking threads for each forked process (started by + , , or similar tasks) that didn't receive input + from a resource or string explicitly. + Bugzilla Report 49587. + + * Project#setDefault threw an exception when null was passed in as + argument, even though the Javadoc says null is a valid value. + Bugzilla Report 49803. + + * runant.py would swallow the first argument if CLASSPATH wasn't set. + Bugzilla Report 49963. + + * failed to load resources from jar files contained in a + directory that has a "!" in its name. + Bugzilla Report 50007. + + * ant.bat exit strategy improvements and issues + make the exit codes work in environments where 4NT or MKS are installed + Bugzilla Report 41039. + + * would fail if used via its Java API and the File passed + into the setJar method was not "normalized" (i.e. contained ".." + segments). + Bugzilla Report 50081. + + * ignored 's errorOnMissingDir attribute + Bugzilla Report 50124. + + * failed to close files when reading a list of symbolic + links from a properties file. + Bugzilla Report 50136. + + * could allow tasks to start executing even if a task + scheduled to run before them timed out. + Bugzilla Report 49527. + + * If a batch with multiple tests times out Ant logs a message + about a test named Batch-With-Multiple-Tests since 1.8.0 but the + logic that determined the Java package of this pseudo-test has been + wrong. + Bugzilla Report 45227. + + * didn't preserve the original linefeed style when + updating a file. + Bugzilla Report 50049. + + * 's whenEmpty behavior never consulted the non-fileset + resources so the task could fail even though resources have been + provided using non-fileset resource collections. + Bugzilla Issue 50115. + +* ftp chmod could throw a NPE. + Bugzilla report 50217. + +* The project help (-p option in the command line) will now print + the dependencies of the targets in debug mode (-d on the command + line) + +Other changes: +-------------- + + * 's force attribute has been deprecated in favor of a new + overwrite attribute that is consistent with 's attribute + names. + + * You can now specify a list of methods to run in a JUnit test case. + Bugzilla Report 34748. + + * properties in files read because of the -propertyfile command line + option will now get resolved against other properties that are + defined before the project starts executing (those from the same or + earlier -propertfiles or defined via the -D option). + Bugzilla Report 18732. + + * s can now contain wildcards in order to use wildcard + CLASSPATH entries introduced with Java6. + The wildcards are not expanded or even evaluated by Ant and will be + used literally. The resulting path may be unusable as a CLASSPATH + for Java versions prior to Java6 and likely doesn't mean anything + when used in any other way than a CLASSPATH for a forked Java VM. + Bugzilla Report 46842. + + * A new attribute allows targets to deal with nonexistent extension + points, i.e. they can extend an extension-point if it has been + defined or silently work as plain targets if it hasn't. This is + useful for targets that get included/imported in different + scenarios where a given extension-point may or may not exist. + Bugzilla Report 49473. + + * Ant now logs a warning message if it fails to change the file + modification time in for example when using or preserving + timestamps in various tasks. + Bugzilla Report 49485. + + * ProjectHelpers can now be installed dynamically via the + Ant task. + + * is now able to switch to the proper ProjectHelper to parse + the imported resource. This means that several kinds of different build + files can import each other. + + * now also works for non-filesystem resources. + Bugzilla Report 49756. + + * The filter now supports a casesensitive + attribute. + + * The selector now supports casesensitive, multiline + and singleline attributes. + Bugzilla Report 49764. + + * A new can be used like wget's --cut-dirs option to + strip leading directories from file names. + + * now supports the GNU project's gcjh compiler. + Bugzilla Report 50149. + + * supports additional views of a file's path as elements + for a custom pattern. + Bugzilla Report 50114. + + * JUnit XMLResultAggregator logs the stack trace of caught IO exceptions + in verbose runs. + Bugzilla Report 48836. + + * StringUtils.parseHumanSizes() should turn parse failures into + BuildExceptions. + Bugzilla Report 48835. + + * New task to make a list of targets bound to some + specified extension point. + + * Initial support for OpenJDK7 has been added. + + * Ant now uses java.net.CookieStore rather than + java.util.ServiceLocator to detect whether the environment is a + Java 1.6 system. This means releases of gcj/gij at the time of + this release of Ant are detected as Java 1.5 and not 1.6. + Bugzilla Report 50256. + + * It is now possible to write a compiler adapter for that + compiles sources with extensions other than .java (but that still + compile to .class files). + Bugzilla Report 48829. + + * The performance of VectorSet#add(Object) has been improved which + should also benefit any operation that scans directories in Ant. + Bugzilla Report 50200. + +Changes from Ant 1.8.0 TO Ant 1.8.1 +=================================== + +Changes that could break older environments: +------------------------------------------- + + * ant-trax.jar is no longer produced since TrAX is included in JDK 1.4+. + + * Ant no longer ships with Apache Xerces-J or the XML APIs but relies + on the Java runtime to provide a parser and matching API versions. + + * The stylebook ant task and the ant-stylebook.jar are removed. + +Fixed bugs: +----------- + + * Tasks that iterate over task or type definitions, references or + targets now iterate over copies instead of the live maps to avoid + ConcurrentModificationExceptions if another thread changes the + maps. + Bugzilla Report 48310. + + * The filesmatch condition threw a NullPointerException when + comparing text files and the second file contained fewer lines than + the first one. + Bugzilla Report 48715. + + * Regression: The task would allow multiple + META-INF/application.xml files to be added. + Bugzilla Report 6836. + + * VectorSet#remove(Object) would fail if the size of the vector + equaled its capacity. + + * Regression : ant -diagnostics was returning with exit code 1 + Bugzilla Report 48782 + + * Fix for exec task sometimes inserts extraneous newlines + Bugzilla Report 48746 + + * SymlinkTest#testSymbolicLinkUtilsMethods failing on MacOS + Bugzilla Report 48785. + + * If 's first resourcecollection child is a , + any subsequently added child resourcecollection joins the first. + Bugzilla Report 48816. + + * with an invalid URL could trigger an NPE in some JVMs. + Bugzilla Report 48833 + + * Broken Pipe issue under Ubuntu Linux + Bugzilla Report 48789 + + * Properties wrongly read from file or not update during read + Bugzilla Report 48768 + + * AntClassLoader in Ant 1.8.0 has been considerably slower than in + 1.7.1 + Bugzilla Report 48853 + + * ANT_CMD_LINE_ARGS are rippling through lower level Ant usage + Bugzilla Report 48876 + + * email : IO error sending mail with plain mimetype + Bugzilla Report 48932 + + * the complete-ant-cmd.pl script failed to create a proper cache of + target if "ant -p" failed. + Bugzilla Report 48980 + + * 's sourcebase attribute was broken. + Bugzilla Report 48970 + + * 's failonerror didn't work as expected when copying a single + element resource collection to a file. + Bugzilla Report 49070 + + * no longer followed redirects if the redirect URL was relative + and not an absolute URL. + Bugzilla Report 48972 + + * fixed a performance degradation in the code that expands property + references. + Bugzilla Reports 48961 and 49079 + + * was broken on Windows. + Bugzilla Report 49090 + + * delete failed if the link attribute was a relative path + to a link inside the current directory without a leading ".". + Bugzilla Report 49137 + + * and failed to find the expected strings when + waiting for responses and thus always failed. + Bugzilla Report 49173 + +Other changes: +-------------- + + * Project provides new get methods that return copies instead of the + live maps of task and type definitions, references and targets. + + * Ant is now more lenient with ZIP extra fields and will be able to + read archives that it failed to read in earlier versions. + Bugzilla Report 48781. + + * The family of tasks has been sped up for bigger archives. + Bugzilla Report 48755. + + * Add removeKeepExtension option to NetRexxC task. + Bugzilla Report 48788. + + * Add prefix attribute to loadproperties task. + + * Add resource attribute to length task. + + * PropertyResource will effectively proxy another Resource if ${name} + evaluates to a Resource object. + + * Added forcestring attribute to equals condition to force evaluation + of Object args as strings; previously only API-level usage of the + equals condition allowed Object args, but Ant 1.8.x+ property + evaluation may yield values of any type. + + * BuildFileTest.assertPropertyUnset() fails with a slightly more + meaningful error message + Bugzilla Report 48834 + + * will now throw an exception if a test name is empty. This + used to manifest itself in unrelated errors like + Bugzilla Report 43586. + + * A change that made more reliable on Windows (Bugzilla Report + 5003) strongly impacts the performance for commands that execute + quickly, like attrib. Basically no single execution of a command + could take less than a second on Windows. + A few timeouts have been tweaked to allow these commands to finish + more quickly but still they will take longer than they did with Ant + 1.7.1. + Bugzilla Report 48734. + + * Added SimpleBigProjectLogger, intermediate between NoBannerLogger and + BigProjectLogger. + + * supports new attributes enablemultiplemappings + and cache. + + * Added the augment task to manipulate existing references via Ant's basic + introspection mechanisms. + +Changes from Ant 1.8.0RC1 TO Ant 1.8.0 +====================================== + +Changes that could break older environments: +------------------------------------------- + + * the appendtolines filter has been renamed to suffixlines. + +Fixed bugs: +----------- + + * stack traces were not reported at all by + when filtertrace="on", which is the default. + + * ant.bat can now also process the -noclasspath switch when it is + the first switch on a command line. + Bugzilla Report 48186. + + * now tries to delete the created temporary files earlier. + Bugzilla Report 48506. + + * the implementation of had been changed in a way that broke + the jarjar links task and protentially other third-party subclasses + as well. + Bugzilla Report 48541. + + * task didn't report build file location when a remote operation failed + Bugzilla Report 48578. + + * would add the same comment and a date line each time + it updated an existing property file. + Bugzilla Report 48558. + + * didn't work properly in recent Java VMs. + Bugzilla Report 48637. + +Other changes: +-------------- + +Changes from Ant 1.7.1 TO Ant 1.8.0RC1 +====================================== + +Changes that could break older environments: +------------------------------------------- + + * if and unless attributes (on as well as various tasks and other + elements) have long permitted ${property} interpolation. Now, if the result + evaluates to "true" or "false" (or "yes", "no", "on", "off"), that boolean + value will be used; otherwise the traditional behavior of treating the value + as a property name (defined ~ true, undefined ~ false) is used. Existing + scripts could be broken if they perversely defined a property named "false" + and expected if="false" to be true, or used if="true" expecting this to be + triggered only if a property named "true" were defined. + + * Ant now requires Java 1.4 or later. + + * Improved handling of InterruptException (lets suppose someone/thing + is trying to kill the thread when we receive an + InterruptException), when an InterruptException is received, we do + not wait anymore in a while loop till the end time has been + reached. + Bugzilla Report 42924. + + * Refactor PropertyHelper and introspection APIs to make extension + more granular and support setting task/type attribute values to + objects decoded by custom PropertyEvaluator delegates. Also add + task for registering delegates and/or replacing + the registered PropertyHelper instance. + Bugzilla Report 42736. + + * Added a restricted form of typedef called . This + allows definition of elements that can only be within tasks or + types. This method is now used to define conditions, selectors, + comparators and filterreaders. This means that tasks may now have + nested conditions just by implementing the Condition interface, + rather than extending ConditionBase. It also means that the use of + namespaces for some of the selectors introduced in Ant 1.7.0 is no + longer necessary. Implementing this means that the DynamicElement + work-around introduced in Ant 1.7.0 has been removed. + Bugzilla Report 40511. + + * In the task when a is used, the millis and + datetime attributes now override the time of the source resource if + provisioned. + Bugzilla Report 43235. + + * Remove fall-back mechanism for references that are not resolved + during normal runtime execution. + + * FileUtils.createTempFile now actually creates the file. + The TempFile task still does not create the file by default, can be + instructed to do so however using a new parameter. + Bugzilla Report 33969. + + * A lock in Project ensured that a BuildListener's messageLogged + method was only ever executed by a single thread at a time, while + all other methods could be invoked by multiple threads + simultaniously (while within , for example). This lock + is no longer in place, messageLogged should be made thread-safe + now. + + * 's onError="stop" no longer fails the build if an error + occurs, this is the main difference between stop and error and + matches what the documentation implied. + Bugzilla Report 24668. + + * Ant's configuration introspection mechanisms have been modified to prefer + Resource and FileProvider attributes to plain java.io.File attributes; + however the configuration-from-String behavior remains equivalent, rendering + a FileResource. + + * CBZip2InputStream will now throw an IOException if + passed in a null or empty InputStream to read from. + Bugzilla Reports 32200. + + * will now fail when trying to extract certain broken + archives that would have been silently ignored in earlier version. + Bugzilla Report 35000. + + * Ant's family of tasks tries to preserve the existing Unix + permissions when updating archives or copying entries from one + archive to another. + Since not all archiving tools support storing Unix permissions in + the same way that is used by Ant, sometimes the permissions read by + Ant seem to be 0, which means nobody is allowed to do anything to + the file or directory. + If Ant now encounters a permission set of 0 it will assume that + this is not the intended value and instead apply its own default + values. Ant used to create entries with 0 permissions itself. + The family of tasks has a new attribute preserve0permissions + that can be set to restore the old behavior. + Bugzilla Report 42122. + + * If a batch containing multiple JUnit tests running inside a forked + Java VM caused the VM to crash (or caused a timeout), the + formatters would receive an error message for the last test in the + batch. + Ant will now pass in a test with the name "Batch-With-Multiple-Tests" + instead - this is supposed to show more clearly that the last test + may not have started at all. + Bugzilla Report 45227. + + * If the number of minutes a build takes is bigger then 1000 Ant will + no longer print a thousands separator in the "elapsed time" + message. It used to be the thousands separator of the current + locale. + Bugzilla Report 44659. + + * used to fail if the link was broken (i.e. + pointing to a file or directory that no longer existed). It will now + silently try to remove the link. + Bugzilla Report 41285. + + * used to log a warning and not delete broken + symbolic links. didn't even log a warning. + The task will now try to delete them in both cases. + Bugzilla Report 41285. + + * if the dir attribute of a points to a symbolic link and + followsymlinks is set to false, the fileset will no longer be + scanned and always seem empty. + Bugzilla Report 45741. + + * the .NET tasks that have been deprecated since Ant 1.7.0 have been + removed, please use the stand-alone Antlib you can find at + http://ant.apache.org/antlibs/dotnet/index.html + instead. + + * the logic of closing streams connected to forked processes (read + the input and output of and friends) has been changed to + deal with cases where child processes of the forked processes live + longer than their parents and keep Ant from exiting. + It is unlikely but possible that the changed logic breaks stream + handling on certain Java VMs. + Bugzilla issue 5003. + + * 's totalproperty was platform dependent because it relied + on java.io.File#compareTo. It has now been made platform + independent, which means that totalPropery values obtained on + Windows (and other systems where the sort order of File is not case + sensitive) can be different from the values obtained with earlier + versions of Ant. + Bugzilla Report 36748. + + * globmapper didn't work properly if the "to" or "from" patterns + didn't contain a "*". In particular it implicitly added a * to the + end of the pattern(s). This is no longer the case. If you relied + on this behavior you will now need to explicitly specify the + trailing "*". + Bugzilla Report 46506. + + * silently ignored missing resources even with + failOnError="true". If your build tries to copy non-existent + resources and you relied on this behavior you must now explicitly + set failOnError to false. + Bugzilla Report 47362. + + * Ant now prefers the java.runtime.version system property over + java.vm.version for the Created-By Manifest attribute. + Bugzilla Report 47632. + + * The task now supports a nested mapper. In order to + implement this, the Java API of the task had to change so any + custom subclass overriding the processFile method will need to + adapt (by overriding the new two-arg processFile method). + Bugzilla Report 23243. + + * A new property syntax can be used to set attributes from + references: ${ant.ref:some-reference} + + In most cases this will yield the exact same result as + ${toString:some-reference} - only when an attribute setter method + accepts an object type other than string and the project's + reference is an Object of matching type the new syntax will pass in + that object. + + If your build file already contains properties whose name starts + with "ant.ref:" there is a potential for collision. If your + property has been set, normal property expansion will take + precedence over the new syntax. If the property has not been set + and a reference with the postfix of your property name exists + (i.e. in a very unlikely event) then the new syntax would yield a + different result (an expanded property) than Ant 1.7.1 did. + + * A ProjectHelper implementation can now provide the default build file + name it is expecting, and can specify if they can support a specific build + file. So Ant is now capable of supporting several ProjectHelper + implementations, deciding on which to use depending of the input build file. + + * Mapper-aware selectors (depends, different, present) now accept typedef'd + FileNameMappers. + +Fixed bugs: +----------- + + * The default logger was failing to print complete stack traces for + exceptions other than BuildException when inside or + , thus omitting often important diagnostic + information. + Bugzilla 43398 (continued). + + * Better handling of package-info.class. + Bugzilla Report 43114. + + * RPM task needed an inserted space between the define and the value. + Bugzilla Report 46659. + + * Got rid of deadlock between in, out and err in the Redirector. + Bugzilla Report 44544. + + * Caused by AssertionError no longer filtered. + Bugzilla Report 45631. + + * would sometimes recreate JARs unnecessarily. + Bugzilla Report 45902. + + * task couldn't overwrite existing symlinks that pointed to + nonexistent files + Bugzilla Report 38199. + + * task couldn't overwrite files that were in the way of the symlink. + Bugzilla Report 43426. + + * task failonerror="false" does not stop build from failing + when 'ln' command returns non-zero. + Bugzilla Report 43624 + + * task couldn't differentiate between "no resources + specified" and "no resources matched." + Bugzilla Report 43799. + + * ManifestClassPath failed when a relative path would traverse the + file system root. + Bugzilla Report 44499. + + * had an indexoutofbounds when the prefix and postfix + overlapped. + Bugzilla Report 44731. + + * and failed to accept file names with # + characters in them. + Bugzilla Report 45190 + + * A deadlock could occur if a BuildListener tried to access an Ant property + within messageLogged while a different thread also accessed one. + Bugzilla Report 45194 + + * Handle null result of system getProperty() in CommandlineJava. + Similar to Bugzilla Report 42334. + + * Length task did not process nonexistent Resources even though these might + conceivably still carry file length information. + Bugzilla Report 45271. + + * 's includeJavaRuntime="false" should work for gcj now. Note + that you may need to set includeAntRuntime to false in order to + have full control. + Bugzilla Report 34638. + + * would fail if the executed statement didn't return a result + set with some JDBC driver that dissalow Statement.getResultSet to + be called in such a situation. + Bugzilla Report 36265 + + * if the executed statement in returned a result set and an + update count, the count would be lost. + + * if an executed statement in mixes update count and result set + parts, some result sets wouldn't get printed. + Bugzilla Report 32168. + + * XmlLogger could lose messages if is used. + Bugzilla Report 25734. + + * creates remoteToDir if it doesn't exist. + Bugzilla Report 42781 + + * CBZip2OutputStream threw an exception if it was closed prior to + writing anything. + Bugzilla Reports 32200, 45836 + + * The IPlanetDeploymentTool didn't use the configured DTD locations. + Bugzilla Report 31876. + + * The ant shell script printed a warning under Cygwin if JAVA_HOME + was not set. + Bugzilla Report 45245. + + * sometimes incorrectly flagged infinite recursions of + filter tokens + Bugzilla Report 44226. + + * failures were treated as errors in forked JUnit tests when JUnit 4 + was used. + Bugzilla Report 43892. + + * and disallowed manifest attributes whose name + contained the character '8'. + Bugzilla Report 45675. + + * BigProjectLogger would set the project's basedir to the current + working directory. + Bugzilla Report 45607. + + * only s that logged to a file were notified if forked VM + crashed or a timeout occurred in . + Bugzilla Report 37312. + + * ant -v -version would print the version information twice. + Bugzilla Report 45695. + + * when nested into builds that have been invoked by tasks + might set the wrong basedir on the called projects. + Bugzilla Report 30569. + + * If the message of the failed assertion of a forked JUnit test + contained line feeds some excess output ended up in Ant's log. + Bugzilla Report 45411. + + * failed to delete a link that pointed to + a parent directory. + Bugzilla Report 45743. + + * failed if ant lacked permission to rename + the link's target. + Bugzilla Report 41525. + + * when checking whether a jar is signed, ignored the + sigfile attribute. + Bugzilla Report 44805. + + * When using JavaMail all tasks used the same mail host + regardless of their configuration. + Bugzilla Report 37970. + + * and didn't handle aliases with characters other + than numbers, letters, hyphen or underscore properly. + Bugzilla Report 45820. + + * could miss multi-character begin tokens in some cases. + Bugzilla Report 45094. + + * didn't close JARs that were part of the classpath. + Bugzilla Report 45955. + + * in some cases would delete class files even if it didn't + find the corresponding source files. + Bugzilla Report 45916. + + * failed if the nested or contained line + breaks. + Bugzilla Report 43342. + + * encoding="auto" has been broken in since Ant 1.7.0 and only + worked if JavaMail was available. + Bugzilla Report 42389. + + * MailLogger could cause a NullPointerException. + Bugzilla Report 44009. + + * didn't recognize failed assertions as failures if they + caused subclasses of AssertionError to be thrown (like + org.junit.ComparisonFailure that is thrown when assertEquals + fails). + Bugzilla Report 45028. + + * the Unix "ant" wrapper script failed to protect wildcards in + command line arguments in some cases. + Bugzilla Report 31601. + + * crippled file names and could miss some entries if + multiple modules have been specified. + Bugzilla Report 35301. + + * Tasks with a "public void add(SomeType)" method failed to work as + TaskContainers at the same time. + Bugzilla Report 41647. + + * Tasks that implementes DynamicElemen or DynamicElementNS failed to + work as TaskContainers at the same time. + Bugzilla Report 41647. + + * combining SSL and authentication in and MailLogger failed in + some setups. + Bugzilla Report 46063. + + * if an error occurs while logging the buildFinished event, the + original error is now logged to System.err. + Bugzilla Report 25086. + + * failed with a NullPointerException when copying a resource + without a name. It will now fail with a meaningful error message. + Bugzilla Report 39960. + + * now uses the configured classpath to load the factory (when + using TraX) before falling back to Ant's own classpath. + Bugzilla Report 46172. + + * complained about files being modified in the future if + they had been just very recently (within Ant's assumed granularity + of the file system). + Bugzilla Report 43665. + + * didn't store the output in outputproperty if the remote + command failed. + Bugzilla Report 46340. + + * DirectoryScanner's slow-scanning algorithm that is used when you + ask for excluded or not-included files and/or directories could + miss some files and directories in the presence of recursive + exclude patterns. + + * resource collection kept only one of entries deemed equal by + the chosen Comparator. + Bugzilla Report 46527. + + * the ZipFile class used by and others could leave the + archive open (making it undeletable on Windows as long as the java + VM was running) for files with an unexpected internal structure. + Bugzilla Report 46559. + + * The zip package now supports the extra fields invented by InfoZIP + in order to store Unicode file names and comments. + + * The zip package detects the encoding bit set by more modern + archivers when they write UTF-8 filenames and optionally sets it + when writing zips or jars. + Bugzilla Report 45548 + + * could run into a NullPointerException when faced with broken + symbolic links. + Bugzilla Report 46747. + + * The ant shell script should now support MSYS/MinGW as well. + Bugzilla Report 46936. + + * has a new force attribute that allows re-signing of jars + that are already signed. + Bugzilla Report 46891. + + * now again honors failonerror in the face of connection + errors. + Bugzilla Report 46829. + + * The filter threw an exception if the stream to + filter ended with a begin token. + Bugzilla Report 47306. + + * , and didn't support + the setbeans attribute. + Bugzilla Report 47336. + + * ' encoding attribute didn't work. + Bugzilla Report 47382. + + * Ant created tar archives could contain random bytes at the end + which confused some untar implementations. + Bugzilla Report 47421. + + * various places where unchecked PrintWriters could hide exceptions + have been revisited to now check the error status or not use a + PrintWriter at all. + Bugzilla Report 43537. + + * filesetmanifest="mergewithoutmain" in didn't treat inline + manifests as expected. + Bugzilla Report 29731. + + * didn't work properly with nested builds. + Bugzilla Report 41368. + + * with filesetmanifest different from skip didn't work if the + update attribute has been set to true. + Bugzilla Report 30751. + + * The default stylesheets for failed to properly escape + XML content in exception stack traces. + Bugzilla Report 39492. + + * AntClassLoader didn't set the proper CodeSource for loaded classes. + Bugzilla Report 20174. + + * AntClassLoader.getResourceAsStream would return streams to + resources it didn't return with getResource and to classes it + failed to load. + Bugzilla Report 44103. + + * Logging exceptions without a message would cause a + NullPointerException. + Bugzilla Report 47623. + + * WeblogicDeploymentTool could fail on platforms with a file + separator other than "/". + Bugzilla Report 35649. + + * The update attribute of the modified selector was ignored. + Bugzilla Report 32597. + + * and can now merge Class-Path attributes from + multiple sources and optionally flatten them into a single + attribute. + The default behaviour still is to keep multiple Class-Path + attributes if they have been specified and to only include the + attributes of the last merged manifest. + Bugzilla Report 39655. + + * didn't work correctly with a selector because + it was scanning the same filesets more than once. + Bugzilla Report 43574. + + * when using custom filterreaders with the + syntax Ant could leak memory. + The problem didn't occur when using or to + define the filterreader which is the recommended approach. + Bugzilla Report 45439. + + * Ant didn't set the proper "magic" value for tar entries containing + long file names in GNU longfile mode. + Bugzilla Report 47653. + + * The tar task failed to recognize that the archive had to be + (re-)created in some cases where the sources are filesystem based + resources but not filesets. + Bugzilla Report 48035. + + * 's outputproperty was prefixed by the executed command + when the command attribute has been used, breaking backwards + compatibility to Ant 1.7.0. + Bugzilla Report 48040. + + * different task instances of the same ed tasks could + overwrite each others attributes/nested elements. + Bugzilla Report 41602. + + * The Hashvalue algortihm implementation of the modified task could + fail to read the file(s) completely. + Bugzilla Report 48313. + +Other changes: +-------------- + + * The get task now also follows redirects from http to https + Bugzilla Report 47433 + + * A HostInfo task was added performing information on hosts, including info on + the host ant is running on. + Bugzilla Reports 45861 and 31164. + + * There is now a FileProvider interface for resources that act as a source + of filenames. This should be used by tasks that require resources + to provide filenames, rather than require that all resources + are instances or subclasses of FileResource. + Bugzilla Report 43348 + + * There is now a URLProvider interface for resources that act as a + source of URLs. This should be used by tasks that require resources + to provide URLs, rather than require that all resources are + instances or subclasses of URLResource. + + * Fixcrlf now gives better error messages on bad directory attributes. + Bugzilla Report 43936 + + * a new property ant.project.default-target holds the value of the + current 's default attribute. + + * a new property ant.project.invoked-targets holds a comma separated + list of the targets that have been specified on the command line + (the IDE, an task ...) when invoking the current project. + + * The resource selector has had an "any" type added for better + configurability. + + * Ant should detect the OS as both a Mac and a Unix system when + running on OpenJDK. + Bugzilla Report 44889. + + * new protected getConnection and getStatement methods allow + subclasses of SQLExec more control - or access to the cached + instances when overriding other methods like runStatements. + Bugzilla Report 27178. + + * has a new failOnConnectionError attribute that can be used to + keep a build going even if the task failed to connect to the + database. + Bugzilla Report 36712. + + * A new attribute strictDelimiterMatching can be used to ignore case + or whitespace differences when searches for delimiters. + This is useful if you execute a SQL script that has contains "GO" + and "go" as delimiters. + Bugzilla Report 26459. + + * A new showWarnings attribute of allows warnings to be logged. + Bugzilla Report 41836. + + * A new treatWarningsAsErrors attribute of can be used to fail + a build if a warning occurs. + Bugzilla Report 41836. + + * Ant now supports scoped properties (see Local task). + Bugzilla Report 23942. + + * 's CSV output can be controlled via the new attributes + csvColumnSeparator and csvQuoteCharacter. + Bugzilla Report 35627. + + * 's logging has been improved. + Bugzilla Reports 30932, 31743. + + * It is now possible to disable 's remote verification. + Bugzilla Report 35471. + + * now supports input in a way similar to + Bugzilla Report 39197. + + * can now preserve the file modification time when downloading + files. + Bugzilla Report 33939. + + * the new task sshsession can run multiple tasks in the presence of + an SSH session providing (local and remote) tunnels. + Bugzilla Report 43083. + + * ZipOutputStream has been sped up for certain usage scenarios that + are not used by Ant's family of zip tasks. + Bugzilla Report 45396. + + * supports an "output" Resource attribute as an alternative to "file". + + * "output" attribute now supports any Resource in addition to a file. + + * no longer requires a passphrase when using key based + authentication. + Bugzilla Report 33718. + + * a new failOnEmptyArchive attribute on and can now + make the task fail the build if it tries to extract an empty + archive. + + * and have a new attribute stripAbsolutePathSpec. + When set to true, Ant will remove any leading path separator from + the archived entry's name before extracting it (making the name a + relative file name). + Bugzilla Report 28911. + + * will now detect that it was asked to extract a file that is + not an archive earlier if the file is big. + Bugzilla Report 45463. + + * New file and resource selectors and have + been added that select file which the current process can read or + write. + Bugzilla Report 45081. + + * The filename file selector has a new attribute regex that allows + files to be selected by matching their names against a regular + expression. + Bugzilla Report 45284 + + * The name resource selector has a new attribute regex that allows + resources to be selected by matching their names against a regular + expression. + Bugzilla Report 45284 + + * Enhanced performance of Project.fireMessageLoggedEvent and DirectoryScanner + Bugzilla Reports 45651 and 45665 + + * The package list location for offline links can now be specified as + an URL. + Bugzilla Report 28881 + + * now supports XML namespaces. + Bugzilla Report 36804. + + * A new listener for has been added that tries to invoke the + tearDown method of a TestCase if that TestCase was run in a forked + VM and the VM crashed or a timeout occurred. See the task's + manual page for details. + Bugzilla Report 37241. + + * The Jar task now supports the addition of a jar index file in update mode. + Previously the absence of the index was not enough to trigger the rebuild; + some other update was necessary. + Bugzilla report 45098. + + * has a new attribute "useNativeBasedir" that makes the child + build use the same basedir it would have used if invoked from the + command line. No matter what other attributes/properties have been + set. + Bugzilla Report 45711. + + * has a new optional failOnError attribute. + Bugzilla Report 44772. + + * Antlib descriptors will now be parsed by the configured + ProjectHelper if the implementation overrides the new + canParseAntlibDescriptor and parseAntlibDescriptor methods. If the + configured helper doesn't override the methods, a new instance of + ProjectHelper2 will be used just like in Ant 1.7.1. + Bugzilla Report 42208. + + * It is now possible to explicitly set the executable used by + . + Bugzilla Report 39189. + + * 's order of results is now predictable. + Bugzilla Report 44873 + + * a new has been added, which works similar to + but only returns the results of the first nested + mapper that matches. + Bugzilla Report 44873 + + * has a new maxtime attribute that terminates downloads that + are taking too long. + Bugzilla Report 45181. + + * now supports selectors for remote directories as well. + Bugzilla Report 44726. + + * In some cases Ant fails to rename files if the source or target + file has just recently been closed on Windows. It will now try to + delete the offending file once again after giving the Java VM time + to really close the file. + Bugzilla Report 45960. + + * two new properties can be used to set the MIME-Type and charset + used by MailLogger. + Bugzilla Report 27211. + + * a new attribute of allows the task to succeed if it can + reach at least one given recipient. + Bugzilla Report 36446. + + * two new properties allow MailLogger to send a fixed text instead of + the log file. + Bugzilla Report 38029. + + * is supposed to support CVSNT now. + Bugzilla Report 31409. + + * ' port attribute should now work for all clients that use the + environment variable CVS_PSERVER_PORT instead of the "official" + CVS_CLIENT_PORT. + Bugzilla Report 30124. + + * now works for local repositories as well. + + * has an option to ignore removed files now. + Bugzilla Report 26257. + + * and friends now support modules with spaces in their names + via nested elements. + + * A new attribute "ignoreEmpty" controls how deals when + there are no resources to concatenate. If it is set to false, the + destination file will be created regardless, which reinstates the + behavior of Ant 1.7.0. + Bugzilla Report 46010. + + * If the new remote attribute is set to true, can now + work against a remote repository without any working copy. + Bugzilla Report 27419. + + * start and end tags can now be used instead of dates in + . + Bugzilla Report 27419. + + * MailLogger and can now optionally enable support for + STARTTLS. + Bugzilla Report 46063. + + * has new attributes "as" and "prefixSeparator" that can be + used to control the prefix prepended to the imported targets' + names. + + * a new task provides an alternative to that + should be preferred when you don't want to override any targets. + + * delete has a new attribute removeNotFollowedSymlink. If set to + true, symbolic links not followed (because followSymlinks was false + or the number of symlinks was too big) will be removed. + Bugzilla Report 36658. + + * the os and osfamily attributes of , , and + can now be used to run the commands on operating systems + other than their "native" environment, i.e. non-Unix or non-Windows + operating systems respectively. + Bugzilla Report 7624. + + * a new resource collection generalizes the prefix + and fullpath attributes of to arbitrary mappers that + can be applied to arbitrary resource collections. + Bugzilla Report 4240. + + * and have a new attribute + errorOnMissingArchive that allows "optional" filesets that don't + break the build if the archive doesn't exist. + Bugzilla Report 46091. + + * has new attributes that correspond to the + -docfilessubdirs and -excludedocfilessubdir command line arguments. + Bugzilla Report 34455. + + * now fails early if a specified stylesheet doesn't exist. + Bugzilla Report 34525. + + * now has an option to suppress transformer warnings. This + option only has an effect for processors that support this feature; + the "trax" processor included with Ant does support it. + Bugzilla Report 18897. + + * has two new attributes failOnError and + failOnTransformationError that can be used to not make the build + process proceed if an error occurs. + Bugzilla Report 36260. + + * has a new attribute failOnNoResources that can be used to + make the build fail/continue if the collection of resources to + transform is empty. + Bugzilla Report 46274. + + * It is now possible to define system properties that should be set + during xslt's transformation. This can be used to enable XInclude + processing in Xerces, for example. + Bugzilla Report 36653. + + * a new resource collection can be used to specify + collections of ZIP and TAR archives as sources. It extracts them on + the fly. This is a generalization of the found + as nested element of and friends. + Bugzilla Report 46257. + + * has a new verbose attribute that makes the task list + all deleted targets and give a hint as to why it deleted them. + Bugzilla Report 13681. + + * now supports arbitrary filesystem based resource + collections. + Bugzilla Report 46341. + + * now supports arbitrary filesystem based resource + collections. + Bugzilla Report 24062. + + * token and value of 's nested can now also + be specified as nested elements to allow multiline content more + easily. + Bugzilla Report 39568. + + * and can now optionally preserve the file + timestamp even if the file is modified. + Bugzilla Report 39002. + + * The child-elements and have + a new attribute that controls whether properties in nested text get + expanded. + Bugzilla Report 11585. + + * has a new attribute failOnNoReplacements that makes the + build fail if the task didn't do anything. + Bugzilla Report 21064. + + * 's has a new attribute that controls + whether empty directories should be kept. + Bugzilla Report 43159. + + * ant -diagnostics now checks that it can read as much from the + temporary directory as it has written. This may help detecting a + full filesystem. + Bugzilla Report 32676. + + * has a new preserveduplicates attribute--historically + these were eliminated in the interest of behaving in the manner + of a "path." + + * 's source and target attributes are no longer ignored when + using gcj. + Bugzilla Issue 46617. + + * ant -diagnostics now outputs information about the default XSLT + processor. + Bugzilla Issue 46612. + + * the ZIP library will now ignore ZIP extra fields that don't specify + a size. + Bugzilla Report 42940. + + * CBZip2OutputStream now has a finish method separate from close. + Bugzilla Report 42713. + + * the and family of tasks has new options to deal with + file name and comment encoding. Please see the zip tasks' + documentation for details. + + * now uses previously + undocumented SecureInputHandler shipped with Ant 1.7.1. + + * Command line arguments for and similar tasks can now have + optional prefix and suffix attributes. + Bugzilla Report 47365 + + * 's srcfile and targetfile child elements can now have + optional prefix and suffix attributes. + Bugzilla Report 45625 + + * has a new attribute to enable indexing of META-INF + directories which is disabled for backwards compatibility reasons. + Bugzilla Report 47457 + + * 's executable attribute can be used to specify a different + executable. + Bugzilla Report 46230. + + * 's new executable attribute can be used to specify a + different executable. + Bugzilla Report 42132. + + * , , and now provide a nested + element to specify a classpath that will be used when loading the + task's (compiler) adapter class. + Bugzilla Report 11143. + + * , , and now provide a nested + element to specify the task's (compiler) adapter as an instance of + a class that has been defined via typedef/componentdef. This + allows more control over the classpath and allows adapters to be + defined in Antlibs easily. + + * A new subclass org.apache.tools.ant.loader.AntClassLoader5 of + AntClassLoader has been added which overrides getResources + which became non-final in ClassLoader with Java5+ so + this method now behaves as expected. + The new subclass will be used by Ant internally if it is available + and Ant is running on Java5 or more recent. + Bugzilla Report 46752. + + * a new attributes can chose a different request method than GET for + the http condition. + Bugzilla Report 30244 + + * now supports a configurable display text and a regular + expression based way to determine progress based on logged messages. + Bugzilla Report 39957. + + * the number of retries on error in is now configurable. + can be told to not download files that already exist locally. + Bugzilla Report 40058. + + * Ant now builds against commons-net 2.0 as well. + Bugzilla Report 47669. + + * A new nested element connectionProperty of allows setting of + arbitrary JDBC connection properties. + Bugzilla Report 33452. + + * A new islastmodified condition can check the last modified date of + resources. + + * has a new destDir attribute that allows generated files to + be written to a different location than the original classes. + Bugzilla Report 20699. + + * has a new listfiles attribute similar to the existing one of + . + Bugzilla Report 24359. + + * It is now possible to suppress the "FAILED" lines sent to Ant's + logging system via 's new logFailedTests attribute. + Bugzilla Report 35073. + + * now can delete entries. + + * The resource collection can now optionally cache its + contents. + + * A new condition can check whether resources exists. + + * has two new attributes errorproperty and warningproperty that + can be set if an error/warning occurs. + Bugzilla Report 38807. + + * has a new attribute rowcountproperty that can be used to set + a property to the number of rows affected by a task execution. + Bugzilla Report 40923. + + * when Ant copies files without filtering, it will now use NIO + channels. + Bugzilla Report 30094. + + * has a new attribute that can be used to disable caching on + HTTP connections at the HttpUrlConnection level. + Bugzilla Report 41891. + + * and (and tasks derived from ) will now create the + parent directory of the destination archive if it doesn't exist. + Bugzilla Report 45377. + + * A new filterreader that sorts input lines has been + added. + Bugzilla Report 40504. + + * A new token filter that suppresses tokens that match + their ancestor token has been added. + + * s nested into s can now use a dir + attribute different from the . + Bugzilla Report 37763. + + * can now optionally cache its contents. + + * can now specify values as nested text. + Bugzilla Report 32917. + + * a new parentFirst attribute on allows resources to + be loaded from the specified classpath rather than the system + classloader. + Bugzilla Report 41369. + + * can now + calculate relative paths. + + * The selector supports a new handleDirSep attribute that + makes it ignore differences between / and \ separators. + Bugzilla Report 47858. + + * now supports resource collections (as long as the resources + contained provide URLs) and can get multiple resources in a single + task. + + * can now import non-File resources if they provide an URL + - as the and resources do. + Bugzilla Report 29251 + + * can now import multiple resources specified as resource + collections. + Bugzilla Report 22269. + + * a new type is similar to but can read the + list of resources from non-file resources and may return resources + that are not files. + + * a new filterreader appendtolines complements prefixlines. + + * a new top level element extension-point allows build files to be + extended with custom targets more easily. + +Changes from Ant 1.7.0 TO Ant 1.7.1 +============================================= + +Changes that could break older environments: +------------------------------------------- + +* String resources only have properties single expanded. If you relied on + resources being expanded more than once, it no longer happens. + Bugzilla report 42277. + +* A String resource's encoding attribute was only taken into account when + set from the resource's OutputStream; the InputStream provided the String's + binary content according to the platform's default encoding. Behavior has + been modified to encode outgoing (InputStream) content as well as encoding + incoming (OutputStream) content. + +* with fork now returns gives -1 instead of 0 as result when failonerror + is false and some exception (including timeout) occurs. Br 42377. + +* ant-type attribute has been marked as deprecated and a warning has been + issued if it is encountered in the build file. + +Fixed bugs: +----------- + +* The default logger was failing to print complete stack traces for exceptions + other than BuildException, thus omitting often important diagnostic + information. Bugzilla 43398. + +* Error in FTP task + Bugzilla report 41724 + +* Regression: Locator fails with URI encoding problem when spaces in path + Bugzilla report 42222 + +* Regression in Locator: running Ant off a network share does not work: + message "URI has authority component" appears + Bugzilla report 42275 + +* Improvements in AntClassLoader Speed. + Bugzilla report 42259 + +* Error in handling of some permissions, most notably the AllPermission on + jdk 1.5 + Bugzilla report 41776 + +* Replace task summary output incorrect. + Bugzilla report 41544 + +* Dependset crashes ant when timestamp on files change during Dependset + execution. + Bugzilla report 41284 + +* Bug in org.apache.tools.ant.types.resources.comparators.Date + Bugzilla report 41411 + +* in Ant 1.7.0 could throw NPE if no was defined. + Bugzilla report 41422. + +* In Ant 1.7.0, in does not by default include only + **/*.java as the documentation claims and earlier revisions did. + Bugzilla report 41264. + +* SPI support in jar was broken. + Bugzilla report 41201. + +* jsch-0.1.30 causes SCP task to hang + Bugzilla report 41090. + +* Target from imported file listed twice in projecthelp. + Bugzilla report 41226. + +* task double-expands properties if expandproperties is true, + and expands properties if expandproperties is false. + Bugzilla report 41204. + +* Rolling back Bugzilla 32927 (set a default description for a javadoc tag + if not set) as it caused a BC problem. + Bugzilla report 41268. + +* forks properly and so memory settings are picked up. + Bug report 41280. + +* Regression: NPE was thrown when using against a + (third-party instantiated) fileset with null Project reference. + +* Strip out all -J arguments to non forking rmic adapters, specifically + the Sun and Weblogic compilers. + Bug report 41349 + +* Synchonization issues in PropertyHelper. Bugzilla 41353. + +* did not append. Bugzilla 41399. + +* -autoproxy turns Java1.5+ automatic proxy support on. Bugzilla 41904 + +* Handle null result of system getProperty(). Bugzilla 42334. + +* Regression: concat fixlastline="true" should not have applied to + nested text, but did in Ant 1.7.0. Bugzilla 42369. + +* Regression: ant.version was not passed down in , . + This worked in Ant 1.6.5, but not in 1.7.0. + ant.core.lib (added in 1.7.0) was also not being propagated. + Bugzilla bug 42263 + +* Regression: bzip2 task created corrupted output files for some inputs. + Bugzilla bug 41596. + +* Regression: with did not work. + Bugzilla 42735. + +* ant script, cd may output to stdout. + Bugzilla 42739. + +* Modified selector doesn't update the cache if only one file has changed. + Bugzilla 42802. + +* Regression: Path subclasses that overrode list() stopped working in + resourceCollection contexts in Ant 1.7.0. Bugzilla 42967. + +* supports loading from xml based property definition. + Bugzilla 42946 + +* supports collecting and rerunning failed test cases + (textXXX methods). Bugzilla 42984. + +* War task failed with "No WEB-INF/web.xml file was added" when called + a second time. Bugzilla 43121. + +* FilterMapper could throw an NPE. + Bugzilla 43292. + +* Regession nested macrodefs with elements could cause StackOverFlow. + Bugzilla 43324. + +* Some changes to broke third party tasks that extend it (like + Apache Cactus' Ant task). The changes have been modified so that + subclases should now work again - without any changes to the + subclass. + +Other changes: +-------------- + +* Various small optimizations speed up common tasks such as on large + filesets, reducing both I/O and CPU usage. + +* Profiling logger has been added with basic profiling capabilities. + +* + + + +

CheckStyle Audit

+

Designed for use with + CheckStyle and + Ant. +

+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +

+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
filelineseveritymessage
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + body { + font:normal 80% arial,helvetica,sanserif; + color: black; + background-color: white; + margin: 0; + padding: 1em; + min-width: 41em; + } + h1 { + font-weight:bold; + font-size:140%; + margin: 0 0 0.7em; + padding: 0.3em; + text-align: center; + background-color: #eee; + border: 2px ridge silver; + } + html>body h1 { + border-color: gray; + } + + ul#navigation { + font-size: 0.83em; + float: left; width: 18em; + margin: 0 0 1.2em; padding: 0; + border: 1px dashed silver; + } + ul#navigation li { + list-style: none; + margin: 0; padding: 0.2em; + } + ul#navigation a { + display: block; + padding: 0.2em; + font-weight: bold; + } + ul#navigation a:link { + color: black; background-color: #eee; + } + ul#navigation a:visited { + color: #666; background-color: #eee; + } + ul#navigation a:hover { + color: red; background-color: white; + } + ul#navigation a:active { + color: white; background-color: gray; + } + + div#content { + margin: 0 1em 1em 16em; + padding: 0 1em; + } + * html div#content { + height: 1em; /* Workaround 3-Pixel-Bug of Internet Explorers */ + } + div#content h2 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + div#content p { + font-size: 1em; + margin: 1em 0; + } + table { + width:100%; + border-collapse:collapse; + } + table td, table th { + border:1px solid #000; + padding:3px 7px 2px 7px; + } + table th { + font-weight:bold; + background: #ccc; + color: black; + } + table tr:nth-child(odd) td { + background: #efefef; + } + table tr:nth-child(even) td { + background: #fff; + } + + + + + + + /* + * Hides all "hideable" div-containers + */ + function hideAll() { + allElements = document.getElementsByTagName("div"); + for (i = 0; i < allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display="none"; + } + } + return; + } + + /* + * Shows one div-container and hides the other. + * @param id id of the element to show + */ + function change(id) { + hideAll(); + e = document.getElementById(id); + if (e.style.display=="none") { + e.style.display=""; + } + window.scrollTo(0, 0); + return; + } + + /* + * Shows only the first data row. + * Used in body:onload so the user could directly see some messages. + */ + function openFirst() { + hideAll(); + for (i = 0; i < allElements.length; i++) { + if (allElements[i].className=="hideable") { + allElements[i].style.display=""; + return; + } + } + return; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames.xsl new file mode 100644 index 00000000..c79c0b7b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-frames.xsl @@ -0,0 +1,299 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckStyle Audit + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. + If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + + + + + +

CheckStyle Audit

Designed for use with + CheckStyle and + Ant.
+
+
+ + + + + + + + + + + + +
+ + + + + +
+ + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .oddrow td { + background: #efefef; + } + .evenrow td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + +

Files

+

+ + + + + +
+

+ + +
+ + +

Files

+ + + + + + + + +
NameErrors
+
+ + + + + + + + files/.html + + + + + + + + + + + + + + files/.html + + + + + + + + + + + + + + + + + ../ + + + + + + ../ + + + + + + + + + stylesheet.css + + + + +

File

+ + + + + + + + + + + + +
Error DescriptionLine:Column
:
+ + +
+
+ + +

Summary

+ + + + + + + + + + + + + + + +
Total FilesFiles With ErrorsErrors
+
+ + + + oddrow + evenrow + + +
\ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-text.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-text.xsl new file mode 100644 index 00000000..7359e416 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-text.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + : + + : + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-xdoc.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-xdoc.xsl new file mode 100644 index 00000000..5fc6eab3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/checkstyle/checkstyle-xdoc.xsl @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + Checkstyle Audit + + + + + + + + + + + + +
+ + + + + + + + +
NameErrors
+
+
+ + + + + + + + files.html + + + + + + + + + + + + + Checkstyle Audit + + + +
+ + + + + + + + + + + + +
Error DescriptionLine
+
+ +
+
+
+ + +
+ + + + + + + + + + + + + + + +
FilesFiles With ErrorsErrors
+
+
+ + + + oddrow + evenrow + + +
+ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/common2master.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/common2master.xsl new file mode 100644 index 00000000..da1527e9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/common2master.xsl @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + +]]> + + + + + <target name="" description=""> + <iterate target=""/> + </target> + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/coverage-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/coverage-frames.xsl new file mode 100644 index 00000000..9603597e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/coverage-frames.xsl @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Coverage Results. + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + +

Classes

+ + + + + + + / + .html + + + + + +
+ +
+ + +
+ + + + + + + + +

Home

+

Packages

+ + + + + + + +
+ + + +
+ + +
+ + + + + + + + + +

Summary

+ + + + + + + + + + + + + +
Reported ClassesMethods HitLines Hit
+ + + + +
+ To ensure accurate test runs on Java applications, developers need to know how much of + the code has been tested, and where to find any untested code. Coverage helps you + locate untested code, and measure precisely how much code has been exercised. + The result is a higher quality application in a shorter period of time. +

+

+ +

Packages

+ + + + + + + + + + + + +
+ + + +
+ + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+
+ +

Classes

+ + + + + + + +
+ +
+ + +
+ + + + + + + + + + + + +

Package

+ + + +
+ + +

Classes

+ + + + + +
+
+ + + +
+ + + + + + + + + + + + +

Class .

+ + + + + +
+ + +

Methods

+ + + + + +
+ + + + +
+ + + + + + + + + + + + +
+ + http://jakarta.apache.org + +

Source Code Coverage

Designed for use with Sitraka JProbe and Ant.
+
+
+ + + + + + + + + Name + Methods Hit + Lines Hit + + + + + + Name + Lines Hit + + + + + + + + + + + + + + + Name + Methods Hit + Lines Hit + + + + + + + + + + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + a + b + + + +
+ + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend-frames.xsl new file mode 100644 index 00000000..80287345 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend-frames.xsl @@ -0,0 +1,485 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JDepend Analysis + + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + + + + + + + + + + +

Summary

+ + [summary] + [packages] + [cycles] + [explanations] +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTotal ClassesAbstract ClassesConcrete ClassesAfferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
+ + overview-packages.html#PK + + + +
+ +
+ + +
+ + + + + + + + +

Packages

+ + [summary] + [packages] + [cycles] + [explanations] +
+ + + +

PK +

+ + + + + + + +
Afferent Couplings: Efferent Couplings: Abstractness: Instability: Distance:
+ + + + + + + + + + + + + + +
Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
+ + None + + +
+
+
+ + None + + +
+
+
+ + None + + + + overview-packages.html#PK + +
+
+
+ + None + + + + overview-packages.html#PK + +
+
+
+
+
+ +
+ [summary] + [packages] + [cycles] + [explanations] +
+ + +
+ + + + + + + + +

Cycles

+ + [summary] + [packages] + [cycles] + [explanations] +
+ + + +

There are no cyclic dependancies.

+
+ +

#CY

+ +
+

+
+ +
+ [summary] + [packages] + [cycles] + [explanations] +
+ + +
+ + + + + + + + + +

Explanations

+ + [summary] + [packages] + [cycles] + [explanations] +
+ +

The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

+ +

Number of Classes

+

The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.

+

Afferent Couplings

+

The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.

+

Efferent Couplings

+

The number of other packages that the classes in the package depend upon is an indicator of the package's independence.

+

Abstractness

+

The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package.

+

The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package.

+

Instability

+

The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change.

+

The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package.

+

Distance

+

The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability.

+

A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0).

+

The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible.

+ + + +
+ + + + + + + + + +
+ [summary] + [packages] + [cycles] + [explanations] +
+

Packages

+ + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + Not Analyzed: + + + + + + + + + + + +
+ [summary] + [packages] + [cycles] + [explanations] +
+

Cycles

+ + + + +
+ + +
+ + + + + + + + + + + +

JDepend Analysis

+ + + + + +
Designed for use with JDepend and Ant.
+
+
+ +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend.xsl new file mode 100644 index 00000000..f8132975 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/jdepend.xsl @@ -0,0 +1,276 @@ + + + + + + + + + + + JDepend Analysis + + + + + + + + +

JDepend Analysis

+

Designed for use with JDepend and Ant.

+
+ +
+

Summary

+
+ [summary] + [packages] + [cycles] + [explanations] +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PackageTotal ClassesAbstract ClassesConcrete ClassesAfferent CouplingsEfferent CouplingsAbstractnessInstabilityDistance
+ + #PK + + + +
+ +
+ +
+

Packages

+
+ [summary] + [packages] + [cycles] + [explanations] +
+ + + +

PK +

+ + + + + + + +
Afferent Couplings: Efferent Couplings: Abstractness: Instability: Distance:
+ + + + + + + + + + + + + + +
Abstract ClassesConcrete ClassesUsed by PackagesUses Packages
+ + None + + +
+
+
+ + None + + +
+
+
+ + None + + + + #PK + +
+
+
+ + None + + + + #PK + +
+
+
+
+
+ +
+

Cycles

+
+ [summary] + [packages] + [cycles] + [explanations] +
+ + +

There are no cyclic dependancies.

+
+ +

+ +
+

+
+ +
+

Explanations

+
+ [summary] + [packages] + [cycles] + [explanations] +
+ +

The following explanations are for quick reference and are lifted directly from the original JDepend documentation.

+ +

Number of Classes

+

The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.

+

Afferent Couplings

+

The number of other packages that depend upon classes within the package is an indicator of the package's responsibility.

+

Efferent Couplings

+

The number of other packages that the classes in the package depend upon is an indicator of the package's independence.

+

Abstractness

+

The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package.

+

The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package.

+

Instability

+

The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change.

+

The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package.

+

Distance

+

The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability.

+

A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0).

+

The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible.

+ + + +
+ +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames-xalan1.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames-xalan1.xsl new file mode 100644 index 00000000..fbc28e13 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames-xalan1.xsl @@ -0,0 +1,745 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + Standard Output from <xsl:value-of select="@name"/> + + +
+ + +
+
+ + + + + Standard Error from <xsl:value-of select="@name"/> + + +
+ + +
+
+
+
+ + + + + Unit Test Results. + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

Class

+ + + + + +
+ +

Tests

+ + + + + + + + + +
+ + + + + + + + + +
+ + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
+

+ + <none> +

+
+ +

Classes

+ + + + + + + +
+ +
+ + +
+ + + + + + + All Unit Test Classes + + + + + +

Classes

+ + + + +
+ + +
+ + + + + + + + + / + .html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

Home

+

Packages

+ + + + +
+ + +
+ + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

Summary

+ + + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + +
TestsFailuresErrorsSkippedSuccess rateTime
+ + + + + + + +
+ + + + +
+ Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
+ +

Packages

+ + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + +
+ + <none> + + + + +
+ + +
+ + + + + + + + + + + + open('package-frame.html','classListFrame') + +

Package

+ + + + + +

Classes

+

+ + + + + +
+

+
+ + +
+ + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

Unit Test Results

+ + + + + +
Designed for use with JUnit and Ant.
+
+
+ + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

+ + + + + + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames.xsl new file mode 100644 index 00000000..afea6e01 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-frames.xsl @@ -0,0 +1,972 @@ + + + + + + + + +Unit Test Results. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + Standard Output from <xsl:value-of select="@name"/> + + +
+ + +
+
+ + + + + Standard Error from <xsl:value-of select="@name"/> + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + <xsl:value-of select="$TITLE"/> + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + + + + All Failures + + + All Errors + + + All Skipped + + + All Tests + + + + + Unit Test Results: <xsl:value-of select="$title"/> + + + + + + open('allclasses-frame.html','classListFrame') + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

Class

+ + + + + +
+ + + +

Failures

+
+ +

Errors

+
+ +

Skipped

+
+ +

Tests

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
+

+ + <none> +

+
+ +

Classes

+ + + + + + + +
+ +
+ + +
+ + + + + + + All Unit Test Classes + + + + + +

Classes

+ + + + +
+ + +
+ + + + + + + + + / + _.html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

Home

+

Packages

+ + + + +
+ + +
+ + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

Summary

+ + + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + +
TestsFailuresErrorsSkippedSuccess rateTime
+ + + + + + + +
+ + + + +
+ Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
+ +

Packages

+ + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + +
+ + <none> + + + + +
+ + +
+ + + + + + + + + + + + open('package-frame.html','classListFrame') + +

Package

+ + + + + +

Classes

+

+ + + + + +
+

+
+ + +
+ + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

+ + + + + +
Designed for use with JUnit and Ant.
+
+
+ + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + + + Class + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + + + + + + + + + + + + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

+ + + + + + + +
+ + + + + + + + + + + + + + + 32 + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ + + +
+
+ + + + + + + + + + +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/junit-noframes.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-noframes.xsl new file mode 100644 index 00000000..bd7002a9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/junit-noframes.xsl @@ -0,0 +1,513 @@ + + + + + + +Unit Test Results. + + + + + + <xsl:value-of select="$TITLE"/> + + + + + + + + + + +
+ + + +
+ + + +
+ + + + + + +
+ + + + + + + + +

Packages

+ Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. + + + + + + + + + + + + + + + + + + Failure + Error + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + +

Package

+ + + + + + +
+ Back to top +

+

+ + + + + + + + +

TestCase

+ + + + + + + + + + +
+ +

+ + Back to top + + + + +

Summary

+ + + + + + + + + + + + + + + + + + + Failure + Error + + + + + + + + + + +
TestsFailuresErrorsSkippedSuccess rateTime
+ + + + + + + +
+ + + + +
+ Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
+
+ + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + +

+ + + + + +
Designed for use with JUnit and Ant.
+
+
+ + + + Name + Tests + Errors + Failures + Skipped + Time(s) + + + + + + + Name + Tests + Errors + Failures + Skipped + Time(s) + Time Stamp + Host + + + + + + + Name + Status + Type + Time(s) + + + + + + + + + + + Failure + Error + + + + + + + + + + + + + + + + + + + + + + + + Error + + + + + + Failure + + + + Error + + + + Skipped + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + + +

+ + + +
+ + +
+ + + + + + + + + + + + + + + 32 + + + + + + + + + + + + +
+ + + +
+ + +
+ + + +
+ + + +
+
+ + + + + + + + + + + +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/log.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/log.xsl new file mode 100644 index 00000000..5040993b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/log.xsl @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + +
+ + http://jakarta.apache.org + + + Apache Ant +
+ + + +

+ + + + + +
+ + + + + + failed + complete + + + + + + + + + + + + + +
Build FailedBuild CompleteTotal Time:
+ +
+ See the stacktrace. +
+
+ + + + + +
ant.file
ant.version
java.version
os.name
+ +

Build events

+ + + + + + + +
targettaskmessage
+

+ + + +

Error details

+ + +
+
+
+ +

+
+ + + + + + + a + b + + + [ ] + + + + + + +
diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/manifest b/framework/src/ant/apache-ant-1.9.6/src/etc/manifest new file mode 100644 index 00000000..758bc0f0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/manifest @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Main-Class: org.apache.tools.ant.Main + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/maudit-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/maudit-frames.xsl new file mode 100644 index 00000000..c81f8dc3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/maudit-frames.xsl @@ -0,0 +1,502 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + Audit Results. + + + + + + + + + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + + + + + + + + + + + + + + +

Class .

+ + + + +
+ +

Violations

+ + + + + +
+ + + +
+ + + + + + + + + + + + + + + + +
+

+
+ +

Classes

+ + + + +
+ + +
+ + + + + +
+ + + + + + + + + + + + + + +

Classes

+ + + + +
+ + +
+ + + + + + + + + + / + .html + + + + + + + + + + + + + + + + + +

Home

+

Packages

+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +

Summary

+ + + + + + + + + + + +
Audited classesReported classesViolations
+ + + + +
+ Note: Rules checked have originated from style guidelines suggested by the language designers, + experience from the Java development community and insite experience. Violations are generally + reported with a reference to the Java Language Specifications (JLS x.x.x) + and Metamata Audit rules (x.x). + Please consult these documents for additional information about violations. +

+ Rules checked also enforce adherence to Sun Java coding guidelines in use at Jakarta. +

+ One should note that these violations do not necessary underline errors but should be used + as an indication for possible errors. As always, use your best judgment and review + them carefully, it might save you hours of debugging. +

+ +

Packages

+ + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + open('package-frame.html','classListFrame') + +

Package

+ + + + +

Classes

+ + + + + +
+
+ + + +
+ + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + + + + + + + + + +
+ + http://jakarta.apache.org + +

Source Code Audit

Designed for use with Webgain QA/Metamata Audit and Ant.
+
+
+ + + + + + + + + + Name + Violations + + + + + + + Line + Message + + + + + + + + + + + + + + + + + + + + + + + + + a + b + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/mmetrics-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/mmetrics-frames.xsl new file mode 100644 index 00000000..2b0f6b81 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/mmetrics-frames.xsl @@ -0,0 +1,1023 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + Metrics Results. + + + + + + + + + <H2>Frame Alert</H2> + <P> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </P> + + + + + + + + + + + +

Metrics Reference

+V(G) | +LOC | +DIT | +NOA | +NRM | +NLM | +WMC | +RFC | +DAC | +FANOUT | +CBO | +LCOM | +NOC + + +

Cyclomatic Complexity - V(G)

+This metric was introduced in the 1970s to measure the amount of control +flow complexity or branching complexity in a module such as a +subroutine. It gives the number of paths that may be taken through the +code, and was initially developed to give some measure of the cost of +producing a test case for the module by executing each path. +

+Methods with a high cyclomatic complexity tend to be more difficult to +understand and maintain. In general the more complex the methods of an +application, the more difficult it will be to test it, and this will adversely +affect its reliability. +

+V(G) is a measure of the control flow complexity of a method or +constructor. It counts the number of branches in the body of the method, +defined as: +

    +
  • while statements;
  • +
  • if statements;
  • +
  • for statements.
  • +
+ +The metric can also be configured to count each case of a switch +statement as well. + +
+

Lines of Code - LOC

+ +This is perhaps the simplest of all the metrics to define and compute. +Counting lines has a long history as a software metric dating from before +the rise of structured programming, and it is still in widespread use today. +The size of a method affects the ease with which it can be understood, its +reusability and its maintainability. There are a variety of ways that the size +can be calculated. These include counting all the lines of code, the number +of statements, the blank lines of code, the lines of commentary, and the +lines consisting only of syntax such as block delimiters. +

+This metric can also be used for sizing other constructs as well, for +example, the overall size of a Java class or package can be measured by +counting the number of source lines it consists of. +

+LOC can be used to determine the size of a compilation unit (source file), +class or interface, method, constructor, or field. It can be configured to +ignore: +

    +
  • blank lines;
  • +
  • lines consisting only of comments;
  • +
  • lines consisting only of opening and closing braces.
  • +
+ +
+

Depth of Inheritance Hierarchy - DIT

+ +This metric calculates how far down the inheritance hierarchy a class is +declared. In Java all classes have java.lang.Object as their ultimate +superclass, which is defined to have a depth of 1. So a class that +immediately extends java.lang.Object has a metric value of 2; any of its +subclasses will have a value of 3, and so on. +

+A class that is deep within the tree inherits more methods and state +variables, thereby increasing its complexity and making it difficult to +predict its behavior. It can be harder to understand a system with many +inheritance layers. +

+DIT is defined for classes and interfaces: +

    +
  • all interface types have a depth of 1;
  • +
  • the class java.lang.Object has a depth of 1;
  • +
  • all other classes have a depth of 1 + the depth of their super class.
  • +
+ +
+

Number of Attributes - NOA

+ +The number of distinct state variables in a class serves as one measure of +its complexity. The more state a class represents the more difficult it is to +maintain invariants for it. It also hinders comprehensibility and reuse. +

+In Java, state can be exposed to subclasses through protected fields, which +entails that the subclass also be aware of and maintain any invariants. This +interference with the class's data encapsulation can be a source of defects +and hidden dependencies between the state variables. +

+NOA is defined for classes and interfaces. It counts the number of fields +declared in the class or interface. + + +

Number of Remote Methods - NRM

+ +NRM is defined for classes. A remote method call is defined as an +invocation of a method that is not declared in any of: +
    +
  • the class itself;
  • +
  • a class or interface that the class extends or implements;
  • +
  • a class or method that extends the class.
  • +
+ +The value is the count of all the remote method calls in all of the methods +and constructors of the class. + +
+

Number of Local Methods - NLM

+ +NLM is defined for classes and interfaces. A local method is defined as a +method that is declared in the class or interface. NLM can be configured to +include the local methods of all of the class's superclasses. Methods with +public, protected, package and private visibility can be independently +counted by setting configuration parameters. + +
+

Weighted Methods per Class - WMC

+ +If the number of methods in a class can be determined during the design +and modeling phase of a project, it can be used as a predictor of how +much time and effort is needed to develop, debug and maintain it. This +metric can be further refined by incorporating a weighting for the +complexity of each method. The usual weighting is given by the cyclomatic +complexity of the method. +

+The subclasses of a class inherit all of its public and protected methods, +and possibly its package methods as well, so the number of methods a +class has directly impacts the complexity of its subclasses. Classes with +large numbers of methods are often specific to a particular application, +reducing the ability to reuse them. +

+The definition of WMC is based upon NLM, and it provides the same +configuration parameters for counting inherited methods and of varying +visibility. The main difference is that NLM always counts each method as 1, +whereas WMC will weight each method. There are two weighting schemes: +

    +
  • V(G) the cyclomatic complexity of the method is used as its weight. + Methods from class files are given a V(G) of 1.
  • +
  • the arity, or the number of parameters of the method are used to + determine the weight.
  • +
+ +
+

Response For Class - RFC

+ +The response set of a class is the set of all methods that can be invoked as +a result of a message sent to an object of the class. This includes methods +in the class's inheritance hierarchy and methods that can be invoked on +other objects. The Response For Class metric is defined to be size of the +response set for the class. A class which provides a larger response set is +considered to be more complex than one with a smaller response set. +

+One reason for this is that if a method call on a class can result in a large +number of different method calls on the target and other classes, then it +can be harder to test the behavior of the class and debug problems. It will +typically require a deeper understanding of the potential interactions that +objects of the class can have with the rest of the system. +

+RFC is defined as the sum of NLM and NRM for the class. The local methods +include all of the public, protected, package and private methods, but not +methods declared only in a superclass. + + +

Data Abstraction Coupling - DAC

+ +DAC is defined for classes and interfaces. It counts the number of reference +types that are used in the field declarations of the class or interface. The +component types of arrays are also counted. Any field with a type that is +either a supertype or a subtype of the class is not counted. + + +

Fan Out - FANOUT

+ +FANOUT is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +
    +
  • field declarations;
  • +
  • formal parameters and return types;
  • +
  • throws declarations;
  • +
  • local variables.
  • +
+ +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +
+

Coupling Between Objects - CBO

+ +When one object or class uses another object or class they are said to be +coupled. One major source of coupling is that between a superclass and a +subclass. A coupling is also introduced when a method or field in another +class is accessed, or when an object of another class is passed into or out +of a method invocation. Coupling Between Objects is a measure of the +non-inheritance coupling between two objects. +

+A high value of coupling reduces the modularity of the class and makes +reuse more difficult. The more independent a class is the more likely it is +that it will be possible to reuse it in another part of the system. When a +class is coupled to another class it becomes sensitive to changes in that +class, thereby making maintenance for difficult. In addition, a class that is +overly dependent on other classes can be difficult to understand and test in +isolation. +

+CBO is defined for classes and interfaces, constructors and methods. It +counts the number of reference types that are used in: +

    +
  • field declarations
  • +
  • formal parameters and return types
  • +
  • throws declarations
  • +
  • local variables
  • +
+ +It also counts: +
    +
  • types from which field and method selections are made
  • +
+ +The component types of arrays are also counted. Any type that is either a +supertype or a subtype of the class is not counted. + +
+

Lack of Cohesion Of Methods - LCOM

+ +The cohesion of a class is the degree to which its methods are related to +each other. It is determined by examining the pattern of state variable +accesses within the set of methods. If all the methods access the same state +variables then they have high cohesion; if they access disjoint sets of +variables then the cohesion is low. An extreme example of low cohesion +would be if none of the methods accessed any of the state variables. + +If a class exhibits low method cohesion it indicates that the design of the +class has probably been partitioned incorrectly, and could benefit by being +split into more classes with individually higher cohesion. On the other +hand, a high value of cohesion (a low lack of cohesion) implies that the +class is well designed. A cohesive class will tend to provide a high degree +of encapsulation, whereas a lack of cohesion decreases encapsulation and +increases complexity. +

+Another form of cohesion that is useful for Java programs is cohesion +between nested and enclosing classes. A nested class that has very low +cohesion with its enclosing class would probably better designed as a peer +class rather than a nested class. +

+LCOM is defined for classes. Operationally, LCOM takes each pair of +methods in the class and determines the set of fields they each access. If +they have disjoint sets of field accesses increase the count P by one. If they +share at least one field access then increase Q by one. After considering +each pair of methods, +LCOM = (P > Q) ? (P - Q) : 0 +

+Indirect access to fields via local methods can be considered by setting a +metric configuration parameter. + + +

Number Of Classes - NOC

+ +The overall size of the system can be estimated by calculating the number +of classes it contains. A large system with more classes is more complex +than a smaller one because the number of potential interactions between +objects is higher. This reduces the comprehensibility of the system which +in turn makes it harder to test, debug and maintain. +

+If the number of classes in the system can be projected during the initial +design phase of the project it can serve as a base for estimating the total +effort and cost of developing, debugging and maintaining the system. +

+The NOC metric can also usefully be applied at the package and class level +as well as the total system. +

+NOCL is defined for class and interfaces. It counts the number of classes or +interfaces that are declared. This is usually 1, but nested class declarations +will increase this number. + + + + + + + .bannercell { + border: 0px; + padding: 0px; + } + body { + margin-left: 10; + margin-right: 10; + font:normal 80% arial,helvetica,sanserif; + background-color:#FFFFFF; + color:#000000; + } + .a td { + background: #efefef; + } + .b td { + background: #fff; + } + th, td { + text-align: left; + vertical-align: top; + } + th { + font-weight:bold; + background: #ccc; + color: black; + } + table, th, td { + font-size:100%; + border: none + } + table.log tr td, tr th { + + } + h2 { + font-weight:bold; + font-size:140%; + margin-bottom: 5; + } + h3 { + font-size:100%; + font-weight:bold; + background: #525D76; + color: white; + text-decoration: none; + padding: 5px; + margin-right: 2px; + margin-left: 2px; + margin-bottom: 0; + } + .Error { + font-weight:bold; color:red; + } + + + + + + + + + + + + + + + + +

Class .

+ + + +
+ +

Methods

+ + + +
+ + + + +
+ + + + + + + + + + + + + + + +
+

+
+ +

Classes

+ + + + + + + + +
+ +
+ + +
+ + + + + + + + + + + +

Classes

+ + + + + +
+ + +
+ + + + + + +
+ + + / + + .html + + + + + + + + + + + + + + + + +

Home

+

Packages

+ + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + +

Summary

+ + + + + + + + + + + + + + + + + +
V(G)LOCDITNOANRMNLMWMCRFCDACFANOUTCBOLCOMNOCL
+ + + + +
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. +

+ The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. +

+ +

Packages

+ + + + + + +
+ + + + +
+ + + + + + + + + + + +

Package

+ + + + +
+ + + + + +
+ Note: Metrics evaluate the quality of software by analyzing the program source and quantifying + various kind of complexity. Complexity is a common source of problems and defects in software. + High complexity makes it more difficult to develop, understand, maintain, extend, test and debug + a program. +

+ The primary use of metrics is to focus your attention on those parts of code that potentially are + complexity hot spots. Once the complex areas your program have been uncovered, you can take remedial + actions. + For additional information about metrics and their meaning, please consult + Metamata Metrics manual. +

+ + + +

Classes

+ + + + + + +
+
+ + + + +
+ + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + + + + + + + + + + + +
+ + http://jakarta.apache.org + +

Source Code Metrics

Designed for use with Webgain QA/Metamata Metrics and Ant.
+
+
+ + + + + + + + + Name + V(G) + LOC + DIT + NOA + NRM + NLM + WMC + RFC + DAC + FANOUT + CBO + LCOM + NOCL + + + + + + + Name + V(G) + LOC + FANOUT + CBO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + a + b + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + + + + +
+ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/performance/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/build.xml new file mode 100644 index 00000000..c3e3ed9e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/build.xml @@ -0,0 +1,124 @@ + + + + + This build file is designed to report the performance + of ant from various releases. + to use: + * install ant-contrib.jar to ($ANT_HOME|$HOME/.ant)/lib + * install beanshell jar and bsf jar + * use unix (with bash) or install cygwin + * set the env variables {whichever needs testing} + ANT_HOME + ANT_HOME_6_5 (the directory containing ant 1.6.5) + ANT_HOME_6_4 + ANT_HOME_5_4 + + * run ant + For example: + export ANT_HOME="c:/cygwin/home/me/svn/trunk/dist" + export ANT_HOME_5_4="l:/apps/apache-ant-1.5.4" + ant.bat + + TODO: more build files. + + + + + + + + + + + + + + + + + export ANT_HOME=${@{env-ant}} + echo $ANT_HOME + echo -n "-- props.xml --: " + $ANT_HOME/bin/ant -f build/gen/props.xml | grep time + echo -n "-- ant-call.xml --: " + $ANT_HOME/bin/ant -f build/gen/ant-call.xml | grep time + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml new file mode 100644 index 00000000..5628a46c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/performance/dirscanner.xml @@ -0,0 +1,316 @@ + + + + + Contains tests that measure the relative performance of Ant's + directory scanner. This is mainly used to compare performance + changes between Ant releases. + + Before you run any tests, you need to set up the environment by + running the setup or big-setup target. Note that this will create + a directory tree holding 10000 (setup) or 100000 (big-setup) + directories and about 22000 (setup) or 222000 (big-setup) files. + + The setup/big-setup targets require Ant 1.7.0 or later. It may be + a good idea to use the -logfile option. + + Consider taking a nap if you run Ant 1.6.x or 1.7.0 against a + "big" setup. + + If Ant 1.6.x is detected or the property ant16 has been specified + on the command line then the tests will use the pathconvert task + instead of resourcecount. So if you want to compare Ant 1.6.x + with later versions of you must specify ant16 on the command line + during your 1.[78].x tests. + + The tests will use the default settings of followsymlinks="true" + and casesensitive="true" unless those values get overwritten by + the properties symlinks and/or casesensitive on the command line. + + + + + + + + + + + + This is ${ant.version} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/README.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/README.txt new file mode 100644 index 00000000..086d8fa8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/README.txt @@ -0,0 +1,53 @@ +Building Ant with Maven +----------------------- + +The Ant jars can be built using Maven and the POMS present in this directory. + +Libs not available in the maven repository + +groupId artifactId version comment +com.bea weblogic 8.1.3.0 download it +com.bea weblogicclasses 5.1 a newer version can do. +jai jai-core 1.1.2_01 fetch.xml +jai jai-codec 1.1.2.1 fetch.xml +com.ibm.netrexx netrexx 2.0.5 fetch.xml +com.starteam starteam-sdk 5.2 the original file is called starteam-sdk.jar +stylebook stylebook 1.0-b2 the original file is called stylebook-1.0-b2.jar + +to install a jar file into your local Maven cache, do this + +mvn install:install-file -DgroupId=foo.org -DartifactId=xx -Dversion=x.y -Dpackaging=jar -Dfile=/a/b/foo.jar + +HOW TO BUILD : + +from this directory, type + +mvn install (or mvn package) + +If you do not have all the dependencies, you can remove the modules that you will not be able to build +from the pom.xml in this directory. + +You also might want to disable the tests. + +mvn install -Dmaven.test.skip=true + + + +TODO : + + * see if the dependency to weblogicclasses.jar can be replaced by a dependency to some j2ee.jar from Sun, +as it supplies some javax.ejb classes which are required at compile time. + + +PROBLEMS : + + * the unit tests cannot run properly, the maven-surefire-plugin sets a system property basedir +which make a large part of our tests fail + + * JIRA issue http://jira.codehaus.org/browse/MSUREFIRE-177 asking the Maven colleagues to fix this. :-) + +REFERENCES : + +about skipping tests : +http://maven.apache.org/plugins/maven-surefire-plugin/examples/skipping-test.html + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-antlr/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-antlr/pom.xml new file mode 100644 index 00000000..f3aa7b33 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-antlr/pom.xml @@ -0,0 +1,75 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-antlr + 1.9.6 + Apache Ant + ANTLR + antlr specific task. + The implementation forks a java process, therefore the antlr jar file is only needed at runtime + + + org.apache.ant + ant + 1.9.6 + true + compile + + + + antlr + antlr + 2.7.2 + true + runtime + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/ANTLR* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bcel/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bcel/pom.xml new file mode 100644 index 00000000..44c6c890 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bcel/pom.xml @@ -0,0 +1,71 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-bcel + 1.9.6 + Apache Ant + BCEL + + + org.apache.ant + ant + 1.9.6 + compile + + + bcel + bcel + 5.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/util/depend/bcel/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bsf/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bsf/pom.xml new file mode 100644 index 00000000..d5180290 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-bsf/pom.xml @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-bsf + 1.9.6 + Apache Ant + BSF + + + org.apache.ant + ant + 1.9.6 + compile + + + bsf + bsf + 2.4.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/Script* + org/apache/tools/ant/taskdefs/optional/script/** + org/apache/tools/ant/types/optional/*Script* + org/apache/tools/ant/util/Script* + org/apache/tools/ant/util/optional/Script* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-log4j/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-log4j/pom.xml new file mode 100644 index 00000000..5caad403 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-log4j/pom.xml @@ -0,0 +1,69 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-log4j + 1.9.6 + Apache Ant + Log4J + + + org.apache.ant + ant + 1.9.6 + compile + + + log4j + log4j + 1.2.13 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/listener/Log4jListener* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-oro/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-oro/pom.xml new file mode 100644 index 00000000..b722bab3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-oro/pom.xml @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-oro + 1.9.6 + Apache Ant + Apache Oro + + + org.apache.ant + ant + 1.9.6 + compile + + + oro + oro + 2.0.8 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/util/regexp/JakartaOro* + + + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/util/regexp/Regexp* + + + + + ../../../../src/main + ../../../../src/tests/junit + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-regexp/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-regexp/pom.xml new file mode 100644 index 00000000..6c306210 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-regexp/pom.xml @@ -0,0 +1,70 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-regexp + 1.9.6 + Apache Ant + Apache Regexp + + + org.apache.ant + ant + 1.9.6 + compile + + + regexp + regexp + 1.3 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/util/regexp/JakartaRegexp* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-resolver/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-resolver/pom.xml new file mode 100644 index 00000000..bd3dfa35 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-resolver/pom.xml @@ -0,0 +1,69 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-resolver + 1.9.6 + Apache Ant + Apache Resolver + + + org.apache.ant + ant + 1.9.6 + compile + + + xml-resolver + xml-resolver + 1.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/types/resolver/** + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-xalan2/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-xalan2/pom.xml new file mode 100644 index 00000000..73f8442f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-apache-xalan2/pom.xml @@ -0,0 +1,94 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-apache-xalan2 + 1.9.6 + Apache Ant + Xalan 2 + contains Xalan2-specific features + + + org.apache.ant + ant + 1.9.6 + compile + + + xalan + xalan + 2.7.1 + compile + + + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-logging/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-logging/pom.xml new file mode 100644 index 00000000..2415823b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-logging/pom.xml @@ -0,0 +1,70 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-commons-logging + 1.9.6 + Apache Ant + Commons Logging + Ant Listener based on commons-logging + + + org.apache.ant + ant + 1.9.6 + compile + + + commons-logging + commons-logging-api + 1.0.4 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/listener/CommonsLoggingListener* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-net/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-net/pom.xml new file mode 100644 index 00000000..73144a65 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-commons-net/pom.xml @@ -0,0 +1,75 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-commons-net + 1.9.6 + Apache Ant + Commons Net + ftp, rexec and telnet tasks + + + org.apache.ant + ant + 1.9.6 + compile + + + commons-net + commons-net + 1.4.0 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/net/RExec* + org/apache/tools/ant/taskdefs/optional/net/TelnetTask* + + + org/apache/tools/ant/taskdefs/optional/net/FTP* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jai/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jai/pom.xml new file mode 100644 index 00000000..1ac8f4f1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jai/pom.xml @@ -0,0 +1,85 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jai + 1.9.6 + Apache Ant + JAI + image task and corresponding types. + + + + org.apache.ant + ant + 1.9.6 + compile + + + javax.media + jai-core + 1.1.3 + + + com.sun.media + jai-codec + 1.1.3 + + + + + + jboss + JBoss + https://repository.jboss.org/nexus/content/groups/public/ + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/image/* + org/apache/tools/ant/types/optional/image/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-javamail/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-javamail/pom.xml new file mode 100644 index 00000000..543c4977 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-javamail/pom.xml @@ -0,0 +1,78 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-javamail + 1.9.6 + Apache Ant + JavaMail + implementation of the mail task based on javamail. + Required to send emails to SMTP servers using user/password combinations + or to send mail over SSL + + + org.apache.ant + ant + 1.9.6 + compile + + + javax.mail + mail + 1.4 + compile + + + javax.activation + activation + 1.1 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/email/MimeMailer* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jdepend/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jdepend/pom.xml new file mode 100644 index 00000000..ecbaaad6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jdepend/pom.xml @@ -0,0 +1,72 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jdepend + 1.9.6 + Apache Ant + JDepend + task jdepend invoking the jdepend parser. There is also a version 2.9.1 of the + jdepend parser available on the maven repository + + + org.apache.ant + ant + 1.9.6 + compile + + + jdepend + jdepend + 2.7 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/jdepend/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jmf/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jmf/pom.xml new file mode 100644 index 00000000..278a01f2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jmf/pom.xml @@ -0,0 +1,65 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jmf + 1.9.6 + Apache Ant + JMF + contains the sound task and a soundplayer listener + download the dependency from http://java.sun.com/products/java-media/jmf/ + + + org.apache.ant + ant + 1.9.6 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/sound/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jsch/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jsch/pom.xml new file mode 100644 index 00000000..39444a3f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-jsch/pom.xml @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-jsch + 1.9.6 + Apache Ant + JSch + contains the sshexec and scp tasks + + + + org.apache.ant + ant + 1.9.6 + compile + + + com.jcraft + jsch + 0.1.50 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/ssh/* + + + org/apache/tools/ant/taskdefs/optional/ssh/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit/pom.xml new file mode 100644 index 00000000..32926a43 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit/pom.xml @@ -0,0 +1,101 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-junit + 1.9.6 + Apache Ant + JUnit + contains the junit and junirreport tasks + + + org.apache.ant + ant + 1.9.6 + compile + + + junit + junit + 4.11 + compile + + + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/junit/* + + + org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter* + org/apache/tools/ant/taskdefs/optional/junit/CustomJUnit4TestAdapterCache* + + + org/apache/tools/ant/taskdefs/optional/junit/ + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit4/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit4/pom.xml new file mode 100644 index 00000000..e40d984f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-junit4/pom.xml @@ -0,0 +1,71 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-junit4 + 1.9.6 + Apache Ant + JUnit 4 + contains JUnit 4.x support + + + org.apache.ant + ant + 1.9.6 + compile + + + junit + junit + 4.11 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/junit/JUnit4TestMethodAdapter* + org/apache/tools/ant/taskdefs/optional/junit/CustomJUnit4TestAdapterCache* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-launcher/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-launcher/pom.xml new file mode 100644 index 00000000..02ecff8f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-launcher/pom.xml @@ -0,0 +1,57 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-launcher + 1.9.6 + Apache Ant Launcher + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/launch/*.java + + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/ant-launcher/classes + ../../../../target/ant-launcher/testcases + ../../../../target/ant-launcher + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-netrexx/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-netrexx/pom.xml new file mode 100644 index 00000000..505ad929 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-netrexx/pom.xml @@ -0,0 +1,98 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-netrexx + 1.9.6 + Apache Ant + NetRexx + NetRexxC task + dependency can be downloaded from http://www.ibm.com/software/awdtools/netrexx/download.html + + + org.apache.ant + ant + 1.9.6 + compile + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/NetRexxC* + + + + ${basedir}/../../../../lib/optional + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.4 + + + validate + + + + + + + + + run + + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-swing/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-swing/pom.xml new file mode 100644 index 00000000..1fd3e6a8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-swing/pom.xml @@ -0,0 +1,66 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-swing + 1.9.6 + Apache Ant + Swing + a listener and a splash task based on Swing + + + org.apache.ant + ant + 1.9.6 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/taskdefs/optional/splash/* + + + + + ../../../../src/main + ../../../../src/testcases + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId}/testcases + ../../../../target/${project.artifactId} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-testutil/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-testutil/pom.xml new file mode 100644 index 00000000..0b8c2d56 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant-testutil/pom.xml @@ -0,0 +1,74 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant-testutil + 1.9.6 + Apache Ant Test Utilities + test utility classes + + + org.apache.ant + ant + 1.9.6 + compile + + + junit + junit + 4.11 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/BuildFileTest* + org/apache/tools/ant/util/regexp/RegexpMatcherTest* + org/apache/tools/ant/util/regexp/RegexpTest* + org/apache/tools/ant/taskdefs/optional/AbstractXSLTLiaisonTest* + org/apache/tools/ant/types/AbstractFileSetTest* + + + + + ../../../../src/tests/junit + ../../../../target/${project.artifactId}/classes + ../../../../target/${project.artifactId} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant/pom.xml new file mode 100644 index 00000000..087c369c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/ant/pom.xml @@ -0,0 +1,225 @@ + + + + + + org.apache.ant + ant-parent + ../pom.xml + 1.9.6 + + 4.0.0 + http://ant.apache.org/ + org.apache.ant + ant + 1.9.6 + Apache Ant Core + + + org.apache.ant + ant-launcher + 1.9.6 + compile + + + junit + junit + 4.11 + test + + + + + ../../../../target/ant/.build.timestamp.properties + + + + org.apache.maven.plugins + maven-jar-plugin + + + + maven-antrun-plugin + + + create-timestamp-file + generate-resources + + run + + + + + + + + + + + + delete-timestamp-file + clean + + run + + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/types/resolver/** + org/apache/tools/ant/listener/Log4jListener* + org/apache/tools/ant/listener/CommonsLoggingListener* + org/apache/tools/ant/util/regexp/JakartaRegexp* + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/taskdefs/email/MimeMailer* + org/apache/tools/ant/launch/** + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/net/RExec* + org/apache/tools/ant/taskdefs/optional/net/TelnetTask* + org/apache/tools/ant/taskdefs/optional/junit/* + org/apache/tools/ant/taskdefs/optional/ssh/* + org/apache/tools/ant/taskdefs/optional/image/* + org/apache/tools/ant/types/optional/image/* + org/apache/tools/ant/taskdefs/optional/Script* + org/apache/tools/ant/taskdefs/optional/script/** + org/apache/tools/ant/types/optional/*Script* + org/apache/tools/ant/util/ScriptRunner.java + org/apache/tools/ant/util/optional/ScriptRunner.java + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/util/depend/bcel/* + org/apache/tools/ant/taskdefs/optional/NetRexxC* + org/apache/tools/ant/taskdefs/optional/Xalan2TraceSupport* + org/apache/tools/ant/taskdefs/optional/jdepend/* + + + org/apache/tools/ant/filters/util/JavaClassHelper* + org/apache/tools/ant/types/resolver/** + org/apache/tools/ant/util/Script* + org/apache/tools/ant/listener/Log4jListener* + org/apache/tools/ant/listener/CommonsLoggingListener* + org/apache/tools/ant/util/regexp/JakartaRegexp* + org/apache/tools/ant/util/regexp/JakartaOro* + org/apache/tools/ant/util/regexp/Jdk14Regexp* + org/apache/tools/ant/taskdefs/email/MimeMailer* + org/apache/tools/ant/launch/** + org/apache/tools/ant/taskdefs/StyleTest* + org/apache/tools/ant/taskdefs/optional/junit/ + org/apache/tools/ant/taskdefs/optional/net/FTP* + org/apache/tools/ant/taskdefs/optional/ssh/* + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + ant.home + ${env.ANT_HOME} + + + build.tests + ../../../../target/ant/testcases + + + build.tests.value + ../../../../target/ant/testcases + + + offline + true + + + root + ../../../.. + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + + + + + ../../../../src/main + true + + org/apache/tools/ant/taskdefs/default.properties + org/apache/tools/ant/types/default.properties + org/apache/tools/ant/taskdefs/default.properties + org/apache/tools/ant/types/conditions/antlib.xml + org/apache/tools/ant/defaultManifest.mf + org/apache/tools/ant/version.txt + + + + ../../../../src/resources + true + + **/antlib.xml + + + + ../../../../docs + false + + images/ant_logo_large.gif + + + + + + ../../../../src/etc/testcases + true + + + ../../../../src/main + true + + **/*.java + + + + ../../../../src/main + ../../../../src/tests/junit + ../../../../target/ant/classes + ../../../../target/ant/testcases + ../../../../target/ant + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/poms/pom.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/pom.xml new file mode 100644 index 00000000..47a4e328 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/poms/pom.xml @@ -0,0 +1,151 @@ + + + + + 4.0.0 + org.apache.ant + ant-parent + 1.9.6 + pom + master POM + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + Apache Ant + http://ant.apache.org/ + 2000 + + The Apache Software Foundation + http://www.apache.org/ + + + + + dummy + Dummy to avoid accidental deploys + http://nowhere.net/ + + + + scm:git:https://git-wip-us.apache.org/repos/asf/ant.git + scm:git:https://git-wip-us.apache.org/repos/asf/ant.git + https://git-wip-us.apache.org/repos/asf/ant.git + + + hudson + https://builds.apache.org/job/Ant_BuildFromPOMs/ + + + + Ant Developers List + dev-subscribe@ant.apache.org + dev-unsubscribe@ant.apache.org + dev@ant.apache.org + http://mail-archives.apache.org/mod_mbox/ant-dev + + + Ant Users List + user-subscribe@ant.apache.org + user-unsubscribe@ant.apache.org + user@ant.apache.org + http://mail-archives.apache.org/mod_mbox/ant-user + + + + bugzilla + http://issues.apache.org/bugzilla/ + + + ant + ant-antlr + ant-apache-bcel + ant-apache-bsf + ant-apache-log4j + ant-apache-oro + ant-apache-regexp + ant-apache-resolver + ant-apache-xalan2 + ant-commons-logging + ant-commons-net + ant-jai + ant-javamail + ant-jdepend + ant-jmf + ant-jsch + ant-junit + ant-junit4 + ant-launcher + ant-netrexx + ant-swing + ant-testutil + + + + junit + junit + 3.8.2 + test + + + + ../../../src/main + ../../../src/testcases + ../../../target/classes + ../../../target/testcases + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.5 + 1.5 + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12 + + + org.apache.maven.plugins + maven-surefire-report-plugin + 2.12 + + + + + + UTF-8 + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/printFailingTests.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/printFailingTests.xsl new file mode 100644 index 00000000..7d323404 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/printFailingTests.xsl @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + +| .() : + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/tagdiff.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/tagdiff.xsl new file mode 100644 index 00000000..5d430a79 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/tagdiff.xsl @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + <xsl:value-of select="$title"/> + + + +

+ +

+ Tagdiff between and + +

Designed for use with Ant.

+
+ + + + + +
+ New Files | + Modified Files | + Removed Files +
+ + + New Files + New + + + + + Modified Files + Modified + + + + + + Removed Files + Removed + + +
+ + + +
+ + + + + + + + + + - entries + + (back to top) + + + + + + + +
    + +
+ + + + + + + + + + + + + + + + + + + + mailto: + + + + + + +
  • + + / + + + + + + + + /?rev=&content-type=text/x-cvsweb-markup + + + /?r1=&r2=&diff_format=h + + ( --> ) + + +
  • +
    + + + + + + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/asf-logo.gif b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/asf-logo.gif new file mode 100644 index 00000000..22eb9d73 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/asf-logo.gif differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/buildfiletest-base.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/buildfiletest-base.xml new file mode 100644 index 00000000..fc1e8b0b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/buildfiletest-base.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/antclassloader.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/antclassloader.xml new file mode 100644 index 00000000..cafc823b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/antclassloader.xml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/case.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/case.xml new file mode 100644 index 00000000..ea4ac1d1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/case.xml @@ -0,0 +1,37 @@ + + + + + + + +This build file is intended to be used for testing Ant + + + + + + + + + + + Should fail + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/containersrc/test/SpecialSeq.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/containersrc/test/SpecialSeq.java new file mode 100644 index 00000000..ae6a3dd9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/containersrc/test/SpecialSeq.java @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package test; + +import org.apache.tools.ant.Task; +import org.apache.tools.ant.TaskContainer; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.taskdefs.Echo; +import java.util.*; + +public class SpecialSeq extends Task implements TaskContainer { + /** Optional Vector holding the nested tasks */ + private Vector nestedTasks = new Vector(); + + private FileSet fileset; + + private Echo nestedEcho; + + /** + * Add a nested task. + *

    + * @param nestedTask Nested task to execute + *

    + */ + public void addTask(Task nestedTask) { + nestedTasks.addElement(nestedTask); + } + + /** + * Execute all nestedTasks. + */ + public void execute() throws BuildException { + if (fileset == null || fileset.getDir(getProject()) == null) { + throw new BuildException("Fileset was not configured"); + } + for (Enumeration e = nestedTasks.elements(); e.hasMoreElements();) { + Task nestedTask = (Task) e.nextElement(); + nestedTask.perform(); + } + nestedEcho.reconfigure(); + nestedEcho.perform(); + } + + public void addFileset(FileSet fileset) { + this.fileset = fileset; + } + + public void addNested(Echo nestedEcho) { + this.nestedEcho = nestedEcho; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/directoryscanner.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/directoryscanner.xml new file mode 100644 index 00000000..7e8683a4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/directoryscanner.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/dispatch/dispatch.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/dispatch/dispatch.xml new file mode 100644 index 00000000..d529644d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/dispatch/dispatch.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target-imported.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target-imported.xml new file mode 100644 index 00000000..fc945f71 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target-imported.xml @@ -0,0 +1,23 @@ + + + + + + once from imported + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target.xml new file mode 100644 index 00000000..0a295262 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target.xml @@ -0,0 +1,31 @@ + + + + + + once + + + + twice-a + + + + twice-b + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target2.xml new file mode 100644 index 00000000..6d96bca4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/duplicate-target2.xml @@ -0,0 +1,26 @@ + + + + + + + + + once from buildfile + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/executor.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/executor.xml new file mode 100644 index 00000000..080c8dc7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/executor.xml @@ -0,0 +1,29 @@ + + + + + foo + + + + a + + + b + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/extended-taskdef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/extended-taskdef.xml new file mode 100644 index 00000000..58ca9798 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/extended-taskdef.xml @@ -0,0 +1,73 @@ + + + + + + Try and replicate a reported problem. + + + + + + + + import org.apache.tools.ant.BuildException; + + public class Foo extends org.apache.tools.ant.taskdefs.WaitFor { + + public void execute() { + throw new BuildException("executing the Foo task"); + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/immutable.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/immutable.xml new file mode 100644 index 00000000..26fda087 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/immutable.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.inc b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.inc new file mode 100644 index 00000000..960792d4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.inc @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.xml new file mode 100644 index 00000000..2c131b1b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/include.xml @@ -0,0 +1,25 @@ + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/relative.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/relative.xml new file mode 100644 index 00000000..697c8417 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/basic/relative.xml @@ -0,0 +1,26 @@ + + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.inc b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.inc new file mode 100644 index 00000000..960792d4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.inc @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.xml new file mode 100644 index 00000000..400a15c0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/include.xml @@ -0,0 +1,26 @@ + + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/relative.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/relative.xml new file mode 100644 index 00000000..05bbc9e6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/relative.xml @@ -0,0 +1,26 @@ + + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/simple.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/simple.xml new file mode 100644 index 00000000..d337234f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/frag#ment/simple.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/build.xml new file mode 100644 index 00000000..d75747c0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/build.xml @@ -0,0 +1,33 @@ + + + +]> + + + + + + + &included_file; + + + test target ran. + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/included_file.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/included_file.xml new file mode 100644 index 00000000..5fbd3f56 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_parse_error/included_file.xml @@ -0,0 +1,21 @@ + + + + extraneous_text + included-target ran. + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/build.xml new file mode 100644 index 00000000..d75747c0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/build.xml @@ -0,0 +1,33 @@ + + + +]> + + + + + + + &included_file; + + + test target ran. + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/included_file.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/included_file.xml new file mode 100644 index 00000000..d40d3970 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/included_file_task_error/included_file.xml @@ -0,0 +1,21 @@ + + + + + included-target ran. + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/build.xml new file mode 100644 index 00000000..7de52648 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/build.xml @@ -0,0 +1,35 @@ + + + +]> + + + + + + + &included_file; + + extraneous_text + + + test target ran. + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/included_file.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/included_file.xml new file mode 100644 index 00000000..c607bbcc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_parse_error/included_file.xml @@ -0,0 +1,20 @@ + + + + included-target ran. + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/build.xml new file mode 100644 index 00000000..687b8cf3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/build.xml @@ -0,0 +1,34 @@ + + + +]> + + + + + + + &included_file; + + + + test target ran. + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/included_file.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/included_file.xml new file mode 100644 index 00000000..c607bbcc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/including_file_task_error/included_file.xml @@ -0,0 +1,20 @@ + + + + included-target ran. + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.inc b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.inc new file mode 100644 index 00000000..d8fd638b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.inc @@ -0,0 +1,19 @@ + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.xml new file mode 100644 index 00000000..4b693cdc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/include.xml @@ -0,0 +1,25 @@ + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/relative.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/relative.xml new file mode 100644 index 00000000..81f502a9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/relative.xml @@ -0,0 +1,25 @@ + + + + +]> + + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/simple.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/simple.xml new file mode 100644 index 00000000..4092ce75 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/include/with space/simple.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/loaderref.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/loaderref.xml new file mode 100644 index 00000000..83974979 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/loaderref.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + +This build file is intended to be used for testing Ant + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/src/Task1.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/src/Task1.java new file mode 100644 index 00000000..cb374bd2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/loaderref/src/Task1.java @@ -0,0 +1,21 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +import org.apache.tools.ant.Task; + +public class Task1 extends Task { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/location.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/location.xml new file mode 100644 index 00000000..7e8f6394 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/location.xml @@ -0,0 +1,74 @@ + + + + + Only use this build file from within tests + + + + Hello + + + + Hello + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello + + + + + + + + + + + Hello + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/taskcontainer.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/taskcontainer.xml new file mode 100644 index 00000000..4a213730 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/taskcontainer.xml @@ -0,0 +1,62 @@ + + + + + + + + This build file is supposed to be run by a Unit test + + + + + + + + As nested text: ${foo} + + + + + + + + + + + + + + As nested text: ${foo} + + + + + + + + + hello + + world + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/notarget.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/notarget.xml new file mode 100644 index 00000000..25437515 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/notarget.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/targetlevelant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/targetlevelant.xml new file mode 100644 index 00000000..9b1bb1df --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/targetlevelant.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/toplevelant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/toplevelant.xml new file mode 100644 index 00000000..968ad6c1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/topleveltasks/toplevelant.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/unknownelement.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/unknownelement.xml new file mode 100644 index 00000000..b6d89394 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/core/unknownelement.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/build.xml new file mode 100644 index 00000000..b70b7786 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/build.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This has no new lines + + + + + + + File was modified + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/concat.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/concat.xml new file mode 100644 index 00000000..262dd160 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/concat.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/dynamicfilter.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/dynamicfilter.xml new file mode 100644 index 00000000..cb52d215 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/dynamicfilter.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + hello world + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/escapeunicode.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/escapeunicode.test new file mode 100644 index 00000000..ffede99d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/escapeunicode.test @@ -0,0 +1,9 @@ +#hebrew shalom olam (hello world) +text.hebrew=\u05e9\u05dc\u05d5\u05dd \u05e2\u05d5\u05dc\u05dd +#goethe gingko biloba +text.german.1=Sp\u00fcrst du nicht an meinen Liedern, +text.german.2=Da\u00df ich eins und doppelt bin ? +# Francois Villon Ballade des Pendus +text.french=Fr\u00e8res humains qui apr\u00e8s nous vivez +# Usual IT example +text.basic.latin=Hello World diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.head.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.head.test new file mode 100644 index 00000000..43d44e57 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.head.test @@ -0,0 +1,10 @@ +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headAllSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headAllSkip.test new file mode 100644 index 00000000..eeffaa30 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headAllSkip.test @@ -0,0 +1,58 @@ +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 +Line 11 +Line 12 +Line 13 +Line 14 +Line 15 +Line 16 +Line 17 +Line 18 +Line 19 +Line 20 +Line 21 +Line 22 +Line 23 +Line 24 +Line 25 +Line 26 +Line 27 +Line 28 +Line 29 +Line 30 +Line 31 +Line 32 +Line 33 +Line 34 +Line 35 +Line 36 +Line 37 +Line 38 +Line 39 +Line 40 +Line 41 +Line 42 +Line 43 +Line 44 +Line 45 +Line 46 +Line 47 +Line 48 +Line 49 +Line 50 +Line 51 +Line 52 +Line 53 +Line 54 +Line 55 +Line 56 +Line 57 +Line 58 +Line 59 +Line 60 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLines.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLines.test new file mode 100644 index 00000000..98fa9e8e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLines.test @@ -0,0 +1,2 @@ +Line 1 +Line 2 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLinesSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLinesSkip.test new file mode 100644 index 00000000..13cb234b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headLinesSkip.test @@ -0,0 +1,2 @@ +Line 3 +Line 4 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headSkip.test new file mode 100644 index 00000000..57f17d53 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headSkip.test @@ -0,0 +1,10 @@ +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 +Line 11 +Line 12 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headtail.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headtail.test new file mode 100644 index 00000000..13cb234b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.headtail.test @@ -0,0 +1,2 @@ +Line 3 +Line 4 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tail.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tail.test new file mode 100644 index 00000000..5793dc41 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tail.test @@ -0,0 +1,10 @@ +Line 51 +Line 52 +Line 53 +Line 54 +Line 55 +Line 56 +Line 57 +Line 58 +Line 59 +Line 60 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailAllSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailAllSkip.test new file mode 100644 index 00000000..532cf014 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailAllSkip.test @@ -0,0 +1,58 @@ +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 +Line 11 +Line 12 +Line 13 +Line 14 +Line 15 +Line 16 +Line 17 +Line 18 +Line 19 +Line 20 +Line 21 +Line 22 +Line 23 +Line 24 +Line 25 +Line 26 +Line 27 +Line 28 +Line 29 +Line 30 +Line 31 +Line 32 +Line 33 +Line 34 +Line 35 +Line 36 +Line 37 +Line 38 +Line 39 +Line 40 +Line 41 +Line 42 +Line 43 +Line 44 +Line 45 +Line 46 +Line 47 +Line 48 +Line 49 +Line 50 +Line 51 +Line 52 +Line 53 +Line 54 +Line 55 +Line 56 +Line 57 +Line 58 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLines.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLines.test new file mode 100644 index 00000000..66506738 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLines.test @@ -0,0 +1,2 @@ +Line 59 +Line 60 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLinesSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLinesSkip.test new file mode 100644 index 00000000..42746d1e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailLinesSkip.test @@ -0,0 +1,2 @@ +Line 57 +Line 58 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailSkip.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailSkip.test new file mode 100644 index 00000000..070eeee0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/head-tail.tailSkip.test @@ -0,0 +1,10 @@ +Line 49 +Line 50 +Line 51 +Line 52 +Line 53 +Line 54 +Line 55 +Line 56 +Line 57 +Line 58 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/linecontains.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/linecontains.test new file mode 100644 index 00000000..aabaa03b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/linecontains.test @@ -0,0 +1,4 @@ +This is line 2 with beta. +This is line 3 with beta. +This is line 5 with beta. +This is line 7 with beta. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/negatelinecontains.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/negatelinecontains.test new file mode 100644 index 00000000..a1437e90 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/negatelinecontains.test @@ -0,0 +1,3 @@ +This is line 1 with alpha. +This is line 4 with gamma. +This is line 6 with delta. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.double.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.double.test new file mode 100644 index 00000000..72eaee7e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.double.test @@ -0,0 +1,2 @@ +1@@2 +3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.test new file mode 100644 index 00000000..e666476a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/replacetokens.test @@ -0,0 +1,2 @@ +12 +3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/stripjavacomments.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/stripjavacomments.test new file mode 100644 index 00000000..c8d0672a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/expected/stripjavacomments.test @@ -0,0 +1,19 @@ + + + +public class NormalLine { + + private String withComment; + + + public void doNothing() { + + int i; + + int j; + } + + private String url = "http://ant.apache.org/"; + private String url2 = "\"http://ant.apache.org/\""; + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/head-tail.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/head-tail.xml new file mode 100644 index 00000000..e0ffed74 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/head-tail.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/escapeunicode.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/escapeunicode.test new file mode 100644 index 00000000..bf861503 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/escapeunicode.test @@ -0,0 +1,9 @@ +#hebrew shalom olam (hello world) +text.hebrew=שלום עולם +#goethe gingko biloba +text.german.1=Spürst du nicht an meinen Liedern, +text.german.2=Daß ich eins und doppelt bin ? +# Francois Villon Ballade des Pendus +text.french=Frères humains qui après nous vivez +# Usual IT example +text.basic.latin=Hello World diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.small.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.small.test new file mode 100644 index 00000000..c91f1d7f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.small.test @@ -0,0 +1,5 @@ +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.test new file mode 100644 index 00000000..8fac760c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/head-tail.test @@ -0,0 +1,60 @@ +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 +Line 11 +Line 12 +Line 13 +Line 14 +Line 15 +Line 16 +Line 17 +Line 18 +Line 19 +Line 20 +Line 21 +Line 22 +Line 23 +Line 24 +Line 25 +Line 26 +Line 27 +Line 28 +Line 29 +Line 30 +Line 31 +Line 32 +Line 33 +Line 34 +Line 35 +Line 36 +Line 37 +Line 38 +Line 39 +Line 40 +Line 41 +Line 42 +Line 43 +Line 44 +Line 45 +Line 46 +Line 47 +Line 48 +Line 49 +Line 50 +Line 51 +Line 52 +Line 53 +Line 54 +Line 55 +Line 56 +Line 57 +Line 58 +Line 59 +Line 60 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/linecontains.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/linecontains.test new file mode 100644 index 00000000..c95b5539 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/linecontains.test @@ -0,0 +1,7 @@ +This is line 1 with alpha. +This is line 2 with beta. +This is line 3 with beta. +This is line 4 with gamma. +This is line 5 with beta. +This is line 6 with delta. +This is line 7 with beta. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.double.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.double.test new file mode 100644 index 00000000..163417d3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.double.test @@ -0,0 +1,2 @@ +1@@foo@@2 +3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.mustache.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.mustache.test new file mode 100644 index 00000000..62df4455 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.mustache.test @@ -0,0 +1,2 @@ +1{{foo}}2 +3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.test new file mode 100644 index 00000000..e9208871 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/replacetokens.test @@ -0,0 +1,2 @@ +1@foo@2 +3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/sample.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/sample.properties new file mode 100644 index 00000000..572e79d3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/sample.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +foo= diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/stripjavacomments.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/stripjavacomments.test new file mode 100644 index 00000000..37535bcc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/input/stripjavacomments.test @@ -0,0 +1,30 @@ +/* + * Copyright text + * has to be removed + */ + +/** + * JavaDoc text about the class. + * has to be removed + */ +public class NormalLine { + + private String withComment; // this comment should be removed + + /* this comment + * should be + * removed + */ + public void doNothing() { + // this comment should be removed + int i; + /* this comment + should be removed + */ + int j; + } + + private String url = "http://ant.apache.org/"; // very difficult! + private String url2 = "\"http://ant.apache.org/\""; // even worse + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/tokenfilter.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/tokenfilter.xml new file mode 100644 index 00000000..b1b5aef4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/filters/tokenfilter.xml @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + Hello + + World + + + + + + + + + + + + + + + + + This is the contents of the trimmed file. + This is the second line. + + + + + + + + + This is the contents of the trimmed file. + This is the second line. + + + + + + + + + + This is foo bar + + + + + + + + + + foo foo foo + + + + + + + + + This is a number + of words + + + + + + + + + + + + + + + + This is a number + of words + + + + + + + + + + + This is a number + of words + + + + + + + + + + + This is a number + of words + + + + + + + + + + + + + + this is the sun + + + + + + + + + + + foo foo foo + + + + + + + + + + + this is a line contains foo + this line does not + + + + + + + + + + + + + + hello Hello HELLO hello + cat Cat cat + Sun Sun Sun + WhiteSpace tab + This is a line with digits - 1234 -- there + + + + + + + + + + + + + + + + + hello Hello HELLO hello + + + + + + + + + @hello@ + + + + + + + + + + hello world + this is the moon + World here + + + + + + + + + + + + + hello world + this is the moon + World here + + + + + + + + + + + + + SUITE(TestSuite, bits); + here + + + + + + + + + + + + + This is some ### s + some **** + + + + + + + + + + + + hello world + + + + + + self.setToken(self.getToken().toUpperCase()); + + + + + + + + + hello moon + + + + + self.setToken(self.getToken().toUpperCase()); + + + + + + + + + + + + + + + + + + hello world + + + + + + + + + + + + + + + + + + + hello world + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/abstractcvstask.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/abstractcvstask.xml new file mode 100644 index 00000000..5de8b5e7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/abstractcvstask.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.topleveltest.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.topleveltest.xml new file mode 100644 index 00000000..65bc7291 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.topleveltest.xml @@ -0,0 +1,20 @@ + + + + Hello world + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.xml new file mode 100644 index 00000000..33ef1dab --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant.xml @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + test1 is ${test1} + test2 is ${test2} + test1.x is ${test1.x} + + + + + + + + + + + + + + + + + + prop is ${prop} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ta + tb + tc + + da + db + dc + + + ${ant.core.lib} + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/ant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/ant.xml new file mode 100644 index 00000000..52c9a70d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/ant.xml @@ -0,0 +1,33 @@ + + + + + + This build file should only be run from within the testcase + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/references.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/references.xml new file mode 100644 index 00000000..0f3a6930 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/ant/references.xml @@ -0,0 +1,33 @@ + + + + + + + + This build file should only be run from within the testcase + + + + + + + ${myprop} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.current-test.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.current-test.xml new file mode 100644 index 00000000..0ad44dbd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.current-test.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + Echo2 inside a macro + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.xml new file mode 100644 index 00000000..d1c4061e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antlib.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -and-then- + + + + + + + + Hello from x:p + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antstructure.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antstructure.xml new file mode 100644 index 00000000..516a9735 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/antstructure.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/available.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/available.xml new file mode 100644 index 00000000..324c054d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/available.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + testing ${basedir}${file.separator}${ant.file} + + + + + + + + + + + + + + + + + testing greatgrandparent - should see + + + + + + + + + + + + testing grandparent - should see + + + + + + + + + + + testing parent - should see + + + + + + + + + + + testing dir - should see + + + + + + + + + + + + + + testing grandparent - should not see + + + + + + + + + testing parent - should not see + + + + + + + + + testing dir - should see + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bar.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bar.properties new file mode 100644 index 00000000..c64b91ea --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bar.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +bar=Bar diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/basename.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/basename.xml new file mode 100644 index 00000000..c5fd2abc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/basename.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bunzip2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bunzip2.xml new file mode 100644 index 00000000..8ae17580 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bunzip2.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bzip2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bzip2.xml new file mode 100644 index 00000000..e133dae0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/bzip2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/calltarget.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/calltarget.xml new file mode 100644 index 00000000..4c3af92e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/calltarget.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@foo@@ + + + + + + + + + + + + + + + + + + + multi is ${multi} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ta + + + + tb + + + + tc + + + + da + + + + db + + + + dc + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum.xml new file mode 100644 index 00000000..e82fb697 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum.xml @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/Bar b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/Bar new file mode 100644 index 00000000..c2bc8eef --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/Bar @@ -0,0 +1 @@ +Barbapapa \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/zap/Eenie b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/zap/Eenie new file mode 100644 index 00000000..d689175d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/checksum/foo/zap/Eenie @@ -0,0 +1 @@ +Meenie Minie Moe \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/classloader.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/classloader.xml new file mode 100644 index 00000000..02e47ab5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/classloader.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/A b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/A new file mode 100644 index 00000000..2e65efe2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/A @@ -0,0 +1 @@ +a \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/B b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/B new file mode 100644 index 00000000..63d8dbd4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat-input/B @@ -0,0 +1 @@ +b \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat.xml new file mode 100644 index 00000000..235b1528 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/concat.xml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello, ${world}! + + + + Hello, ${world}! + + + + + + + + + + + Hello, ${world}! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @REPLACEME@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + header +
    + +
    footer
    +
    +
    + + + +
    + + + + + + + + + + + + + + @REPLACEME@ + + + + + + + + + + Hello, World + + Bye, World + + + + + + + + + + + + + + + + + + + + + + This has no end of line + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/condition.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/condition.xml new file mode 100644 index 00000000..81660ae6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/condition.xml @@ -0,0 +1,521 @@ + + + + + + + + + + + ${basic} + + + + + + + + + + + ${condition-empty} + + + + + + + + ${shortcut} + + + + + + + ${dontset} + + + + + + + ${setvalue} + + + + + + + + + ${negation} + + + + + + + + + ${negationfalse} + + + + + + + ${negationincomplete} + + + + + + + + + + ${and} + + + + + + + + + + ${andfails} + + + + + + + + + ${andincomplete} + + + + + + + ${andempty} + + + + + + + + + + ${or} + + + + + + + + + ${orincomplete} + + + + + + + ${orempty} + + + + + + + + + + ${orfails} + + + + + + + + + + ${orboth} + + + + + + + ${filesmatch-identical} + + + + + + + ${filesmatch-incomplete} + + + + + + + ${filesmatch-oddsizes} + + + + + + + ${filesmatch-existence} + + + + + + + + + + + + + + + + + + + ${filesmatch-different} + + + + + + + + + ${filesmatch-match} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${filesmatch-different-sizes} + + + + + + + ${filesmatch-different-onemissing} + + + + + + + ${contains} + + + + + + + ${contains-doesnt} + + + + + + + ${contains-anycase} + + + + + + + ${contains-incomplete1} + + + + + + + ${contains-incomplete2} + + + + + + + + + + + + + + + + + ${istrue} + + + + + + + ${istrue-not} + + + + + + + + + + ${istrue-false} + + + + + + + ${istrue-incomplete} + + + + + + + + ${isfalse-true} + + + + + + + ${isfalse-not} + + + + + + + ${isfalse-false} + + + + + + + ${isfalse-incomplete} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/antversion.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/antversion.xml new file mode 100644 index 00000000..8a54cb01 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/antversion.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + Should be at least 1.7 + + + + + + + + + + + Should be exactly 1.9.6 + + + + + + + + + + + + + Should be at least 1.9.6 + + + + + + + + + + + + Should be exactly 1.9.6 + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/http.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/http.xml new file mode 100644 index 00000000..76e87cbe --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/http.xml @@ -0,0 +1,57 @@ + + + + + + This build file should be run by a testcase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfailure.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfailure.xml new file mode 100644 index 00000000..b5d1a6a4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfailure.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfileselected.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfileselected.xml new file mode 100644 index 00000000..0626eedb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isfileselected.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreachable.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreachable.xml new file mode 100644 index 00000000..3f74aef7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreachable.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Expected failure before here + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreference.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreference.xml new file mode 100644 index 00000000..d1f86db9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/isreference.xml @@ -0,0 +1,60 @@ + + + + + + + + This build file should be run by a testcase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/issigned.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/issigned.xml new file mode 100644 index 00000000..7cbf328f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/issigned.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/apassword.jar b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/apassword.jar new file mode 100644 index 00000000..6bd4af1f Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/apassword.jar differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/nosign.jar b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/nosign.jar new file mode 100644 index 00000000..d1b7f8d2 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/nosign.jar differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/pass.jar b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/pass.jar new file mode 100644 index 00000000..cd49f15d Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/jars/pass.jar differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/parsersupports.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/parsersupports.xml new file mode 100644 index 00000000..c80fd350 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/parsersupports.xml @@ -0,0 +1,95 @@ + + + + + + + + + Expected failure before here + + + + + + + Expected failure before here + + + + + + + + + + Expected namespace support + + + + + + + + + + + Expected DTD declaration property settable. + + + + + + + + + + + Expected no property + + + + + + + + + Expected unsupported property. + + + + + + + + + + + Expected XSD support on Xerces. + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/typefound.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/typefound.xml new file mode 100644 index 00000000..054ca673 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/typefound.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @{text} + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/xor.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/xor.xml new file mode 100644 index 00000000..895dccdb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/conditions/xor.xml @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.filterset b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.filterset new file mode 100644 index 00000000..5563dd95 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.filterset @@ -0,0 +1 @@ +This is the @TITLE@. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.xml new file mode 100644 index 00000000..bf4441c1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy.xml @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + +PRODUCT_VERSION=6.2.1.4 +PRODUCT_BUILD=6.5 (BLD_65036) +PRODUCT_VERSION=6.2.1.4 +PRODUCT_BUILD=6.5 (BLD_65036) + + + + + + + + + + + +a=b= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This is file 1 + This is file 2 + This is file 3 + This is file @NR@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/expected/utf-8 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/expected/utf-8 new file mode 100644 index 00000000..c1949bc1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/expected/utf-8 @@ -0,0 +1 @@ +äöüÄÖÜß diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/input/iso8859-1 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/input/iso8859-1 new file mode 100644 index 00000000..09044014 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copy/input/iso8859-1 @@ -0,0 +1 @@ +äöüÄÖÜß diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copydir.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copydir.xml new file mode 100644 index 00000000..8a8abd36 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copydir.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copyfile.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copyfile.xml new file mode 100644 index 00000000..0f8c9ab0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/copyfile.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/cvspass.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/cvspass.xml new file mode 100644 index 00000000..bbca110f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/cvspass.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/defaultexcludes.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/defaultexcludes.xml new file mode 100644 index 00000000..46292501 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/defaultexcludes.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/delete.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/delete.xml new file mode 100644 index 00000000..d74c8bab --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/delete.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/deltree.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/deltree.xml new file mode 100644 index 00000000..c69d51f0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/deltree.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dirname.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dirname.xml new file mode 100644 index 00000000..1027db12 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dirname.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dynamictask.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dynamictask.xml new file mode 100644 index 00000000..307181f2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/dynamictask.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/echoxml.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/echoxml.xml new file mode 100644 index 00000000..ec53abbb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/echoxml.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/email/mail.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/email/mail.xml new file mode 100644 index 00000000..c56fd403 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/email/mail.xml @@ -0,0 +1,40 @@ + + + + + + + + + + Hi Laura, how are you doing ? + + + + + + + + Hi Laura, how are you doing ? + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.sh b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.sh new file mode 100644 index 00000000..c996d6af --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.sh @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +echo "some blablablablablablablablablablablabla error message" err>&2 +echo "some blablablablablablablablablablablabla info message" out +echo "some blablablablablablablablablablablabla error message" err>&2 +echo "some blablablablablablablablablablablabla info message" out +echo "some blablablablablablablablablablablabla error message" err>&2 +echo "some blablablablablablablablablablablabla info message" out +echo "some blablablablablablablablablablablabla error message" err>&2 +echo "some blablablablablablablablablablablabla info message" out +echo "some blablablablablablablablablablablabla error message" err>&2 +echo "some blablablablablablablablablablablabla info message" out diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.xml new file mode 100644 index 00000000..3b13195f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/blabla.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/exec.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/exec.xml new file mode 100644 index 00000000..20e56565 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/exec.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/parrot.sh b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/parrot.sh new file mode 100644 index 00000000..2467f23a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/parrot.sh @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +for arg in "$@" ; do + echo $arg out + sleep 1 + echo $arg err>&2 +done diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/spawn.sh b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/spawn.sh new file mode 100644 index 00000000..2cf0631d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/exec/spawn.sh @@ -0,0 +1,29 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +sleeptime=10 +logfile=spawn.log +if [ $# -ge 1 ]; then + sleeptime=$1 + echo $sleeptime +fi +if [ $# -ge 2 ]; then + logfile=$2 + echo $logfile +fi +echo hello +rm $logfile +sleep $sleeptime +echo bye bye > $logfile +echo bye bye diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2 new file mode 100644 index 00000000..7c2d2154 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.bz2 differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.gz b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.gz new file mode 100644 index 00000000..015471e1 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo-huge.tar.gz differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2 new file mode 100644 index 00000000..0e73d252 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.bz2 differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz new file mode 100644 index 00000000..decc9187 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.gz differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5 new file mode 100644 index 00000000..b56119be --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5 @@ -0,0 +1 @@ +0541d3df42520911f268abc730f3afe0 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5sum b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5sum new file mode 100644 index 00000000..56c49d33 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.md5sum @@ -0,0 +1 @@ +0541d3df42520911f268abc730f3afe0 *asf-logo.gif diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.pattern b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.pattern new file mode 100644 index 00000000..3a6eb82f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.pattern @@ -0,0 +1 @@ +foo0541d3df42520911f268abc730f3afe0bar diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.svf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.svf new file mode 100644 index 00000000..c7f8ec23 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.svf @@ -0,0 +1 @@ +MD5 (asf-logo.gif) = 0541d3df42520911f268abc730f3afe0 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar new file mode 100644 index 00000000..fc0f7902 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2 new file mode 100644 index 00000000..99a91fc4 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.bz2 differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz new file mode 100644 index 00000000..ddd23a24 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.tar.gz differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip new file mode 100644 index 00000000..5f970d59 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/asf-logo.gif.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/copy.filterset.filtered b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/copy.filterset.filtered new file mode 100644 index 00000000..ddbcf5d8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/expected/copy.filterset.filtered @@ -0,0 +1 @@ +This is the Apache Ant Project. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fail.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fail.xml new file mode 100644 index 00000000..0a6561e9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fail.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + testText + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +testNested6 +testNested6 +testNested6 + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter.xml new file mode 100644 index 00000000..303efa74 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter1.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter1.txt new file mode 100644 index 00000000..4e4f9763 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter1.txt @@ -0,0 +1 @@ +@year@ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter2.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter2.txt new file mode 100644 index 00000000..dccd06b8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter2.txt @@ -0,0 +1 @@ +<%@ include file="@ROOT@/some/include.jsp"%> diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter3.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter3.txt new file mode 100644 index 00000000..03d7d29e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filter3.txt @@ -0,0 +1 @@ +@property@ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filterdefs.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filterdefs.properties new file mode 100644 index 00000000..f099df3b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/filterdefs.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +property=included diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/build.xml new file mode 100644 index 00000000..e2fecac3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/build.xml @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Q + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/expected.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/expected.zip new file mode 100644 index 00000000..3111502a Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/expected.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/input.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/input.zip new file mode 100644 index 00000000..f65ba92d Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/fixcrlf/input.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/foo.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/foo.properties new file mode 100644 index 00000000..e4a8152e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/foo.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +foo=Foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/get.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/get.xml new file mode 100644 index 00000000..b74e92ab --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/get.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gunzip.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gunzip.xml new file mode 100644 index 00000000..ea75d54d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gunzip.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gzip.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gzip.xml new file mode 100644 index 00000000..f1c42623 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/gzip.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/a.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/a.xml new file mode 100644 index 00000000..cf4e7a5c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/a.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/b.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/b.xml new file mode 100644 index 00000000..f95cf010 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/b.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/bad.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/bad.xml new file mode 100644 index 00000000..a3a06479 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/bad.xml @@ -0,0 +1,20 @@ + + + +<<< + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/c.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/c.xml new file mode 100644 index 00000000..d92fbc7f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/c.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import.xml new file mode 100644 index 00000000..f84d8e33 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import.xml @@ -0,0 +1,34 @@ + + + + Before import + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_bad_import.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_bad_import.xml new file mode 100644 index 00000000..8ff53672 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_bad_import.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_same_target.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_same_target.xml new file mode 100644 index 00000000..f2b1933e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/import_same_target.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/imported.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/imported.xml new file mode 100644 index 00000000..19dfdb07 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/imported.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/importtargetfirst.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/importtargetfirst.xml new file mode 100644 index 00000000..835191ba --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/importtargetfirst.xml @@ -0,0 +1,22 @@ + + + + Importing targetfirst + + After importing + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/recursive-selfimport.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/recursive-selfimport.xml new file mode 100644 index 00000000..d5ae3b28 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/recursive-selfimport.xml @@ -0,0 +1,22 @@ + + + + Before import: ${foo} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/same_target.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/same_target.xml new file mode 100644 index 00000000..1a14fe59 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/same_target.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential-inner.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential-inner.xml new file mode 100644 index 00000000..cc2a6813 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential-inner.xml @@ -0,0 +1,25 @@ + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential.xml new file mode 100644 index 00000000..fdd68b06 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importinsequential.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget-inner.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget-inner.xml new file mode 100644 index 00000000..cd5086ee --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget-inner.xml @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget.xml new file mode 100644 index 00000000..2dfa370e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/importintarget.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/serial.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/serial.xml new file mode 100644 index 00000000..360f9d16 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/subdir/serial.xml @@ -0,0 +1,22 @@ + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml new file mode 100644 index 00000000..d1b792cb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d1/p1.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml new file mode 100644 index 00000000..51948c9d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d2/p2.xml @@ -0,0 +1,18 @@ + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml new file mode 100644 index 00000000..31858455 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/symlinks/d3a/p3.xml @@ -0,0 +1,18 @@ + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/targetfirst.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/targetfirst.xml new file mode 100644 index 00000000..06c1fbed --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/targetfirst.xml @@ -0,0 +1,21 @@ + + + + + After target first + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed1.xml new file mode 100644 index 00000000..6fc7fde5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed1.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed2.xml new file mode 100644 index 00000000..c0fd7c65 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamed2.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamedImport.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamedImport.xml new file mode 100644 index 00000000..13b3a85c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/import/unnamedImport.xml @@ -0,0 +1,25 @@ + + + + + + + + Tests import of unnamed projects + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/initializeclass.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/initializeclass.xml new file mode 100644 index 00000000..6e079919 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/initializeclass.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.properties new file mode 100644 index 00000000..c0025a3f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.properties @@ -0,0 +1,25 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +Press\ Return\ key\ to\ continue...=test +All\ data\ is\ going\ to\ be\ deleted\ from\ DB\ continue?=test +All\ data\ is\ going\ to\ be\ deleted\ from\ db\ continue\ (y/n)?=y +Please\ enter\ db-username\:=scott +# +# JDK 1.1 doesn't seem to handle blanks in the property key +# +Press_Return_key_to_continue...=test +All_data_is_going_to_be_deleted_from_DB_continue?=test +All_data_is_going_to_be_deleted_from_db_continue_(y/n)?=y +Please_enter_db_username=scott diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.stdin b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.stdin new file mode 100644 index 00000000..3bd1f0e2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.stdin @@ -0,0 +1,2 @@ +foo +bar diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.xml new file mode 100644 index 00000000..d204b79d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/input.xml @@ -0,0 +1,119 @@ + + + + + + + Press Return key to continue... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/jar.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/jar.xml new file mode 100644 index 00000000..78d1abc6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/jar.xml @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/java.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/java.xml new file mode 100644 index 00000000..a0c0450b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/java.xml @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${outfile}: +"${redirect.out.contents}" expected "foo" + + + + + + +redirect.err="${redirect.err}" should be empty + + + + + + + + + + + + + + + + + + + + + + + + + + ${outfile}: +"${redirect.out.contents2}" expected "foobar" + + + + + + + +redirect.err="${redirect.err}" should be empty + + + + + + + + + + + + + + + + + + + + + + + + + + ${outfile}: +"${redirect.out.contents}" expected "foo" + + + + + + ${errfile} differs from ${outfile} + + + + + + + + + + + + + + + + + + + + + + + + ${outfile}: +"${redirector.out.contents}" expected "foo" + + + + + + + ${errfile} exists but should not + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${outfile}: +"${redirector.out.contents}" expected "foofoo" + + + + + + ${errfile}: +"${redirector.err.contents}" expected "bar" + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/java/ClassToJavadoc.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/java/ClassToJavadoc.java new file mode 100644 index 00000000..a41bdc15 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/java/ClassToJavadoc.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package etc.testcases.taskdefs.javadoc.java; + +/** + * This is a simple class to provide grist for the javadoc mill + * while testing it. + */ +public class ClassToJavadoc { + /** + * @param anArgument A String that is ignored + */ + public void methodToJavadoc(String anArgument) { } + + /** + * @see java.lang.Object#toString() + */ + public String toString() { return this.getClass().getName(); } + + /** + * @return An arbitrary string. + */ + public String anotherString() {return "An arbitrary string.";} +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/javadoc.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/javadoc.xml new file mode 100644 index 00000000..2a05ec0f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/javadoc/javadoc.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public class stuff1 {} + public class stuff2 {} + x=4 + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/loadfile.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/loadfile.xml new file mode 100644 index 00000000..66c9ce4f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/loadfile.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${testLoadAFile} + + + + + + + + + + + + + + + ${testEvalProps} + + + + #Line 1 +REM Line 2 +--Line 3 +Line 4 +Hello World! + + + + + + + + + + + + + + + + + + + + +/* +Comment "1" +*/ +public class test1 { + //Some comment + int x = 1/2; + private static final String GREETING="*/Hello/*"; + private static final String GREETING1="/*Hello*/"; + + public static void main( String args[] ) { + } +} + + +public class test1 { + + int x = 1/2; + private static final String GREETING="*/Hello/*"; + private static final String GREETING1="/*Hello*/"; + + public static void main( String args[] ) { + } +} + + + + + + + + + + + + + + + + ${testOneLine} + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/macrodef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/macrodef.xml new file mode 100644 index 00000000..f7a356fc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/macrodef.xml @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + @{text} + + + + + + + + + + + @{text} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A nested element + + + + + + + + + @@{prop} is '@{prop}', value of $${@{prop}} is '${@{prop}}' + + + + + + + + + + + @{myattribute} is @{MYATTRIBUTE} + + + + + + + + + + + + + + + + + nested element + + + + + + + + + @{text} + + + + Hello world + + + + + + + + [@{text}] + + + + Hello world + + + + + + + + + @{text} + + + + + + + + + + @{text} + + + + + + + + + + a@b or a@@b is @{a}@@@{b} + + + + + + + + + + + description is @{description} + + + + + + + + + + Before implicit + + After implicit + + + + + In implicit + + + + + + + + Before implicit + + After implicit + + + + + + + + + + + + Before implicit + + After implicit + + + + + + + + + + + + + + + + + + + + + + + value is @{attr} + + + + + + + + + + + + + + + + + This is a failure + + + + + + + + This is a failure + + + + + + + + + + + + + + + Hello World + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/makeurl.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/makeurl.xml new file mode 100644 index 00000000..dafd00a2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/makeurl.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifest.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifest.xml new file mode 100644 index 00000000..aecaf967 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifest.xml @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + + + + +
    + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + +
    +
    +
    + + + + + +
    + + + + +
    + +
    +
    + + +
    +
    +
    + + + + + +
    + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    +
    +
    + + + +
    + + + +
    +
    +
    + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath.xml new file mode 100644 index 00000000..f8a47951 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Alpha.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Alpha.java new file mode 100644 index 00000000..96124d54 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Alpha.java @@ -0,0 +1,21 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class Alpha { + public String toString() { + return "alpha"; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Beta.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Beta.java new file mode 100644 index 00000000..c1b446f1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifestclasspath/Beta.java @@ -0,0 +1,25 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class Beta extends Alpha { + public String toString() { + return "beta " + super.toString(); + } + public static void main(String [] args) { + Beta myBeta = new Beta(); + System.out.println(myBeta.toString()); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test1.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test1.mf new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test1.mf @@ -0,0 +1 @@ + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test2.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test2.mf new file mode 100644 index 00000000..b8a88bd3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test2.mf @@ -0,0 +1,2 @@ +Manifest-Version: 2.0 + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test3.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test3.mf new file mode 100644 index 00000000..6aa82cca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test3.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Header-without-colon maybe mistyped + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test4.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test4.mf new file mode 100644 index 00000000..27afb189 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test4.mf @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 + + Can't start with a continuation line + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test5.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test5.mf new file mode 100644 index 00000000..0fb8deae --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test5.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Name: test5 + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test6.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test6.mf new file mode 100644 index 00000000..97988c69 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test6.mf @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 + +Test: test6 +Class-Path: fubar + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test7.mf b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test7.mf new file mode 100644 index 00000000..72aace0b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/manifests/test7.mf @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Class-Path: fubar +From: Jack + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/mkdir.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/mkdir.xml new file mode 100644 index 00000000..1ecc274d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/mkdir.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/move.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/move.xml new file mode 100644 index 00000000..8b4a6c8e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/move.xml @@ -0,0 +1,263 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/multimap.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/multimap.xml new file mode 100644 index 00000000..ce4b1218 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/multimap.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + multicopy failed + + + + + + + + + + + + + + + + + + + + mulitmove failed + + + + + + + + + + + + + + + + + + + singlecopy failed + + + + + + + + + + + + + + + + + + + singlemove failed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copywithempty failed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + movewithempty failed + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nice.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nice.xml new file mode 100644 index 00000000..e67ee19c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nice.xml @@ -0,0 +1,66 @@ + + + + + +Test nicing. To make the test more complex we may be running in a nice mode +to start with, and we want to restore that value at the end. So every test +that succeeds must restore the saved value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nopermissions.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nopermissions.zip new file mode 100644 index 00000000..979ee68b Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/nopermissions.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.g b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.g new file mode 100644 index 00000000..9f724936 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.g @@ -0,0 +1,76 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +class CalcParser extends Parser; +options { + buildAST = true; // uses CommonAST by default +} + +expr + : mexpr (PLUS^ mexpr)* SEMI! + ; + +mexpr + : atom (STAR^ atom)* + ; + +atom: INT + ; + +class CalcLexer extends Lexer; + +WS : (' ' + | '\t' + | '\n' + | '\r') + { _ttype = Token.SKIP; } + ; + +LPAREN: '(' + ; + +RPAREN: ')' + ; + +STAR: '*' + ; + +PLUS: '+' + ; + +SEMI: ';' + ; + +protected +DIGIT + : '0'..'9' + ; + +INT : (DIGIT)+ + ; + +class CalcTreeWalker extends TreeParser; + +expr returns [float r] +{ + float a,b; + r=0; +} + : #(PLUS a=expr b=expr) {r = a+b;} + | #(STAR a=expr b=expr) {r = a*b;} + | i:INT {r = (float)Integer.parseInt(i.getText());} + ; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.xml new file mode 100644 index 00000000..c136d061 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/antlr.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/extended.calc.g b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/extended.calc.g new file mode 100644 index 00000000..00c1993f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/extended.calc.g @@ -0,0 +1,23 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +// Not really a great extension, but it is only a test after all! + +class ExtendedCalcParser extends CalcParser; + +exprList + : LPAREN (expr)* RPAREN + ; diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.g b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.g new file mode 100644 index 00000000..e5857502 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.g @@ -0,0 +1,1162 @@ +/** Java 1.2 Recognizer + * + * Run 'java Main ' + * + * Contributing authors: + * John Mitchell johnm@non.net + * Terence Parr parrt@magelang.com + * John Lilley jlilley@empathy.com + * Scott Stanchfield thetick@magelang.com + * Markus Mohnen mohnen@informatik.rwth-aachen.de + * Peter Williams pwilliams@netdynamics.com + * + * Version 1.00 December 9, 1997 -- initial release + * Version 1.01 December 10, 1997 + * fixed bug in octal def (0..7 not 0..8) + * Version 1.10 August 1998 (parrt) + * added tree construction + * fixed definition of WS,comments for mac,pc,unix newlines + * added unary plus + * Version 1.11 (Nov 20, 1998) + * Added "shutup" option to turn off last ambig warning. + * Fixed inner class def to allow named class defs as statements + * synchronized requires compound not simple statement + * add [] after builtInType DOT class in primaryExpression + * "const" is reserved but not valid..removed from modifiers + * Version 1.12 (Feb 2, 1999) + * Changed LITERAL_xxx to xxx in tree grammar. + * Updated java.g to use tokens {...} now for 2.6.0 (new feature). + * + * Version 1.13 (Apr 23, 1999) + * Didn't have (stat)? for else clause in tree parser. + * Didn't gen ASTs for interface extends. Updated tree parser too. + * Updated to 2.6.0. + * Version 1.14 (Jun 20, 1999) + * Allowed final/abstract on local classes. + * Removed local interfaces from methods + * Put instanceof precedence where it belongs...in relationalExpr + * It also had expr not type as arg; fixed it. + * Missing ! on SEMI in classBlock + * fixed: (expr) + "string" was parsed incorrectly (+ as unary plus). + * fixed: didn't like Object[].class in parser or tree parser + * Version 1.15 (Jun 26, 1999) + * Screwed up rule with instanceof in it. :( Fixed. + * Tree parser didn't like (expr).something; fixed. + * Allowed multiple inheritance in tree grammar. oops. + * Version 1.16 (August 22, 1999) + * Extending an interface built a wacky tree: had extra EXTENDS. + * Tree grammar didn't allow multiple superinterfaces. + * Tree grammar didn't allow empty var initializer: {} + * Version 1.17 (October 12, 1999) + * ESC lexer rule allowed 399 max not 377 max. + * java.tree.g didn't handle the expression of synchronized + * statements. + * + * BUG: + * Doesn't like boolean.class! + * + * class Test { + * public static void main( String args[] ) { + * if (boolean.class.equals(boolean.class)) { + * System.out.println("works"); + * } + * } + * } + * + * This grammar is in the PUBLIC DOMAIN + */ +class JavaRecognizer extends Parser; +options { + k = 2; // two token lookahead + exportVocab=Java; // Call its vocabulary "Java" + codeGenMakeSwitchThreshold = 2; // Some optimizations + codeGenBitsetTestThreshold = 3; + defaultErrorHandler = false; // Don't generate parser error handlers + buildAST = true; +} + +tokens { + BLOCK; MODIFIERS; OBJBLOCK; SLIST; CTOR_DEF; METHOD_DEF; VARIABLE_DEF; + INSTANCE_INIT; STATIC_INIT; TYPE; CLASS_DEF; INTERFACE_DEF; + PACKAGE_DEF; ARRAY_DECLARATOR; EXTENDS_CLAUSE; IMPLEMENTS_CLAUSE; + PARAMETERS; PARAMETER_DEF; LABELED_STAT; TYPECAST; INDEX_OP; + POST_INC; POST_DEC; METHOD_CALL; EXPR; ARRAY_INIT; + IMPORT; UNARY_MINUS; UNARY_PLUS; CASE_GROUP; ELIST; FOR_INIT; FOR_CONDITION; + FOR_ITERATOR; EMPTY_STAT; FINAL="final"; ABSTRACT="abstract"; +} + +// Compilation Unit: In Java, this is a single file. This is the start +// rule for this parser +compilationUnit + : // A compilation unit starts with an optional package definition + ( packageDefinition + | /* nothing */ + ) + + // Next we have a series of zero or more import statements + ( importDefinition )* + + // Wrapping things up with any number of class or interface + // definitions + ( typeDefinition )* + + EOF! + ; + + +// Package statement: "package" followed by an identifier. +packageDefinition + options {defaultErrorHandler = true;} // let ANTLR handle errors + : p:"package"^ {#p.setType(PACKAGE_DEF);} identifier SEMI! + ; + + +// Import statement: import followed by a package or class name +importDefinition + options {defaultErrorHandler = true;} + : i:"import"^ {#i.setType(IMPORT);} identifierStar SEMI! + ; + +// A type definition in a file is either a class or interface definition. +typeDefinition + options {defaultErrorHandler = true;} + : m:modifiers! + ( classDefinition[#m] + | interfaceDefinition[#m] + ) + | SEMI! + ; + +/** A declaration is the creation of a reference or primitive-type variable + * Create a separate Type/Var tree for each var in the var list. + */ +declaration! + : m:modifiers t:typeSpec[false] v:variableDefinitions[#m,#t] + {#declaration = #v;} + ; + +// A list of zero or more modifiers. We could have used (modifier)* in +// place of a call to modifiers, but I thought it was a good idea to keep +// this rule separate so they can easily be collected in a Vector if +// someone so desires +modifiers + : ( modifier )* + {#modifiers = #([MODIFIERS, "MODIFIERS"], #modifiers);} + ; + + +// A type specification is a type name with possible brackets afterwards +// (which would make it an array type). +typeSpec[boolean addImagNode] + : classTypeSpec[addImagNode] + | builtInTypeSpec[addImagNode] + ; + +// A class type specification is a class type with possible brackets afterwards +// (which would make it an array type). +classTypeSpec[boolean addImagNode] + : identifier (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)* + { + if ( addImagNode ) { + #classTypeSpec = #(#[TYPE,"TYPE"], #classTypeSpec); + } + } + ; + +// A builtin type specification is a builtin type with possible brackets +// afterwards (which would make it an array type). +builtInTypeSpec[boolean addImagNode] + : builtInType (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)* + { + if ( addImagNode ) { + #builtInTypeSpec = #(#[TYPE,"TYPE"], #builtInTypeSpec); + } + } + ; + +// A type name. which is either a (possibly qualified) class name or +// a primitive (builtin) type +type + : identifier + | builtInType + ; + +// The primitive types. +builtInType + : "void" + | "boolean" + | "byte" + | "char" + | "short" + | "int" + | "float" + | "long" + | "double" + ; + +// A (possibly-qualified) java identifier. We start with the first IDENT +// and expand its name by adding dots and following IDENTS +identifier + : IDENT ( DOT^ IDENT )* + ; + +identifierStar + : IDENT + ( DOT^ IDENT )* + ( DOT^ STAR )? + ; + + +// modifiers for Java classes, interfaces, class/instance vars and methods +modifier + : "private" + | "public" + | "protected" + | "static" + | "transient" + | "final" + | "abstract" + | "native" + | "threadsafe" + | "synchronized" +// | "const" // reserved word; leave out + | "volatile" + ; + + +// Definition of a Java class +classDefinition![AST modifiers] + : "class" IDENT + // it _might_ have a superclass... + sc:superClassClause + // it might implement some interfaces... + ic:implementsClause + // now parse the body of the class + cb:classBlock + {#classDefinition = #(#[CLASS_DEF,"CLASS_DEF"], + modifiers,IDENT,sc,ic,cb);} + ; + +superClassClause! + : ( "extends" id:identifier )? + {#superClassClause = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"],id);} + ; + +// Definition of a Java Interface +interfaceDefinition![AST modifiers] + : "interface" IDENT + // it might extend some other interfaces + ie:interfaceExtends + // now parse the body of the interface (looks like a class...) + cb:classBlock + {#interfaceDefinition = #(#[INTERFACE_DEF,"INTERFACE_DEF"], + modifiers,IDENT,ie,cb);} + ; + + +// This is the body of a class. You can have fields and extra semicolons, +// That's about it (until you see what a field is...) +classBlock + : LCURLY! + ( field | SEMI! )* + RCURLY! + {#classBlock = #([OBJBLOCK, "OBJBLOCK"], #classBlock);} + ; + +// An interface can extend several other interfaces... +interfaceExtends + : ( + e:"extends"! + identifier ( COMMA! identifier )* + )? + {#interfaceExtends = #(#[EXTENDS_CLAUSE,"EXTENDS_CLAUSE"], + #interfaceExtends);} + ; + +// A class can implement several interfaces... +implementsClause + : ( + i:"implements"! identifier ( COMMA! identifier )* + )? + {#implementsClause = #(#[IMPLEMENTS_CLAUSE,"IMPLEMENTS_CLAUSE"], + #implementsClause);} + ; + +// Now the various things that can be defined inside a class or interface... +// Note that not all of these are really valid in an interface (constructors, +// for example), and if this grammar were used for a compiler there would +// need to be some semantic checks to make sure we're doing the right thing... +field! + : // method, constructor, or variable declaration + mods:modifiers + ( h:ctorHead s:compoundStatement // constructor + {#field = #(#[CTOR_DEF,"CTOR_DEF"], mods, h, s);} + + | cd:classDefinition[#mods] // inner class + {#field = #cd;} + + | id:interfaceDefinition[#mods] // inner interface + {#field = #id;} + + | t:typeSpec[false] // method or variable declaration(s) + ( IDENT // the name of the method + + // parse the formal parameter declarations. + LPAREN! param:parameterDeclarationList RPAREN! + + rt:returnTypeBrackersOnEndOfMethodHead[#t] + + // get the list of exceptions that this method is declared to throw + (tc:throwsClause)? + + ( s2:compoundStatement | SEMI ) + {#field = #(#[METHOD_DEF,"METHOD_DEF"], + mods, + #(#[TYPE,"TYPE"],rt), + IDENT, + param, + tc, + s2);} + | v:variableDefinitions[#mods,#t] SEMI +// {#field = #(#[VARIABLE_DEF,"VARIABLE_DEF"], v);} + {#field = #v;} + ) + ) + + // "static { ... }" class initializer + | "static" s3:compoundStatement + {#field = #(#[STATIC_INIT,"STATIC_INIT"], s3);} + + // "{ ... }" instance initializer + | s4:compoundStatement + {#field = #(#[INSTANCE_INIT,"INSTANCE_INIT"], s4);} + ; + +variableDefinitions[AST mods, AST t] + : variableDeclarator[getASTFactory().dupTree(mods), + getASTFactory().dupTree(t)] + ( COMMA! + variableDeclarator[getASTFactory().dupTree(mods), + getASTFactory().dupTree(t)] + )* + ; + +/** Declaration of a variable. This can be a class/instance variable, + * or a local variable in a method + * It can also include possible initialization. + */ +variableDeclarator![AST mods, AST t] + : id:IDENT d:declaratorBrackets[t] v:varInitializer + {#variableDeclarator = #(#[VARIABLE_DEF,"VARIABLE_DEF"], mods, #(#[TYPE,"TYPE"],d), id, v);} + ; + +declaratorBrackets[AST typ] + : {#declaratorBrackets=typ;} + (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)* + ; + +varInitializer + : ( ASSIGN^ initializer )? + ; + +// This is an initializer used to set up an array. +arrayInitializer + : lc:LCURLY^ {#lc.setType(ARRAY_INIT);} + ( initializer + ( + // CONFLICT: does a COMMA after an initializer start a new + // initializer or start the option ',' at end? + // ANTLR generates proper code by matching + // the comma as soon as possible. + options { + warnWhenFollowAmbig = false; + } + : + COMMA! initializer + )* + (COMMA!)? + )? + RCURLY! + ; + + +// The two "things" that can initialize an array element are an expression +// and another (nested) array initializer. +initializer + : expression + | arrayInitializer + ; + +// This is the header of a method. It includes the name and parameters +// for the method. +// This also watches for a list of exception classes in a "throws" clause. +ctorHead + : IDENT // the name of the method + + // parse the formal parameter declarations. + LPAREN! parameterDeclarationList RPAREN! + + // get the list of exceptions that this method is declared to throw + (throwsClause)? + ; + +// This is a list of exception classes that the method is declared to throw +throwsClause + : "throws"^ identifier ( COMMA! identifier )* + ; + + +returnTypeBrackersOnEndOfMethodHead[AST typ] + : {#returnTypeBrackersOnEndOfMethodHead = typ;} + (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)* + ; + +// A list of formal parameters +parameterDeclarationList + : ( parameterDeclaration ( COMMA! parameterDeclaration )* )? + {#parameterDeclarationList = #(#[PARAMETERS,"PARAMETERS"], + #parameterDeclarationList);} + ; + +// A formal parameter. +parameterDeclaration! + : pm:parameterModifier t:typeSpec[false] id:IDENT + pd:parameterDeclaratorBrackets[#t] + {#parameterDeclaration = #(#[PARAMETER_DEF,"PARAMETER_DEF"], + pm, #([TYPE,"TYPE"],pd), id);} + ; + +parameterDeclaratorBrackets[AST t] + : {#parameterDeclaratorBrackets = t;} + (lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} RBRACK!)* + ; + +parameterModifier + : (f:"final")? + {#parameterModifier = #(#[MODIFIERS,"MODIFIERS"], f);} + ; + +// Compound statement. This is used in many contexts: +// Inside a class definition prefixed with "static": +// it is a class initializer +// Inside a class definition without "static": +// it is an instance initializer +// As the body of a method +// As a completely indepdent braced block of code inside a method +// it starts a new scope for variable definitions + +compoundStatement + : lc:LCURLY^ {#lc.setType(SLIST);} + // include the (possibly-empty) list of statements + (statement)* + RCURLY! + ; + + +statement + // A list of statements in curly braces -- start a new scope! + : compoundStatement + + // class definition + | classDefinition[#[MODIFIERS, "MODIFIERS"]] + + // final class definition + | "final"! classDefinition[#(#[MODIFIERS, "MODIFIERS"],#[FINAL,"final"])] + + // abstract class definition + | "abstract"! classDefinition[#(#[MODIFIERS, "MODIFIERS"],#[ABSTRACT,"abstract"])] + + // declarations are ambiguous with "ID DOT" relative to expression + // statements. Must backtrack to be sure. Could use a semantic + // predicate to test symbol table to see what the type was coming + // up, but that's pretty hard without a symbol table ;) + | (declaration)=> declaration SEMI! + + // An expression statement. This could be a method call, + // assignment statement, or any other expression evaluated for + // side-effects. + | expression SEMI! + + // Attach a label to the front of a statement + | IDENT c:COLON^ {#c.setType(LABELED_STAT);} statement + + // If-else statement + | "if"^ LPAREN! expression RPAREN! statement + ( + // CONFLICT: the old "dangling-else" problem... + // ANTLR generates proper code matching + // as soon as possible. Hush warning. + options { + warnWhenFollowAmbig = false; + } + : + "else"! statement + )? + + // For statement + | "for"^ + LPAREN! + forInit SEMI! // initializer + forCond SEMI! // condition test + forIter // updater + RPAREN! + statement // statement to loop over + + // While statement + | "while"^ LPAREN! expression RPAREN! statement + + // do-while statement + | "do"^ statement "while"! LPAREN! expression RPAREN! SEMI! + + // get out of a loop (or switch) + | "break"^ (IDENT)? SEMI! + + // do next iteration of a loop + | "continue"^ (IDENT)? SEMI! + + // Return an expression + | "return"^ (expression)? SEMI! + + // switch/case statement + | "switch"^ LPAREN! expression RPAREN! LCURLY! + ( casesGroup )* + RCURLY! + + // exception try-catch block + | tryBlock + + // throw an exception + | "throw"^ expression SEMI! + + // synchronize a statement + | "synchronized"^ LPAREN! expression RPAREN! compoundStatement + + // empty statement + | s:SEMI {#s.setType(EMPTY_STAT);} + ; + + +casesGroup + : ( // CONFLICT: to which case group do the statements bind? + // ANTLR generates proper code: it groups the + // many "case"/"default" labels together then + // follows them with the statements + options { + warnWhenFollowAmbig = false; + } + : + aCase + )+ + caseSList + {#casesGroup = #([CASE_GROUP, "CASE_GROUP"], #casesGroup);} + ; + +aCase + : ("case"^ expression | "default") COLON! + ; + +caseSList + : (statement)* + {#caseSList = #(#[SLIST,"SLIST"],#caseSList);} + ; + +// The initializer for a for loop +forInit + // if it looks like a declaration, it is + : ( (declaration)=> declaration + // otherwise it could be an expression list... + | expressionList + )? + {#forInit = #(#[FOR_INIT,"FOR_INIT"],#forInit);} + ; + +forCond + : (expression)? + {#forCond = #(#[FOR_CONDITION,"FOR_CONDITION"],#forCond);} + ; + +forIter + : (expressionList)? + {#forIter = #(#[FOR_ITERATOR,"FOR_ITERATOR"],#forIter);} + ; + +// an exception handler try/catch block +tryBlock + : "try"^ compoundStatement + (handler)* + ( "finally"^ compoundStatement )? + ; + + +// an exception handler +handler + : "catch"^ LPAREN! parameterDeclaration RPAREN! compoundStatement + ; + + +// expressions +// Note that most of these expressions follow the pattern +// thisLevelExpression : +// nextHigherPrecedenceExpression +// (OPERATOR nextHigherPrecedenceExpression)* +// which is a standard recursive definition for a parsing an expression. +// The operators in java have the following precedences: +// lowest (13) = *= /= %= += -= <<= >>= >>>= &= ^= |= +// (12) ?: +// (11) || +// (10) && +// ( 9) | +// ( 8) ^ +// ( 7) & +// ( 6) == != +// ( 5) < <= > >= +// ( 4) << >> +// ( 3) +(binary) -(binary) +// ( 2) * / % +// ( 1) ++ -- +(unary) -(unary) ~ ! (type) +// [] () (method call) . (dot -- identifier qualification) +// new () (explicit parenthesis) +// +// the last two are not usually on a precedence chart; I put them in +// to point out that new has a higher precedence than '.', so you +// can validy use +// new Frame().show() +// +// Note that the above precedence levels map to the rules below... +// Once you have a precedence chart, writing the appropriate rules as below +// is usually very straightfoward + + + +// the mother of all expressions +expression + : assignmentExpression + {#expression = #(#[EXPR,"EXPR"],#expression);} + ; + + +// This is a list of expressions. +expressionList + : expression (COMMA! expression)* + {#expressionList = #(#[ELIST,"ELIST"], expressionList);} + ; + + +// assignment expression (level 13) +assignmentExpression + : conditionalExpression + ( ( ASSIGN^ + | PLUS_ASSIGN^ + | MINUS_ASSIGN^ + | STAR_ASSIGN^ + | DIV_ASSIGN^ + | MOD_ASSIGN^ + | SR_ASSIGN^ + | BSR_ASSIGN^ + | SL_ASSIGN^ + | BAND_ASSIGN^ + | BXOR_ASSIGN^ + | BOR_ASSIGN^ + ) + assignmentExpression + )? + ; + + +// conditional test (level 12) +conditionalExpression + : logicalOrExpression + ( QUESTION^ assignmentExpression COLON! conditionalExpression )? + ; + + +// logical or (||) (level 11) +logicalOrExpression + : logicalAndExpression (LOR^ logicalAndExpression)* + ; + + +// logical and (&&) (level 10) +logicalAndExpression + : inclusiveOrExpression (LAND^ inclusiveOrExpression)* + ; + + +// bitwise or non-short-circuiting or (|) (level 9) +inclusiveOrExpression + : exclusiveOrExpression (BOR^ exclusiveOrExpression)* + ; + + +// exclusive or (^) (level 8) +exclusiveOrExpression + : andExpression (BXOR^ andExpression)* + ; + + +// bitwise or non-short-circuiting and (&) (level 7) +andExpression + : equalityExpression (BAND^ equalityExpression)* + ; + + +// equality/inequality (==/!=) (level 6) +equalityExpression + : relationalExpression ((NOT_EQUAL^ | EQUAL^) relationalExpression)* + ; + + +// boolean relational expressions (level 5) +relationalExpression + : shiftExpression + ( ( ( LT^ + | GT^ + | LE^ + | GE^ + ) + shiftExpression + )* + | "instanceof"^ typeSpec[true] + ) + ; + + +// bit shift expressions (level 4) +shiftExpression + : additiveExpression ((SL^ | SR^ | BSR^) additiveExpression)* + ; + + +// binary addition/subtraction (level 3) +additiveExpression + : multiplicativeExpression ((PLUS^ | MINUS^) multiplicativeExpression)* + ; + + +// multiplication/division/modulo (level 2) +multiplicativeExpression + : unaryExpression ((STAR^ | DIV^ | MOD^ ) unaryExpression)* + ; + +unaryExpression + : INC^ unaryExpression + | DEC^ unaryExpression + | MINUS^ {#MINUS.setType(UNARY_MINUS);} unaryExpression + | PLUS^ {#PLUS.setType(UNARY_PLUS);} unaryExpression + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : BNOT^ unaryExpression + | LNOT^ unaryExpression + + | ( // subrule allows option to shut off warnings + options { + // "(int" ambig with postfixExpr due to lack of sequence + // info in linear approximate LL(k). It's ok. Shut up. + generateAmbigWarnings=false; + } + : // If typecast is built in type, must be numeric operand + // Also, no reason to backtrack if type keyword like int, float... + lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN! + unaryExpression + + // Have to backtrack to see if operator follows. If no operator + // follows, it's a typecast. No semantic checking needed to parse. + // if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)" + | (LPAREN classTypeSpec[true] RPAREN unaryExpressionNotPlusMinus)=> + lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN! + unaryExpressionNotPlusMinus + + | postfixExpression + ) + ; + +// qualified names, array expressions, method invocation, post inc/dec +postfixExpression + : primaryExpression // start with a primary + + ( // qualified id (id.id.id.id...) -- build the name + DOT^ ( IDENT + | "this" + | "class" + | newExpression + | "super" LPAREN ( expressionList )? RPAREN + ) + // the above line needs a semantic check to make sure "class" + // is the _last_ qualifier. + + // allow ClassName[].class + | ( lbc:LBRACK^ {#lbc.setType(ARRAY_DECLARATOR);} RBRACK! )+ + DOT^ "class" + + // an array indexing operation + | lb:LBRACK^ {#lb.setType(INDEX_OP);} expression RBRACK! + + // method invocation + // The next line is not strictly proper; it allows x(3)(4) or + // x[2](4) which are not valid in Java. If this grammar were used + // to validate a Java program a semantic check would be needed, or + // this rule would get really ugly... + | lp:LPAREN^ {#lp.setType(METHOD_CALL);} + argList + RPAREN! + )* + + // possibly add on a post-increment or post-decrement. + // allows INC/DEC on too much, but semantics can check + ( in:INC^ {#in.setType(POST_INC);} + | de:DEC^ {#de.setType(POST_DEC);} + | // nothing + ) + + // look for int.class and int[].class + | builtInType + ( lbt:LBRACK^ {#lbt.setType(ARRAY_DECLARATOR);} RBRACK! )* + DOT^ "class" + ; + +// the basic element of an expression +primaryExpression + : IDENT + | newExpression + | constant + | "super" + | "true" + | "false" + | "this" + | "null" + | LPAREN! assignmentExpression RPAREN! + ; + +/** object instantiation. + * Trees are built as illustrated by the following input/tree pairs: + * + * new T() + * + * new + * | + * T -- ELIST + * | + * arg1 -- arg2 -- .. -- argn + * + * new int[] + * + * new + * | + * int -- ARRAY_DECLARATOR + * + * new int[] {1,2} + * + * new + * | + * int -- ARRAY_DECLARATOR -- ARRAY_INIT + * | + * EXPR -- EXPR + * | | + * 1 2 + * + * new int[3] + * new + * | + * int -- ARRAY_DECLARATOR + * | + * EXPR + * | + * 3 + * + * new int[1][2] + * + * new + * | + * int -- ARRAY_DECLARATOR + * | + * ARRAY_DECLARATOR -- EXPR + * | | + * EXPR 1 + * | + * 2 + * + */ +newExpression + : "new"^ type + ( LPAREN! argList RPAREN! (classBlock)? + + //java 1.1 + // Note: This will allow bad constructs like + // new int[4][][3] {exp,exp}. + // There needs to be a semantic check here... + // to make sure: + // a) [ expr ] and [ ] are not mixed + // b) [ expr ] and an init are not used together + + | newArrayDeclarator (arrayInitializer)? + ) + ; + +argList + : ( expressionList + | /*nothing*/ + {#argList = #[ELIST,"ELIST"];} + ) + ; + +newArrayDeclarator + : ( + // CONFLICT: + // newExpression is a primaryExpression which can be + // followed by an array index reference. This is ok, + // as the generated code will stay in this loop as + // long as it sees an LBRACK (proper behavior) + options { + warnWhenFollowAmbig = false; + } + : + lb:LBRACK^ {#lb.setType(ARRAY_DECLARATOR);} + (expression)? + RBRACK! + )+ + ; + +constant + : NUM_INT + | CHAR_LITERAL + | STRING_LITERAL + | NUM_FLOAT + ; + + +//---------------------------------------------------------------------------- +// The Java scanner +//---------------------------------------------------------------------------- +class JavaLexer extends Lexer; + +options { + exportVocab=Java; // call the vocabulary "Java" + testLiterals=false; // don't automatically test for literals + k=4; // four characters of lookahead +} + + + +// OPERATORS +QUESTION : '?' ; +LPAREN : '(' ; +RPAREN : ')' ; +LBRACK : '[' ; +RBRACK : ']' ; +LCURLY : '{' ; +RCURLY : '}' ; +COLON : ':' ; +COMMA : ',' ; +//DOT : '.' ; +ASSIGN : '=' ; +EQUAL : "==" ; +LNOT : '!' ; +BNOT : '~' ; +NOT_EQUAL : "!=" ; +DIV : '/' ; +DIV_ASSIGN : "/=" ; +PLUS : '+' ; +PLUS_ASSIGN : "+=" ; +INC : "++" ; +MINUS : '-' ; +MINUS_ASSIGN : "-=" ; +DEC : "--" ; +STAR : '*' ; +STAR_ASSIGN : "*=" ; +MOD : '%' ; +MOD_ASSIGN : "%=" ; +SR : ">>" ; +SR_ASSIGN : ">>=" ; +BSR : ">>>" ; +BSR_ASSIGN : ">>>=" ; +GE : ">=" ; +GT : ">" ; +SL : "<<" ; +SL_ASSIGN : "<<=" ; +LE : "<=" ; +LT : '<' ; +BXOR : '^' ; +BXOR_ASSIGN : "^=" ; +BOR : '|' ; +BOR_ASSIGN : "|=" ; +LOR : "||" ; +BAND : '&' ; +BAND_ASSIGN : "&=" ; +LAND : "&&" ; +SEMI : ';' ; + + +// Whitespace -- ignored +WS : ( ' ' + | '\t' + | '\f' + // handle newlines + | ( "\r\n" // Evil DOS + | '\r' // Macintosh + | '\n' // Unix (the right way) + ) + { newline(); } + ) + { _ttype = Token.SKIP; } + ; + +// Single-line comments +SL_COMMENT + : "//" + (~('\n'|'\r'))* ('\n'|'\r'('\n')?) + {$setType(Token.SKIP); newline();} + ; + +// multiple-line comments +ML_COMMENT + : "/*" + ( /* '\r' '\n' can be matched in one alternative or by matching + '\r' in one iteration and '\n' in another. I am trying to + handle any flavor of newline that comes in, but the language + that allows both "\r\n" and "\r" and "\n" to all be valid + newline is ambiguous. Consequently, the resulting grammar + must be ambiguous. I'm shutting this warning off. + */ + options { + generateAmbigWarnings=false; + } + : + { LA(2)!='/' }? '*' + | '\r' '\n' {newline();} + | '\r' {newline();} + | '\n' {newline();} + | ~('*'|'\n'|'\r') + )* + "*/" + {$setType(Token.SKIP);} + ; + + +// character literals +CHAR_LITERAL + : '\'' ( ESC | ~'\'' ) '\'' + ; + +// string literals +STRING_LITERAL + : '"' (ESC|~('"'|'\\'))* '"' + ; + + +// escape sequence -- note that this is protected; it can only be called +// from another lexer rule -- it will not ever directly return a token to +// the parser +// There are various ambiguities hushed in this rule. The optional +// '0'...'9' digit matches should be matched here rather than letting +// them go back to STRING_LITERAL to be matched. ANTLR does the +// right thing by matching immediately; hence, it's ok to shut off +// the FOLLOW ambig warnings. +protected +ESC + : '\\' + ( 'n' + | 'r' + | 't' + | 'b' + | 'f' + | '"' + | '\'' + | '\\' + | ('u')+ HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT + | ('0'..'3') + ( + options { + warnWhenFollowAmbig = false; + } + : ('0'..'7') + ( + options { + warnWhenFollowAmbig = false; + } + : '0'..'7' + )? + )? + | ('4'..'7') + ( + options { + warnWhenFollowAmbig = false; + } + : ('0'..'9') + )? + ) + ; + + +// hexadecimal digit (again, note it's protected!) +protected +HEX_DIGIT + : ('0'..'9'|'A'..'F'|'a'..'f') + ; + + +// a dummy rule to force vocabulary to be all characters (except special +// ones that ANTLR uses internally (0 to 2) +protected +VOCAB + : '\3'..'\377' + ; + + +// an identifier. Note that testLiterals is set to true! This means +// that after we match the rule, we look in the literals table to see +// if it's a literal or really an identifer +IDENT + options {testLiterals=true;} + : ('a'..'z'|'A'..'Z'|'_'|'$') ('a'..'z'|'A'..'Z'|'_'|'0'..'9'|'$')* + ; + + +// a numeric literal +NUM_INT + {boolean isDecimal=false;} + : '.' {_ttype = DOT;} + (('0'..'9')+ (EXPONENT)? (FLOAT_SUFFIX)? { _ttype = NUM_FLOAT; })? + | ( '0' {isDecimal = true;} // special case for just '0' + ( ('x'|'X') + ( // hex + // the 'e'|'E' and float suffix stuff look + // like hex digits, hence the (...)+ doesn't + // know when to stop: ambig. ANTLR resolves + // it correctly by matching immediately. It + // is therefor ok to hush warning. + options { + warnWhenFollowAmbig=false; + } + : HEX_DIGIT + )+ + | ('0'..'7')+ // octal + )? + | ('1'..'9') ('0'..'9')* {isDecimal=true;} // non-zero decimal + ) + ( ('l'|'L') + + // only check to see if it's a float if looks like decimal so far + | {isDecimal}? + ( '.' ('0'..'9')* (EXPONENT)? (FLOAT_SUFFIX)? + | EXPONENT (FLOAT_SUFFIX)? + | FLOAT_SUFFIX + ) + { _ttype = NUM_FLOAT; } + )? + ; + + +// a couple protected methods to assist in matching floating point numbers +protected +EXPONENT + : ('e'|'E') ('+'|'-')? ('0'..'9')+ + ; + + +protected +FLOAT_SUFFIX + : 'f'|'F'|'d'|'D' + ; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.tree.g b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.tree.g new file mode 100644 index 00000000..f065c356 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/antlr/java.tree.g @@ -0,0 +1,312 @@ +/** Java 1.2 AST Recognizer Grammar + * + * Author: + * Terence Parr parrt@jguru.com + * + * Version tracking now done with following ID: + * + * This grammar is in the PUBLIC DOMAIN + * + * BUGS + */ +class JavaTreeParser extends TreeParser; + +options { + importVocab = Java; +} + +compilationUnit + : (packageDefinition)? + (importDefinition)* + (typeDefinition)* + ; + +packageDefinition + : #( PACKAGE_DEF identifier ) + ; + +importDefinition + : #( IMPORT identifierStar ) + ; + +typeDefinition + : #(CLASS_DEF modifiers IDENT extendsClause implementsClause objBlock ) + | #(INTERFACE_DEF modifiers IDENT extendsClause interfaceBlock ) + ; + +typeSpec + : #(TYPE typeSpecArray) + ; + +typeSpecArray + : #( ARRAY_DECLARATOR typeSpecArray ) + | type + ; + +type: identifier + | builtInType + ; + +builtInType + : "void" + | "boolean" + | "byte" + | "char" + | "short" + | "int" + | "float" + | "long" + | "double" + ; + +modifiers + : #( MODIFIERS (modifier)* ) + ; + +modifier + : "private" + | "public" + | "protected" + | "static" + | "transient" + | "final" + | "abstract" + | "native" + | "threadsafe" + | "synchronized" + | "const" + | "volatile" + ; + +extendsClause + : #(EXTENDS_CLAUSE (identifier)* ) + ; + +implementsClause + : #(IMPLEMENTS_CLAUSE (identifier)* ) + ; + + +interfaceBlock + : #( OBJBLOCK + ( methodDecl + | variableDef + )* + ) + ; + +objBlock + : #( OBJBLOCK + ( ctorDef + | methodDef + | variableDef + | typeDefinition + | #(STATIC_INIT slist) + | #(INSTANCE_INIT slist) + )* + ) + ; + +ctorDef + : #(CTOR_DEF modifiers methodHead slist) + ; + +methodDecl + : #(METHOD_DEF modifiers typeSpec methodHead) + ; + +methodDef + : #(METHOD_DEF modifiers typeSpec methodHead (slist)?) + ; + +variableDef + : #(VARIABLE_DEF modifiers typeSpec variableDeclarator varInitializer) + ; + +parameterDef + : #(PARAMETER_DEF modifiers typeSpec IDENT ) + ; + +objectinitializer + : #(INSTANCE_INIT slist) + ; + +variableDeclarator + : IDENT + | LBRACK variableDeclarator + ; + +varInitializer + : #(ASSIGN initializer) + | + ; + +initializer + : expression + | arrayInitializer + ; + +arrayInitializer + : #(ARRAY_INIT (initializer)*) + ; + +methodHead + : IDENT #( PARAMETERS (parameterDef)* ) (throwsClause)? + ; + +throwsClause + : #( "throws" (identifier)* ) + ; + +identifier + : IDENT + | #( DOT identifier IDENT ) + ; + +identifierStar + : IDENT + | #( DOT identifier (STAR|IDENT) ) + ; + +slist + : #( SLIST (stat)* ) + ; + +stat: typeDefinition + | variableDef + | expression + | #(LABELED_STAT IDENT stat) + | #("if" expression stat (stat)? ) + | #( "for" + #(FOR_INIT (variableDef | elist)?) + #(FOR_CONDITION (expression)?) + #(FOR_ITERATOR (elist)?) + stat + ) + | #("while" expression stat) + | #("do" stat expression) + | #("break" (IDENT)? ) + | #("continue" (IDENT)? ) + | #("return" (expression)? ) + | #("switch" expression (caseGroup)*) + | #("throw" expression) + | #("synchronized" expression stat) + | tryBlock + | slist // nested SLIST + | EMPTY_STAT + ; + +caseGroup + : #(CASE_GROUP (#("case" expression) | "default")+ slist) + ; + +tryBlock + : #( "try" slist (handler)* (#("finally" slist))? ) + ; + +handler + : #( "catch" parameterDef slist ) + ; + +elist + : #( ELIST (expression)* ) + ; + +expression + : #(EXPR expr) + ; + +expr: #(QUESTION expr expr expr) // trinary operator + | #(ASSIGN expr expr) // binary operators... + | #(PLUS_ASSIGN expr expr) + | #(MINUS_ASSIGN expr expr) + | #(STAR_ASSIGN expr expr) + | #(DIV_ASSIGN expr expr) + | #(MOD_ASSIGN expr expr) + | #(SR_ASSIGN expr expr) + | #(BSR_ASSIGN expr expr) + | #(SL_ASSIGN expr expr) + | #(BAND_ASSIGN expr expr) + | #(BXOR_ASSIGN expr expr) + | #(BOR_ASSIGN expr expr) + | #(LOR expr expr) + | #(LAND expr expr) + | #(BOR expr expr) + | #(BXOR expr expr) + | #(BAND expr expr) + | #(NOT_EQUAL expr expr) + | #(EQUAL expr expr) + | #(LT expr expr) + | #(GT expr expr) + | #(LE expr expr) + | #(GE expr expr) + | #(SL expr expr) + | #(SR expr expr) + | #(BSR expr expr) + | #(PLUS expr expr) + | #(MINUS expr expr) + | #(DIV expr expr) + | #(MOD expr expr) + | #(STAR expr expr) + | #(INC expr) + | #(DEC expr) + | #(POST_INC expr) + | #(POST_DEC expr) + | #(BNOT expr) + | #(LNOT expr) + | #("instanceof" expr expr) + | #(UNARY_MINUS expr) + | #(UNARY_PLUS expr) + | primaryExpression + ; + +primaryExpression + : IDENT + | #( DOT + ( expr + ( IDENT + | arrayIndex + | "this" + | "class" + | #( "new" IDENT elist ) + ) + | #(ARRAY_DECLARATOR type) + | builtInType ("class")? + ) + ) + | arrayIndex + | #(METHOD_CALL primaryExpression elist) + | #(TYPECAST typeSpec expr) + | newExpression + | constant + | "super" + | "true" + | "false" + | "this" + | "null" + | typeSpec // type name used with instanceof + ; + +arrayIndex + : #(INDEX_OP primaryExpression expression) + ; + +constant + : NUM_INT + | CHAR_LITERAL + | STRING_LITERAL + | NUM_FLOAT + ; + +newExpression + : #( "new" type + ( newArrayDeclarator (arrayInitializer)? + | elist + ) + ) + + ; + +newArrayDeclarator + : #( ARRAY_DECLARATOR (newArrayDeclarator)? (expression)? ) + ; diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/depend.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/depend.xml new file mode 100644 index 00000000..8465bb02 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/depend.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + This buildfile is used as part of Ant's test suite. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/A.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/A.java new file mode 100644 index 00000000..dc6df231 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/A.java @@ -0,0 +1,20 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class A extends B { + private D d = new D(); +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/B.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/B.java new file mode 100644 index 00000000..4be51f78 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/B.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class B extends C { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/C.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/C.java new file mode 100644 index 00000000..d2bfca9d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/C.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class C { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/D.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/D.java new file mode 100644 index 00000000..127de573 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/D.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class D { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/E.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/E.java new file mode 100644 index 00000000..0efd6134 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src1/E.java @@ -0,0 +1,22 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class E { + E() { + System.out.println(A.class); + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/A.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/A.java new file mode 100644 index 00000000..02b35be7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/A.java @@ -0,0 +1,21 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class A { + static private class Inner extends B { + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/B.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/B.java new file mode 100644 index 00000000..bc7b7d24 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src2/B.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class B { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/A.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/A.java new file mode 100644 index 00000000..1d973b15 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/A.java @@ -0,0 +1,23 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class A { + static private class Inner { + static private class Inner2 extends B { + } + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/B.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/B.java new file mode 100644 index 00000000..bc7b7d24 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src3/B.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class B { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/ContainsOnlyInner.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/ContainsOnlyInner.java new file mode 100644 index 00000000..d00254b9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/ContainsOnlyInner.java @@ -0,0 +1,24 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package test; + +public class ContainsOnlyInner { + void method1() { + System.out.println(Outer.Inner.class); + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/MethodParam.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/MethodParam.java new file mode 100644 index 00000000..276f0163 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/MethodParam.java @@ -0,0 +1,24 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package test; + +public class MethodParam { + void method1() { + System.out.print(ContainsOnlyInner.class); + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java new file mode 100644 index 00000000..0b709002 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src4/test/Outer.java @@ -0,0 +1,23 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package test; + +public class Outer { + static class Inner { + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/A.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/A.java new file mode 100644 index 00000000..19521a14 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/A.java @@ -0,0 +1,22 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class A { + APrivate dependency = new APrivate(); +} + +class APrivate extends B { +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/B.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/B.java new file mode 100644 index 00000000..bc7b7d24 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/depend/src5/B.java @@ -0,0 +1,19 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +public class B { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.properties new file mode 100644 index 00000000..4c970e7e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +test.infile=true \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.xml new file mode 100644 index 00000000..7b1b8bb8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/echoproperties.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/expected/de/template.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/expected/de/template.txt new file mode 100644 index 00000000..9a7af4e2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/expected/de/template.txt @@ -0,0 +1 @@ +Diese ist eine Demo Datei für die translate_Aufgabe @missing_token@. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/resources_ger_DE.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/resources_ger_DE.properties new file mode 100644 index 00000000..7efe9b0a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/resources_ger_DE.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +This=Diese +is=ist +a=eine +demo=Demo +file=Datei +#note for people understanding german +# \u00fc = u umlaut +for=für +the=die +_task=_Aufgabe diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/template.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/template.txt new file mode 100644 index 00000000..cda413bd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/input/template.txt @@ -0,0 +1 @@ +@This@ @is@ @a@ @demo@ @file@ @for@ @the@ translate@_task@ @missing_token@. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/translate.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/translate.xml new file mode 100644 index 00000000..e6debd50 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/i18n/translate/translate.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/image.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/image.xml new file mode 100644 index 00000000..2fefa04c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/image.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/badimage.jpg b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/badimage.jpg new file mode 100644 index 00000000..43a786e1 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/badimage.jpg differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/largeimage.jpg b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/largeimage.jpg new file mode 100644 index 00000000..91040552 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/image/src/largeimage.jpg differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/build.xml new file mode 100644 index 00000000..ea70b9e5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/build.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + For tests only + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/input/org/example/Foo.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/input/org/example/Foo.java new file mode 100644 index 00000000..59d03f70 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/javah/input/org/example/Foo.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.example; + +public class Foo { + + public Foo() {} + + public native String bar(Object baz); + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jdepend/jdepend.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jdepend/jdepend.xml new file mode 100644 index 00000000..8418226b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jdepend/jdepend.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp new file mode 100644 index 00000000..f5b42e2b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/1nvalid-classname.jsp @@ -0,0 +1,25 @@ + +<%@ page language="java" %> + + + + +my name is <%= this.getClass().getName() %> + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml new file mode 100644 index 00000000..2ef199d0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/WEB-INF/web.xml @@ -0,0 +1,20 @@ + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/default.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/default.jsp new file mode 100644 index 00000000..c7296b2c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/default.jsp @@ -0,0 +1,25 @@ + +<%@ page language="java" %> + + + + +It is now <%= System.currentTimeMillis() %> + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp new file mode 100644 index 00000000..b837fb1f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/missing_tld.jsp @@ -0,0 +1,32 @@ + +<%@ page language="java" %> +<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> +<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> +<%@ taglib uri="/WEB-INF/tlds/struts-template.tld" prefix="template" %> + + +shouldnt compile + + + + +This page should not compile because refers to TLDs that arent around. + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/simple.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/simple.jsp new file mode 100644 index 00000000..c7296b2c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/simple.jsp @@ -0,0 +1,25 @@ + +<%@ page language="java" %> + + + + +It is now <%= System.currentTimeMillis() %> + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp new file mode 100644 index 00000000..c7296b2c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/uriroot.jsp @@ -0,0 +1,25 @@ + +<%@ page language="java" %> + + + + +It is now <%= System.currentTimeMillis() %> + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/xml.jsp b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/xml.jsp new file mode 100644 index 00000000..7bb9e49c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jsp/xml.jsp @@ -0,0 +1,32 @@ + + + + + + + + +System.currentTimeMillis() + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jspc.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jspc.xml new file mode 100644 index 00000000..f1207908 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/jspc.xml @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit.xml new file mode 100644 index 00000000..cc66e20e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit.xml @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + import junit.framework.*; + public class A extends TestCase { + public A(String s) { super(s); } + public void test01() { System.out.println("A.test01"); } + public void test02() { System.out.println("A.test02"); fail(); } + public void test03() { System.out.println("A.test03"); fail(); } + } + + + import junit.framework.*; + public class B extends TestCase { + public B(String s) { super(s); } + public void test04() { System.out.println("B.test04"); fail(); } + public void test05() { System.out.println("B.test05"); } + public void test06() { System.out.println("B.test06"); } + } + + + import junit.framework.*; + public class C extends TestCase { + public C(String s) { super(s); } + public void test07() { System.out.println("C.test07"); } + public void test08() { System.out.println("C.test08"); } + public void test09() { System.out.println("C.test09"); } + } + + + package org; + import junit.framework.*; + public class D extends TestCase { + public D(String s) { super(s); } + public void test10() { System.out.println("D.test10"); fail(); } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + import junit.framework.*; + public class A extends TestCase { + public A(String s) { super(s); } + public void test01() { System.out.println("A.test01"); } + public void test02() { System.out.println("A.test02"); } + public void test03() { System.out.println("A.test03"); } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + public class T1 extends + junit.framework.TestCase { + public void testOK() {} + public void testBad() {throw new RuntimeException("failed");} + } + + import org.junit.Test; + public class T2 { + @Test + public void ok() {} + @Test + public void bad() { + throw new RuntimeException("failed");} + } + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/cdataoutput.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/cdataoutput.xml new file mode 100644 index 00000000..ab5409b3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/cdataoutput.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/matches.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/matches.xml new file mode 100644 index 00000000..2451cf89 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/matches.xml @@ -0,0 +1,25 @@ + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/teardownlistener.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/teardownlistener.xml new file mode 100644 index 00000000..abb6a410 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junit/teardownlistener.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-frames.xsl new file mode 100644 index 00000000..3c0d85aa --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-frames.xsl @@ -0,0 +1,879 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unit Test Results. key1=<xsl:value-of select="$key1"/>,key2=<xsl:value-of select="$key2"/> + + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + + + + All Failures + + + All Errors + + + All Tests + + + + + Unit Test Results: <xsl:value-of select="$title"/> + + + + + + open('allclasses-frame.html','classListFrame') + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

    Class

    + + + + + +
    + + + +

    Failures

    +
    + +

    Errors

    +
    + +

    Tests

    +
    +
    + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
    +

    + + <none> +

    +
    + +

    Classes

    + + + + + + + +
    + +
    + + +
    + + + + + + + All Unit Test Classes + + + + + +

    Classes

    + + + + +
    + + +
    + + + + + + + + + / + _.html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

    Summary

    + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + +
    TestsFailuresErrorsSuccess rateTime
    + + + + + + + +
    + + + + +
    + Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
    + +

    Packages

    + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + +
    + + <none> + + + + +
    + + +
    + + + + + + + + + + + + open('package-frame.html','classListFrame') + +

    Package

    + + + + + +

    Classes

    +

    + + + + + +
    +

    +
    + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

    Unit Test Results

    + + + + + +
    Designed for use with JUnit and Ant.
    +
    +
    + + + + Name + Tests + Errors + Failures + Time(s) + Time Stamp + Host + + + + + + + + Class + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + + + + + + + + + + + + + + + + + Failure + + + + Error + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-import.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-import.xsl new file mode 100644 index 00000000..ecba47bb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport-with-include/junit-import.xsl @@ -0,0 +1,24 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport.xml new file mode 100644 index 00000000..60806625 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport.xml @@ -0,0 +1,189 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml new file mode 100644 index 00000000..56af0146 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/INCOMPLETE-sampleproject.incomplete.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml new file mode 100644 index 00000000..41e7dbff --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/NAMESPACE-sampleproject.namespace.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + junit.framework.AssertionFailedError: DOEG + at sampleproject.coins.CoinTest.testFail(CoinTest.java:229) + + + + java.lang.RuntimeException: RTE + at sampleproject.coins.CoinTest.testException(CoinTest.java:234) + + + + + +testGetImageURL +testGetCountry +testGetDenomination +testGetYear +testGetSubType +testFail +testException +testSuccess +]]> + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.coins.CoinTest.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.coins.CoinTest.xml new file mode 100644 index 00000000..6bc99f29 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.coins.CoinTest.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + junit.framework.AssertionFailedError: DOEG + at sampleproject.coins.CoinTest.testFail(CoinTest.java:229) + + + + java.lang.RuntimeException: RTE + at sampleproject.coins.CoinTest.testException(CoinTest.java:234) + + + + + +testGetImageURL +testGetCountry +testGetDenomination +testGetYear +testGetSubType +testFail +testException +testSuccess +]]> + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.util.UniqueStringTest.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.util.UniqueStringTest.xml new file mode 100644 index 00000000..f4016c26 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/TEST-sampleproject.util.UniqueStringTest.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml new file mode 100644 index 00000000..9cb5a147 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/WRONGELEMENT-sampleproject.wrongelement.xml @@ -0,0 +1,18 @@ + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/ZEROBYTES-sampleproject.package.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/ZEROBYTES-sampleproject.package.xml new file mode 100644 index 00000000..e69de29b diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/junit-frames.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/junit-frames.xsl new file mode 100644 index 00000000..ca313af9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/junitreport/junit-frames.xsl @@ -0,0 +1,879 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unit Test Results. key1=<xsl:value-of select="$key1"/>,key2=<xsl:value-of select="$key2"/> + + + + + + + + + + <h2>Frame Alert</h2> + <p> + This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. + </p> + + + + + + + +body { + font:normal 68% verdana,arial,helvetica; + color:#000000; +} +table tr td, table tr th { + font-size: 68%; +} +table.details tr th{ + font-weight: bold; + text-align:left; + background:#a6caf0; +} +table.details tr td{ + background:#eeeee0; +} + +p { + line-height:1.5em; + margin-top:0.5em; margin-bottom:1.0em; +} +h1 { + margin: 0px 0px 5px; font: 165% verdana,arial,helvetica +} +h2 { + margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica +} +h3 { + margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica +} +h4 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h5 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +h6 { + margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica +} +.Error { + font-weight:bold; color:red; +} +.Failure { + font-weight:bold; color:purple; +} +.Properties { + text-align:right; +} + + + + + + + + + + All Failures + + + All Errors + + + All Tests + + + + + Unit Test Results: <xsl:value-of select="$title"/> + + + + + + open('allclasses-frame.html','classListFrame') + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + +
    + + + + + + + . + + + Unit Test Results: <xsl:value-of select="$class.name"/> + + + + + + + + +

    Class

    + + + + + +
    + + + +

    Failures

    +
    + +

    Errors

    +
    + +

    Tests

    +
    +
    + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + + + + cur = TestCases['.'] = new Array(); + + + cur[''] = ''; + + + + + + + + + + + Unit Test Classes: <xsl:value-of select="$name"/> + + + + + + + + + +
    +

    + + <none> +

    +
    + +

    Classes

    + + + + + + + +
    + +
    + + +
    + + + + + + + All Unit Test Classes + + + + + +

    Classes

    + + + + +
    + + +
    + + + + + + + + + / + _.html + + + + + + + + + + + + + All Unit Test Packages + + + + + +

    Home

    +

    Packages

    + + + + +
    + + +
    + + + + + + + <none> + + + + + + + + + + Unit Test Results: Summary + + + + + + open('allclasses-frame.html','classListFrame') + +

    Summary

    + + + + + + + + + + + + + + + + + Error + Failure + Pass + + + + + + + + +
    TestsFailuresErrorsSuccess rateTime
    + + + + + + + +
    + + + + +
    + Note: failures are anticipated and checked for with assertions while errors are unanticipated. +
    + +

    Packages

    + + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + +
    + + <none> + + + + +
    + + +
    + + + + + + + + + + + + open('package-frame.html','classListFrame') + +

    Package

    + + + + + +

    Classes

    +

    + + + + + +
    +

    +
    + + +
    + + + + + + + ../ + + + + + + ../ + + + + + + + + stylesheet.css + + + + + +

    Unit Test Results

    + + + + + +
    Designed for use with JUnit and Ant.
    +
    +
    + + + + + Name + Tests + Errors + Failures + Time(s) + Time Stamp + Host + + + + + + + + + Class + + Name + Status + Type + Time(s) + + + + + + + + + + Error + Failure + Pass + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error + Failure + TableRowColor + + + + + + + + + + + + + + + + + + + + + + Failure + + + + Error + + + + Success + + + + + + + + + + + + + + + + + + + + + + + + + N/A + + + + + +

    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/build.xml new file mode 100644 index 00000000..27b40313 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/build.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + For tests only + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/expected/iso8859-1.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/expected/iso8859-1.test new file mode 100644 index 00000000..d60acc83 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/expected/iso8859-1.test @@ -0,0 +1 @@ +\u00e4\u00f6\u00fc\u00c4\u00d6\u00dc\u00df diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/input/iso8859-1.test b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/input/iso8859-1.test new file mode 100644 index 00000000..d5b3934f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/native2ascii/input/iso8859-1.test @@ -0,0 +1 @@ +äöüÄÖÜß \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/net/ftp.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/net/ftp.xml new file mode 100644 index 00000000..aaf4b8e6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/net/ftp.xml @@ -0,0 +1,331 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/propertyfile.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/propertyfile.xml new file mode 100644 index 00000000..20a17271 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/propertyfile.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + This file is for testing purposes only... + @see PropertyFileTest.java for more info. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + foo=3 + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/pvcs.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/pvcs.xml new file mode 100644 index 00000000..99bfcff4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/pvcs.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.properties new file mode 100644 index 00000000..d7f057e6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +OldAbc=Def + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.xml new file mode 100644 index 00000000..58fdc59c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + This build file should only be run from within the testcase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello, world! + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.properties new file mode 100644 index 00000000..ada77277 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +OldAbc=Def \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties new file mode 100644 index 00000000..6393cd7a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/replaceregexp2.result.properties @@ -0,0 +1,15 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +NewProp=AbcDef \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/schemavalidate.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/schemavalidate.xml new file mode 100644 index 00000000..f43201e7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/schemavalidate.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script.xml new file mode 100644 index 00000000..841f70d2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script.xml @@ -0,0 +1,46 @@ + + + + + + This build-file is intended to be run from the test cases + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script/scriptdef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script/scriptdef.xml new file mode 100644 index 00000000..0d051eae --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script/scriptdef.xml @@ -0,0 +1,145 @@ + + + + + + This build-file is intended to be run from the test cases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script_reference.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script_reference.xml new file mode 100644 index 00000000..82ccb1ff --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/script_reference.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/sos/sos.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/sos/sos.xml new file mode 100644 index 00000000..982b47ca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/sos/sos.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/splash-test.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/splash-test.xml new file mode 100644 index 00000000..5b5bbe28 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/splash-test.xml @@ -0,0 +1,45 @@ + + + + + + Old behaviour + + + + + + + + + + New features + + + Progress: 10% + + Progress: 20% + + Progress: 50% + + Progress: 70% + + Progress: 100% + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/unix/symlink.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/unix/symlink.xml new file mode 100644 index 00000000..f039a622 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/unix/symlink.xml @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/vss/vss.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/vss/vss.xml new file mode 100644 index 00000000..7c6c0d39 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/vss/vss.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl new file mode 100644 index 00000000..b9d07949 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xalan-redirect-in.xsl @@ -0,0 +1,37 @@ + + + + + + + + + This should be written to the file + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/about.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/about.xml new file mode 100644 index 00000000..f6a9dab5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/about.xml @@ -0,0 +1,26 @@ + + + + +
    + in the absence of technology, there is only marketing +
    +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/apache.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/apache.xsl new file mode 100644 index 00000000..120addf8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/apache.xsl @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/books.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/books.xml new file mode 100644 index 00000000..17923d7d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/books.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/catalog b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/catalog new file mode 100644 index 00000000..1c9bddf2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/catalog @@ -0,0 +1,2 @@ +PUBLIC "-//stevo//DTD doc 1.0//EN" "doc.dtd" + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc-in-ns.xsd b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc-in-ns.xsd new file mode 100644 index 00000000..b34147c4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc-in-ns.xsd @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.dtd b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.dtd new file mode 100644 index 00000000..51629d58 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.dtd @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsd b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsd new file mode 100644 index 00000000..eeedbcaf --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsd @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsl new file mode 100644 index 00000000..3d9c2a4e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/doc.xsl @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/docwithentity.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/docwithentity.xml new file mode 100644 index 00000000..6435c328 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/docwithentity.xml @@ -0,0 +1,29 @@ + + + +]> + + &globaldefinitions; + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema-invalid.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema-invalid.xml new file mode 100644 index 00000000..ec580854 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema-invalid.xml @@ -0,0 +1,30 @@ + + + + + +
    + With a little luck, the network will pick me up. + This is Ripley - last survivor of The Nostromo - signing off. +
    + + + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema.xml new file mode 100644 index 00000000..7ae559d9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-noSchema.xml @@ -0,0 +1,28 @@ + + + + + +
    + With a little luck, the network will pick me up. + This is Ripley - last survivor of The Nostromo - signing off. +
    + +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-ns-no-location.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-ns-no-location.xml new file mode 100644 index 00000000..3fe93c7c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece-ns-no-location.xml @@ -0,0 +1,23 @@ + + + +
    + With a little luck, the network will pick me up. + This is Ripley - last survivor of The Nostromo - signing off. +
    +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece.xml new file mode 100644 index 00000000..3fe93c7c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece.xml @@ -0,0 +1,23 @@ + + + +
    + With a little luck, the network will pick me up. + This is Ripley - last survivor of The Nostromo - signing off. +
    +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece2.xml new file mode 100644 index 00000000..eec49f6f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/endpiece2.xml @@ -0,0 +1,26 @@ + + + +
    + With a little luck, the network will pick me up. + This is Ripley - last survivor of The Nostromo - signing off. + +
    +
    diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/entity.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/entity.xml new file mode 100644 index 00000000..a9340e56 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/entity.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/iso-2022-jp.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/iso-2022-jp.xml new file mode 100644 index 00000000..b325e6da --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/iso-2022-jp.xml @@ -0,0 +1,23 @@ + + + +]> + +ISO-2022-JP $B$N%U%!%$%k!#(B + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl new file mode 100644 index 00000000..9c1ffad7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_include.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl new file mode 100644 index 00000000..b1feaca8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/stylesheet_with_include.xsl @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xml new file mode 100644 index 00000000..7f2abe00 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xml @@ -0,0 +1,25 @@ + + + + this is the first line + not indented + + indented + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xsl new file mode 100644 index 00000000..8d28eb3f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/test.xsl @@ -0,0 +1,25 @@ + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/utf-8.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/utf-8.xml new file mode 100644 index 00000000..db442a36 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/utf-8.xml @@ -0,0 +1,23 @@ + + + +]> + +Liberté, égalité, fraternité! + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/validate.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/validate.xml new file mode 100644 index 00000000..cade722a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xml/validate.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xmlvalidate.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xmlvalidate.xml new file mode 100644 index 00000000..cd7cc45e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xmlvalidate.xml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xslt.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xslt.xml new file mode 100644 index 00000000..d872ea8c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xslt.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml new file mode 100644 index 00000000..80d93369 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xml @@ -0,0 +1,20 @@ + + + + éŕčďů + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl new file mode 100644 index 00000000..f19bf820 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-encoding-in.xsl @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml new file mode 100644 index 00000000..a4b0247b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xml @@ -0,0 +1,23 @@ + + + +]> + + &include; + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl new file mode 100644 index 00000000..852d38af --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-in.xsl @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml new file mode 100644 index 00000000..aebef339 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xml @@ -0,0 +1,19 @@ + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl new file mode 100644 index 00000000..986f1b3e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/optional/xsltliaison-include.xsl @@ -0,0 +1,20 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/parallel.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/parallel.xml new file mode 100644 index 00000000..9a3434c1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/parallel.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + |1/ + + + + + + + + + + + + + + + + + + |2/ + + + + + + + + + + + + + + + + + + |3/ + + + + + + + + + + + + + + + + + + |4/ + + + + + + + + + + + + + + + + + + |4/ + + + + + + + + + + + + + + + + + + | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Test build file for the <parallel> task. + Use the various targets to run the tests. + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/pathconvert.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/pathconvert.xml new file mode 100644 index 00000000..1cdcc8cd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/pathconvert.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/presetdef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/presetdef.xml new file mode 100644 index 00000000..695747eb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/presetdef.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + Inner Text + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + MyText + + + override text + + + + + + Line 1 + + + + Line 2 + + + + + + + Line 1 + + + + + Line 2 + + + + Line 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property.xml new file mode 100644 index 00000000..87cda8b0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + b is ${b} + + + + <?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties version="1.0"> + <comment> + Example of property definition according to Suns DTD as + specified in the Java5 docs and http://java.sun.com/dtd/properties.dtd. + </comment> + <entry key="xml.one">ONE</entry> + <entry key="xml.two">TWO</entry> +</properties> + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property1.properties new file mode 100644 index 00000000..ef3ebd30 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property1.properties @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +testprop2=xx +testprop3=${testprop2}yy +testprop4=${testprop1}zz diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property2.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property2.properties new file mode 100644 index 00000000..81253120 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property2.properties @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +testprop1=aa${testprop2}bb +testprop2=cc${testprop1}dd + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property3.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property3.properties new file mode 100644 index 00000000..ac21612f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property3.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +http.port = 80 +http.url = http://localhost:${http.port} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property4.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property4.properties new file mode 100644 index 00000000..65527105 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property4.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +a=${a} +b=${a}/b diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property5.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property5.properties new file mode 100644 index 00000000..e1ebcd37 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/property5.properties @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +a=A +b=${a}/${c}/${a} +c=${a} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder.xml new file mode 100644 index 00000000..1c073118 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest1.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest1.result new file mode 100644 index 00000000..0f8013f3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest1.result @@ -0,0 +1 @@ + [echo] some message1 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest2.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest2.result new file mode 100644 index 00000000..80550fdd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest2.result @@ -0,0 +1,2 @@ + [echo] some message1 + [echo] some message2 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest3.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest3.result new file mode 100644 index 00000000..e4961774 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest3.result @@ -0,0 +1,2 @@ + [echo] some message1 + [echo] some message3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest4.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest4.result new file mode 100644 index 00000000..db6239e0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest4.result @@ -0,0 +1 @@ + [echo] some message3 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest5.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest5.result new file mode 100644 index 00000000..7f58ebf8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest5.result @@ -0,0 +1,5 @@ + [echo] some message5 + +test6: + [echo] some message6 + [echo] some message8 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest6.result b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest6.result new file mode 100644 index 00000000..c9ceb0b5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder/rectest6.result @@ -0,0 +1,3 @@ + [echo] some message6 + [echo] some message7 + [echo] some message8 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder2.xml new file mode 100644 index 00000000..e093cf51 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/recorder2.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rename.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rename.xml new file mode 100644 index 00000000..a23a81e1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rename.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace.xml new file mode 100644 index 00000000..a4039e53 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hello, world! + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/result.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/result.txt new file mode 100644 index 00000000..a74e06ea --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/result.txt @@ -0,0 +1,7 @@ +This is line one +This is line two +This is line three +This is line four +This is line five +This is line six + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/source.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/source.txt new file mode 100644 index 00000000..8d73f317 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/source.txt @@ -0,0 +1,4 @@ +This is line one +This is line two +This is line three +@@@Replace this@@@ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/value.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/value.txt new file mode 100644 index 00000000..c75b5529 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/replace/value.txt @@ -0,0 +1,3 @@ +This is line four +This is line five +This is line six \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/rmic.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/rmic.xml new file mode 100644 index 00000000..757fca51 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/rmic.xml @@ -0,0 +1,499 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not found : ${build.dir}/@{file} + + + + + + + + + + + Not found : ${dest.dir}/@{file} + + + + + + + + + + + Expected to be missing : ${build.dir}/@{file} + + + + + + + + + + + Expected to be missing : ${dest.dir}/@{file} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/AntTimestamp.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/AntTimestamp.java new file mode 100644 index 00000000..d9ba7854 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/AntTimestamp.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.util.Calendar; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.DateUtils; + + +/** + * This class imports a dependency on the Ant runtime classes, + * so tests that classpath setup include them + */ +public class AntTimestamp implements RemoteTimestamp { + + + /** + * return the phase of the moon. + * Note the completely different semantics of the other implementation, + * which goes to show why signature is an inadequate way of verifying + * how well an interface is implemented. + * + * @return + * @throws RemoteException + */ + public long when() throws RemoteException { + Calendar cal=Calendar.getInstance(); + return DateUtils.getPhaseOfMoon(cal); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestamp.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestamp.java new file mode 100644 index 00000000..1834e4a1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestamp.java @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * this is the interface we remote + */ +public interface RemoteTimestamp extends Remote { + long when() throws RemoteException ; +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestampImpl.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestampImpl.java new file mode 100644 index 00000000..f361452e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/rmic/src/RemoteTimestampImpl.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * this is the implementation + */ +public class RemoteTimestampImpl implements RemoteTimestamp { + + public long when() throws RemoteException { + return System.currentTimeMillis(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/signjar.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/signjar.xml new file mode 100644 index 00000000..38a13592 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/signjar.xml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This build is for use with Ant's test cases + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/skinconfig.dtd b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/skinconfig.dtd new file mode 100644 index 00000000..ba1b4de6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/skinconfig.dtd @@ -0,0 +1,19 @@ + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sleep.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sleep.xml new file mode 100644 index 00000000..e1613227 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sleep.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/build.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/build.xml new file mode 100644 index 00000000..c91d10f6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/build.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/data.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/data.xml new file mode 100644 index 00000000..21e2397f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/data.xml @@ -0,0 +1,18 @@ + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printFilename.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printFilename.xsl new file mode 100644 index 00000000..eb2cbc7d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printFilename.xsl @@ -0,0 +1,38 @@ + + + + + + + + + -not-set- + -not-set- + + + + filename='' + filedir ='' + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printParams.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printParams.xsl new file mode 100644 index 00000000..110e49ce --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/printParams.xsl @@ -0,0 +1,36 @@ + + + + + + +set default value +empty default value +undefined default value + + + +set='' +empty='' +undefined='' + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/testNewerStylesheet.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/testNewerStylesheet.xsl new file mode 100644 index 00000000..dff81209 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/style/testNewerStylesheet.xsl @@ -0,0 +1,28 @@ + + + + + + + +${xsl.value} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant.xml new file mode 100644 index 00000000..7db547a3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/genericsubant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/genericsubant.xml new file mode 100644 index 00000000..c5bfbe2c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/genericsubant.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test1/mysubant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test1/mysubant.xml new file mode 100644 index 00000000..ecc62883 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test1/mysubant.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test2/mysubant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test2/mysubant.xml new file mode 100644 index 00000000..5ee875fe --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/subant/subant-test2/mysubant.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sync.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sync.xml new file mode 100644 index 00000000..d2eb126e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/sync.xml @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + This file must be used from a test case + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/tar.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/tar.xml new file mode 100644 index 00000000..2eda0b54 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/tar.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/taskdef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/taskdef.xml new file mode 100644 index 00000000..4b0658e4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/taskdef.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + In target + + In TaskContainer + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/template.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/template.xml new file mode 100644 index 00000000..9f351c73 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/template.xml @@ -0,0 +1,17 @@ + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test.antlib.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test.antlib.xml new file mode 100644 index 00000000..37ff7f8e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test.antlib.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test2.antlib.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test2.antlib.xml new file mode 100644 index 00000000..9a2509ec --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/test2.antlib.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelant.xml new file mode 100644 index 00000000..e6b466a6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelant.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelantcall.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelantcall.xml new file mode 100644 index 00000000..2ccabe7f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelantcall.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelsubant.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelsubant.xml new file mode 100644 index 00000000..b7a3a351 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/toplevelsubant.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/touch.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/touch.xml new file mode 100644 index 00000000..3b426d90 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/touch.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typeadapter.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typeadapter.xml new file mode 100644 index 00000000..c2aa70e1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typeadapter.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typedef.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typedef.xml new file mode 100644 index 00000000..1c7922b9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/typedef.xml @@ -0,0 +1,84 @@ + + + + + + + This file should only be run via a testcase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + hi + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/untar.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/untar.xml new file mode 100644 index 00000000..04d44b37 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/untar.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/unzip.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/unzip.xml new file mode 100644 index 00000000..ee96ee1f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/unzip.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/uptodate.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/uptodate.xml new file mode 100644 index 00000000..04bb3707 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/uptodate.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/war.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/war.xml new file mode 100644 index 00000000..b000ecf5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/war.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/whichresource.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/whichresource.xml new file mode 100644 index 00000000..352e9c0e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/whichresource.xml @@ -0,0 +1,37 @@ + + + + + Run via testcases only + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlns.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlns.xml new file mode 100644 index 00000000..e6991661 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlns.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty.xml new file mode 100644 index 00000000..a19eb6ce --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-input1.properties new file mode 100644 index 00000000..d60cbab5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-input1.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +properties.root=foo,bar +properties.a.b.c=d +properties.a.b=e +properties.foo.bar=quux,quux1 +properties.foo.quux=bar +properties.tag.value=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-original.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-original.properties new file mode 100644 index 00000000..ce05e187 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-original.properties @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +root-tag.myattr=true +root-tag.inner-tag=Text +root-tag.inner-tag.someattr=val +root-tag.a2.a3.a4=false + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-override.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-override.properties new file mode 100644 index 00000000..33f8611a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-collapse-override.properties @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Match value hardwired in code, NOT in the input... +override.property.test=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-input1.properties new file mode 100644 index 00000000..153ac765 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-input1.properties @@ -0,0 +1,8 @@ +properties.root=foo,bar +properties.a.b(c)=d +properties.a.b=e +properties.foo(bar)=quux +properties.foo.bar=quux1 +properties.foo.quux=bar +properties.tag(value)=foo + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-original.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-original.properties new file mode 100644 index 00000000..47e0c2de --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-nocollapse-original.properties @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +root-tag(myattr)=true +root-tag.inner-tag=Text +root-tag.inner-tag(someattr)=val +root-tag.a2.a3.a4=false + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-include.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-include.properties new file mode 100644 index 00000000..d60cbab5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-include.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +properties.root=foo,bar +properties.a.b.c=d +properties.a.b=e +properties.foo.bar=quux,quux1 +properties.foo.quux=bar +properties.tag.value=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-input1.properties new file mode 100644 index 00000000..46b807ba --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-input1.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +properties.root=foo,bar +properties.a.b.c=d +properties.a.b=e +properties.foo.bar=quux,quux1 +properties.foo.quux=bar +properties.tag=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-override.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-override.properties new file mode 100644 index 00000000..33f8611a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/keeproot-semantic-override.properties @@ -0,0 +1,17 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Match value hardwired in code, NOT in the input... +override.property.test=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-input1.properties new file mode 100644 index 00000000..7cfd29e8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-input1.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +root=foo,bar +a.b.c=d +a.b=e +foo.bar=quux,quux1 +foo.quux=bar +tag.value=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-original.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-original.properties new file mode 100644 index 00000000..5842c38f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-collapse-original.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +inner-tag=Text +inner-tag.someattr=val +a2.a3.a4=false + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-input1.properties new file mode 100644 index 00000000..3eca3683 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-input1.properties @@ -0,0 +1,7 @@ +root=foo,bar +a.b(c)=d +a.b=e +foo(bar)=quux +foo.bar=quux1 +foo.quux=bar +tag(value)=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-multi.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-multi.properties new file mode 100644 index 00000000..9ef90efb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-multi.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +foo.bar=1,2,3,4 \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-original.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-original.properties new file mode 100644 index 00000000..550f2130 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-nocollapse-original.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +inner-tag=Text +inner-tag(someattr)=val +a2.a3.a4=false + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-include-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-include-input1.properties new file mode 100644 index 00000000..7cfd29e8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-include-input1.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +root=foo,bar +a.b.c=d +a.b=e +foo.bar=quux,quux1 +foo.quux=bar +tag.value=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-input1.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-input1.properties new file mode 100644 index 00000000..5dfcfb53 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-input1.properties @@ -0,0 +1,21 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +root=foo,bar +a.b.c=d +a.b=e +foo.bar=quux,quux1 +foo.quux=bar +tag=foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-locations.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-locations.properties new file mode 100644 index 00000000..f945d7ca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-locations.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +file=FILE.foo \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-paths.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-paths.properties new file mode 100644 index 00000000..1bf51de9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-paths.properties @@ -0,0 +1,16 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +foo=ID.path \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-references.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-references.properties new file mode 100644 index 00000000..e55913a1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/goldfiles/nokeeproot-semantic-references.properties @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +property=foo +foo.bar=foo +foo.quux=foo +foo.thunk=foo +foo.property=ID.foo diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/input1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/input1.xml new file mode 100644 index 00000000..28328c56 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/input1.xml @@ -0,0 +1,27 @@ + + + + foo + bar + e + + quux1 + bar + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/locations.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/locations.xml new file mode 100644 index 00000000..d5cace80 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/locations.xml @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/multi.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/multi.xml new file mode 100644 index 00000000..66904d6a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/multi.xml @@ -0,0 +1,25 @@ + + + + + 1 + 2 + 3 + 4 + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/original.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/original.xml new file mode 100644 index 00000000..ef2603cc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/original.xml @@ -0,0 +1,22 @@ + + + + Text + false + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/override.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/override.xml new file mode 100644 index 00000000..c7da9c48 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/override.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/paths.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/paths.xml new file mode 100644 index 00000000..83422d9d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/paths.xml @@ -0,0 +1,22 @@ + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/references.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/references.xml new file mode 100644 index 00000000..7e88b7b1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty/inputs/references.xml @@ -0,0 +1,24 @@ + + + + + + + ${property} + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.dtd b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.dtd new file mode 100644 index 00000000..5d75d6e5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.dtd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.xml new file mode 100644 index 00000000..5f922214 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_data.xml @@ -0,0 +1,22 @@ + + + + Text + false + ]]> + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_needscat.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_needscat.xml new file mode 100644 index 00000000..942a183f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_needscat.xml @@ -0,0 +1,22 @@ + + + + + true + false + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_withdtd.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_withdtd.xml new file mode 100644 index 00000000..1e96cdb3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/xmlproperty_withdtd.xml @@ -0,0 +1,24 @@ + + + + + + Text + false + ]]> + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip.xml new file mode 100644 index 00000000..4fa6de6c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip.xml @@ -0,0 +1,287 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip new file mode 100644 index 00000000..f3b96ffc Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset1.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip new file mode 100644 index 00000000..89e09fd5 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset2.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip new file mode 100644 index 00000000..dead9c12 Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/taskdefs/zip/zipgroupfileset3.zip differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/testkeystore b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/testkeystore new file mode 100644 index 00000000..5aa6a27d Binary files /dev/null and b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/testkeystore differ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/addtype.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/addtype.xml new file mode 100644 index 00000000..cc8ff24c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/addtype.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + This is line 1 + This is line 2 + This is line 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + before + + after + + + + before + + after + + + + + + + + + + + + + + + + + Value Set + + + + + + Value Set + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions.xml new file mode 100644 index 00000000..dee7ce7c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionMain.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionMain.java new file mode 100644 index 00000000..f4aa6906 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionMain.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +/** + * this is an assertion tester + * It has a main() entry + */ +public class AssertionMain { + + public static void main(String args[]) { + assert true == false : "there exist no facts that are both true and false"; + System.out.println("Assertions are disabled"); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionTest.java b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionTest.java new file mode 100644 index 00000000..19ed2df1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/assertions/AssertionTest.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + import junit.framework.TestCase; + +/** + * this is an assertion tester for junit + */ +public class AssertionTest extends TestCase { + + public AssertionTest(String name) { + super(name); + } + + public void testAssertRaised() { + try { + assert true == false; + fail("expected an assertion"); + } catch(AssertionError asserto) { + //if we got here, all was well + } + } + + + public void testAssertNotRaised() { + assert(2+2==4); + } + + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description1.xml new file mode 100644 index 00000000..86a2a165 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description1.xml @@ -0,0 +1,22 @@ + + + + Test Project Description + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description2.xml new file mode 100644 index 00000000..945bc20d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description2.xml @@ -0,0 +1,23 @@ + + + + Multi Line +Project Description + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description3.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description3.xml new file mode 100644 index 00000000..af5dda11 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description3.xml @@ -0,0 +1,23 @@ + + + + Multi Instance + Project Description + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description4.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description4.xml new file mode 100644 index 00000000..22df9c2d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/description4.xml @@ -0,0 +1,23 @@ + + + + Multi Instance + + Nested Project Description + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filelist.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filelist.xml new file mode 100644 index 00000000..f854ddbb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filelist.xml @@ -0,0 +1,54 @@ + + + + + + + + + ${property} + + + + + + + + ${property} + + + + + + + + + + + ${property} + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterset.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterset.xml new file mode 100644 index 00000000..bf291e7d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterset.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterseta.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterseta.txt new file mode 100644 index 00000000..44049950 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filterseta.txt @@ -0,0 +1,2 @@ +This is a test file for filters @aaaa@ +It has two lines @bbbb@ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetb.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetb.txt new file mode 100644 index 00000000..f49640a3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetb.txt @@ -0,0 +1,5 @@ +This is a test file for filters with non default markers +@cccc@ - should not change +%cccc^ - should change +^dddd% - should not change +%dddd^ - should change diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetc.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetc.txt new file mode 100644 index 00000000..2522d350 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetc.txt @@ -0,0 +1,7 @@ +Combined filter test +@aaaa@ - should change +@bbbb@ - should change +@cccc@ - should not change +%cccc^ - should change +^dddd% - should not change +%dddd^ - should change diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetd.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetd.txt new file mode 100644 index 00000000..45c4849e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersetd.txt @@ -0,0 +1 @@ +@foo@ @bar@ @baz@ @blah@ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile1 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile1 new file mode 100644 index 00000000..20fe058f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile1 @@ -0,0 +1,2 @@ +foo=FOO +bar=BAR diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile2 b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile2 new file mode 100644 index 00000000..43c97f27 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/filtersfile2 @@ -0,0 +1 @@ +baz=BAZ diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/flexinteger.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/flexinteger.xml new file mode 100644 index 00000000..aa10aa07 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/flexinteger.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset1.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset1.txt new file mode 100644 index 00000000..975416f5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset1.txt @@ -0,0 +1,2 @@ +This is a test file for filters 1111 +It has two lines 2222 diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset2.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset2.txt new file mode 100644 index 00000000..eaab0215 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset2.txt @@ -0,0 +1,5 @@ +This is a test file for filters with non default markers +@cccc@ - should not change +3333 - should change +^dddd% - should not change +4444 - should change diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset3.txt b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset3.txt new file mode 100644 index 00000000..3516e62b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/gold/filterset3.txt @@ -0,0 +1,7 @@ +Combined filter test +1111 - should change +2222 - should change +@cccc@ - should not change +3333 - should change +^dddd% - should not change +4444 - should change diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mapper.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mapper.xml new file mode 100644 index 00000000..a96f10cb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/define.mapperresult.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/define.mapperresult.xml new file mode 100644 index 00000000..d9152a1c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/define.mapperresult.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/globmapper.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/globmapper.xml new file mode 100644 index 00000000..1666d810 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/globmapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/regexpmapper.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/regexpmapper.xml new file mode 100644 index 00000000..a85c49cf --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/regexpmapper.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/scriptmapper.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/scriptmapper.xml new file mode 100644 index 00000000..d3e7a8d0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/mappers/scriptmapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + self.addMappedName("a"); + + + + + + + + self.addMappedName("a"); + self.clear(); + + + + + + + + self.addMappedName("a"); + self.addMappedName("b"); + + + + + + + + //relying on "a" to map to "A" on all locales. + self.addMappedName(source.toUpperCase()); + self.addMappedName(source.toLowerCase()); + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/poly.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/poly.xml new file mode 100644 index 00000000..cabf9ece --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/poly.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote1.xml new file mode 100644 index 00000000..8e77122c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote1.xml @@ -0,0 +1,25 @@ + + + + + + + A stitch in time saves nine + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote2.xml new file mode 100644 index 00000000..ef9a3c3e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/quote2.xml @@ -0,0 +1,26 @@ + + + + + + + No news is good news + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/redirector.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/redirector.xml new file mode 100644 index 00000000..4784e9f0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/redirector.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + testLogInputString can-cat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/javaresource.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/javaresource.xml new file mode 100644 index 00000000..83267623 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/javaresource.xml @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/resourcelist.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/resourcelist.xml new file mode 100644 index 00000000..f1ac6df7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/resourcelist.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/tarentry.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/tarentry.xml new file mode 100644 index 00000000..c0fa379c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/resources/tarentry.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + only use from within unit tests + + + + + + + + + + + + + + \ No newline at end of file diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors.xml new file mode 100644 index 00000000..5a80d04a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/scriptselector.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/scriptselector.xml new file mode 100644 index 00000000..80afe309 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/scriptselector.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + self.setSelected(true); + + + + + + + + + + + + + + + + + + + + self.setSelected(false); + self.setSelected(true); + + + + + + + + + + self.setSelected(false); + + + + + + + + + + self.setSelected(file.equals(self.getFile())); + + + + + + + + + + self.setSelected(filename.equals(self.getFilename())); + + + + + + + + + + self.setSelected(basedir.equals(self.getBasedir())); + + + + + + + + + + self.setSelected((filename.length%2)==0); + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/signedselector.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/signedselector.xml new file mode 100644 index 00000000..60fe9408 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/selectors/signedselector.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xml new file mode 100644 index 00000000..63269f77 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xml @@ -0,0 +1,150 @@ + + + + + + + + This is to test XMLCatalog for external entity resolution from the + xslt task, both the simple case and using the document() function + to refer to a second file (which refers to the entity). This + buildfile is called by + org.apache.tools.ant.types.XMLCatalogBuildFileTest.java + Alternatively, you may try it out by hand by first removing the + comment symbols around the echo statements and then calling + ant -buildfile xmlcatalog.xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xsl b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xsl new file mode 100644 index 00000000..a2c839ca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog.xsl @@ -0,0 +1,47 @@ + + + + + + + + + + value + + + + + : + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog1.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog1.xml new file mode 100644 index 00000000..d4b5461f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog1.xml @@ -0,0 +1,30 @@ + + + +]> + + + + + + "e; + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog2.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog2.xml new file mode 100644 index 00000000..9d2bed03 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlcatalog2.xml @@ -0,0 +1,27 @@ + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlfragment.xml b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlfragment.xml new file mode 100644 index 00000000..75214d64 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/types/xmlfragment.xml @@ -0,0 +1,31 @@ + + + + + + foo + + + foo + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/simple.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/simple.properties new file mode 100644 index 00000000..550908ca --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/simple.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# a comment +prop.alpha=first property + +! more comment +prop.beta=simple + +# now a line wrapping one +prop.gamma=This is a long comment which \ + contains a line wrap. diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/unusual.properties b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/unusual.properties new file mode 100644 index 00000000..9c370faa --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/testcases/util/unusual.properties @@ -0,0 +1,37 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +\ prop\ one\ =\ \ leading and trailing spaces + +prop\ttwo=contains\ttab + +prop\nthree=contains\nnewline + +prop\rfour=contains\rcarraige return + +prop\ffive=contains\fform feed + +prop\\six=contains\\backslash + +prop\:seven=contains\:colon + +prop\=eight=contains\=equals + +prop\#nine=contains\#hash + +prop\!ten=contains\!exclamation + +alpha:set with a colon +beta set with a space diff --git a/framework/src/ant/apache-ant-1.9.6/src/etc/yearcheck.sh b/framework/src/ant/apache-ant-1.9.6/src/etc/yearcheck.sh new file mode 100644 index 00000000..1a510ffd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/etc/yearcheck.sh @@ -0,0 +1,101 @@ +#!/bin/sh + +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# Simple shell script that checks whether changed files contain a copyright +# statement for a given year. +# +# Rename (or symlink) this script to the year you want to check, i.e. name it +# 2002 if you want to check for copyright statements that do not contain +# the year 2002. +# +# Use this script instead of your usual cvs update command. +# +# Usage YEAR [precommit] +# +# If the optional all argument has been omitted, the proposal directory will +# be skipped. +# + +if [ -n "$TMP" ]; then + TEMP_DIR="$TMP" +else + if [ -n "$TEMP" ]; then + TEMP_DIR="$TEMP" + else + TEMP_DIR=/tmp + fi +fi + +YEAR=`basename $0` + +if [ $YEAR = yearcheck.sh ]; then + YEAR=`date -R | cut -d ' ' -f 4` +fi + +precommit_call=false +for arg in "$@" ; do + if [ "$arg" = "precommit" ] ; then + precommit_call=true + fi +done + +if [ -d ".svn" ]; then + SCM_COMMAND=svn + if $precommit_call ; then + SCM_ARGS=status + CUT_ARGS="-c 8-" + else + SCM_ARGS=up + CUT_ARGS="-c 4-" + fi +else + SCM_COMMAND=cvs + SCM_ARGS="-z3 update -dP" + CUT_ARGS="-d ' ' -f 2" +fi + +"$SCM_COMMAND" $SCM_ARGS > "$TEMP_DIR"/update-prefilter + +# filter out boring lines +if [ "$SCM_COMMAND" = "svn" ]; then + < "$TEMP_DIR"/update-prefilter fgrep -v 'At revision' | fgrep -v 'Updated to revision' | egrep -v '^\?' > "$TEMP_DIR"/update +else + cp "$TEMP_DIR"/update-prefilter "$TEMP_DIR"/update +fi + +cut $CUT_ARGS < "$TEMP_DIR"/update > "$TEMP_DIR"/changed-files + +echo "Changed:" +echo "========" +cat "$TEMP_DIR"/changed-files +echo + +xargs fgrep -L Copyright < "$TEMP_DIR"/changed-files > "$TEMP_DIR"/no-copyright + +echo "No Copyright line" +echo "=================" +cat "$TEMP_DIR"/no-copyright +echo + +xargs egrep -L "Copyright.*$YEAR" < "$TEMP_DIR"/changed-files | cut -f 1 -d : > "$TEMP_DIR"/no-$YEAR + +echo "No Copyright line for year $YEAR" +echo "================================" +cat "$TEMP_DIR"/no-$YEAR + +rm "$TEMP_DIR"/no-$YEAR "$TEMP_DIR"/no-copyright "$TEMP_DIR"/changed-files "$TEMP_DIR"/update "$TEMP_DIR"/update-prefilter diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntClassLoader.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntClassLoader.java new file mode 100644 index 00000000..607ada71 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntClassLoader.java @@ -0,0 +1,1622 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Constructor; +import java.net.MalformedURLException; +import java.net.URL; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import java.security.cert.Certificate; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; +import java.util.Vector; +import java.util.jar.Attributes; +import java.util.jar.Attributes.Name; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; +import java.util.jar.Manifest; + +import org.apache.tools.ant.launch.Locator; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.CollectionUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JavaEnvUtils; +import org.apache.tools.ant.util.LoaderUtils; +import org.apache.tools.ant.util.ReflectUtil; +import org.apache.tools.ant.util.VectorSet; +import org.apache.tools.zip.ZipLong; + +/** + * Used to load classes within ant with a different classpath from + * that used to start ant. Note that it is possible to force a class + * into this loader even when that class is on the system classpath by + * using the forceLoadClass method. Any subsequent classes loaded by that + * class will then use this loader rather than the system class loader. + * + *

    + * Note that this classloader has a feature to allow loading + * in reverse order and for "isolation". + * Due to the fact that a number of + * methods in java.lang.ClassLoader are final (at least + * in java 1.4 getResources) this means that the + * class has to fake the given parent. + *

    + * + */ +public class AntClassLoader extends ClassLoader implements SubBuildListener { + + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** + * An enumeration of all resources of a given name found within the + * classpath of this class loader. This enumeration is used by the + * ClassLoader.findResources method, which is in + * turn used by the ClassLoader.getResources method. + * + * @see AntClassLoader#findResources(String) + * @see java.lang.ClassLoader#getResources(String) + */ + private class ResourceEnumeration implements Enumeration { + /** + * The name of the resource being searched for. + */ + private final String resourceName; + + /** + * The index of the next classpath element to search. + */ + private int pathElementsIndex; + + /** + * The URL of the next resource to return in the enumeration. If this + * field is null then the enumeration has been completed, + * i.e., there are no more elements to return. + */ + private URL nextResource; + + /** + * Constructs a new enumeration of resources of the given name found + * within this class loader's classpath. + * + * @param name the name of the resource to search for. + */ + ResourceEnumeration(final String name) { + this.resourceName = name; + this.pathElementsIndex = 0; + findNextResource(); + } + + /** + * Indicates whether there are more elements in the enumeration to + * return. + * + * @return true if there are more elements in the + * enumeration; false otherwise. + */ + public boolean hasMoreElements() { + return (this.nextResource != null); + } + + /** + * Returns the next resource in the enumeration. + * + * @return the next resource in the enumeration + */ + public URL nextElement() { + final URL ret = this.nextResource; + if (ret == null) { + throw new NoSuchElementException(); + } + findNextResource(); + return ret; + } + + /** + * Locates the next resource of the correct name in the classpath and + * sets nextResource to the URL of that resource. If no + * more resources can be found, nextResource is set to + * null. + */ + private void findNextResource() { + URL url = null; + while ((pathElementsIndex < pathComponents.size()) && (url == null)) { + try { + final File pathComponent = pathComponents.elementAt(pathElementsIndex); + url = getResourceURL(pathComponent, this.resourceName); + pathElementsIndex++; + } catch (final BuildException e) { + // ignore path elements which are not valid relative to the + // project + } + } + this.nextResource = url; + } + } + + /** + * The size of buffers to be used in this classloader. + */ + private static final int BUFFER_SIZE = 8192; + + /** + * Number of array elements in a test array of strings + */ + private static final int NUMBER_OF_STRINGS = 256; + + /** + * The components of the classpath that the classloader searches + * for classes. + */ + private final Vector pathComponents = new VectorSet(); + + /** + * The project to which this class loader belongs. + */ + private Project project; + + /** + * Indicates whether the parent class loader should be + * consulted before trying to load with this class loader. + */ + private boolean parentFirst = true; + + /** + * These are the package roots that are to be loaded by the parent class + * loader regardless of whether the parent class loader is being searched + * first or not. + */ + private final Vector systemPackages = new Vector(); + + /** + * These are the package roots that are to be loaded by this class loader + * regardless of whether the parent class loader is being searched first + * or not. + */ + private final Vector loaderPackages = new Vector(); + + /** + * Whether or not this classloader will ignore the base + * classloader if it can't find a class. + * + * @see #setIsolated(boolean) + */ + private boolean ignoreBase = false; + + /** + * The parent class loader, if one is given or can be determined. + */ + private ClassLoader parent = null; + + /** + * A hashtable of zip files opened by the classloader (File to JarFile). + */ + private Hashtable jarFiles = new Hashtable(); + + /** Static map of jar file/time to manifest class-path entries */ + private static Map pathMap = + Collections.synchronizedMap(new HashMap()); + + /** + * The context loader saved when setting the thread's current + * context loader. + */ + private ClassLoader savedContextLoader = null; + + /** + * Whether or not the context loader is currently saved. + */ + private boolean isContextLoaderSaved = false; + + /** + * Create an Ant ClassLoader for a given project, with + * a parent classloader and an initial classpath. + * @since Ant 1.7. + * @param parent the parent for this classloader. + * @param project The project to which this classloader is to + * belong. + * @param classpath The classpath to use to load classes. + */ + public AntClassLoader(final ClassLoader parent, final Project project, final Path classpath) { + setParent(parent); + setClassPath(classpath); + setProject(project); + } + + /** + * Create an Ant Class Loader + */ + public AntClassLoader() { + setParent(null); + } + + /** + * Creates a classloader for the given project using the classpath given. + * + * @param project The project to which this classloader is to belong. + * Must not be null. + * @param classpath The classpath to use to load the classes. This + * is combined with the system classpath in a manner + * determined by the value of ${build.sysclasspath}. + * May be null, in which case no path + * elements are set up to start with. + */ + public AntClassLoader(final Project project, final Path classpath) { + setParent(null); + setProject(project); + setClassPath(classpath); + } + + /** + * Creates a classloader for the given project using the classpath given. + * + * @param parent The parent classloader to which unsatisfied loading + * attempts are delegated. May be null, + * in which case the classloader which loaded this + * class is used as the parent. + * @param project The project to which this classloader is to belong. + * Must not be null. + * @param classpath the classpath to use to load the classes. + * May be null, in which case no path + * elements are set up to start with. + * @param parentFirst If true, indicates that the parent + * classloader should be consulted before trying to + * load the a class through this loader. + */ + public AntClassLoader( + final ClassLoader parent, final Project project, final Path classpath, final boolean parentFirst) { + this(project, classpath); + if (parent != null) { + setParent(parent); + } + setParentFirst(parentFirst); + addJavaLibraries(); + } + + /** + * Creates a classloader for the given project using the classpath given. + * + * @param project The project to which this classloader is to belong. + * Must not be null. + * @param classpath The classpath to use to load the classes. May be + * null, in which case no path + * elements are set up to start with. + * @param parentFirst If true, indicates that the parent + * classloader should be consulted before trying to + * load the a class through this loader. + */ + public AntClassLoader(final Project project, final Path classpath, final boolean parentFirst) { + this(null, project, classpath, parentFirst); + } + + /** + * Creates an empty class loader. The classloader should be configured + * with path elements to specify where the loader is to look for + * classes. + * + * @param parent The parent classloader to which unsatisfied loading + * attempts are delegated. May be null, + * in which case the classloader which loaded this + * class is used as the parent. + * @param parentFirst If true, indicates that the parent + * classloader should be consulted before trying to + * load the a class through this loader. + */ + public AntClassLoader(final ClassLoader parent, final boolean parentFirst) { + setParent(parent); + project = null; + this.parentFirst = parentFirst; + } + + /** + * Set the project associated with this class loader + * + * @param project the project instance + */ + public void setProject(final Project project) { + this.project = project; + if (project != null) { + project.addBuildListener(this); + } + } + + /** + * Set the classpath to search for classes to load. This should not be + * changed once the classloader starts to server classes + * + * @param classpath the search classpath consisting of directories and + * jar/zip files. + */ + public void setClassPath(final Path classpath) { + pathComponents.removeAllElements(); + if (classpath != null) { + final Path actualClasspath = classpath.concatSystemClasspath("ignore"); + final String[] pathElements = actualClasspath.list(); + for (int i = 0; i < pathElements.length; ++i) { + try { + addPathElement(pathElements[i]); + } catch (final BuildException e) { + // ignore path elements which are invalid + // relative to the project + } + } + } + } + + /** + * Set the parent for this class loader. This is the class loader to which + * this class loader will delegate to load classes + * + * @param parent the parent class loader. + */ + public void setParent(final ClassLoader parent) { + this.parent = parent == null ? AntClassLoader.class.getClassLoader() : parent; + } + + /** + * Control whether class lookup is delegated to the parent loader first + * or after this loader. Use with extreme caution. Setting this to + * false violates the class loader hierarchy and can lead to Linkage errors + * + * @param parentFirst if true, delegate initial class search to the parent + * classloader. + */ + public void setParentFirst(final boolean parentFirst) { + this.parentFirst = parentFirst; + } + + /** + * Logs a message through the project object if one has been provided. + * + * @param message The message to log. + * Should not be null. + * + * @param priority The logging priority of the message. + */ + protected void log(final String message, final int priority) { + if (project != null) { + project.log(message, priority); + } + } + + /** + * Sets the current thread's context loader to this classloader, storing + * the current loader value for later resetting. + */ + public void setThreadContextLoader() { + if (isContextLoaderSaved) { + throw new BuildException("Context loader has not been reset"); + } + if (LoaderUtils.isContextLoaderAvailable()) { + savedContextLoader = LoaderUtils.getContextClassLoader(); + ClassLoader loader = this; + if (project != null && "only".equals(project.getProperty("build.sysclasspath"))) { + loader = this.getClass().getClassLoader(); + } + LoaderUtils.setContextClassLoader(loader); + isContextLoaderSaved = true; + } + } + + /** + * Resets the current thread's context loader to its original value. + */ + public void resetThreadContextLoader() { + if (LoaderUtils.isContextLoaderAvailable() && isContextLoaderSaved) { + LoaderUtils.setContextClassLoader(savedContextLoader); + savedContextLoader = null; + isContextLoaderSaved = false; + } + } + + + /** + * Adds an element to the classpath to be searched. + * + * @param pathElement The path element to add. Must not be + * null. + * + * @exception BuildException if the given path element cannot be resolved + * against the project. + */ + public void addPathElement(final String pathElement) throws BuildException { + final File pathComponent = project != null ? project.resolveFile(pathElement) : new File( + pathElement); + try { + addPathFile(pathComponent); + } catch (final IOException e) { + throw new BuildException(e); + } + } + + /** + * Add a path component. + * This simply adds the file, unlike addPathElement + * it does not open jar files and load files from + * their CLASSPATH entry in the manifest file. + * @param file the jar file or directory to add. + */ + public void addPathComponent(final File file) { + if (pathComponents.contains(file)) { + return; + } + pathComponents.addElement(file); + } + + /** + * Add a file to the path. + * Reads the manifest, if available, and adds any additional class path jars + * specified in the manifest. + * + * @param pathComponent the file which is to be added to the path for + * this class loader + * + * @throws IOException if data needed from the file cannot be read. + */ + protected void addPathFile(final File pathComponent) throws IOException { + if (!pathComponents.contains(pathComponent)) { + pathComponents.addElement(pathComponent); + } + if (pathComponent.isDirectory()) { + return; + } + + final String absPathPlusTimeAndLength = pathComponent.getAbsolutePath() + + pathComponent.lastModified() + "-" + pathComponent.length(); + String classpath = pathMap.get(absPathPlusTimeAndLength); + if (classpath == null) { + JarFile jarFile = null; + try { + jarFile = new JarFile(pathComponent); + final Manifest manifest = jarFile.getManifest(); + if (manifest == null) { + return; + } + classpath = manifest.getMainAttributes() + .getValue(Attributes.Name.CLASS_PATH); + } finally { + if (jarFile != null) { + jarFile.close(); + } + } + if (classpath == null) { + classpath = ""; + } + pathMap.put(absPathPlusTimeAndLength, classpath); + } + + if (!"".equals(classpath)) { + final URL baseURL = FILE_UTILS.getFileURL(pathComponent); + final StringTokenizer st = new StringTokenizer(classpath); + while (st.hasMoreTokens()) { + final String classpathElement = st.nextToken(); + final URL libraryURL = new URL(baseURL, classpathElement); + if (!libraryURL.getProtocol().equals("file")) { + log("Skipping jar library " + classpathElement + + " since only relative URLs are supported by this" + " loader", + Project.MSG_VERBOSE); + continue; + } + final String decodedPath = Locator.decodeUri(libraryURL.getFile()); + final File libraryFile = new File(decodedPath); + if (libraryFile.exists() && !isInPath(libraryFile)) { + addPathFile(libraryFile); + } + } + } + } + + /** + * Returns the classpath this classloader will consult. + * + * @return the classpath used for this classloader, with elements + * separated by the path separator for the system. + */ + public String getClasspath() { + final StringBuilder sb = new StringBuilder(); + boolean firstPass = true; + final Enumeration componentEnum = pathComponents.elements(); + while (componentEnum.hasMoreElements()) { + if (!firstPass) { + sb.append(System.getProperty("path.separator")); + } else { + firstPass = false; + } + sb.append(componentEnum.nextElement().getAbsolutePath()); + } + return sb.toString(); + } + + /** + * Sets whether this classloader should run in isolated mode. In + * isolated mode, classes not found on the given classpath will + * not be referred to the parent class loader but will cause a + * ClassNotFoundException. + * + * @param isolated Whether or not this classloader should run in + * isolated mode. + */ + public synchronized void setIsolated(final boolean isolated) { + ignoreBase = isolated; + } + + /** + * Forces initialization of a class in a JDK 1.1 compatible, albeit hacky + * way. + * + * @param theClass The class to initialize. + * Must not be null. + * + * @deprecated since 1.6.x. + * Use Class.forName with initialize=true instead. + */ + @Deprecated + public static void initializeClass(final Class theClass) { + // ***HACK*** We ask the VM to create an instance + // by voluntarily providing illegal arguments to force + // the VM to run the class' static initializer, while + // at the same time not running a valid constructor. + + final Constructor[] cons = theClass.getDeclaredConstructors(); + //At least one constructor is guaranteed to be there, but check anyway. + if (cons != null) { + if (cons.length > 0 && cons[0] != null) { + final String[] strs = new String[NUMBER_OF_STRINGS]; + try { + cons[0].newInstance((Object[]) strs); + // Expecting an exception to be thrown by this call: + // IllegalArgumentException: wrong number of Arguments + } catch (final Exception e) { + // Ignore - we are interested only in the side + // effect - that of getting the static initializers + // invoked. As we do not want to call a valid + // constructor to get this side effect, an + // attempt is made to call a hopefully + // invalid constructor - come on, nobody + // would have a constructor that takes in + // 256 String arguments ;-) + // (In fact, they can't - according to JVM spec + // section 4.10, the number of method parameters is limited + // to 255 by the definition of a method descriptor. + // Constructors count as methods here.) + } + } + } + } + + /** + * Adds a package root to the list of packages which must be loaded on the + * parent loader. + * + * All subpackages are also included. + * + * @param packageRoot The root of all packages to be included. + * Should not be null. + */ + public void addSystemPackageRoot(final String packageRoot) { + systemPackages.addElement(packageRoot + (packageRoot.endsWith(".") ? "" : ".")); + } + + /** + * Adds a package root to the list of packages which must be loaded using + * this loader. + * + * All subpackages are also included. + * + * @param packageRoot The root of all packages to be included. + * Should not be null. + */ + public void addLoaderPackageRoot(final String packageRoot) { + loaderPackages.addElement(packageRoot + (packageRoot.endsWith(".") ? "" : ".")); + } + + /** + * Loads a class through this class loader even if that class is available + * on the parent classpath. + * + * This ensures that any classes which are loaded by the returned class + * will use this classloader. + * + * @param classname The name of the class to be loaded. + * Must not be null. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on this loader's classpath. + */ + public Class forceLoadClass(final String classname) throws ClassNotFoundException { + log("force loading " + classname, Project.MSG_DEBUG); + + Class theClass = findLoadedClass(classname); + + if (theClass == null) { + theClass = findClass(classname); + } + return theClass; + } + + /** + * Loads a class through this class loader but defer to the parent class + * loader. + * + * This ensures that instances of the returned class will be compatible + * with instances which have already been loaded on the parent + * loader. + * + * @param classname The name of the class to be loaded. + * Must not be null. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on this loader's classpath. + */ + public Class forceLoadSystemClass(final String classname) throws ClassNotFoundException { + log("force system loading " + classname, Project.MSG_DEBUG); + + Class theClass = findLoadedClass(classname); + + if (theClass == null) { + theClass = findBaseClass(classname); + } + return theClass; + } + + /** + * Returns a stream to read the requested resource name. + * + * @param name The name of the resource for which a stream is required. + * Must not be null. + * + * @return a stream to the required resource or null if the + * resource cannot be found on the loader's classpath. + */ + @Override + public InputStream getResourceAsStream(final String name) { + InputStream resourceStream = null; + if (isParentFirst(name)) { + resourceStream = loadBaseResource(name); + } + if (resourceStream != null) { + log("ResourceStream for " + name + + " loaded from parent loader", Project.MSG_DEBUG); + } else { + resourceStream = loadResource(name); + if (resourceStream != null) { + log("ResourceStream for " + name + + " loaded from ant loader", Project.MSG_DEBUG); + } + } + if (resourceStream == null && !isParentFirst(name)) { + if (ignoreBase) { + resourceStream = getRootLoader() == null + ? null + : getRootLoader().getResourceAsStream(name); + } else { + resourceStream = loadBaseResource(name); + } + if (resourceStream != null) { + log("ResourceStream for " + name + " loaded from parent loader", + Project.MSG_DEBUG); + } + } + if (resourceStream == null) { + log("Couldn't load ResourceStream for " + name, Project.MSG_DEBUG); + } + return resourceStream; + } + + /** + * Returns a stream to read the requested resource name from this loader. + * + * @param name The name of the resource for which a stream is required. + * Must not be null. + * + * @return a stream to the required resource or null if + * the resource cannot be found on the loader's classpath. + */ + private InputStream loadResource(final String name) { + // we need to search the components of the path to see if we can + // find the class we want. + InputStream stream = null; + + final Enumeration e = pathComponents.elements(); + while (e.hasMoreElements() && stream == null) { + final File pathComponent = e.nextElement(); + stream = getResourceStream(pathComponent, name); + } + return stream; + } + + /** + * Finds a system resource (which should be loaded from the parent + * classloader). + * + * @param name The name of the system resource to load. + * Must not be null. + * + * @return a stream to the named resource, or null if + * the resource cannot be found. + */ + private InputStream loadBaseResource(final String name) { + return parent == null ? super.getResourceAsStream(name) : parent.getResourceAsStream(name); + } + + /** + * Returns an inputstream to a given resource in the given file which may + * either be a directory or a zip file. + * + * @param file the file (directory or jar) in which to search for the + * resource. Must not be null. + * @param resourceName The name of the resource for which a stream is + * required. Must not be null. + * + * @return a stream to the required resource or null if + * the resource cannot be found in the given file. + */ + private InputStream getResourceStream(final File file, final String resourceName) { + try { + JarFile jarFile = jarFiles.get(file); + if (jarFile == null && file.isDirectory()) { + final File resource = new File(file, resourceName); + if (resource.exists()) { + return new FileInputStream(resource); + } + } else { + if (jarFile == null) { + if (file.exists()) { + jarFile = new JarFile(file); + jarFiles.put(file, jarFile); + } else { + return null; + } + //to eliminate a race condition, retrieve the entry + //that is in the hash table under that filename + jarFile = jarFiles.get(file); + } + final JarEntry entry = jarFile.getJarEntry(resourceName); + if (entry != null) { + return jarFile.getInputStream(entry); + } + } + } catch (final Exception e) { + log("Ignoring Exception " + e.getClass().getName() + ": " + e.getMessage() + + " reading resource " + resourceName + " from " + file, Project.MSG_VERBOSE); + } + return null; + } + + /** + * Tests whether or not the parent classloader should be checked for a + * resource before this one. If the resource matches both the "use parent + * classloader first" and the "use this classloader first" lists, the latter + * takes priority. + * + * @param resourceName + * The name of the resource to check. Must not be + * null. + * + * @return whether or not the parent classloader should be checked for a + * resource before this one is. + */ + private boolean isParentFirst(final String resourceName) { + // default to the global setting and then see + // if this class belongs to a package which has been + // designated to use a specific loader first + // (this one or the parent one) + + // TODO - shouldn't this always return false in isolated mode? + + boolean useParentFirst = parentFirst; + + for (final Enumeration e = systemPackages.elements(); e.hasMoreElements();) { + final String packageName = e.nextElement(); + if (resourceName.startsWith(packageName)) { + useParentFirst = true; + break; + } + } + for (final Enumeration e = loaderPackages.elements(); e.hasMoreElements();) { + final String packageName = e.nextElement(); + if (resourceName.startsWith(packageName)) { + useParentFirst = false; + break; + } + } + return useParentFirst; + } + + /** + * Used for isolated resource seaching. + * @return the root classloader of AntClassLoader. + */ + private ClassLoader getRootLoader() { + ClassLoader ret = getClass().getClassLoader(); + while (ret != null && ret.getParent() != null) { + ret = ret.getParent(); + } + return ret; + } + + /** + * Finds the resource with the given name. A resource is + * some data (images, audio, text, etc) that can be accessed by class + * code in a way that is independent of the location of the code. + * + * @param name The name of the resource for which a stream is required. + * Must not be null. + * + * @return a URL for reading the resource, or null if the + * resource could not be found or the caller doesn't have + * adequate privileges to get the resource. + */ + @Override + public URL getResource(final String name) { + // we need to search the components of the path to see if + // we can find the class we want. + URL url = null; + if (isParentFirst(name)) { + url = parent == null ? super.getResource(name) : parent.getResource(name); + } + if (url != null) { + log("Resource " + name + " loaded from parent loader", Project.MSG_DEBUG); + } else { + // try and load from this loader if the parent either didn't find + // it or wasn't consulted. + final Enumeration e = pathComponents.elements(); + while (e.hasMoreElements() && url == null) { + final File pathComponent = e.nextElement(); + url = getResourceURL(pathComponent, name); + if (url != null) { + log("Resource " + name + " loaded from ant loader", Project.MSG_DEBUG); + } + } + } + if (url == null && !isParentFirst(name)) { + // this loader was first but it didn't find it - try the parent + if (ignoreBase) { + url = getRootLoader() == null ? null : getRootLoader().getResource(name); + } else { + url = parent == null ? super.getResource(name) : parent.getResource(name); + } + if (url != null) { + log("Resource " + name + " loaded from parent loader", Project.MSG_DEBUG); + } + } + if (url == null) { + log("Couldn't load Resource " + name, Project.MSG_DEBUG); + } + return url; + } + + /** + * Finds all the resources with the given name. A resource is some + * data (images, audio, text, etc) that can be accessed by class + * code in a way that is independent of the location of the code. + * + *

    Would override getResources if that wasn't final in Java + * 1.4.

    + * + * @param name name of the resource + * @return possible URLs as enumeration + * @throws IOException + * @see {@link #findResources(String, boolean)} + * @since Ant 1.8.0 + */ + public Enumeration getNamedResources(final String name) + throws IOException { + return findResources(name, false); + } + + /** + * Returns an enumeration of URLs representing all the resources with the + * given name by searching the class loader's classpath. + * + * @param name The resource name to search for. + * Must not be null. + * @return an enumeration of URLs for the resources + * @exception IOException if I/O errors occurs (can't happen) + */ + @Override + protected Enumeration findResources(final String name) throws IOException { + return findResources(name, true); + } + + /** + * Returns an enumeration of URLs representing all the resources with the + * given name by searching the class loader's classpath. + * + * @param name The resource name to search for. + * Must not be null. + * @param parentHasBeenSearched whether ClassLoader.this.parent + * has been searched - will be true if the method is (indirectly) + * called from ClassLoader.getResources + * @return an enumeration of URLs for the resources + * @exception IOException if I/O errors occurs (can't happen) + */ + protected Enumeration findResources(final String name, + final boolean parentHasBeenSearched) + throws IOException { + final Enumeration mine = new ResourceEnumeration(name); + Enumeration base; + if (parent != null && (!parentHasBeenSearched || parent != getParent())) { + // Delegate to the parent: + base = parent.getResources(name); + // Note: could cause overlaps in case + // ClassLoader.this.parent has matches and + // parentHasBeenSearched is true + } else { + // ClassLoader.this.parent is already delegated to for example from + // ClassLoader.getResources, no need: + base = new CollectionUtils.EmptyEnumeration(); + } + if (isParentFirst(name)) { + // Normal case. + return CollectionUtils.append(base, mine); + } + if (ignoreBase) { + return getRootLoader() == null ? mine : CollectionUtils.append(mine, getRootLoader() + .getResources(name)); + } + // parent last: + return CollectionUtils.append(mine, base); + } + + /** + * Returns the URL of a given resource in the given file which may + * either be a directory or a zip file. + * + * @param file The file (directory or jar) in which to search for + * the resource. Must not be null. + * @param resourceName The name of the resource for which a stream + * is required. Must not be null. + * + * @return a stream to the required resource or null if the + * resource cannot be found in the given file object. + */ + protected URL getResourceURL(final File file, final String resourceName) { + try { + JarFile jarFile = jarFiles.get(file); + if (jarFile == null && file.isDirectory()) { + final File resource = new File(file, resourceName); + + if (resource.exists()) { + try { + return FILE_UTILS.getFileURL(resource); + } catch (final MalformedURLException ex) { + return null; + } + } + } else { + if (jarFile == null) { + if (file.exists()) { + if (!isZip(file)) { + final String msg = "CLASSPATH element " + file + + " is not a JAR."; + log(msg, Project.MSG_WARN); + System.err.println(msg); + return null; + } + jarFile = new JarFile(file); + jarFiles.put(file, jarFile); + } else { + return null; + } + // potential race-condition + jarFile = jarFiles.get(file); + } + final JarEntry entry = jarFile.getJarEntry(resourceName); + if (entry != null) { + try { + return new URL("jar:" + FILE_UTILS.getFileURL(file) + "!/" + entry); + } catch (final MalformedURLException ex) { + return null; + } + } + } + } catch (final Exception e) { + final String msg = "Unable to obtain resource from " + file + ": "; + log(msg + e, Project.MSG_WARN); + System.err.println(msg); + e.printStackTrace(); + } + return null; + } + + /** + * Loads a class with this class loader. + * + * This class attempts to load the class in an order determined by whether + * or not the class matches the system/loader package lists, with the + * loader package list taking priority. If the classloader is in isolated + * mode, failure to load the class in this loader will result in a + * ClassNotFoundException. + * + * @param classname The name of the class to be loaded. + * Must not be null. + * @param resolve true if all classes upon which this class + * depends are to be loaded. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on the system classpath (when not in isolated mode) or this loader's + * classpath. + */ + @Override + protected synchronized Class loadClass(final String classname, final boolean resolve) + throws ClassNotFoundException { + // 'sync' is needed - otherwise 2 threads can load the same class + // twice, resulting in LinkageError: duplicated class definition. + // findLoadedClass avoids that, but without sync it won't work. + + Class theClass = findLoadedClass(classname); + if (theClass != null) { + return theClass; + } + if (isParentFirst(classname)) { + try { + theClass = findBaseClass(classname); + log("Class " + classname + " loaded from parent loader " + "(parentFirst)", + Project.MSG_DEBUG); + } catch (final ClassNotFoundException cnfe) { + theClass = findClass(classname); + log("Class " + classname + " loaded from ant loader " + "(parentFirst)", + Project.MSG_DEBUG); + } + } else { + try { + theClass = findClass(classname); + log("Class " + classname + " loaded from ant loader", Project.MSG_DEBUG); + } catch (final ClassNotFoundException cnfe) { + if (ignoreBase) { + throw cnfe; + } + theClass = findBaseClass(classname); + log("Class " + classname + " loaded from parent loader", Project.MSG_DEBUG); + } + } + if (resolve) { + resolveClass(theClass); + } + return theClass; + } + + /** + * Converts the class dot notation to a filesystem equivalent for + * searching purposes. + * + * @param classname The class name in dot format (eg java.lang.Integer). + * Must not be null. + * + * @return the classname in filesystem format (eg java/lang/Integer.class) + */ + private String getClassFilename(final String classname) { + return classname.replace('.', '/') + ".class"; + } + + /** + * Define a class given its bytes + * + * @param container the container from which the class data has been read + * may be a directory or a jar/zip file. + * + * @param classData the bytecode data for the class + * @param classname the name of the class + * + * @return the Class instance created from the given data + * + * @throws IOException if the class data cannot be read. + */ + protected Class defineClassFromData(final File container, final byte[] classData, final String classname) + throws IOException { + definePackage(container, classname); + final ProtectionDomain currentPd = Project.class.getProtectionDomain(); + final String classResource = getClassFilename(classname); + final CodeSource src = new CodeSource(FILE_UTILS.getFileURL(container), + getCertificates(container, + classResource)); + final ProtectionDomain classesPd = + new ProtectionDomain(src, currentPd.getPermissions(), + this, + currentPd.getPrincipals()); + return defineClass(classname, classData, 0, classData.length, + classesPd); + } + + /** + * Define the package information associated with a class. + * + * @param container the file containing the class definition. + * @param className the class name of for which the package information + * is to be determined. + * + * @exception IOException if the package information cannot be read from the + * container. + */ + protected void definePackage(final File container, final String className) throws IOException { + final int classIndex = className.lastIndexOf('.'); + if (classIndex == -1) { + return; + } + final String packageName = className.substring(0, classIndex); + if (getPackage(packageName) != null) { + // already defined + return; + } + // define the package now + final Manifest manifest = getJarManifest(container); + + if (manifest == null) { + definePackage(packageName, null, null, null, null, null, null, null); + } else { + definePackage(container, packageName, manifest); + } + } + + /** + * Get the manifest from the given jar, if it is indeed a jar and it has a + * manifest + * + * @param container the File from which a manifest is required. + * + * @return the jar's manifest or null is the container is not a jar or it + * has no manifest. + * + * @exception IOException if the manifest cannot be read. + */ + private Manifest getJarManifest(final File container) throws IOException { + if (container.isDirectory()) { + return null; + } + final JarFile jarFile = jarFiles.get(container); + if (jarFile == null) { + return null; + } + return jarFile.getManifest(); + } + + /** + * Get the certificates for a given jar entry, if it is indeed a jar. + * + * @param container the File from which to read the entry + * @param entry the entry of which the certificates are requested + * + * @return the entry's certificates or null is the container is + * not a jar or it has no certificates. + * + * @exception IOException if the manifest cannot be read. + */ + private Certificate[] getCertificates(final File container, final String entry) + throws IOException { + if (container.isDirectory()) { + return null; + } + final JarFile jarFile = jarFiles.get(container); + if (jarFile == null) { + return null; + } + final JarEntry ent = jarFile.getJarEntry(entry); + return ent == null ? null : ent.getCertificates(); + } + + /** + * Define the package information when the class comes from a + * jar with a manifest + * + * @param container the jar file containing the manifest + * @param packageName the name of the package being defined. + * @param manifest the jar's manifest + */ + protected void definePackage(final File container, final String packageName, final Manifest manifest) { + final String sectionName = packageName.replace('.', '/') + "/"; + + String specificationTitle = null; + String specificationVendor = null; + String specificationVersion = null; + String implementationTitle = null; + String implementationVendor = null; + String implementationVersion = null; + String sealedString = null; + URL sealBase = null; + + final Attributes sectionAttributes = manifest.getAttributes(sectionName); + if (sectionAttributes != null) { + specificationTitle = sectionAttributes.getValue(Name.SPECIFICATION_TITLE); + specificationVendor = sectionAttributes.getValue(Name.SPECIFICATION_VENDOR); + specificationVersion = sectionAttributes.getValue(Name.SPECIFICATION_VERSION); + implementationTitle = sectionAttributes.getValue(Name.IMPLEMENTATION_TITLE); + implementationVendor = sectionAttributes.getValue(Name.IMPLEMENTATION_VENDOR); + implementationVersion = sectionAttributes.getValue(Name.IMPLEMENTATION_VERSION); + sealedString = sectionAttributes.getValue(Name.SEALED); + } + final Attributes mainAttributes = manifest.getMainAttributes(); + if (mainAttributes != null) { + if (specificationTitle == null) { + specificationTitle = mainAttributes.getValue(Name.SPECIFICATION_TITLE); + } + if (specificationVendor == null) { + specificationVendor = mainAttributes.getValue(Name.SPECIFICATION_VENDOR); + } + if (specificationVersion == null) { + specificationVersion = mainAttributes.getValue(Name.SPECIFICATION_VERSION); + } + if (implementationTitle == null) { + implementationTitle = mainAttributes.getValue(Name.IMPLEMENTATION_TITLE); + } + if (implementationVendor == null) { + implementationVendor = mainAttributes.getValue(Name.IMPLEMENTATION_VENDOR); + } + if (implementationVersion == null) { + implementationVersion = mainAttributes.getValue(Name.IMPLEMENTATION_VERSION); + } + if (sealedString == null) { + sealedString = mainAttributes.getValue(Name.SEALED); + } + } + if (sealedString != null && sealedString.equalsIgnoreCase("true")) { + try { + sealBase = new URL(FileUtils.getFileUtils().toURI(container.getAbsolutePath())); + } catch (final MalformedURLException e) { + // ignore + } + } + definePackage(packageName, specificationTitle, specificationVersion, specificationVendor, + implementationTitle, implementationVersion, implementationVendor, sealBase); + } + + /** + * Reads a class definition from a stream. + * + * @param stream The stream from which the class is to be read. + * Must not be null. + * @param classname The name of the class in the stream. + * Must not be null. + * @param container the file or directory containing the class. + * + * @return the Class object read from the stream. + * + * @exception IOException if there is a problem reading the class from the + * stream. + * @exception SecurityException if there is a security problem while + * reading the class from the stream. + */ + private Class getClassFromStream(final InputStream stream, final String classname, final File container) + throws IOException, SecurityException { + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int bytesRead = -1; + final byte[] buffer = new byte[BUFFER_SIZE]; + + while ((bytesRead = stream.read(buffer, 0, BUFFER_SIZE)) != -1) { + baos.write(buffer, 0, bytesRead); + } + final byte[] classData = baos.toByteArray(); + return defineClassFromData(container, classData, classname); + } + + /** + * Searches for and load a class on the classpath of this class loader. + * + * @param name The name of the class to be loaded. Must not be + * null. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on this loader's classpath. + */ + @Override + public Class findClass(final String name) throws ClassNotFoundException { + log("Finding class " + name, Project.MSG_DEBUG); + return findClassInComponents(name); + } + + /** + * Indicate if the given file is in this loader's path + * + * @param component the file which is to be checked + * + * @return true if the file is in the class path + */ + protected boolean isInPath(final File component) { + return pathComponents.contains(component); + } + + /** + * Finds a class on the given classpath. + * + * @param name The name of the class to be loaded. Must not be + * null. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on this loader's classpath. + */ + private Class findClassInComponents(final String name) + throws ClassNotFoundException { + // we need to search the components of the path to see if + // we can find the class we want. + final String classFilename = getClassFilename(name); + final Enumeration e = pathComponents.elements(); + while (e.hasMoreElements()) { + final File pathComponent = e.nextElement(); + InputStream stream = null; + try { + stream = getResourceStream(pathComponent, classFilename); + if (stream != null) { + log("Loaded from " + pathComponent + " " + + classFilename, Project.MSG_DEBUG); + return getClassFromStream(stream, name, pathComponent); + } + } catch (final SecurityException se) { + throw se; + } catch (final IOException ioe) { + // ioe.printStackTrace(); + log("Exception reading component " + pathComponent + " (reason: " + + ioe.getMessage() + ")", Project.MSG_VERBOSE); + } finally { + FileUtils.close(stream); + } + } + throw new ClassNotFoundException(name); + } + + /** + * Finds a system class (which should be loaded from the same classloader + * as the Ant core). + * + * For JDK 1.1 compatibility, this uses the findSystemClass method if + * no parent classloader has been specified. + * + * @param name The name of the class to be loaded. + * Must not be null. + * + * @return the required Class object + * + * @exception ClassNotFoundException if the requested class does not exist + * on this loader's classpath. + */ + private Class findBaseClass(final String name) throws ClassNotFoundException { + return parent == null ? findSystemClass(name) : parent.loadClass(name); + } + + /** + * Cleans up any resources held by this classloader. Any open archive + * files are closed. + */ + public synchronized void cleanup() { + for (final Enumeration e = jarFiles.elements(); e.hasMoreElements();) { + final JarFile jarFile = e.nextElement(); + try { + jarFile.close(); + } catch (final IOException ioe) { + // ignore + } + } + jarFiles = new Hashtable(); + if (project != null) { + project.removeBuildListener(this); + } + project = null; + } + + /** + * Gets the parent as has been specified in the constructor or via + * setParent. + * + * @return classloader + * @since Ant 1.8.0 + */ + public ClassLoader getConfiguredParent() { + return parent; + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the buildStarted event + */ + public void buildStarted(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Cleans up any resources held by this classloader at the end + * of a build. + * + * @param event the buildFinished event + */ + public void buildFinished(final BuildEvent event) { + cleanup(); + } + + /** + * Cleans up any resources held by this classloader at the end of + * a subbuild if it has been created for the subbuild's project + * instance. + * + * @param event the buildFinished event + * + * @since Ant 1.6.2 + */ + public void subBuildFinished(final BuildEvent event) { + if (event.getProject() == project) { + cleanup(); + } + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the buildStarted event + * + * @since Ant 1.6.2 + */ + public void subBuildStarted(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the targetStarted event + */ + public void targetStarted(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the targetFinished event + */ + public void targetFinished(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the taskStarted event + */ + public void taskStarted(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the taskFinished event + */ + public void taskFinished(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * Empty implementation to satisfy the BuildListener interface. + * + * @param event the messageLogged event + */ + public void messageLogged(final BuildEvent event) { + // Not significant for the class loader. + } + + /** + * add any libraries that come with different java versions + * here + */ + public void addJavaLibraries() { + final Vector packages = JavaEnvUtils.getJrePackages(); + final Enumeration e = packages.elements(); + while (e.hasMoreElements()) { + final String packageName = e.nextElement(); + addSystemPackageRoot(packageName); + } + } + + /** + * Returns a String representing this loader. + * @return the path that this classloader has. + */ + @Override + public String toString() { + return "AntClassLoader[" + getClasspath() + "]"; + } + + private static Class subClassToLoad = null; + private static final Class[] CONSTRUCTOR_ARGS = new Class[] { + ClassLoader.class, Project.class, Path.class, Boolean.TYPE + }; + + static { + if (JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_5)) { + try { + subClassToLoad = + Class.forName("org.apache.tools.ant.loader.AntClassLoader5"); + } catch (final ClassNotFoundException e) { + // this is Java5 but the installation is lacking our subclass + } + } + } + + /** + * Factory method + */ + public static AntClassLoader newAntClassLoader(final ClassLoader parent, + final Project project, + final Path path, + final boolean parentFirst) { + if (subClassToLoad != null) { + return (AntClassLoader) + ReflectUtil.newInstance(subClassToLoad, + CONSTRUCTOR_ARGS, + new Object[] { + parent, project, path, + Boolean.valueOf(parentFirst) + }); + } + return new AntClassLoader(parent, project, path, parentFirst); + } + + private static final ZipLong EOCD_SIG = new ZipLong(0X06054B50L); + private static final ZipLong SINGLE_SEGMENT_SPLIT_MARKER = + new ZipLong(0X30304B50L); + + private static boolean isZip(final File file) throws IOException { + final byte[] sig = new byte[4]; + if (readFully(file, sig)) { + final ZipLong start = new ZipLong(sig); + return ZipLong.LFH_SIG.equals(start) // normal file + || EOCD_SIG.equals(start) // empty zip + || ZipLong.DD_SIG.equals(start) // split zip + || SINGLE_SEGMENT_SPLIT_MARKER.equals(start); + } + return false; + } + + private static boolean readFully(final File f, final byte[] b) throws IOException { + final FileInputStream fis = new FileInputStream(f); + try { + final int len = b.length; + int count = 0, x = 0; + while (count != len) { + x = fis.read(b, count, len - count); + if (x == -1) { + break; + } + count += x; + } + return count == len; + } finally { + fis.close(); + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntTypeDefinition.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntTypeDefinition.java new file mode 100644 index 00000000..104820f1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/AntTypeDefinition.java @@ -0,0 +1,389 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + + +/** + * This class contains all the information + * on a particular ant type, + * the classname, adapter and the class + * it should be assignable from. + * This type replaces the task/datatype split + * of pre ant 1.6. + * + */ +public class AntTypeDefinition { + private String name; + private Class clazz; + private Class adapterClass; + private Class adaptToClass; + private String className; + private ClassLoader classLoader; + private boolean restrict = false; + + /** + * Set the restrict attribute. + * @param restrict the value to set. + */ + public void setRestrict(boolean restrict) { + this.restrict = restrict; + } + + /** + * Get the restrict attribute. + * @return the restrict attribute. + */ + public boolean isRestrict() { + return restrict; + } + + /** + * Set the definition's name. + * @param name the name of the definition. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Return the definition's name. + * @return the name of the definition. + */ + public String getName() { + return name; + } + + /** + * Set the class of the definition. + * As a side-effect may set the classloader and classname. + * @param clazz the class of this definition. + */ + public void setClass(Class clazz) { + this.clazz = clazz; + if (clazz == null) { + return; + } + this.classLoader = (classLoader == null) + ? clazz.getClassLoader() : classLoader; + this.className = (className == null) ? clazz.getName() : className; + } + + /** + * Set the classname of the definition. + * @param className the classname of this definition. + */ + public void setClassName(String className) { + this.className = className; + } + + /** + * Get the classname of the definition. + * @return the name of the class of this definition. + */ + public String getClassName() { + return className; + } + + /** + * Set the adapter class for this definition. + * This class is used to adapt the definitions class if + * required. + * @param adapterClass the adapterClass. + */ + public void setAdapterClass(Class adapterClass) { + this.adapterClass = adapterClass; + } + + /** + * Set the assignable class for this definition. + * @param adaptToClass the assignable class. + */ + + public void setAdaptToClass(Class adaptToClass) { + this.adaptToClass = adaptToClass; + } + + /** + * Set the classloader to use to create an instance + * of the definition. + * @param classLoader the ClassLoader. + */ + public void setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + + /** + * Get the classloader for this definition. + * @return the classloader for this definition. + */ + public ClassLoader getClassLoader() { + return classLoader; + } + + /** + * Get the exposed class for this + * definition. This will be a proxy class + * (adapted class) if there is an adapter + * class and the definition class is not + * assignable from the assignable class. + * @param project the current project. + * @return the exposed class - may return null if unable to load the class + */ + public Class getExposedClass(Project project) { + if (adaptToClass != null) { + Class z = getTypeClass(project); + if (z == null || adaptToClass.isAssignableFrom(z)) { + return z; + } + } + return (adapterClass == null) ? getTypeClass(project) : adapterClass; + } + + /** + * Get the definition class. + * @param project the current project. + * @return the type of the definition. + */ + public Class getTypeClass(Project project) { + try { + return innerGetTypeClass(); + } catch (NoClassDefFoundError ncdfe) { + project.log("Could not load a dependent class (" + + ncdfe.getMessage() + ") for type " + + name, Project.MSG_DEBUG); + } catch (ClassNotFoundException cnfe) { + project.log("Could not load class (" + className + + ") for type " + name, Project.MSG_DEBUG); + } + return null; + } + + /** + * Try and load a class, with no attempt to catch any fault. + * @return the class that implements this component + * @throws ClassNotFoundException if the class cannot be found. + * @throws NoClassDefFoundError if the there is an error + * finding the class. + */ + public Class innerGetTypeClass() throws ClassNotFoundException { + if (clazz != null) { + return clazz; + } + if (classLoader == null) { + clazz = Class.forName(className); + } else { + clazz = classLoader.loadClass(className); + } + return clazz; + } + + /** + * Create an instance of the definition. + * The instance may be wrapped in a proxy class. + * @param project the current project. + * @return the created object. + */ + public Object create(Project project) { + return icreate(project); + } + + /** + * Create a component object based on + * its definition. + * @return the component as an Object. + */ + private Object icreate(Project project) { + Class c = getTypeClass(project); + if (c == null) { + return null; + } + Object o = createAndSet(project, c); + if (o == null || adapterClass == null) { + return o; + } + if (adaptToClass != null) { + if (adaptToClass.isAssignableFrom(o.getClass())) { + return o; + } + } + TypeAdapter adapterObject = (TypeAdapter) createAndSet( + project, adapterClass); + if (adapterObject == null) { + return null; + } + adapterObject.setProxy(o); + return adapterObject; + } + + /** + * Checks if the attributes are correct. + *
      + *
    • if the class can be created.
    • + *
    • if an adapter class can be created
    • + *
    • if the type is assignable from adapter
    • + *
    • if the type can be used with the adapter class
    • + *
    + * @param project the current project. + */ + public void checkClass(Project project) { + if (clazz == null) { + clazz = getTypeClass(project); + if (clazz == null) { + throw new BuildException( + "Unable to create class for " + getName()); + } + } + // check adapter + if (adapterClass != null && (adaptToClass == null + || !adaptToClass.isAssignableFrom(clazz))) { + TypeAdapter adapter = (TypeAdapter) createAndSet( + project, adapterClass); + if (adapter == null) { + throw new BuildException("Unable to create adapter object"); + } + adapter.checkProxyClass(clazz); + } + } + + /** + * Get the constructor of the definition + * and invoke it. + * @return the instantiated Object. + */ + private Object createAndSet(Project project, Class c) { + try { + Object o = innerCreateAndSet(c, project); + return o; + } catch (InvocationTargetException ex) { + Throwable t = ex.getTargetException(); + throw new BuildException( + "Could not create type " + name + " due to " + t, t); + } catch (NoClassDefFoundError ncdfe) { + String msg = "Type " + name + ": A class needed by class " + + c + " cannot be found: " + ncdfe.getMessage(); + throw new BuildException(msg, ncdfe); + } catch (NoSuchMethodException nsme) { + throw new BuildException("Could not create type " + name + + " as the class " + c + " has no compatible constructor"); + } catch (InstantiationException nsme) { + throw new BuildException("Could not create type " + + name + " as the class " + c + " is abstract"); + } catch (IllegalAccessException e) { + throw new BuildException("Could not create type " + + name + " as the constructor " + c + " is not accessible"); + } catch (Throwable t) { + throw new BuildException( + "Could not create type " + name + " due to " + t, t); + } + } + + /** + * Inner implementation of the {@link #createAndSet(Project, Class)} logic, with no + * exception catching. + * @param return type of the method + * @param newclass class to create + * @param project the project to use + * @return a newly constructed and bound instance. + * @throws NoSuchMethodException no good constructor. + * @throws InstantiationException cannot initialize the object. + * @throws IllegalAccessException cannot access the object. + * @throws InvocationTargetException error in invocation. + */ + public T innerCreateAndSet(Class newclass, Project project) + throws NoSuchMethodException, + InstantiationException, + IllegalAccessException, + InvocationTargetException { + Constructor ctor; + boolean noArg = false; + // DataType can have a "no arg" constructor or take a single + // Project argument. + try { + ctor = newclass.getConstructor(new Class[0]); + noArg = true; + } catch (NoSuchMethodException nse) { + //can throw the same exception, if there is no this(Project) ctor. + ctor = newclass.getConstructor(new Class[] {Project.class}); + noArg = false; + } + //now we instantiate + T o = ctor.newInstance( + ((noArg) ? new Object[0] : new Object[] {project})); + + //set up project references. + project.setProjectReference(o); + return o; + } + + /** + * Equality method for this definition (assumes the names are the same). + * + * @param other another definition. + * @param project the project the definition. + * @return true if the definitions are the same. + */ + public boolean sameDefinition(AntTypeDefinition other, Project project) { + return (other != null && other.getClass() == getClass() + && other.getTypeClass(project).equals(getTypeClass(project)) + && other.getExposedClass(project).equals(getExposedClass(project)) + && other.restrict == restrict + && other.adapterClass == adapterClass + && other.adaptToClass == adaptToClass); + } + + /** + * Similar definition; + * used to compare two definitions defined twice with the same + * name and the same types. + * The classloader may be different but have the same + * path so #sameDefinition cannot + * be used. + * @param other the definition to compare to. + * @param project the current project. + * @return true if the definitions are the same. + */ + public boolean similarDefinition(AntTypeDefinition other, Project project) { + if (other == null + || getClass() != other.getClass() + || !getClassName().equals(other.getClassName()) + || !extractClassname(adapterClass).equals( + extractClassname(other.adapterClass)) + || !extractClassname(adaptToClass).equals( + extractClassname(other.adaptToClass)) + || restrict != other.restrict) { + return false; + } + // all the names are the same: check if the class path of the loader + // is the same + ClassLoader oldLoader = other.getClassLoader(); + ClassLoader newLoader = getClassLoader(); + return oldLoader == newLoader + || (oldLoader instanceof AntClassLoader + && newLoader instanceof AntClassLoader + && ((AntClassLoader) oldLoader).getClasspath() + .equals(((AntClassLoader) newLoader).getClasspath())); + } + + private String extractClassname(Class c) { + return (c == null) ? "" : c.getClass().getName(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessor.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessor.java new file mode 100644 index 00000000..07812f2f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessor.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.PrintStream; +import java.util.List; + +/** + * Processor of arguments of the command line. + *

    + * Arguments supported by third party code should not conflict with Ant core + * ones. It is then recommended to chose specific 'enough' argument name, + * avoiding for instance one letter arguments. By the way, if there any + * conflict, Ant will take precedence. + * + * @since 1.9 + */ +public interface ArgumentProcessor { + + /** + * Read the arguments from the command line at the specified position + *

    + * If the argument is not supported, returns -1. Else, the position of the + * first argument not supported. + */ + int readArguments(String[] args, int pos); + + /** + * If some arguments matched with {@link #readArguments(String[], int)}, + * this method is called after all arguments were parsed. Returns + * true if Ant should stop there, ie the build file not parsed + * and the project should not be executed. + */ + boolean handleArg(List args); + + /** + * If some arguments matched with {@link #readArguments(String[], int)}, + * this method is called just before the project being configured + */ + void prepareConfigure(Project project, List args); + + /** + * Handle the arguments with {@link #readArguments(String[], int)}, just + * after the project being configured. Returns true if Ant + * should stop there, ie the build file not parsed and the project should + * not be executed. + */ + boolean handleArg(Project project, List arg); + + /** + * Print the usage of the supported arguments + * + * @see org.apache.tools.ant.Main#printUsage() + */ + void printUsage(PrintStream writer); + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessorRegistry.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessorRegistry.java new file mode 100644 index 00000000..bdb7c0a8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ArgumentProcessorRegistry.java @@ -0,0 +1,171 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + +import org.apache.tools.ant.util.LoaderUtils; + +/** + * The global registry for {@link ArgumentProcessor}s. + *

    + * An {@link ArgumentProcessor} implementation can be registered via the system + * property org.apache.tools.ant.ArgumentProcessor, or via a JDK1.3 + * 'service', by putting the fully qualified name of the implementation into the + * file META-INF/services/org.apache.tools.ant.ArgumentProcessor + *

    + * Use the system property ant.argument-processor.debug to enable + * the print of debug log. + * + * @since 1.9 + */ +public class ArgumentProcessorRegistry { + + private static final String DEBUG_ARGUMENT_PROCESSOR_REPOSITORY = "ant.argument-processor-repo.debug"; + + // The message log level is not accessible here because everything + // is instanciated statically + private static final boolean DEBUG = "true".equals(System.getProperty(DEBUG_ARGUMENT_PROCESSOR_REPOSITORY)); + + private static final String SERVICE_ID = "META-INF/services/org.apache.tools.ant.ArgumentProcessor"; + + private static ArgumentProcessorRegistry instance = new ArgumentProcessorRegistry(); + + private List processors = new ArrayList(); + + public static ArgumentProcessorRegistry getInstance() { + return instance; + } + + private ArgumentProcessorRegistry() { + collectArgumentProcessors(); + } + + public List getProcessors() { + return processors; + } + + private void collectArgumentProcessors() { + try { + ClassLoader classLoader = LoaderUtils.getContextClassLoader(); + if (classLoader != null) { + Enumeration resources = classLoader.getResources(SERVICE_ID); + while (resources.hasMoreElements()) { + URL resource = resources.nextElement(); + URLConnection conn = resource.openConnection(); + conn.setUseCaches(false); + ArgumentProcessor processor = getProcessorByService(conn.getInputStream()); + registerArgumentProcessor(processor); + } + } + + InputStream systemResource = ClassLoader.getSystemResourceAsStream(SERVICE_ID); + if (systemResource != null) { + ArgumentProcessor processor = getProcessorByService(systemResource); + registerArgumentProcessor(processor); + } + } catch (Exception e) { + System.err.println("Unable to load ArgumentProcessor from service " + + SERVICE_ID + " (" + e.getClass().getName() + ": " + + e.getMessage() + ")"); + if (DEBUG) { + e.printStackTrace(System.err); + } + } + } + + public void registerArgumentProcessor(String helperClassName) + throws BuildException { + registerArgumentProcessor(getProcessor(helperClassName)); + } + + public void registerArgumentProcessor( + Class< ? extends ArgumentProcessor> helperClass) + throws BuildException { + registerArgumentProcessor(getProcessor(helperClass)); + } + + private ArgumentProcessor getProcessor(String helperClassName) { + try { + @SuppressWarnings("unchecked") + Class< ? extends ArgumentProcessor> cl = (Class< ? extends ArgumentProcessor>) Class.forName(helperClassName); + return getProcessor(cl); + } catch (ClassNotFoundException e) { + throw new BuildException("Argument processor class " + + helperClassName + " was not found", e); + } + } + + private ArgumentProcessor getProcessor( + Class< ? extends ArgumentProcessor> processorClass) { + ArgumentProcessor processor; + try { + processor = processorClass.getConstructor().newInstance(); + } catch (Exception e) { + throw new BuildException("The argument processor class" + + processorClass.getClass().getName() + + " could not be instanciated with a default constructor", + e); + } + return processor; + } + + public void registerArgumentProcessor(ArgumentProcessor processor) { + if (processor == null) { + return; + } + processors.add(processor); + if (DEBUG) { + System.out.println("Argument processor " + + processor.getClass().getName() + " registered."); + } + } + + private ArgumentProcessor getProcessorByService(InputStream is) + throws IOException { + InputStreamReader isr = null; + try { + try { + isr = new InputStreamReader(is, "UTF-8"); + } catch (java.io.UnsupportedEncodingException e) { + isr = new InputStreamReader(is); + } + BufferedReader rd = new BufferedReader(isr); + String processorClassName = rd.readLine(); + if (processorClassName != null && !"".equals(processorClassName)) { + return getProcessor(processorClassName); + } + } finally { + try { + isr.close(); + } catch (IOException e) { + // ignore + } + } + return null; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildEvent.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildEvent.java new file mode 100644 index 00000000..623ad1e6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildEvent.java @@ -0,0 +1,203 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.util.EventObject; + +/** + * Class representing an event occurring during a build. An + * event is built by specifying either a project, a task or a target. + * A project level event will only have a project reference; + * a target level event will have project and target references; + * a task level event will have project, target and task references. + * + */ +public class BuildEvent extends EventObject { + + private static final long serialVersionUID = 4538050075952288486L; + + /** Project which emitted the event. */ + private final Project project; + /** Target which emitted the event, if specified. */ + private final Target target; + /** Task which emitted the event, if specified. */ + private final Task task; + /** + * Message associated with the event. This is only used for + * "messageLogged" events. + */ + private String message; + /** + * The priority of the message, for "messageLogged" events. + */ + private int priority = Project.MSG_VERBOSE; + /** + * The exception associated with this event, if any. + * This is only used for "messageLogged", "taskFinished", "targetFinished", + * and "buildFinished" events. + */ + private Throwable exception; + + /** + * Construct a BuildEvent for a project level event. + * + * @param project the project that emitted the event. + * Should not be null. + */ + public BuildEvent(Project project) { + super(project); + this.project = project; + this.target = null; + this.task = null; + } + + /** + * Construct a BuildEvent for a target level event. + * The project associated with the event is derived + * from the given target. + * + * @param target the target that emitted the event. + * Must not be null. + */ + public BuildEvent(Target target) { + super(target); + this.project = target.getProject(); + this.target = target; + this.task = null; + } + + /** + * Construct a BuildEvent for a task level event. + * The project and target associated with the event + * are derived from the given task. + * + * @param task the task that emitted the event. + * Must not be null. + */ + public BuildEvent(Task task) { + super(task); + this.project = task.getProject(); + this.target = task.getOwningTarget(); + this.task = task; + } + + /** + * Sets the message and priority associated with this event. + * This is used for "messageLogged" events. + * + * @param message the message to be associated with this event. + * Should not be null. + * @param priority the priority to be associated with this event, + * as defined in the {@link Project Project} class. + * + * @see BuildListener#messageLogged(BuildEvent) + */ + public void setMessage(String message, int priority) { + this.message = message; + this.priority = priority; + } + + /** + * Sets the exception associated with this event. This is used + * for "messageLogged", "taskFinished", "targetFinished", and "buildFinished" + * events. + * + * @param exception The exception to be associated with this event. + * May be null. + * + * @see BuildListener#messageLogged(BuildEvent) + * @see BuildListener#taskFinished(BuildEvent) + * @see BuildListener#targetFinished(BuildEvent) + * @see BuildListener#buildFinished(BuildEvent) + */ + public void setException(Throwable exception) { + this.exception = exception; + } + + /** + * Returns the project that fired this event. + * + * @return the project that fired this event + */ + public Project getProject() { + return project; + } + + /** + * Returns the target that fired this event. + * + * @return the project that fired this event, or null + * if this event is a project level event. + */ + public Target getTarget() { + return target; + } + + /** + * Returns the task that fired this event. + * + * @return the task that fired this event, or null + * if this event is a project or target level event. + */ + public Task getTask() { + return task; + } + + /** + * Returns the logging message. This field will only be set + * for "messageLogged" events. + * + * @return the message associated with this event, or null + * if no message has been set. + * + * @see BuildListener#messageLogged(BuildEvent) + */ + public String getMessage() { + return message; + } + + /** + * Returns the priority of the logging message. This field will only + * be set for "messageLogged" events. The meaning of this priority + * is as specified by the constants in the {@link Project Project} class. + * + * @return the priority associated with this event. + * + * @see BuildListener#messageLogged(BuildEvent) + */ + public int getPriority() { + return priority; + } + + /** + * Returns the exception that was thrown, if any. This field will only + * be set for "messageLogged", "taskFinished", "targetFinished", and "buildFinished" + * events. + * + * @return the exception associated with this exception, or + * null if no exception has been set. + * + * @see BuildListener#messageLogged(BuildEvent) + * @see BuildListener#taskFinished(BuildEvent) + * @see BuildListener#targetFinished(BuildEvent) + * @see BuildListener#buildFinished(BuildEvent) + */ + public Throwable getException() { + return exception; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildException.java new file mode 100644 index 00000000..34c16051 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildException.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Signals an error condition during a build + */ +public class BuildException extends RuntimeException { + + private static final long serialVersionUID = -5419014565354664240L; + + /** Location in the build file where the exception occurred */ + private Location location = Location.UNKNOWN_LOCATION; + + /** + * Constructs a build exception with no descriptive information. + */ + public BuildException() { + super(); + } + + /** + * Constructs an exception with the given descriptive message. + * + * @param message A description of or information about the exception. + * Should not be null. + */ + public BuildException(String message) { + super(message); + } + + /** + * Constructs an exception with the given message and exception as + * a root cause. + * + * @param message A description of or information about the exception. + * Should not be null unless a cause is specified. + * @param cause The exception that might have caused this one. + * May be null. + */ + public BuildException(String message, Throwable cause) { + super(message, cause); + } + + /** + * Constructs an exception with the given message and exception as + * a root cause and a location in a file. + * + * @param msg A description of or information about the exception. + * Should not be null unless a cause is specified. + * @param cause The exception that might have caused this one. + * May be null. + * @param location The location in the project file where the error + * occurred. Must not be null. + */ + public BuildException(String msg, Throwable cause, Location location) { + this(msg, cause); + this.location = location; + } + + /** + * Constructs an exception with the given exception as a root cause. + * + * @param cause The exception that might have caused this one. + * Should not be null. + */ + public BuildException(Throwable cause) { + super(cause); + } + + /** + * Constructs an exception with the given descriptive message and a + * location in a file. + * + * @param message A description of or information about the exception. + * Should not be null. + * @param location The location in the project file where the error + * occurred. Must not be null. + */ + public BuildException(String message, Location location) { + super(message); + this.location = location; + } + + /** + * Constructs an exception with the given exception as + * a root cause and a location in a file. + * + * @param cause The exception that might have caused this one. + * Should not be null. + * @param location The location in the project file where the error + * occurred. Must not be null. + */ + public BuildException(Throwable cause, Location location) { + this(cause); + this.location = location; + } + + /** + * Returns the nested exception, if any. + * + * @return the nested exception, or null if no + * exception is associated with this one + * @deprecated Use {@link #getCause} instead. + */ + public Throwable getException() { + return getCause(); + } + + /** + * Returns the location of the error and the error message. + * + * @return the location of the error and the error message + */ + public String toString() { + return location.toString() + getMessage(); + } + + /** + * Sets the file location where the error occurred. + * + * @param location The file location where the error occurred. + * Must not be null. + */ + public void setLocation(Location location) { + this.location = location; + } + + /** + * Returns the file location where the error occurred. + * + * @return the file location where the error occurred. + */ + public Location getLocation() { + return location; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildListener.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildListener.java new file mode 100644 index 00000000..ed6731cf --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildListener.java @@ -0,0 +1,110 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.util.EventListener; + +/** + * Instances of classes that implement this interface can register + * to be notified when things happened during a build. + * + * @see BuildEvent + * @see Project#addBuildListener(BuildListener) + * + */ +public interface BuildListener extends EventListener { + + /** + * Signals that a build has started. This event + * is fired before any targets have started. + * + *

    This event is fired before the project instance is fully + * configured. In particular no properties have been set and the + * project may not know its name or default target, yet.

    + * + * @param event An event with any relevant extra information. + * Must not be null. + */ + void buildStarted(BuildEvent event); + + /** + * Signals that the last target has finished. This event + * will still be fired if an error occurred during the build. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getException() + */ + void buildFinished(BuildEvent event); + + /** + * Signals that a target is starting. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getTarget() + */ + void targetStarted(BuildEvent event); + + /** + * Signals that a target has finished. This event will + * still be fired if an error occurred during the build. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getException() + */ + void targetFinished(BuildEvent event); + + /** + * Signals that a task is starting. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getTask() + */ + void taskStarted(BuildEvent event); + + /** + * Signals that a task has finished. This event will still + * be fired if an error occurred during the build. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getException() + */ + void taskFinished(BuildEvent event); + + /** + * Signals a message logging event. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getMessage() + * @see BuildEvent#getException() + * @see BuildEvent#getPriority() + */ + void messageLogged(BuildEvent event); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildLogger.java new file mode 100644 index 00000000..249d8f51 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/BuildLogger.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.PrintStream; + +/** + * Interface used by Ant to log the build output. + * + * A build logger is a build listener which has the 'right' to send output to + * the ant log, which is usually System.out unless redirected by + * the -logfile option. + * + */ +public interface BuildLogger extends BuildListener { + + /** + * Sets the highest level of message this logger should respond to. + * + * Only messages with a message level lower than or equal to the + * given level should be written to the log. + *

    + * Constants for the message levels are in the + * {@link Project Project} class. The order of the levels, from least + * to most verbose, is MSG_ERR, MSG_WARN, + * MSG_INFO, MSG_VERBOSE, + * MSG_DEBUG. + * + * @param level the logging level for the logger. + */ + void setMessageOutputLevel(int level); + + /** + * Sets the output stream to which this logger is to send its output. + * + * @param output The output stream for the logger. + * Must not be null. + */ + void setOutputPrintStream(PrintStream output); + + /** + * Sets this logger to produce emacs (and other editor) friendly output. + * + * @param emacsMode true if output is to be unadorned so that + * emacs and other editors can parse files names, etc. + */ + void setEmacsMode(boolean emacsMode); + + /** + * Sets the output stream to which this logger is to send error messages. + * + * @param err The error stream for the logger. + * Must not be null. + */ + void setErrorPrintStream(PrintStream err); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ComponentHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ComponentHelper.java new file mode 100644 index 00000000..eceedeef --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ComponentHelper.java @@ -0,0 +1,1101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Stack; + +import org.apache.tools.ant.launch.Launcher; +import org.apache.tools.ant.taskdefs.Definer; +import org.apache.tools.ant.taskdefs.Typedef; +import org.apache.tools.ant.util.FileUtils; + +/** + * Component creation and configuration. + * + * The class is based around handing component + * definitions in an AntTypeTable. + * + * The old task/type methods have been kept + * for backward compatibly. + * Project will just delegate its calls to this class. + * + * A very simple hook mechanism is provided that allows users to plug + * in custom code. It is also possible to replace the default behavior + * ( for example in an app embedding ant ) + * + * @since Ant1.6 + */ +public class ComponentHelper { + /** Map of component name to lists of restricted definitions */ + private Map> restrictedDefinitions = new HashMap>(); + + /** Map from component name to anttypedefinition */ + private final Hashtable antTypeTable = new Hashtable(); + + /** Map of tasks generated from antTypeTable */ + private final Hashtable> taskClassDefinitions = new Hashtable>(); + + /** flag to rebuild taskClassDefinitions */ + private boolean rebuildTaskClassDefinitions = true; + + /** Map of types generated from antTypeTable */ + private final Hashtable> typeClassDefinitions = new Hashtable>(); + + /** flag to rebuild typeClassDefinitions */ + private boolean rebuildTypeClassDefinitions = true; + + /** Set of namespaces that have been checked for antlibs */ + private final HashSet checkedNamespaces = new HashSet(); + + /** + * Stack of antlib contexts used to resolve definitions while + * processing antlib + */ + private Stack antLibStack = new Stack(); + + /** current antlib uri */ + private String antLibCurrentUri = null; + + /** + * this does not appear to be used anywhere in the Ant codebase + * even via its accessors + */ + private ComponentHelper next; + + /** + * Project that owns a component helper + */ + private Project project; + + /** + * Error string when the file taskdefs/defaults.properties cannot be found + */ + private static final String ERROR_NO_TASK_LIST_LOAD = "Can't load default task list"; + + /** + * Error string when the typedefs/defaults.properties cannot be found + */ + private static final String ERROR_NO_TYPE_LIST_LOAD = "Can't load default type list"; + + /** + * reference under which we register ourselves with a project -{@value} + */ + public static final String COMPONENT_HELPER_REFERENCE = "ant.ComponentHelper"; + + /** + * string used to control build.syspath policy {@value} + */ + private static final String BUILD_SYSCLASSPATH_ONLY = "only"; + + /** + * special name of ant's property task -{@value}. There is some + * contrived work here to enable this early. + */ + private static final String ANT_PROPERTY_TASK = "property"; + + // {tasks, types} + private static Properties[] defaultDefinitions = new Properties[2]; + + /** + * Get the project. + * @return the project owner of this helper. + */ + public Project getProject() { + return project; + } + + /** + * Find a project component for a specific project, creating + * it if it does not exist. + * @param project the project. + * @return the project component for a specific project. + */ + public static ComponentHelper getComponentHelper(Project project) { + if (project == null) { + return null; + } + // Singleton for now, it may change ( per/classloader ) + ComponentHelper ph = (ComponentHelper) project.getReference(COMPONENT_HELPER_REFERENCE); + if (ph != null) { + return ph; + } + ph = new ComponentHelper(); + ph.setProject(project); + + project.addReference(COMPONENT_HELPER_REFERENCE, ph); + return ph; + } + + /** + * Creates a new ComponentHelper instance. + */ + protected ComponentHelper() { + } + + /** + * Set the next chained component helper. + * + * @param next the next chained component helper. + */ + public void setNext(ComponentHelper next) { + this.next = next; + } + + /** + * Get the next chained component helper. + * + * @return the next chained component helper. + */ + public ComponentHelper getNext() { + return next; + } + + /** + * Sets the project for this component helper. + * + * @param project the project for this helper. + */ + public void setProject(Project project) { + this.project = project; +// antTypeTable = new Hashtable(project); + } + + /** + * @return A copy of the CheckedNamespace. + */ + private synchronized Set getCheckedNamespace() { + @SuppressWarnings("unchecked") + final Set result = (Set) checkedNamespaces.clone(); + return result; + } + + /** + * @return A deep copy of the restrictredDefinition + */ + private Map> getRestrictedDefinition() { + final Map> result = new HashMap>(); + synchronized (restrictedDefinitions) { + for (Map.Entry> entry : restrictedDefinitions.entrySet()) { + List entryVal = entry.getValue(); + synchronized (entryVal) { + //copy the entryVal + entryVal = new ArrayList (entryVal); + } + result.put(entry.getKey(), entryVal); + } + } + return result; + } + + + /** + * Used with creating child projects. Each child + * project inherits the component definitions + * from its parent. + * @param helper the component helper of the parent project. + */ + public void initSubProject(ComponentHelper helper) { + // add the types of the parent project + @SuppressWarnings("unchecked") + final Hashtable typeTable = (Hashtable) helper.antTypeTable.clone(); + synchronized (antTypeTable) { + for (AntTypeDefinition def : typeTable.values()) { + antTypeTable.put(def.getName(), def); + } + } + // add the parsed namespaces of the parent project + Set inheritedCheckedNamespace = helper.getCheckedNamespace(); + synchronized (this) { + checkedNamespaces.addAll(inheritedCheckedNamespace); + } + Map> inheritedRestrictedDef = helper.getRestrictedDefinition(); + synchronized (restrictedDefinitions) { + restrictedDefinitions.putAll(inheritedRestrictedDef); + } + } + + /** + * Factory method to create the components. + * + * This should be called by UnknownElement. + * + * @param ue The Unknown Element creating this component. + * @param ns Namespace URI. Also available as ue.getNamespace(). + * @param componentType The component type, + * Also available as ue.getComponentName(). + * @return the created component. + * @throws BuildException if an error occurs. + */ + public Object createComponent(UnknownElement ue, String ns, String componentType) + throws BuildException { + Object component = createComponent(componentType); + if (component instanceof Task) { + Task task = (Task) component; + task.setLocation(ue.getLocation()); + task.setTaskType(componentType); + task.setTaskName(ue.getTaskName()); + task.setOwningTarget(ue.getOwningTarget()); + task.init(); + } + return component; + } + + /** + * Create an object for a component. + * + * @param componentName the name of the component, if + * the component is in a namespace, the + * name is prefixed with the namespace uri and ":". + * @return the class if found or null if not. + */ + public Object createComponent(String componentName) { + AntTypeDefinition def = getDefinition(componentName); + return def == null ? null : def.create(project); + } + + /** + * Return the class of the component name. + * + * @param componentName the name of the component, if + * the component is in a namespace, the + * name is prefixed with the namespace uri and ":". + * @return the class if found or null if not. + */ + public Class getComponentClass(String componentName) { + AntTypeDefinition def = getDefinition(componentName); + return def == null ? null : def.getExposedClass(project); + } + + /** + * Return the antTypeDefinition for a componentName. + * @param componentName the name of the component. + * @return the ant definition or null if not present. + */ + public AntTypeDefinition getDefinition(String componentName) { + checkNamespace(componentName); + return antTypeTable.get(componentName); + } + + /** + * This method is initialization code implementing the original ant component + * loading from /org/apache/tools/ant/taskdefs/default.properties + * and /org/apache/tools/ant/types/default.properties. + */ + public void initDefaultDefinitions() { + initTasks(); + initTypes(); + new DefaultDefinitions(this).execute(); + } + + /** + * Adds a new task definition to the project. + * Attempting to override an existing definition with an + * equivalent one (i.e. with the same classname) results in + * a verbose log message. Attempting to override an existing definition + * with a different one results in a warning log message. + * + * @param taskName The name of the task to add. + * Must not be null. + * @param taskClass The full name of the class implementing the task. + * Must not be null. + * + * @exception BuildException if the class is unsuitable for being an Ant + * task. An error level message is logged before + * this exception is thrown. + * + * @see #checkTaskClass(Class) + */ + public void addTaskDefinition(String taskName, Class taskClass) { + checkTaskClass(taskClass); + AntTypeDefinition def = new AntTypeDefinition(); + def.setName(taskName); + def.setClassLoader(taskClass.getClassLoader()); + def.setClass(taskClass); + def.setAdapterClass(TaskAdapter.class); + def.setClassName(taskClass.getName()); + def.setAdaptToClass(Task.class); + updateDataTypeDefinition(def); + } + + /** + * Checks whether or not a class is suitable for serving as Ant task. + * Ant task implementation classes must be public, concrete, and have + * a no-arg constructor. + * + * @param taskClass The class to be checked. + * Must not be null. + * + * @exception BuildException if the class is unsuitable for being an Ant + * task. An error level message is logged before + * this exception is thrown. + */ + public void checkTaskClass(final Class taskClass) throws BuildException { + if (!Modifier.isPublic(taskClass.getModifiers())) { + final String message = taskClass + " is not public"; + project.log(message, Project.MSG_ERR); + throw new BuildException(message); + } + if (Modifier.isAbstract(taskClass.getModifiers())) { + final String message = taskClass + " is abstract"; + project.log(message, Project.MSG_ERR); + throw new BuildException(message); + } + try { + taskClass.getConstructor((Class[]) null); + // don't have to check for public, since + // getConstructor finds public constructors only. + } catch (NoSuchMethodException e) { + final String message = "No public no-arg constructor in " + taskClass; + project.log(message, Project.MSG_ERR); + throw new BuildException(message); + } + if (!Task.class.isAssignableFrom(taskClass)) { + TaskAdapter.checkTaskClass(taskClass, project); + } + } + + /** + * Returns the current task definition hashtable. The returned hashtable is + * "live" and so should not be modified. Also, the returned table may be + * modified asynchronously. + * + * @return a map of from task name to implementing class + * (String to Class). + */ + public Hashtable> getTaskDefinitions() { + synchronized (taskClassDefinitions) { + synchronized (antTypeTable) { + if (rebuildTaskClassDefinitions) { + taskClassDefinitions.clear(); + for (Map.Entry e : antTypeTable.entrySet()) { + final Class clazz = e.getValue().getExposedClass(project); + if (clazz == null) { + continue; + } + if (Task.class.isAssignableFrom(clazz)) { + taskClassDefinitions.put(e.getKey(), e.getValue().getTypeClass(project)); + } + } + rebuildTaskClassDefinitions = false; + } + } + } + return taskClassDefinitions; + } + + /** + * Returns the current type definition hashtable. The returned hashtable is + * "live" and so should not be modified. + * + * @return a map of from type name to implementing class + * (String to Class). + */ + public Hashtable> getDataTypeDefinitions() { + synchronized (typeClassDefinitions) { + synchronized (antTypeTable) { + if (rebuildTypeClassDefinitions) { + typeClassDefinitions.clear(); + for (Map.Entry e : antTypeTable.entrySet()) { + final Class clazz = e.getValue().getExposedClass(project); + if (clazz == null) { + continue; + } + if (!Task.class.isAssignableFrom(clazz)) { + typeClassDefinitions.put(e.getKey(), e.getValue().getTypeClass(project)); + } + } + rebuildTypeClassDefinitions = false; + } + } + } + return typeClassDefinitions; + } + + /** + * This returns a list of restricted definitions for a name. + * The returned List is "live" and so should not be modified. + * Also, the returned list may be modified asynchronously. + * Any access must be guarded with a lock on the list itself. + * + * @param componentName the name to use. + * @return the list of restricted definitions for a particular name. + */ + public List getRestrictedDefinitions(String componentName) { + synchronized (restrictedDefinitions) { + return restrictedDefinitions.get(componentName); + } + } + + /** + * Adds a new datatype definition. + * Attempting to override an existing definition with an + * equivalent one (i.e. with the same classname) results in + * a verbose log message. Attempting to override an existing definition + * with a different one results in a warning log message, but the + * definition is changed. + * + * @param typeName The name of the datatype. + * Must not be null. + * @param typeClass The full name of the class implementing the datatype. + * Must not be null. + */ + public void addDataTypeDefinition(String typeName, Class typeClass) { + final AntTypeDefinition def = new AntTypeDefinition(); + def.setName(typeName); + def.setClass(typeClass); + updateDataTypeDefinition(def); + project.log(" +User datatype: " + typeName + " " + typeClass.getName(), + Project.MSG_DEBUG); + } + + /** + * Describe addDataTypeDefinition method here. + * + * @param def an AntTypeDefinition value. + */ + public void addDataTypeDefinition(AntTypeDefinition def) { + if (!def.isRestrict()) { + updateDataTypeDefinition(def); + } else { + updateRestrictedDefinition(def); + } + } + + /** + * Returns the current datatype definition hashtable. The returned + * hashtable is "live" and so should not be modified. + * + * @return a map of from datatype name to datatype definition + * (String to {@link AntTypeDefinition}). + */ + public Hashtable getAntTypeTable() { + return antTypeTable; + } + + /** + * Creates a new instance of a task. + * + * Called from Project.createTask(), which can be called by tasks. + * + * @param taskType The name of the task to create an instance of. + * Must not be null. + * + * @return an instance of the specified task, or null if + * the task name is not recognised. + * + * @exception BuildException if the task name is recognised but task + * creation fails. + */ + public Task createTask(String taskType) throws BuildException { + Task task = createNewTask(taskType); + if (task == null && taskType.equals(ANT_PROPERTY_TASK)) { + // quick fix for Ant.java use of property before + // initializing the project + addTaskDefinition(ANT_PROPERTY_TASK, org.apache.tools.ant.taskdefs.Property.class); + task = createNewTask(taskType); + } + return task; + } + + /** + * Creates a new instance of a task. + * @since ant1.6 + * @param taskType The name of the task to create an instance of. + * Must not be null. + * + * @return an instance of the specified task, or null if + * the task name is not recognised. + * + * @exception BuildException if the task name is recognised but task + * creation fails. + */ + private Task createNewTask(String taskType) throws BuildException { + Class c = getComponentClass(taskType); + if (c == null || !(Task.class.isAssignableFrom(c))) { + return null; + } + Object obj = createComponent(taskType); + if (obj == null) { + return null; + } + if (!(obj instanceof Task)) { + throw new BuildException("Expected a Task from '" + taskType + + "' but got an instance of " + obj.getClass().getName() + " instead"); + } + Task task = (Task) obj; + task.setTaskType(taskType); + + // set default value, can be changed by the user + task.setTaskName(taskType); + + project.log(" +Task: " + taskType, Project.MSG_DEBUG); + return task; + } + + /** + * Creates a new instance of a data type. + * + * @param typeName The name of the data type to create an instance of. + * Must not be null. + * + * @return an instance of the specified data type, or null if + * the data type name is not recognised. + * + * @exception BuildException if the data type name is recognised but + * instance creation fails. + */ + public Object createDataType(String typeName) throws BuildException { + return createComponent(typeName); + } + + /** + * Returns a description of the type of the given element. + *

    + * This is useful for logging purposes. + * + * @param element The element to describe. + * Must not be null. + * + * @return a description of the element type. + * + * @since Ant 1.6 + */ + public String getElementName(Object element) { + return getElementName(element, false); + } + + /** + * Returns a description of the type of the given element. + *

    + * This is useful for logging purposes. + * + * @param o The element to describe. + * Must not be null. + * @param brief whether to use a brief description. + * @return a description of the element type. + * + * @since Ant 1.7 + */ + public String getElementName(Object o, boolean brief) { + // PR: I do not know what to do if the object class + // has multiple defines + // but this is for logging only... + Class elementClass = o.getClass(); + String elementClassname = elementClass.getName(); + synchronized (antTypeTable) { + for (AntTypeDefinition def : antTypeTable.values()) { + if (elementClassname.equals(def.getClassName()) + && (elementClass == def.getExposedClass(project))) { + String name = def.getName(); + return brief ? name : "The <" + name + "> type"; + } + } + } + return getUnmappedElementName(o.getClass(), brief); + } + + /** + * Convenient way to get some element name even when you may not have a + * Project context. + * @param p The optional Project instance. + * @param o The element to describe. + * Must not be null. + * @param brief whether to use a brief description. + * @return a description of the element type. + * @since Ant 1.7 + */ + public static String getElementName(Project p, Object o, boolean brief) { + if (p == null) { + p = Project.getProject(o); + } + return p == null ? getUnmappedElementName(o.getClass(), brief) : getComponentHelper(p) + .getElementName(o, brief); + } + + private static String getUnmappedElementName(Class c, boolean brief) { + if (brief) { + String name = c.getName(); + return name.substring(name.lastIndexOf('.') + 1); + } + return c.toString(); + } + + /** + * Check if definition is a valid definition--it may be a + * definition of an optional task that does not exist. + * @param def the definition to test. + * @return true if exposed type of definition is present. + */ + private boolean validDefinition(AntTypeDefinition def) { + return !(def.getTypeClass(project) == null || def.getExposedClass(project) == null); + } + + /** + * Check if two definitions are the same. + * @param def the new definition. + * @param old the old definition. + * @return true if the two definitions are the same. + */ + private boolean sameDefinition(AntTypeDefinition def, AntTypeDefinition old) { + boolean defValid = validDefinition(def); + boolean sameValidity = (defValid == validDefinition(old)); + //must have same validity; then if they are valid they must also be the same: + return sameValidity && (!defValid || def.sameDefinition(old, project)); + } + + /** + * update the restricted definition table with a new or + * modified definition. + */ + private void updateRestrictedDefinition(AntTypeDefinition def) { + String name = def.getName(); + List list = null; + synchronized (restrictedDefinitions) { + list = restrictedDefinitions.get(name); + if (list == null) { + list = new ArrayList(); + restrictedDefinitions.put(name, list); + } + } + // Check if the classname is already present and remove it + // if it is + synchronized (list) { + for (Iterator i = list.iterator(); i.hasNext();) { + AntTypeDefinition current = i.next(); + if (current.getClassName().equals(def.getClassName())) { + i.remove(); + break; + } + } + list.add(def); + } + } + + /** + * Update the component definition table with a new or + * modified definition. + * @param def the definition to update or insert. + */ + private void updateDataTypeDefinition(AntTypeDefinition def) { + String name = def.getName(); + synchronized (antTypeTable) { + rebuildTaskClassDefinitions = true; + rebuildTypeClassDefinitions = true; + final AntTypeDefinition old = antTypeTable.get(name); + if (old != null) { + if (sameDefinition(def, old)) { + return; + } + Class oldClass = old.getExposedClass(project); + boolean isTask = oldClass != null && Task.class.isAssignableFrom(oldClass); + project.log("Trying to override old definition of " + + (isTask ? "task " : "datatype ") + name, (def.similarDefinition(old, + project)) ? Project.MSG_VERBOSE : Project.MSG_WARN); + } + project.log(" +Datatype " + name + " " + def.getClassName(), Project.MSG_DEBUG); + antTypeTable.put(name, def); + } + } + + /** + * Called at the start of processing an antlib. + * @param uri the uri that is associated with this antlib. + */ + public void enterAntLib(String uri) { + antLibCurrentUri = uri; + antLibStack.push(uri); + } + + /** + * @return the current antlib uri. + */ + public String getCurrentAntlibUri() { + return antLibCurrentUri; + } + + /** + * Called at the end of processing an antlib. + */ + public void exitAntLib() { + antLibStack.pop(); + antLibCurrentUri = (antLibStack.size() == 0) ? null : (String) antLibStack.peek(); + } + + /** + * Load ant's tasks. + */ + private void initTasks() { + ClassLoader classLoader = getClassLoader(null); + Properties props = getDefaultDefinitions(false); + Enumeration e = props.propertyNames(); + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + String className = props.getProperty(name); + AntTypeDefinition def = new AntTypeDefinition(); + def.setName(name); + def.setClassName(className); + def.setClassLoader(classLoader); + def.setAdaptToClass(Task.class); + def.setAdapterClass(TaskAdapter.class); + antTypeTable.put(name, def); + } + } + + private ClassLoader getClassLoader(ClassLoader classLoader) { + String buildSysclasspath = project.getProperty(MagicNames.BUILD_SYSCLASSPATH); + if (project.getCoreLoader() != null + && !(BUILD_SYSCLASSPATH_ONLY.equals(buildSysclasspath))) { + classLoader = project.getCoreLoader(); + } + return classLoader; + } + + /** + * Load default task or type definitions - just the names, + * no class loading. + * Caches results between calls to reduce overhead. + * @param type true for typedefs, false for taskdefs + * @return a mapping from definition names to class names + * @throws BuildException if there was some problem loading + * or parsing the definitions list + */ + private static synchronized Properties getDefaultDefinitions(boolean type) + throws BuildException { + int idx = type ? 1 : 0; + if (defaultDefinitions[idx] == null) { + String resource = type ? MagicNames.TYPEDEFS_PROPERTIES_RESOURCE + : MagicNames.TASKDEF_PROPERTIES_RESOURCE; + String errorString = type ? ERROR_NO_TYPE_LIST_LOAD : ERROR_NO_TASK_LIST_LOAD; + InputStream in = null; + try { + in = ComponentHelper.class.getResourceAsStream(resource); + if (in == null) { + throw new BuildException(errorString); + } + Properties p = new Properties(); + p.load(in); + defaultDefinitions[idx] = p; + } catch (IOException e) { + throw new BuildException(errorString, e); + } finally { + FileUtils.close(in); + } + } + return defaultDefinitions[idx]; + } + + /** + * Load ant's datatypes. + */ + private void initTypes() { + ClassLoader classLoader = getClassLoader(null); + Properties props = getDefaultDefinitions(true); + Enumeration e = props.propertyNames(); + while (e.hasMoreElements()) { + String name = (String) e.nextElement(); + String className = props.getProperty(name); + AntTypeDefinition def = new AntTypeDefinition(); + def.setName(name); + def.setClassName(className); + def.setClassLoader(classLoader); + antTypeTable.put(name, def); + } + } + + /** + * Called for each component name, check if the + * associated URI has been examined for antlibs. + * @param componentName the name of the component, which should include a URI + * prefix if it is in a namespace + */ + private synchronized void checkNamespace(String componentName) { + String uri = ProjectHelper.extractUriFromComponentName(componentName); + if ("".equals(uri)) { + uri = ProjectHelper.ANT_CORE_URI; + } + if (!uri.startsWith(ProjectHelper.ANTLIB_URI)) { + return; // namespace that does not contain antlib + } + if (checkedNamespaces.contains(uri)) { + return; // Already processed + } + checkedNamespaces.add(uri); + + if (antTypeTable.size() == 0) { + // Project instance doesn't know the tasks and types + // defined in defaults.properties, likely created by the + // user - without those definitions it cannot parse antlib + // files as taskdef, typedef and friends are unknown + initDefaultDefinitions(); + } + Typedef definer = new Typedef(); + definer.setProject(project); + definer.init(); + definer.setURI(uri); + //there to stop error messages being "null" + definer.setTaskName(uri); + //if this is left out, bad things happen. like all build files break + //on the first element encountered. + definer.setResource(Definer.makeResourceFromURI(uri)); + // a fishing expedition :- ignore errors if antlib not present + definer.setOnError(new Typedef.OnError(Typedef.OnError.POLICY_IGNORE)); + definer.execute(); + } + + /** + * Handler called to do decent diagnosis on instantiation failure. + * @param componentName component name. + * @param type component type, used in error messages + * @return a string containing as much diagnostics info as possible. + */ + public String diagnoseCreationFailure(String componentName, String type) { + StringWriter errorText = new StringWriter(); + PrintWriter out = new PrintWriter(errorText); + out.println("Problem: failed to create " + type + " " + componentName); + //class of problem + boolean lowlevel = false; + boolean jars = false; + boolean definitions = false; + boolean antTask; + String home = System.getProperty(Launcher.USER_HOMEDIR); + File libDir = new File(home, Launcher.USER_LIBDIR); + String antHomeLib; + boolean probablyIDE = false; + String anthome = System.getProperty(MagicNames.ANT_HOME); + if (anthome != null) { + File antHomeLibDir = new File(anthome, "lib"); + antHomeLib = antHomeLibDir.getAbsolutePath(); + } else { + //running under an IDE that doesn't set ANT_HOME + probablyIDE = true; + antHomeLib = "ANT_HOME" + File.separatorChar + "lib"; + } + StringBuffer dirListingText = new StringBuffer(); + final String tab = " -"; + dirListingText.append(tab); + dirListingText.append(antHomeLib); + dirListingText.append('\n'); + if (probablyIDE) { + dirListingText.append(tab); + dirListingText.append("the IDE Ant configuration dialogs"); + } else { + dirListingText.append(tab); + dirListingText.append(libDir); + dirListingText.append('\n'); + dirListingText.append(tab); + dirListingText.append("a directory added on the command line with the -lib argument"); + } + String dirListing = dirListingText.toString(); + + //look up the name + AntTypeDefinition def = getDefinition(componentName); + if (def == null) { + //not a known type + printUnknownDefinition(out, componentName, dirListing); + definitions = true; + } else { + //we are defined, so it is an instantiation problem + final String classname = def.getClassName(); + antTask = classname.startsWith("org.apache.tools.ant."); + boolean optional = classname.startsWith("org.apache.tools.ant.taskdefs.optional"); + optional |= classname.startsWith("org.apache.tools.ant.types.optional"); + + //start with instantiating the class. + Class clazz = null; + try { + clazz = def.innerGetTypeClass(); + } catch (ClassNotFoundException e) { + jars = true; + if (!optional) { + definitions = true; + } + printClassNotFound(out, classname, optional, dirListing); + } catch (NoClassDefFoundError ncdfe) { + jars = true; + printNotLoadDependentClass(out, optional, ncdfe, dirListing); + } + //here we successfully loaded the class or failed. + if (clazz != null) { + //success: proceed with more steps + try { + def.innerCreateAndSet(clazz, project); + //hey, there is nothing wrong with us + out.println("The component could be instantiated."); + } catch (NoSuchMethodException e) { + lowlevel = true; + out.println("Cause: The class " + classname + + " has no compatible constructor."); + + } catch (InstantiationException e) { + lowlevel = true; + out.println("Cause: The class " + classname + + " is abstract and cannot be instantiated."); + } catch (IllegalAccessException e) { + lowlevel = true; + out.println("Cause: The constructor for " + classname + + " is private and cannot be invoked."); + } catch (InvocationTargetException ex) { + lowlevel = true; + Throwable t = ex.getTargetException(); + out.println("Cause: The constructor threw the exception"); + out.println(t.toString()); + t.printStackTrace(out); + } catch (NoClassDefFoundError ncdfe) { + jars = true; + out.println("Cause: A class needed by class " + classname + + " cannot be found: "); + out.println(" " + ncdfe.getMessage()); + out.println("Action: Determine what extra JAR files are" + + " needed, and place them in:"); + out.println(dirListing); + } + } + out.println(); + out.println("Do not panic, this is a common problem."); + if (definitions) { + out.println("It may just be a typographical error in the build file " + + "or the task/type declaration."); + } + if (jars) { + out.println("The commonest cause is a missing JAR."); + } + if (lowlevel) { + out.println("This is quite a low level problem, which may need " + + "consultation with the author of the task."); + if (antTask) { + out.println("This may be the Ant team. Please file a " + + "defect or contact the developer team."); + } else { + out.println("This does not appear to be a task bundled with Ant."); + out.println("Please take it up with the supplier of the third-party " + type + + "."); + out.println("If you have written it yourself, you probably have a bug to fix."); + } + } else { + out.println(); + out.println("This is not a bug; it is a configuration problem"); + } + } + out.flush(); + out.close(); + return errorText.toString(); + } + + /** + * Print unknown definition.forking + */ + private void printUnknownDefinition(PrintWriter out, String componentName, String dirListing) { + boolean isAntlib = componentName.startsWith(MagicNames.ANTLIB_PREFIX); + String uri = ProjectHelper.extractUriFromComponentName(componentName); + out.println("Cause: The name is undefined."); + out.println("Action: Check the spelling."); + out.println("Action: Check that any custom tasks/types have been declared."); + out.println("Action: Check that any /" + + " declarations have taken place."); + if (uri.length() > 0) { + final List matches = findTypeMatches(uri); + if (matches.size() > 0) { + out.println(); + out.println("The definitions in the namespace " + uri + " are:"); + for (AntTypeDefinition def : matches) { + String local = ProjectHelper.extractNameFromComponentName(def.getName()); + out.println(" " + local); + } + } else { + out.println("No types or tasks have been defined in this namespace yet"); + if (isAntlib) { + out.println(); + out.println("This appears to be an antlib declaration. "); + out.println("Action: Check that the implementing library exists in one of:"); + out.println(dirListing); + } + } + } + } + + /** + * Print class not found. + */ + private void printClassNotFound(PrintWriter out, String classname, boolean optional, + String dirListing) { + out.println("Cause: the class " + classname + " was not found."); + if (optional) { + out.println(" This looks like one of Ant's optional components."); + out.println("Action: Check that the appropriate optional JAR exists in"); + out.println(dirListing); + } else { + out.println("Action: Check that the component has been correctly declared"); + out.println(" and that the implementing JAR is in one of:"); + out.println(dirListing); + } + } + + /** + * Print could not load dependent class. + */ + private void printNotLoadDependentClass(PrintWriter out, boolean optional, + NoClassDefFoundError ncdfe, String dirListing) { + out.println("Cause: Could not load a dependent class " + + ncdfe.getMessage()); + if (optional) { + out.println(" It is not enough to have Ant's optional JARs"); + out.println(" you need the JAR files that the" + " optional tasks depend upon."); + out.println(" Ant's optional task dependencies are" + " listed in the manual."); + } else { + out.println(" This class may be in a separate JAR" + " that is not installed."); + } + out.println("Action: Determine what extra JAR files are" + + " needed, and place them in one of:"); + out.println(dirListing); + } + + /** + * Create a list of all definitions that match a prefix, usually the URI + * of a library + * @param prefix prefix to match off + * @return the (possibly empty) list of definitions + */ + private List findTypeMatches(String prefix) { + final List result = new ArrayList(); + synchronized (antTypeTable) { + for (AntTypeDefinition def : antTypeTable.values()) { + if (def.getName().startsWith(prefix)) { + result.add(def); + } + } + } + return result; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultDefinitions.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultDefinitions.java new file mode 100644 index 00000000..062018d0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultDefinitions.java @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Default definitions. + * @since Ant 1.9.1 + */ +public final class DefaultDefinitions { + private static final String IF_NAMESPACE = "ant:if"; + private static final String UNLESS_NAMESPACE = "ant:unless"; + private static final String OATA = "org.apache.tools.ant."; + + private final ComponentHelper componentHelper; + + /** + * Create a default definitions object. + * @param componentHelper the componenthelper to initialize. + */ + public DefaultDefinitions(ComponentHelper componentHelper) { + this.componentHelper = componentHelper; + } + + /** + * Register the definitions. + */ + public void execute() { + attributeNamespaceDef(IF_NAMESPACE); + attributeNamespaceDef(UNLESS_NAMESPACE); + + ifUnlessDef("true", "IfTrueAttribute"); + ifUnlessDef("set", "IfSetAttribute"); + ifUnlessDef("blank", "IfBlankAttribute"); + } + + private void attributeNamespaceDef(String ns) { + AntTypeDefinition def = new AntTypeDefinition(); + def.setName(ProjectHelper.nsToComponentName(ns)); + def.setClassName(OATA + "attribute.AttributeNamespace"); + def.setClassLoader(getClass().getClassLoader()); + def.setRestrict(true); + componentHelper.addDataTypeDefinition(def); + } + + private void ifUnlessDef(String name, String base) { + String classname = OATA + "attribute." + base; + componentDef(IF_NAMESPACE, name, classname); + componentDef(UNLESS_NAMESPACE, name, classname + "$Unless"); + } + + private void componentDef(String ns, String name, String classname) { + AntTypeDefinition def = new AntTypeDefinition(); + String n = ProjectHelper.genComponentName(ns, name); + def.setName(ProjectHelper.genComponentName(ns, name)); + def.setClassName(classname); + def.setClassLoader(getClass().getClassLoader()); + def.setRestrict(true); + componentHelper.addDataTypeDefinition(def); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultLogger.java new file mode 100644 index 00000000..dbc60486 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DefaultLogger.java @@ -0,0 +1,380 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.PrintStream; +import java.io.StringReader; +import java.text.DateFormat; +import java.util.Date; + +import org.apache.tools.ant.util.DateUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.StringUtils; + +/** + * Writes build events to a PrintStream. Currently, it + * only writes which targets are being executed, and + * any messages that get logged. + * + */ +public class DefaultLogger implements BuildLogger { + /** + * Size of left-hand column for right-justified task name. + * @see #messageLogged(BuildEvent) + */ + public static final int LEFT_COLUMN_SIZE = 12; + + // CheckStyle:VisibilityModifier OFF - bc + /** PrintStream to write non-error messages to */ + protected PrintStream out; + + /** PrintStream to write error messages to */ + protected PrintStream err; + + /** Lowest level of message to write out */ + protected int msgOutputLevel = Project.MSG_ERR; + + /** Time of the start of the build */ + private long startTime = System.currentTimeMillis(); + + // CheckStyle:ConstantNameCheck OFF - bc + /** Line separator */ + protected static final String lSep = StringUtils.LINE_SEP; + // CheckStyle:ConstantNameCheck ON + + /** Whether or not to use emacs-style output */ + protected boolean emacsMode = false; + // CheckStyle:VisibilityModifier ON + + + /** + * Sole constructor. + */ + public DefaultLogger() { + } + + /** + * Sets the highest level of message this logger should respond to. + * + * Only messages with a message level lower than or equal to the + * given level should be written to the log. + *

    + * Constants for the message levels are in the + * {@link Project Project} class. The order of the levels, from least + * to most verbose, is MSG_ERR, MSG_WARN, + * MSG_INFO, MSG_VERBOSE, + * MSG_DEBUG. + *

    + * The default message level for DefaultLogger is Project.MSG_ERR. + * + * @param level the logging level for the logger. + */ + public void setMessageOutputLevel(int level) { + this.msgOutputLevel = level; + } + + /** + * Sets the output stream to which this logger is to send its output. + * + * @param output The output stream for the logger. + * Must not be null. + */ + public void setOutputPrintStream(PrintStream output) { + this.out = new PrintStream(output, true); + } + + /** + * Sets the output stream to which this logger is to send error messages. + * + * @param err The error stream for the logger. + * Must not be null. + */ + public void setErrorPrintStream(PrintStream err) { + this.err = new PrintStream(err, true); + } + + /** + * Sets this logger to produce emacs (and other editor) friendly output. + * + * @param emacsMode true if output is to be unadorned so that + * emacs and other editors can parse files names, etc. + */ + public void setEmacsMode(boolean emacsMode) { + this.emacsMode = emacsMode; + } + + /** + * Responds to a build being started by just remembering the current time. + * + * @param event Ignored. + */ + public void buildStarted(BuildEvent event) { + startTime = System.currentTimeMillis(); + } + + static void throwableMessage(StringBuffer m, Throwable error, boolean verbose) { + while (error instanceof BuildException) { // #43398 + Throwable cause = error.getCause(); + if (cause == null) { + break; + } + String msg1 = error.toString(); + String msg2 = cause.toString(); + if (msg1.endsWith(msg2)) { + m.append(msg1.substring(0, msg1.length() - msg2.length())); + error = cause; + } else { + break; + } + } + if (verbose || !(error instanceof BuildException)) { + m.append(StringUtils.getStackTrace(error)); + } else { + m.append(error).append(lSep); + } + } + + /** + * Prints whether the build succeeded or failed, + * any errors the occurred during the build, and + * how long the build took. + * + * @param event An event with any relevant extra information. + * Must not be null. + */ + public void buildFinished(BuildEvent event) { + Throwable error = event.getException(); + StringBuffer message = new StringBuffer(); + if (error == null) { + message.append(StringUtils.LINE_SEP); + message.append(getBuildSuccessfulMessage()); + } else { + message.append(StringUtils.LINE_SEP); + message.append(getBuildFailedMessage()); + message.append(StringUtils.LINE_SEP); + throwableMessage(message, error, Project.MSG_VERBOSE <= msgOutputLevel); + } + message.append(StringUtils.LINE_SEP); + message.append("Total time: "); + message.append(formatTime(System.currentTimeMillis() - startTime)); + + String msg = message.toString(); + if (error == null) { + printMessage(msg, out, Project.MSG_VERBOSE); + } else { + printMessage(msg, err, Project.MSG_ERR); + } + log(msg); + } + + /** + * This is an override point: the message that indicates whether a build failed. + * Subclasses can change/enhance the message. + * @return The classic "BUILD FAILED" + */ + protected String getBuildFailedMessage() { + return "BUILD FAILED"; + } + + /** + * This is an override point: the message that indicates that a build succeeded. + * Subclasses can change/enhance the message. + * @return The classic "BUILD SUCCESSFUL" + */ + protected String getBuildSuccessfulMessage() { + return "BUILD SUCCESSFUL"; + } + + /** + * Logs a message to say that the target has started if this + * logger allows information-level messages. + * + * @param event An event with any relevant extra information. + * Must not be null. + */ + public void targetStarted(BuildEvent event) { + if (Project.MSG_INFO <= msgOutputLevel + && !event.getTarget().getName().equals("")) { + String msg = StringUtils.LINE_SEP + + event.getTarget().getName() + ":"; + printMessage(msg, out, event.getPriority()); + log(msg); + } + } + + /** + * No-op implementation. + * + * @param event Ignored. + */ + public void targetFinished(BuildEvent event) { + } + + /** + * No-op implementation. + * + * @param event Ignored. + */ + public void taskStarted(BuildEvent event) { + } + + /** + * No-op implementation. + * + * @param event Ignored. + */ + public void taskFinished(BuildEvent event) { + } + + /** + * Logs a message, if the priority is suitable. + * In non-emacs mode, task level messages are prefixed by the + * task name which is right-justified. + * + * @param event A BuildEvent containing message information. + * Must not be null. + */ + public void messageLogged(BuildEvent event) { + int priority = event.getPriority(); + // Filter out messages based on priority + if (priority <= msgOutputLevel) { + + StringBuffer message = new StringBuffer(); + if (event.getTask() != null && !emacsMode) { + // Print out the name of the task if we're in one + String name = event.getTask().getTaskName(); + String label = "[" + name + "] "; + int size = LEFT_COLUMN_SIZE - label.length(); + StringBuffer tmp = new StringBuffer(); + for (int i = 0; i < size; i++) { + tmp.append(" "); + } + tmp.append(label); + label = tmp.toString(); + + BufferedReader r = null; + try { + r = new BufferedReader( + new StringReader(event.getMessage())); + String line = r.readLine(); + boolean first = true; + do { + if (first) { + if (line == null) { + message.append(label); + break; + } + } else { + message.append(StringUtils.LINE_SEP); + } + first = false; + message.append(label).append(line); + line = r.readLine(); + } while (line != null); + } catch (IOException e) { + // shouldn't be possible + message.append(label).append(event.getMessage()); + } finally { + if (r != null) { + FileUtils.close(r); + } + } + + } else { + //emacs mode or there is no task + message.append(event.getMessage()); + } + Throwable ex = event.getException(); + if (Project.MSG_DEBUG <= msgOutputLevel && ex != null) { + message.append(StringUtils.getStackTrace(ex)); + } + + String msg = message.toString(); + if (priority != Project.MSG_ERR) { + printMessage(msg, out, priority); + } else { + printMessage(msg, err, priority); + } + log(msg); + } + } + + /** + * Convenience method to format a specified length of time. + * + * @param millis Length of time to format, in milliseconds. + * + * @return the time as a formatted string. + * + * @see DateUtils#formatElapsedTime(long) + */ + protected static String formatTime(final long millis) { + return DateUtils.formatElapsedTime(millis); + } + + /** + * Prints a message to a PrintStream. + * + * @param message The message to print. + * Should not be null. + * @param stream A PrintStream to print the message to. + * Must not be null. + * @param priority The priority of the message. + * (Ignored in this implementation.) + */ + protected void printMessage(final String message, + final PrintStream stream, + final int priority) { + stream.println(message); + } + + /** + * Empty implementation which allows subclasses to receive the + * same output that is generated here. + * + * @param message Message being logged. Should not be null. + */ + protected void log(String message) { + } + + /** + * Get the current time. + * @return the current time as a formatted string. + * @since Ant1.7.1 + */ + protected String getTimestamp() { + Date date = new Date(System.currentTimeMillis()); + DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); + String finishTime = formatter.format(date); + return finishTime; + } + + /** + * Get the project name or null + * @param event the event + * @return the project that raised this event + * @since Ant1.7.1 + */ + protected String extractProjectName(BuildEvent event) { + Project project = event.getProject(); + return (project != null) ? project.getName() : null; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxInputStream.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxInputStream.java new file mode 100644 index 00000000..ea263ca7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxInputStream.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.IOException; +import java.io.InputStream; + +/** + * + * Passes input requests to the project object for demuxing into + * individual tasks and threads. + * + * @since Ant 1.6 + */ +public class DemuxInputStream extends InputStream { + + private static final int MASK_8BIT = 0xFF; + /** + * The project to from which to get input. + */ + private Project project; + + /** + * Create a DemuxInputStream for the given project + * + * @param project the project instance + */ + public DemuxInputStream(Project project) { + this.project = project; + } + + /** + * Read a byte from the project's demuxed input. + * @return the next byte + * @throws IOException on error + */ + public int read() throws IOException { + byte[] buffer = new byte[1]; + if (project.demuxInput(buffer, 0, 1) == -1) { + return -1; + } + return buffer[0] & MASK_8BIT; + } + + + /** + * Read bytes from the project's demuxed input. + * @param buffer an array of bytes to read into + * @param offset the offset in the array of bytes + * @param length the number of bytes in the array + * @return the number of bytes read + * @throws IOException on error + */ + public int read(byte[] buffer, int offset, int length) throws IOException { + return project.demuxInput(buffer, offset, length); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxOutputStream.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxOutputStream.java new file mode 100644 index 00000000..bd399132 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DemuxOutputStream.java @@ -0,0 +1,249 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.WeakHashMap; + + +/** + * Logs content written by a thread and forwards the buffers onto the + * project object which will forward the content to the appropriate + * task. + * + * @since 1.4 + */ +public class DemuxOutputStream extends OutputStream { + + /** + * A data class to store information about a buffer. Such information + * is stored on a per-thread basis. + */ + private static class BufferInfo { + /** + * The per-thread output stream. + */ + private ByteArrayOutputStream buffer; + + /** + * Indicates we have just seen a carriage return. It may be part of + * a crlf pair or a single cr invoking processBuffer twice. + */ + private boolean crSeen = false; + } + + /** Maximum buffer size. */ + private static final int MAX_SIZE = 1024; + + /** Initial buffer size. */ + private static final int INITIAL_SIZE = 132; + + /** Carriage return */ + private static final int CR = 0x0d; + + /** Linefeed */ + private static final int LF = 0x0a; + + /** Mapping from thread to buffer (Thread to BufferInfo). */ + private WeakHashMap buffers = new WeakHashMap(); + + /** + * The project to send output to. + */ + private Project project; + + /** + * Whether or not this stream represents an error stream. + */ + private boolean isErrorStream; + + /** + * Creates a new instance of this class. + * + * @param project The project instance for which output is being + * demultiplexed. Must not be null. + * @param isErrorStream true if this is the error string, + * otherwise a normal output stream. This is + * passed to the project so it knows + * which stream it is receiving. + */ + public DemuxOutputStream(Project project, boolean isErrorStream) { + this.project = project; + this.isErrorStream = isErrorStream; + } + + /** + * Returns the buffer associated with the current thread. + * + * @return a BufferInfo for the current thread to write data to + */ + private BufferInfo getBufferInfo() { + Thread current = Thread.currentThread(); + BufferInfo bufferInfo = (BufferInfo) buffers.get(current); + if (bufferInfo == null) { + bufferInfo = new BufferInfo(); + bufferInfo.buffer = new ByteArrayOutputStream(INITIAL_SIZE); + bufferInfo.crSeen = false; + buffers.put(current, bufferInfo); + } + return bufferInfo; + } + + /** + * Resets the buffer for the current thread. + */ + private void resetBufferInfo() { + Thread current = Thread.currentThread(); + BufferInfo bufferInfo = (BufferInfo) buffers.get(current); + try { + bufferInfo.buffer.close(); + } catch (IOException e) { + // Shouldn't happen + } + bufferInfo.buffer = new ByteArrayOutputStream(); + bufferInfo.crSeen = false; + } + + /** + * Removes the buffer for the current thread. + */ + private void removeBuffer() { + Thread current = Thread.currentThread(); + buffers.remove (current); + } + + /** + * Writes the data to the buffer and flushes the buffer if a line + * separator is detected or if the buffer has reached its maximum size. + * + * @param cc data to log (byte). + * @exception IOException if the data cannot be written to the stream + */ + public void write(int cc) throws IOException { + final byte c = (byte) cc; + + BufferInfo bufferInfo = getBufferInfo(); + + if (c == '\n') { + // LF is always end of line (i.e. CRLF or single LF) + bufferInfo.buffer.write(cc); + processBuffer(bufferInfo.buffer); + } else { + if (bufferInfo.crSeen) { + // CR without LF - send buffer then add char + processBuffer(bufferInfo.buffer); + } + // add into buffer + bufferInfo.buffer.write(cc); + } + bufferInfo.crSeen = (c == '\r'); + if (!bufferInfo.crSeen && bufferInfo.buffer.size() > MAX_SIZE) { + processBuffer(bufferInfo.buffer); + } + } + + /** + * Converts the buffer to a string and sends it to the project. + * + * @param buffer the ByteArrayOutputStream used to collect the output + * until a line separator is seen. + * + * @see Project#demuxOutput(String,boolean) + */ + protected void processBuffer(ByteArrayOutputStream buffer) { + String output = buffer.toString(); + project.demuxOutput(output, isErrorStream); + resetBufferInfo(); + } + + /** + * Converts the buffer to a string and sends it to the project. + * + * @param buffer the ByteArrayOutputStream used to collect the output + * until a line separator is seen. + * + * @see Project#demuxOutput(String,boolean) + */ + protected void processFlush(ByteArrayOutputStream buffer) { + String output = buffer.toString(); + project.demuxFlush(output, isErrorStream); + resetBufferInfo(); + } + + /** + * Equivalent to flushing the stream. + * + * @exception IOException if there is a problem closing the stream. + * + * @see #flush + */ + public void close() throws IOException { + flush(); + removeBuffer(); + } + + /** + * Writes all remaining data in the buffer associated + * with the current thread to the project. + * + * @exception IOException if there is a problem flushing the stream. + */ + public void flush() throws IOException { + BufferInfo bufferInfo = getBufferInfo(); + if (bufferInfo.buffer.size() > 0) { + processFlush(bufferInfo.buffer); + } + } + + /** + * Write a block of characters to the output stream + * + * @param b the array containing the data + * @param off the offset into the array where data starts + * @param len the length of block + * + * @throws IOException if the data cannot be written into the stream. + */ + public void write(byte[] b, int off, int len) throws IOException { + // find the line breaks and pass other chars through in blocks + int offset = off; + int blockStartOffset = offset; + int remaining = len; + BufferInfo bufferInfo = getBufferInfo(); + while (remaining > 0) { + while (remaining > 0 && b[offset] != LF && b[offset] != CR) { + offset++; + remaining--; + } + // either end of buffer or a line separator char + int blockLength = offset - blockStartOffset; + if (blockLength > 0) { + bufferInfo.buffer.write(b, blockStartOffset, blockLength); + } + while (remaining > 0 && (b[offset] == LF || b[offset] == CR)) { + write(b[offset]); + offset++; + remaining--; + } + blockStartOffset = offset; + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Diagnostics.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Diagnostics.java new file mode 100644 index 00000000..6389f6ee --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Diagnostics.java @@ -0,0 +1,715 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.URL; +import java.util.Calendar; +import java.util.Enumeration; +import java.util.Properties; +import java.util.TimeZone; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; + +import org.apache.tools.ant.launch.Launcher; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JAXPUtils; +import org.apache.tools.ant.util.JavaEnvUtils; +import org.apache.tools.ant.util.ProxySetup; +import org.xml.sax.XMLReader; + +/** + * A little diagnostic helper that output some information that may help + * in support. It should quickly give correct information about the + * jar existing in ant.home/lib and the jar versions... + * + * @since Ant 1.5 + */ +public final class Diagnostics { + + /** the version number for java 1.5 returned from JavaEnvUtils */ + private static final int JAVA_1_5_NUMBER = 15; + + /** + * value for which a difference between clock and temp file time triggers + * a warning. + * {@value} + */ + private static final int BIG_DRIFT_LIMIT = 10000; + + /** + * How big a test file to write. + * {@value} + */ + private static final int TEST_FILE_SIZE = 32; + private static final int KILOBYTE = 1024; + private static final int SECONDS_PER_MILLISECOND = 1000; + private static final int SECONDS_PER_MINUTE = 60; + private static final int MINUTES_PER_HOUR = 60; + + /** + * The error text when a security manager blocks access to a property. + * {@value} + */ + protected static final String ERROR_PROPERTY_ACCESS_BLOCKED + = "Access to this property blocked by a security manager"; + + /** utility class */ + private Diagnostics() { + // hidden constructor + } + + /** + * Doesn't do anything. + * @deprecated Obsolete since Ant 1.8.2 + * @return true + */ + public static boolean isOptionalAvailable() { + return true; + } + + /** + * Doesn't do anything. + * @deprecated Obsolete since Ant 1.8.2 + */ + public static void validateVersion() throws BuildException { + } + + /** + * return the list of jar files existing in ANT_HOME/lib + * and that must have been picked up by Ant script. + * @return the list of jar files existing in ant.home/lib or + * null if an error occurs. + */ + public static File[] listLibraries() { + String home = System.getProperty(MagicNames.ANT_HOME); + if (home == null) { + return null; + } + File libDir = new File(home, "lib"); + return listJarFiles(libDir); + + } + + /** + * get a list of all JAR files in a directory + * @param libDir directory + * @return array of files (or null for no such directory) + */ + private static File[] listJarFiles(File libDir) { + FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(".jar"); + } + }; + File[] files = libDir.listFiles(filter); + return files; + } + + /** + * main entry point for command line + * @param args command line arguments. + */ + public static void main(String[] args) { + doReport(System.out); + } + + /** + * Helper method to get the implementation version. + * @param clazz the class to get the information from. + * @return null if there is no package or implementation version. + * '?.?' for JDK 1.0 or 1.1. + */ + private static String getImplementationVersion(Class clazz) { + return clazz.getPackage().getImplementationVersion(); + } + + /** + * Helper method to get the location. + * @param clazz the class to get the information from. + * @since Ant 1.8.0 + */ + private static URL getClassLocation(Class clazz) { + if (clazz.getProtectionDomain().getCodeSource() == null) { + return null; + } + return clazz.getProtectionDomain().getCodeSource().getLocation(); + } + + /** + * what parser are we using. + * @return the classname of the parser + */ + private static String getXMLParserName() { + SAXParser saxParser = getSAXParser(); + if (saxParser == null) { + return "Could not create an XML Parser"; + } + // check to what is in the classname + String saxParserName = saxParser.getClass().getName(); + return saxParserName; + } + + /** + * what parser are we using. + * @return the classname of the parser + */ + private static String getXSLTProcessorName() { + Transformer transformer = getXSLTProcessor(); + if (transformer == null) { + return "Could not create an XSLT Processor"; + } + // check to what is in the classname + String processorName = transformer.getClass().getName(); + return processorName; + } + + /** + * Create a JAXP SAXParser + * @return parser or null for trouble + */ + private static SAXParser getSAXParser() { + SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); + if (saxParserFactory == null) { + return null; + } + SAXParser saxParser = null; + try { + saxParser = saxParserFactory.newSAXParser(); + } catch (Exception e) { + // ignore + ignoreThrowable(e); + } + return saxParser; + } + + /** + * Create a JAXP XSLT Transformer + * @return parser or null for trouble + */ + private static Transformer getXSLTProcessor() { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + if (transformerFactory == null) { + return null; + } + Transformer transformer = null; + try { + transformer = transformerFactory.newTransformer(); + } catch (Exception e) { + // ignore + ignoreThrowable(e); + } + return transformer; + } + + /** + * get the location of the parser + * @return path or null for trouble in tracking it down + */ + private static String getXMLParserLocation() { + SAXParser saxParser = getSAXParser(); + if (saxParser == null) { + return null; + } + URL location = getClassLocation(saxParser.getClass()); + return location != null ? location.toString() : null; + } + + private static String getNamespaceParserName() { + try { + XMLReader reader = JAXPUtils.getNamespaceXMLReader(); + return reader.getClass().getName(); + } catch (BuildException e) { + //ignore + ignoreThrowable(e); + return null; + } + } + + private static String getNamespaceParserLocation() { + try { + XMLReader reader = JAXPUtils.getNamespaceXMLReader(); + URL location = getClassLocation(reader.getClass()); + return location != null ? location.toString() : null; + } catch (BuildException e) { + //ignore + ignoreThrowable(e); + return null; + } + } + + /** + * get the location of the parser + * @return path or null for trouble in tracking it down + */ + private static String getXSLTProcessorLocation() { + Transformer transformer = getXSLTProcessor(); + if (transformer == null) { + return null; + } + URL location = getClassLocation(transformer.getClass()); + return location != null ? location.toString() : null; + } + + /** + * ignore exceptions. This is to allow future + * implementations to log at a verbose level + * @param thrown + */ + private static void ignoreThrowable(Throwable thrown) { + } + + + /** + * Print a report to the given stream. + * @param out the stream to print the report to. + */ + public static void doReport(PrintStream out) { + doReport(out, Project.MSG_INFO); + } + + /** + * Print a report to the given stream. + * @param out the stream to print the report to. + * @param logLevel denotes the level of detail requested as one of + * Project's MSG_* constants. + */ + public static void doReport(PrintStream out, int logLevel) { + out.println("------- Ant diagnostics report -------"); + out.println(Main.getAntVersion()); + header(out, "Implementation Version"); + + out.println("core tasks : " + getImplementationVersion(Main.class) + + " in " + getClassLocation(Main.class)); + + header(out, "ANT PROPERTIES"); + doReportAntProperties(out); + + header(out, "ANT_HOME/lib jar listing"); + doReportAntHomeLibraries(out); + + header(out, "USER_HOME/.ant/lib jar listing"); + doReportUserHomeLibraries(out); + + header(out, "Tasks availability"); + doReportTasksAvailability(out); + + header(out, "org.apache.env.Which diagnostics"); + doReportWhich(out); + + header(out, "XML Parser information"); + doReportParserInfo(out); + + header(out, "XSLT Processor information"); + doReportXSLTProcessorInfo(out); + + header(out, "System properties"); + doReportSystemProperties(out); + + header(out, "Temp dir"); + doReportTempDir(out); + + header(out, "Locale information"); + doReportLocale(out); + + header(out, "Proxy information"); + doReportProxy(out); + + out.println(); + } + + private static void header(PrintStream out, String section) { + out.println(); + out.println("-------------------------------------------"); + out.print(" "); + out.println(section); + out.println("-------------------------------------------"); + } + + /** + * Report a listing of system properties existing in the current vm. + * @param out the stream to print the properties to. + */ + private static void doReportSystemProperties(PrintStream out) { + Properties sysprops = null; + try { + sysprops = System.getProperties(); + } catch (SecurityException e) { + ignoreThrowable(e); + out.println("Access to System.getProperties() blocked " + "by a security manager"); + return; + } + for (Enumeration keys = sysprops.propertyNames(); + keys.hasMoreElements();) { + String key = (String) keys.nextElement(); + String value = getProperty(key); + out.println(key + " : " + value); + } + } + + /** + * Get the value of a system property. If a security manager + * blocks access to a property it fills the result in with an error + * @param key + * @return the system property's value or error text + * @see #ERROR_PROPERTY_ACCESS_BLOCKED + */ + private static String getProperty(String key) { + String value; + try { + value = System.getProperty(key); + } catch (SecurityException e) { + value = ERROR_PROPERTY_ACCESS_BLOCKED; + } + return value; + } + + /** + * Report the content of ANT_HOME/lib directory + * @param out the stream to print the content to + */ + private static void doReportAntProperties(PrintStream out) { + Project p = new Project(); + p.initProperties(); + out.println(MagicNames.ANT_VERSION + ": " + p.getProperty(MagicNames.ANT_VERSION)); + out.println(MagicNames.ANT_JAVA_VERSION + ": " + + p.getProperty(MagicNames.ANT_JAVA_VERSION)); + out.println("Is this the Apache Harmony VM? " + + (JavaEnvUtils.isApacheHarmony() ? "yes" : "no")); + out.println("Is this the Kaffe VM? " + + (JavaEnvUtils.isKaffe() ? "yes" : "no")); + out.println("Is this gij/gcj? " + + (JavaEnvUtils.isGij() ? "yes" : "no")); + out.println(MagicNames.ANT_LIB + ": " + p.getProperty(MagicNames.ANT_LIB)); + out.println(MagicNames.ANT_HOME + ": " + p.getProperty(MagicNames.ANT_HOME)); + } + + /** + * Report the content of ANT_HOME/lib directory + * @param out the stream to print the content to + */ + private static void doReportAntHomeLibraries(PrintStream out) { + out.println(MagicNames.ANT_HOME + ": " + System.getProperty(MagicNames.ANT_HOME)); + File[] libs = listLibraries(); + printLibraries(libs, out); + } + + /** + * Report the content of ~/.ant/lib directory + * + * @param out the stream to print the content to + */ + private static void doReportUserHomeLibraries(PrintStream out) { + String home = System.getProperty(Launcher.USER_HOMEDIR); + out.println("user.home: " + home); + File libDir = new File(home, Launcher.USER_LIBDIR); + File[] libs = listJarFiles(libDir); + printLibraries(libs, out); + } + + /** + * list the libraries + * @param libs array of libraries (can be null) + * @param out output stream + */ + private static void printLibraries(File[] libs, PrintStream out) { + if (libs == null) { + out.println("No such directory."); + return; + } + for (int i = 0; i < libs.length; i++) { + out.println(libs[i].getName() + " (" + libs[i].length() + " bytes)"); + } + } + + + /** + * Call org.apache.env.Which if available + * @param out the stream to print the content to. + */ + private static void doReportWhich(PrintStream out) { + Throwable error = null; + try { + Class which = Class.forName("org.apache.env.Which"); + Method method = which.getMethod( + "main", new Class[] {String[].class}); + method.invoke(null, new Object[]{new String[]{}}); + } catch (ClassNotFoundException e) { + out.println("Not available."); + out.println("Download it at http://xml.apache.org/commons/"); + } catch (InvocationTargetException e) { + error = e.getTargetException() == null ? e : e.getTargetException(); + } catch (Throwable e) { + error = e; + } + // report error if something weird happens...this is diagnostic. + if (error != null) { + out.println("Error while running org.apache.env.Which"); + error.printStackTrace(); + } + } + + /** + * Create a report about non-available tasks that are defined in the + * mapping but could not be found via lookup. It might generally happen + * because Ant requires multiple libraries to compile and one of them + * was missing when compiling Ant. + * @param out the stream to print the tasks report to + * null for a missing stream (ie mapping). + */ + private static void doReportTasksAvailability(PrintStream out) { + InputStream is = Main.class.getResourceAsStream( + MagicNames.TASKDEF_PROPERTIES_RESOURCE); + if (is == null) { + out.println("None available"); + } else { + Properties props = new Properties(); + try { + props.load(is); + for (Enumeration keys = props.keys(); keys.hasMoreElements();) { + String key = (String) keys.nextElement(); + String classname = props.getProperty(key); + try { + Class.forName(classname); + props.remove(key); + } catch (ClassNotFoundException e) { + out.println(key + " : Not Available " + + "(the implementation class is not present)"); + } catch (NoClassDefFoundError e) { + String pkg = e.getMessage().replace('/', '.'); + out.println(key + " : Missing dependency " + pkg); + } catch (LinkageError e) { + out.println(key + " : Initialization error"); + } + } + if (props.size() == 0) { + out.println("All defined tasks are available"); + } else { + out.println("A task being missing/unavailable should only " + + "matter if you are trying to use it"); + } + } catch (IOException e) { + out.println(e.getMessage()); + } + } + } + + /** + * tell the user about the XML parser + * @param out + */ + private static void doReportParserInfo(PrintStream out) { + String parserName = getXMLParserName(); + String parserLocation = getXMLParserLocation(); + printParserInfo(out, "XML Parser", parserName, parserLocation); + printParserInfo(out, "Namespace-aware parser", getNamespaceParserName(), + getNamespaceParserLocation()); + } + + /** + * tell the user about the XSLT processor + * @param out + */ + private static void doReportXSLTProcessorInfo(PrintStream out) { + String processorName = getXSLTProcessorName(); + String processorLocation = getXSLTProcessorLocation(); + printParserInfo(out, "XSLT Processor", processorName, processorLocation); + } + + private static void printParserInfo(PrintStream out, String parserType, String parserName, + String parserLocation) { + if (parserName == null) { + parserName = "unknown"; + } + if (parserLocation == null) { + parserLocation = "unknown"; + } + out.println(parserType + " : " + parserName); + out.println(parserType + " Location: " + parserLocation); + } + + /** + * try and create a temp file in our temp dir; this + * checks that it has space and access. + * We also do some clock reporting. + * @param out + */ + private static void doReportTempDir(PrintStream out) { + String tempdir = System.getProperty("java.io.tmpdir"); + if (tempdir == null) { + out.println("Warning: java.io.tmpdir is undefined"); + return; + } + out.println("Temp dir is " + tempdir); + File tempDirectory = new File(tempdir); + if (!tempDirectory.exists()) { + out.println("Warning, java.io.tmpdir directory does not exist: " + tempdir); + return; + } + //create the file + long now = System.currentTimeMillis(); + File tempFile = null; + FileOutputStream fileout = null; + FileInputStream filein = null; + try { + tempFile = File.createTempFile("diag", "txt", tempDirectory); + //do some writing to it + fileout = new FileOutputStream(tempFile); + byte[] buffer = new byte[KILOBYTE]; + for (int i = 0; i < TEST_FILE_SIZE; i++) { + fileout.write(buffer); + } + fileout.close(); + fileout = null; + + // read to make sure the file has been written completely + Thread.sleep(1000); + filein = new FileInputStream(tempFile); + int total = 0; + int read = 0; + while ((read = filein.read(buffer, 0, KILOBYTE)) > 0) { + total += read; + } + filein.close(); + filein = null; + + long filetime = tempFile.lastModified(); + long drift = filetime - now; + tempFile.delete(); + + out.print("Temp dir is writeable"); + if (total != TEST_FILE_SIZE * KILOBYTE) { + out.println(", but seems to be full. Wrote " + + (TEST_FILE_SIZE * KILOBYTE) + + "but could only read " + total + " bytes."); + } else { + out.println(); + } + + out.println("Temp dir alignment with system clock is " + drift + " ms"); + if (Math.abs(drift) > BIG_DRIFT_LIMIT) { + out.println("Warning: big clock drift -maybe a network filesystem"); + } + } catch (IOException e) { + ignoreThrowable(e); + out.println("Failed to create a temporary file in the temp dir " + tempdir); + out.println("File " + tempFile + " could not be created/written to"); + } catch (InterruptedException e) { + ignoreThrowable(e); + out.println("Failed to check whether tempdir is writable"); + } finally { + FileUtils.close(fileout); + FileUtils.close(filein); + if (tempFile != null && tempFile.exists()) { + tempFile.delete(); + } + } + } + + /** + * Report locale information + * @param out stream to print to + */ + private static void doReportLocale(PrintStream out) { + //calendar stuff. + Calendar cal = Calendar.getInstance(); + TimeZone tz = cal.getTimeZone(); + out.println("Timezone " + + tz.getDisplayName() + + " offset=" + + tz.getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), cal + .get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), cal + .get(Calendar.DAY_OF_WEEK), ((cal.get(Calendar.HOUR_OF_DAY) + * MINUTES_PER_HOUR + cal.get(Calendar.MINUTE)) + * SECONDS_PER_MINUTE + cal.get(Calendar.SECOND)) + * SECONDS_PER_MILLISECOND + cal.get(Calendar.MILLISECOND))); + } + + /** + * print a property name="value" pair if the property is set; + * print nothing if it is null + * @param out stream to print on + * @param key property name + */ + private static void printProperty(PrintStream out, String key) { + String value = getProperty(key); + if (value != null) { + out.print(key); + out.print(" = "); + out.print('"'); + out.print(value); + out.println('"'); + } + } + + /** + * Report proxy information + * + * @param out stream to print to + * @since Ant1.7 + */ + private static void doReportProxy(PrintStream out) { + printProperty(out, ProxySetup.HTTP_PROXY_HOST); + printProperty(out, ProxySetup.HTTP_PROXY_PORT); + printProperty(out, ProxySetup.HTTP_PROXY_USERNAME); + printProperty(out, ProxySetup.HTTP_PROXY_PASSWORD); + printProperty(out, ProxySetup.HTTP_NON_PROXY_HOSTS); + printProperty(out, ProxySetup.HTTPS_PROXY_HOST); + printProperty(out, ProxySetup.HTTPS_PROXY_PORT); + printProperty(out, ProxySetup.HTTPS_NON_PROXY_HOSTS); + printProperty(out, ProxySetup.FTP_PROXY_HOST); + printProperty(out, ProxySetup.FTP_PROXY_PORT); + printProperty(out, ProxySetup.FTP_NON_PROXY_HOSTS); + printProperty(out, ProxySetup.SOCKS_PROXY_HOST); + printProperty(out, ProxySetup.SOCKS_PROXY_PORT); + printProperty(out, ProxySetup.SOCKS_PROXY_USERNAME); + printProperty(out, ProxySetup.SOCKS_PROXY_PASSWORD); + + if (JavaEnvUtils.getJavaVersionNumber() < JAVA_1_5_NUMBER) { + return; + } + printProperty(out, ProxySetup.USE_SYSTEM_PROXIES); + final String proxyDiagClassname = "org.apache.tools.ant.util.java15.ProxyDiagnostics"; + try { + Class proxyDiagClass = Class.forName(proxyDiagClassname); + Object instance = proxyDiagClass.newInstance(); + out.println("Java1.5+ proxy settings:"); + out.println(instance.toString()); + } catch (ClassNotFoundException e) { + //not included, do nothing + } catch (IllegalAccessException e) { + //not included, do nothing + } catch (InstantiationException e) { + //not included, do nothing + } catch (NoClassDefFoundError e) { + // not included, to nothing + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DirectoryScanner.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DirectoryScanner.java new file mode 100644 index 00000000..709779a7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -0,0 +1,1900 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import org.apache.tools.ant.taskdefs.condition.Os; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.ResourceFactory; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.selectors.FileSelector; +import org.apache.tools.ant.types.selectors.SelectorScanner; +import org.apache.tools.ant.types.selectors.SelectorUtils; +import org.apache.tools.ant.types.selectors.TokenizedPath; +import org.apache.tools.ant.types.selectors.TokenizedPattern; +import org.apache.tools.ant.util.CollectionUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.SymbolicLinkUtils; +import org.apache.tools.ant.util.VectorSet; + +/** + * Class for scanning a directory for files/directories which match certain + * criteria. + *

    + * These criteria consist of selectors and patterns which have been specified. + * With the selectors you can select which files you want to have included. + * Files which are not selected are excluded. With patterns you can include + * or exclude files based on their filename. + *

    + * The idea is simple. A given directory is recursively scanned for all files + * and directories. Each file/directory is matched against a set of selectors, + * including special support for matching against filenames with include and + * and exclude patterns. Only files/directories which match at least one + * pattern of the include pattern list or other file selector, and don't match + * any pattern of the exclude pattern list or fail to match against a required + * selector will be placed in the list of files/directories found. + *

    + * When no list of include patterns is supplied, "**" will be used, which + * means that everything will be matched. When no list of exclude patterns is + * supplied, an empty list is used, such that nothing will be excluded. When + * no selectors are supplied, none are applied. + *

    + * The filename pattern matching is done as follows: + * The name to be matched is split up in path segments. A path segment is the + * name of a directory or file, which is bounded by + * File.separator ('/' under UNIX, '\' under Windows). + * For example, "abc/def/ghi/xyz.java" is split up in the segments "abc", + * "def","ghi" and "xyz.java". + * The same is done for the pattern against which should be matched. + *

    + * The segments of the name and the pattern are then matched against each + * other. When '**' is used for a path segment in the pattern, it matches + * zero or more path segments of the name. + *

    + * There is a special case regarding the use of File.separators + * at the beginning of the pattern and the string to match:
    + * When a pattern starts with a File.separator, the string + * to match must also start with a File.separator. + * When a pattern does not start with a File.separator, the + * string to match may not start with a File.separator. + * When one of these rules is not obeyed, the string will not + * match. + *

    + * When a name path segment is matched against a pattern path segment, the + * following special characters can be used:
    + * '*' matches zero or more characters
    + * '?' matches one character. + *

    + * Examples: + *

    + * "**\*.class" matches all .class files/dirs in a directory tree. + *

    + * "test\a??.java" matches all files/dirs which start with an 'a', then two + * more characters and then ".java", in a directory called test. + *

    + * "**" matches everything in a directory tree. + *

    + * "**\test\**\XYZ*" matches all files/dirs which start with "XYZ" and where + * there is a parent directory called test (e.g. "abc\test\def\ghi\XYZ123"). + *

    + * Case sensitivity may be turned off if necessary. By default, it is + * turned on. + *

    + * Example of usage: + *

    + *   String[] includes = {"**\\*.class"};
    + *   String[] excludes = {"modules\\*\\**"};
    + *   ds.setIncludes(includes);
    + *   ds.setExcludes(excludes);
    + *   ds.setBasedir(new File("test"));
    + *   ds.setCaseSensitive(true);
    + *   ds.scan();
    + *
    + *   System.out.println("FILES:");
    + *   String[] files = ds.getIncludedFiles();
    + *   for (int i = 0; i < files.length; i++) {
    + *     System.out.println(files[i]);
    + *   }
    + * 
    + * This will scan a directory called test for .class files, but excludes all + * files in all proper subdirectories of a directory called "modules". + * + */ +public class DirectoryScanner + implements FileScanner, SelectorScanner, ResourceFactory { + + /** Is OpenVMS the operating system we're running on? */ + private static final boolean ON_VMS = Os.isFamily("openvms"); + + /** + * Patterns which should be excluded by default. + * + *

    Note that you can now add patterns to the list of default + * excludes. Added patterns will not become part of this array + * that has only been kept around for backwards compatibility + * reasons.

    + * + * @deprecated since 1.6.x. + * Use the {@link #getDefaultExcludes getDefaultExcludes} + * method instead. + */ + @Deprecated + protected static final String[] DEFAULTEXCLUDES = { + // Miscellaneous typical temporary files + SelectorUtils.DEEP_TREE_MATCH + "/*~", + SelectorUtils.DEEP_TREE_MATCH + "/#*#", + SelectorUtils.DEEP_TREE_MATCH + "/.#*", + SelectorUtils.DEEP_TREE_MATCH + "/%*%", + SelectorUtils.DEEP_TREE_MATCH + "/._*", + + // CVS + SelectorUtils.DEEP_TREE_MATCH + "/CVS", + SelectorUtils.DEEP_TREE_MATCH + "/CVS/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.cvsignore", + + // SCCS + SelectorUtils.DEEP_TREE_MATCH + "/SCCS", + SelectorUtils.DEEP_TREE_MATCH + "/SCCS/" + SelectorUtils.DEEP_TREE_MATCH, + + // Visual SourceSafe + SelectorUtils.DEEP_TREE_MATCH + "/vssver.scc", + + // Subversion + SelectorUtils.DEEP_TREE_MATCH + "/.svn", + SelectorUtils.DEEP_TREE_MATCH + "/.svn/" + SelectorUtils.DEEP_TREE_MATCH, + + // Git + SelectorUtils.DEEP_TREE_MATCH + "/.git", + SelectorUtils.DEEP_TREE_MATCH + "/.git/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.gitattributes", + SelectorUtils.DEEP_TREE_MATCH + "/.gitignore", + SelectorUtils.DEEP_TREE_MATCH + "/.gitmodules", + + // Mercurial + SelectorUtils.DEEP_TREE_MATCH + "/.hg", + SelectorUtils.DEEP_TREE_MATCH + "/.hg/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.hgignore", + SelectorUtils.DEEP_TREE_MATCH + "/.hgsub", + SelectorUtils.DEEP_TREE_MATCH + "/.hgsubstate", + SelectorUtils.DEEP_TREE_MATCH + "/.hgtags", + + // Bazaar + SelectorUtils.DEEP_TREE_MATCH + "/.bzr", + SelectorUtils.DEEP_TREE_MATCH + "/.bzr/" + SelectorUtils.DEEP_TREE_MATCH, + SelectorUtils.DEEP_TREE_MATCH + "/.bzrignore", + + // Mac + SelectorUtils.DEEP_TREE_MATCH + "/.DS_Store" + }; + + /** + * default value for {@link #maxLevelsOfSymlinks maxLevelsOfSymlinks} + * @since Ant 1.8.0 + */ + public static final int MAX_LEVELS_OF_SYMLINKS = 5; + /** + * The end of the exception message if something that should be + * there doesn't exist. + */ + public static final String DOES_NOT_EXIST_POSTFIX = " does not exist."; + + /** Helper. */ + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** Helper. */ + private static final SymbolicLinkUtils SYMLINK_UTILS = + SymbolicLinkUtils.getSymbolicLinkUtils(); + + /** + * Patterns which should be excluded by default. + * + * @see #addDefaultExcludes() + */ + private static final Set defaultExcludes = new HashSet(); + static { + resetDefaultExcludes(); + } + + // CheckStyle:VisibilityModifier OFF - bc + + /** The base directory to be scanned. */ + protected File basedir; + + /** The patterns for the files to be included. */ + protected String[] includes; + + /** The patterns for the files to be excluded. */ + protected String[] excludes; + + /** Selectors that will filter which files are in our candidate list. */ + protected FileSelector[] selectors = null; + + /** + * The files which matched at least one include and no excludes + * and were selected. + */ + protected Vector filesIncluded; + + /** The files which did not match any includes or selectors. */ + protected Vector filesNotIncluded; + + /** + * The files which matched at least one include and at least + * one exclude. + */ + protected Vector filesExcluded; + + /** + * The directories which matched at least one include and no excludes + * and were selected. + */ + protected Vector dirsIncluded; + + /** The directories which were found and did not match any includes. */ + protected Vector dirsNotIncluded; + + /** + * The directories which matched at least one include and at least one + * exclude. + */ + protected Vector dirsExcluded; + + /** + * The files which matched at least one include and no excludes and + * which a selector discarded. + */ + protected Vector filesDeselected; + + /** + * The directories which matched at least one include and no excludes + * but which a selector discarded. + */ + protected Vector dirsDeselected; + + /** Whether or not our results were built by a slow scan. */ + protected boolean haveSlowResults = false; + + /** + * Whether or not the file system should be treated as a case sensitive + * one. + */ + protected boolean isCaseSensitive = true; + + /** + * Whether a missing base directory is an error. + * @since Ant 1.7.1 + */ + protected boolean errorOnMissingDir = true; + + /** + * Whether or not symbolic links should be followed. + * + * @since Ant 1.5 + */ + private boolean followSymlinks = true; + + /** Whether or not everything tested so far has been included. */ + protected boolean everythingIncluded = true; + + // CheckStyle:VisibilityModifier ON + + /** + * List of all scanned directories. + * + * @since Ant 1.6 + */ + private final Set scannedDirs = new HashSet(); + + /** + * Map of all include patterns that are full file names and don't + * contain any wildcards. + * + *

    Maps pattern string to TokenizedPath.

    + * + *

    If this instance is not case sensitive, the file names get + * turned to upper case.

    + * + *

    Gets lazily initialized on the first invocation of + * isIncluded or isExcluded and cleared at the end of the scan + * method (cleared in clearCaches, actually).

    + * + * @since Ant 1.8.0 + */ + private final Map includeNonPatterns = new HashMap(); + + /** + * Map of all exclude patterns that are full file names and don't + * contain any wildcards. + * + *

    Maps pattern string to TokenizedPath.

    + * + *

    If this instance is not case sensitive, the file names get + * turned to upper case.

    + * + *

    Gets lazily initialized on the first invocation of + * isIncluded or isExcluded and cleared at the end of the scan + * method (cleared in clearCaches, actually).

    + * + * @since Ant 1.8.0 + */ + private final Map excludeNonPatterns = new HashMap(); + + /** + * Array of all include patterns that contain wildcards. + * + *

    Gets lazily initialized on the first invocation of + * isIncluded or isExcluded and cleared at the end of the scan + * method (cleared in clearCaches, actually).

    + */ + private TokenizedPattern[] includePatterns; + + /** + * Array of all exclude patterns that contain wildcards. + * + *

    Gets lazily initialized on the first invocation of + * isIncluded or isExcluded and cleared at the end of the scan + * method (cleared in clearCaches, actually).

    + */ + private TokenizedPattern[] excludePatterns; + + /** + * Have the non-pattern sets and pattern arrays for in- and + * excludes been initialized? + * + * @since Ant 1.6.3 + */ + private boolean areNonPatternSetsReady = false; + + /** + * Scanning flag. + * + * @since Ant 1.6.3 + */ + private boolean scanning = false; + + /** + * Scanning lock. + * + * @since Ant 1.6.3 + */ + private final Object scanLock = new Object(); + + /** + * Slow scanning flag. + * + * @since Ant 1.6.3 + */ + private boolean slowScanning = false; + + /** + * Slow scanning lock. + * + * @since Ant 1.6.3 + */ + private final Object slowScanLock = new Object(); + + /** + * Exception thrown during scan. + * + * @since Ant 1.6.3 + */ + private IllegalStateException illegal = null; + + /** + * The maximum number of times a symbolic link may be followed + * during a scan. + * + * @since Ant 1.8.0 + */ + private int maxLevelsOfSymlinks = MAX_LEVELS_OF_SYMLINKS; + + + /** + * Absolute paths of all symlinks that haven't been followed but + * would have been if followsymlinks had been true or + * maxLevelsOfSymlinks had been higher. + * + * @since Ant 1.8.0 + */ + private final Set notFollowedSymlinks = new HashSet(); + + /** + * Sole constructor. + */ + public DirectoryScanner() { + } + + /** + * Test whether or not a given path matches the start of a given + * pattern up to the first "**". + *

    + * This is not a general purpose test and should only be used if you + * can live with false positives. For example, pattern=**\a + * and str=b will yield true. + * + * @param pattern The pattern to match against. Must not be + * null. + * @param str The path to match, as a String. Must not be + * null. + * + * @return whether or not a given path matches the start of a given + * pattern up to the first "**". + */ + protected static boolean matchPatternStart(final String pattern, final String str) { + return SelectorUtils.matchPatternStart(pattern, str); + } + + /** + * Test whether or not a given path matches the start of a given + * pattern up to the first "**". + *

    + * This is not a general purpose test and should only be used if you + * can live with false positives. For example, pattern=**\a + * and str=b will yield true. + * + * @param pattern The pattern to match against. Must not be + * null. + * @param str The path to match, as a String. Must not be + * null. + * @param isCaseSensitive Whether or not matching should be performed + * case sensitively. + * + * @return whether or not a given path matches the start of a given + * pattern up to the first "**". + */ + protected static boolean matchPatternStart(final String pattern, final String str, + final boolean isCaseSensitive) { + return SelectorUtils.matchPatternStart(pattern, str, isCaseSensitive); + } + + /** + * Test whether or not a given path matches a given pattern. + * + * @param pattern The pattern to match against. Must not be + * null. + * @param str The path to match, as a String. Must not be + * null. + * + * @return true if the pattern matches against the string, + * or false otherwise. + */ + protected static boolean matchPath(final String pattern, final String str) { + return SelectorUtils.matchPath(pattern, str); + } + + /** + * Test whether or not a given path matches a given pattern. + * + * @param pattern The pattern to match against. Must not be + * null. + * @param str The path to match, as a String. Must not be + * null. + * @param isCaseSensitive Whether or not matching should be performed + * case sensitively. + * + * @return true if the pattern matches against the string, + * or false otherwise. + */ + protected static boolean matchPath(final String pattern, final String str, + final boolean isCaseSensitive) { + return SelectorUtils.matchPath(pattern, str, isCaseSensitive); + } + + /** + * Test whether or not a string matches against a pattern. + * The pattern may contain two special characters:
    + * '*' means zero or more characters
    + * '?' means one and only one character + * + * @param pattern The pattern to match against. + * Must not be null. + * @param str The string which must be matched against the pattern. + * Must not be null. + * + * @return true if the string matches against the pattern, + * or false otherwise. + */ + public static boolean match(final String pattern, final String str) { + return SelectorUtils.match(pattern, str); + } + + /** + * Test whether or not a string matches against a pattern. + * The pattern may contain two special characters:
    + * '*' means zero or more characters
    + * '?' means one and only one character + * + * @param pattern The pattern to match against. + * Must not be null. + * @param str The string which must be matched against the pattern. + * Must not be null. + * @param isCaseSensitive Whether or not matching should be performed + * case sensitively. + * + * + * @return true if the string matches against the pattern, + * or false otherwise. + */ + protected static boolean match(final String pattern, final String str, + final boolean isCaseSensitive) { + return SelectorUtils.match(pattern, str, isCaseSensitive); + } + + + /** + * Get the list of patterns that should be excluded by default. + * + * @return An array of String based on the current + * contents of the defaultExcludes + * Set. + * + * @since Ant 1.6 + */ + public static String[] getDefaultExcludes() { + synchronized (defaultExcludes) { + return defaultExcludes.toArray(new String[defaultExcludes + .size()]); + } + } + + /** + * Add a pattern to the default excludes unless it is already a + * default exclude. + * + * @param s A string to add as an exclude pattern. + * @return true if the string was added; + * false if it already existed. + * + * @since Ant 1.6 + */ + public static boolean addDefaultExclude(final String s) { + synchronized (defaultExcludes) { + return defaultExcludes.add(s); + } + } + + /** + * Remove a string if it is a default exclude. + * + * @param s The string to attempt to remove. + * @return true if s was a default + * exclude (and thus was removed); + * false if s was not + * in the default excludes list to begin with. + * + * @since Ant 1.6 + */ + public static boolean removeDefaultExclude(final String s) { + synchronized (defaultExcludes) { + return defaultExcludes.remove(s); + } + } + + /** + * Go back to the hardwired default exclude patterns. + * + * @since Ant 1.6 + */ + public static void resetDefaultExcludes() { + synchronized (defaultExcludes) { + defaultExcludes.clear(); + for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { + defaultExcludes.add(DEFAULTEXCLUDES[i]); + } + } + } + + /** + * Set the base directory to be scanned. This is the directory which is + * scanned recursively. All '/' and '\' characters are replaced by + * File.separatorChar, so the separator used need not match + * File.separatorChar. + * + * @param basedir The base directory to scan. + */ + public void setBasedir(final String basedir) { + setBasedir(basedir == null ? (File) null + : new File(basedir.replace('/', File.separatorChar).replace( + '\\', File.separatorChar))); + } + + /** + * Set the base directory to be scanned. This is the directory which is + * scanned recursively. + * + * @param basedir The base directory for scanning. + */ + public synchronized void setBasedir(final File basedir) { + this.basedir = basedir; + } + + /** + * Return the base directory to be scanned. + * This is the directory which is scanned recursively. + * + * @return the base directory to be scanned. + */ + public synchronized File getBasedir() { + return basedir; + } + + /** + * Find out whether include exclude patterns are matched in a + * case sensitive way. + * @return whether or not the scanning is case sensitive. + * @since Ant 1.6 + */ + public synchronized boolean isCaseSensitive() { + return isCaseSensitive; + } + + /** + * Set whether or not include and exclude patterns are matched + * in a case sensitive way. + * + * @param isCaseSensitive whether or not the file system should be + * regarded as a case sensitive one. + */ + public synchronized void setCaseSensitive(final boolean isCaseSensitive) { + this.isCaseSensitive = isCaseSensitive; + } + + /** + * Sets whether or not a missing base directory is an error + * + * @param errorOnMissingDir whether or not a missing base directory + * is an error + * @since Ant 1.7.1 + */ + public void setErrorOnMissingDir(final boolean errorOnMissingDir) { + this.errorOnMissingDir = errorOnMissingDir; + } + + /** + * Get whether or not a DirectoryScanner follows symbolic links. + * + * @return flag indicating whether symbolic links should be followed. + * + * @since Ant 1.6 + */ + public synchronized boolean isFollowSymlinks() { + return followSymlinks; + } + + /** + * Set whether or not symbolic links should be followed. + * + * @param followSymlinks whether or not symbolic links should be followed. + */ + public synchronized void setFollowSymlinks(final boolean followSymlinks) { + this.followSymlinks = followSymlinks; + } + + /** + * The maximum number of times a symbolic link may be followed + * during a scan. + * + * @since Ant 1.8.0 + */ + public void setMaxLevelsOfSymlinks(final int max) { + maxLevelsOfSymlinks = max; + } + + /** + * Set the list of include patterns to use. All '/' and '\' characters + * are replaced by File.separatorChar, so the separator used + * need not match File.separatorChar. + *

    + * When a pattern ends with a '/' or '\', "**" is appended. + * + * @param includes A list of include patterns. + * May be null, indicating that all files + * should be included. If a non-null + * list is given, all elements must be + * non-null. + */ + public synchronized void setIncludes(final String[] includes) { + if (includes == null) { + this.includes = null; + } else { + this.includes = new String[includes.length]; + for (int i = 0; i < includes.length; i++) { + this.includes[i] = normalizePattern(includes[i]); + } + } + } + + /** + * Set the list of exclude patterns to use. All '/' and '\' characters + * are replaced by File.separatorChar, so the separator used + * need not match File.separatorChar. + *

    + * When a pattern ends with a '/' or '\', "**" is appended. + * + * @param excludes A list of exclude patterns. + * May be null, indicating that no files + * should be excluded. If a non-null list is + * given, all elements must be non-null. + */ + public synchronized void setExcludes(final String[] excludes) { + if (excludes == null) { + this.excludes = null; + } else { + this.excludes = new String[excludes.length]; + for (int i = 0; i < excludes.length; i++) { + this.excludes[i] = normalizePattern(excludes[i]); + } + } + } + + /** + * Add to the list of exclude patterns to use. All '/' and '\' + * characters are replaced by File.separatorChar, so + * the separator used need not match File.separatorChar. + *

    + * When a pattern ends with a '/' or '\', "**" is appended. + * + * @param excludes A list of exclude patterns. + * May be null, in which case the + * exclude patterns don't get changed at all. + * + * @since Ant 1.6.3 + */ + public synchronized void addExcludes(final String[] excludes) { + if (excludes != null && excludes.length > 0) { + if (this.excludes != null && this.excludes.length > 0) { + final String[] tmp = new String[excludes.length + + this.excludes.length]; + System.arraycopy(this.excludes, 0, tmp, 0, + this.excludes.length); + for (int i = 0; i < excludes.length; i++) { + tmp[this.excludes.length + i] = + normalizePattern(excludes[i]); + } + this.excludes = tmp; + } else { + setExcludes(excludes); + } + } + } + + /** + * All '/' and '\' characters are replaced by + * File.separatorChar, so the separator used need not + * match File.separatorChar. + * + *

    When a pattern ends with a '/' or '\', "**" is appended. + * + * @since Ant 1.6.3 + */ + private static String normalizePattern(final String p) { + String pattern = p.replace('/', File.separatorChar) + .replace('\\', File.separatorChar); + if (pattern.endsWith(File.separator)) { + pattern += SelectorUtils.DEEP_TREE_MATCH; + } + return pattern; + } + + /** + * Set the selectors that will select the filelist. + * + * @param selectors specifies the selectors to be invoked on a scan. + */ + public synchronized void setSelectors(final FileSelector[] selectors) { + this.selectors = selectors; + } + + /** + * Return whether or not the scanner has included all the files or + * directories it has come across so far. + * + * @return true if all files and directories which have + * been found so far have been included. + */ + public synchronized boolean isEverythingIncluded() { + return everythingIncluded; + } + + /** + * Scan for files which match at least one include pattern and don't match + * any exclude patterns. If there are selectors then the files must pass + * muster there, as well. Scans under basedir, if set; otherwise the + * include patterns without leading wildcards specify the absolute paths of + * the files that may be included. + * + * @exception IllegalStateException if the base directory was set + * incorrectly (i.e. if it doesn't exist or isn't a directory). + */ + public void scan() throws IllegalStateException { + synchronized (scanLock) { + if (scanning) { + while (scanning) { + try { + scanLock.wait(); + } catch (final InterruptedException e) { + continue; + } + } + if (illegal != null) { + throw illegal; + } + return; + } + scanning = true; + } + final File savedBase = basedir; + try { + synchronized (this) { + illegal = null; + clearResults(); + + // set in/excludes to reasonable defaults if needed: + final boolean nullIncludes = (includes == null); + includes = nullIncludes + ? new String[] {SelectorUtils.DEEP_TREE_MATCH} : includes; + final boolean nullExcludes = (excludes == null); + excludes = nullExcludes ? new String[0] : excludes; + + if (basedir != null && !followSymlinks + && SYMLINK_UTILS.isSymbolicLink(basedir)) { + notFollowedSymlinks.add(basedir.getAbsolutePath()); + basedir = null; + } + + if (basedir == null) { + // if no basedir and no includes, nothing to do: + if (nullIncludes) { + return; + } + } else { + if (!basedir.exists()) { + if (errorOnMissingDir) { + illegal = new IllegalStateException("basedir " + + basedir + + DOES_NOT_EXIST_POSTFIX); + } else { + // Nothing to do - basedir does not exist + return; + } + } else if (!basedir.isDirectory()) { + illegal = new IllegalStateException("basedir " + + basedir + + " is not a" + + " directory."); + } + if (illegal != null) { + throw illegal; + } + } + if (isIncluded(TokenizedPath.EMPTY_PATH)) { + if (!isExcluded(TokenizedPath.EMPTY_PATH)) { + if (isSelected("", basedir)) { + dirsIncluded.addElement(""); + } else { + dirsDeselected.addElement(""); + } + } else { + dirsExcluded.addElement(""); + } + } else { + dirsNotIncluded.addElement(""); + } + checkIncludePatterns(); + clearCaches(); + includes = nullIncludes ? null : includes; + excludes = nullExcludes ? null : excludes; + } + } catch (final IOException ex) { + throw new BuildException(ex); + } finally { + basedir = savedBase; + synchronized (scanLock) { + scanning = false; + scanLock.notifyAll(); + } + } + } + + /** + * This routine is actually checking all the include patterns in + * order to avoid scanning everything under base dir. + * @since Ant 1.6 + */ + private void checkIncludePatterns() { + ensureNonPatternSetsReady(); + final Map newroots = new HashMap(); + + // put in the newroots map the include patterns without + // wildcard tokens + for (int i = 0; i < includePatterns.length; i++) { + final String pattern = includePatterns[i].toString(); + if (!shouldSkipPattern(pattern)) { + newroots.put(includePatterns[i].rtrimWildcardTokens(), + pattern); + } + } + for (final Map.Entry entry : includeNonPatterns.entrySet()) { + final String pattern = entry.getKey(); + if (!shouldSkipPattern(pattern)) { + newroots.put(entry.getValue(), pattern); + } + } + + if (newroots.containsKey(TokenizedPath.EMPTY_PATH) + && basedir != null) { + // we are going to scan everything anyway + scandir(basedir, "", true); + } else { + File canonBase = null; + if (basedir != null) { + try { + canonBase = basedir.getCanonicalFile(); + } catch (final IOException ex) { + throw new BuildException(ex); + } + } + // only scan directories that can include matched files or + // directories + for (final Map.Entry entry : newroots.entrySet()) { + TokenizedPath currentPath = entry.getKey(); + String currentelement = currentPath.toString(); + if (basedir == null + && !FileUtils.isAbsolutePath(currentelement)) { + continue; + } + File myfile = new File(basedir, currentelement); + + if (myfile.exists()) { + // may be on a case insensitive file system. We want + // the results to show what's really on the disk, so + // we need to double check. + try { + final String path = (basedir == null) + ? myfile.getCanonicalPath() + : FILE_UTILS.removeLeadingPath(canonBase, + myfile.getCanonicalFile()); + if (!path.equals(currentelement) || ON_VMS) { + myfile = currentPath.findFile(basedir, true); + if (myfile != null && basedir != null) { + currentelement = FILE_UTILS.removeLeadingPath( + basedir, myfile); + if (!currentPath.toString() + .equals(currentelement)) { + currentPath = + new TokenizedPath(currentelement); + } + } + } + } catch (final IOException ex) { + throw new BuildException(ex); + } + } + + if ((myfile == null || !myfile.exists()) && !isCaseSensitive()) { + final File f = currentPath.findFile(basedir, false); + if (f != null && f.exists()) { + // adapt currentelement to the case we've + // actually found + currentelement = (basedir == null) + ? f.getAbsolutePath() + : FILE_UTILS.removeLeadingPath(basedir, f); + myfile = f; + currentPath = new TokenizedPath(currentelement); + } + } + + if (myfile != null && myfile.exists()) { + if (!followSymlinks && currentPath.isSymlink(basedir)) { + accountForNotFollowedSymlink(currentPath, myfile); + continue; + } + if (myfile.isDirectory()) { + if (isIncluded(currentPath) + && currentelement.length() > 0) { + accountForIncludedDir(currentPath, myfile, true); + } else { + scandir(myfile, currentPath, true); + } + } else if (myfile.isFile()) { + final String originalpattern = entry.getValue(); + final boolean included = isCaseSensitive() + ? originalpattern.equals(currentelement) + : originalpattern.equalsIgnoreCase(currentelement); + if (included) { + accountForIncludedFile(currentPath, myfile); + } + } + } + } + } + } + + /** + * true if the pattern specifies a relative path without basedir + * or an absolute path not inside basedir. + * + * @since Ant 1.8.0 + */ + private boolean shouldSkipPattern(final String pattern) { + if (FileUtils.isAbsolutePath(pattern)) { + //skip abs. paths not under basedir, if set: + if (basedir != null + && !SelectorUtils.matchPatternStart(pattern, + basedir.getAbsolutePath(), + isCaseSensitive())) { + return true; + } + } else if (basedir == null) { + //skip non-abs. paths if basedir == null: + return true; + } + return false; + } + + /** + * Clear the result caches for a scan. + */ + protected synchronized void clearResults() { + filesIncluded = new VectorSet(); + filesNotIncluded = new VectorSet(); + filesExcluded = new VectorSet(); + filesDeselected = new VectorSet(); + dirsIncluded = new VectorSet(); + dirsNotIncluded = new VectorSet(); + dirsExcluded = new VectorSet(); + dirsDeselected = new VectorSet(); + everythingIncluded = (basedir != null); + scannedDirs.clear(); + notFollowedSymlinks.clear(); + } + + /** + * Top level invocation for a slow scan. A slow scan builds up a full + * list of excluded/included files/directories, whereas a fast scan + * will only have full results for included files, as it ignores + * directories which can't possibly hold any included files/directories. + *

    + * Returns immediately if a slow scan has already been completed. + */ + protected void slowScan() { + synchronized (slowScanLock) { + if (haveSlowResults) { + return; + } + if (slowScanning) { + while (slowScanning) { + try { + slowScanLock.wait(); + } catch (final InterruptedException e) { + // Empty + } + } + return; + } + slowScanning = true; + } + try { + synchronized (this) { + + // set in/excludes to reasonable defaults if needed: + final boolean nullIncludes = (includes == null); + includes = nullIncludes + ? new String[] {SelectorUtils.DEEP_TREE_MATCH} : includes; + final boolean nullExcludes = (excludes == null); + excludes = nullExcludes ? new String[0] : excludes; + + final String[] excl = new String[dirsExcluded.size()]; + dirsExcluded.copyInto(excl); + + final String[] notIncl = new String[dirsNotIncluded.size()]; + dirsNotIncluded.copyInto(notIncl); + + ensureNonPatternSetsReady(); + + processSlowScan(excl); + processSlowScan(notIncl); + clearCaches(); + includes = nullIncludes ? null : includes; + excludes = nullExcludes ? null : excludes; + } + } finally { + synchronized (slowScanLock) { + haveSlowResults = true; + slowScanning = false; + slowScanLock.notifyAll(); + } + } + } + + private void processSlowScan(final String[] arr) { + for (int i = 0; i < arr.length; i++) { + final TokenizedPath path = new TokenizedPath(arr[i]); + if (!couldHoldIncluded(path) || contentsExcluded(path)) { + scandir(new File(basedir, arr[i]), path, false); + } + } + } + + /** + * Scan the given directory for files and directories. Found files and + * directories are placed in their respective collections, based on the + * matching of includes, excludes, and the selectors. When a directory + * is found, it is scanned recursively. + * + * @param dir The directory to scan. Must not be null. + * @param vpath The path relative to the base directory (needed to + * prevent problems with an absolute path when using + * dir). Must not be null. + * @param fast Whether or not this call is part of a fast scan. + * + * @see #filesIncluded + * @see #filesNotIncluded + * @see #filesExcluded + * @see #dirsIncluded + * @see #dirsNotIncluded + * @see #dirsExcluded + * @see #slowScan + */ + protected void scandir(final File dir, final String vpath, final boolean fast) { + scandir(dir, new TokenizedPath(vpath), fast); + } + + /** + * Scan the given directory for files and directories. Found files and + * directories are placed in their respective collections, based on the + * matching of includes, excludes, and the selectors. When a directory + * is found, it is scanned recursively. + * + * @param dir The directory to scan. Must not be null. + * @param path The path relative to the base directory (needed to + * prevent problems with an absolute path when using + * dir). Must not be null. + * @param fast Whether or not this call is part of a fast scan. + * + * @see #filesIncluded + * @see #filesNotIncluded + * @see #filesExcluded + * @see #dirsIncluded + * @see #dirsNotIncluded + * @see #dirsExcluded + * @see #slowScan + */ + private void scandir(final File dir, final TokenizedPath path, final boolean fast) { + if (dir == null) { + throw new BuildException("dir must not be null."); + } + final String[] newfiles = dir.list(); + if (newfiles == null) { + if (!dir.exists()) { + throw new BuildException(dir + DOES_NOT_EXIST_POSTFIX); + } else if (!dir.isDirectory()) { + throw new BuildException(dir + " is not a directory."); + } else { + throw new BuildException("IO error scanning directory '" + + dir.getAbsolutePath() + "'"); + } + } + scandir(dir, path, fast, newfiles, new LinkedList()); + } + + private void scandir(final File dir, final TokenizedPath path, final boolean fast, + String[] newfiles, final LinkedList directoryNamesFollowed) { + String vpath = path.toString(); + if (vpath.length() > 0 && !vpath.endsWith(File.separator)) { + vpath += File.separator; + } + + // avoid double scanning of directories, can only happen in fast mode + if (fast && hasBeenScanned(vpath)) { + return; + } + if (!followSymlinks) { + final ArrayList noLinks = new ArrayList(); + for (int i = 0; i < newfiles.length; i++) { + try { + if (SYMLINK_UTILS.isSymbolicLink(dir, newfiles[i])) { + final String name = vpath + newfiles[i]; + final File file = new File(dir, newfiles[i]); + if (file.isDirectory()) { + dirsExcluded.addElement(name); + } else if (file.isFile()) { + filesExcluded.addElement(name); + } + accountForNotFollowedSymlink(name, file); + } else { + noLinks.add(newfiles[i]); + } + } catch (final IOException ioe) { + final String msg = "IOException caught while checking " + + "for links, couldn't get canonical path!"; + // will be caught and redirected to Ant's logging system + System.err.println(msg); + noLinks.add(newfiles[i]); + } + } + newfiles = (noLinks.toArray(new String[noLinks.size()])); + } else { + directoryNamesFollowed.addFirst(dir.getName()); + } + + for (int i = 0; i < newfiles.length; i++) { + final String name = vpath + newfiles[i]; + final TokenizedPath newPath = new TokenizedPath(path, newfiles[i]); + final File file = new File(dir, newfiles[i]); + final String[] children = file.list(); + if (children == null || (children.length == 0 && file.isFile())) { + if (isIncluded(newPath)) { + accountForIncludedFile(newPath, file); + } else { + everythingIncluded = false; + filesNotIncluded.addElement(name); + } + } else if (file.isDirectory()) { // dir + + if (followSymlinks + && causesIllegalSymlinkLoop(newfiles[i], dir, + directoryNamesFollowed)) { + // will be caught and redirected to Ant's logging system + System.err.println("skipping symbolic link " + + file.getAbsolutePath() + + " -- too many levels of symbolic" + + " links."); + notFollowedSymlinks.add(file.getAbsolutePath()); + continue; + } + + if (isIncluded(newPath)) { + accountForIncludedDir(newPath, file, fast, children, + directoryNamesFollowed); + } else { + everythingIncluded = false; + dirsNotIncluded.addElement(name); + if (fast && couldHoldIncluded(newPath) + && !contentsExcluded(newPath)) { + scandir(file, newPath, fast, children, + directoryNamesFollowed); + } + } + if (!fast) { + scandir(file, newPath, fast, children, directoryNamesFollowed); + } + } + } + + if (followSymlinks) { + directoryNamesFollowed.removeFirst(); + } + } + + /** + * Process included file. + * @param name path of the file relative to the directory of the FileSet. + * @param file included File. + */ + private void accountForIncludedFile(final TokenizedPath name, final File file) { + processIncluded(name, file, filesIncluded, filesExcluded, + filesDeselected); + } + + /** + * Process included directory. + * @param name path of the directory relative to the directory of + * the FileSet. + * @param file directory as File. + * @param fast whether to perform fast scans. + */ + private void accountForIncludedDir(final TokenizedPath name, final File file, + final boolean fast) { + processIncluded(name, file, dirsIncluded, dirsExcluded, dirsDeselected); + if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) { + scandir(file, name, fast); + } + } + + private void accountForIncludedDir(final TokenizedPath name, + final File file, final boolean fast, + final String[] children, + final LinkedList directoryNamesFollowed) { + processIncluded(name, file, dirsIncluded, dirsExcluded, dirsDeselected); + if (fast && couldHoldIncluded(name) && !contentsExcluded(name)) { + scandir(file, name, fast, children, directoryNamesFollowed); + } + } + + private void accountForNotFollowedSymlink(final String name, final File file) { + accountForNotFollowedSymlink(new TokenizedPath(name), file); + } + + private void accountForNotFollowedSymlink(final TokenizedPath name, final File file) { + if (!isExcluded(name) && + (isIncluded(name) + || (file.isDirectory() && couldHoldIncluded(name) + && !contentsExcluded(name)))) { + notFollowedSymlinks.add(file.getAbsolutePath()); + } + } + + private void processIncluded(final TokenizedPath path, + final File file, final Vector inc, final Vector exc, + final Vector des) { + final String name = path.toString(); + if (inc.contains(name) || exc.contains(name) || des.contains(name)) { + return; + } + + boolean included = false; + if (isExcluded(path)) { + exc.add(name); + } else if (isSelected(name, file)) { + included = true; + inc.add(name); + } else { + des.add(name); + } + everythingIncluded &= included; + } + + /** + * Test whether or not a name matches against at least one include + * pattern. + * + * @param name The name to match. Must not be null. + * @return true when the name matches against at least one + * include pattern, or false otherwise. + */ + protected boolean isIncluded(final String name) { + return isIncluded(new TokenizedPath(name)); + } + + /** + * Test whether or not a name matches against at least one include + * pattern. + * + * @param name The name to match. Must not be null. + * @return true when the name matches against at least one + * include pattern, or false otherwise. + */ + private boolean isIncluded(final TokenizedPath path) { + ensureNonPatternSetsReady(); + + if (isCaseSensitive() + ? includeNonPatterns.containsKey(path.toString()) + : includeNonPatterns.containsKey(path.toString().toUpperCase())) { + return true; + } + for (int i = 0; i < includePatterns.length; i++) { + if (includePatterns[i].matchPath(path, isCaseSensitive())) { + return true; + } + } + return false; + } + + /** + * Test whether or not a name matches the start of at least one include + * pattern. + * + * @param name The name to match. Must not be null. + * @return true when the name matches against the start of at + * least one include pattern, or false otherwise. + */ + protected boolean couldHoldIncluded(final String name) { + return couldHoldIncluded(new TokenizedPath(name)); + } + + /** + * Test whether or not a name matches the start of at least one include + * pattern. + * + * @param tokenizedName The name to match. Must not be null. + * @return true when the name matches against the start of at + * least one include pattern, or false otherwise. + */ + private boolean couldHoldIncluded(final TokenizedPath tokenizedName) { + for (int i = 0; i < includePatterns.length; i++) { + if (couldHoldIncluded(tokenizedName, includePatterns[i])) { + return true; + } + } + for (final Iterator iter = includeNonPatterns.values().iterator(); + iter.hasNext();) { + if (couldHoldIncluded(tokenizedName, + iter.next().toPattern())) { + return true; + } + } + return false; + } + + /** + * Test whether or not a name matches the start of the given + * include pattern. + * + * @param tokenizedName The name to match. Must not be null. + * @return true when the name matches against the start of the + * include pattern, or false otherwise. + */ + private boolean couldHoldIncluded(final TokenizedPath tokenizedName, + final TokenizedPattern tokenizedInclude) { + return tokenizedInclude.matchStartOf(tokenizedName, isCaseSensitive()) + && isMorePowerfulThanExcludes(tokenizedName.toString()) + && isDeeper(tokenizedInclude, tokenizedName); + } + + /** + * Verify that a pattern specifies files deeper + * than the level of the specified file. + * @param pattern the pattern to check. + * @param name the name to check. + * @return whether the pattern is deeper than the name. + * @since Ant 1.6.3 + */ + private boolean isDeeper(final TokenizedPattern pattern, final TokenizedPath name) { + return pattern.containsPattern(SelectorUtils.DEEP_TREE_MATCH) + || pattern.depth() > name.depth(); + } + + /** + * Find out whether one particular include pattern is more powerful + * than all the excludes. + * Note: the power comparison is based on the length of the include pattern + * and of the exclude patterns without the wildcards. + * Ideally the comparison should be done based on the depth + * of the match; that is to say how many file separators have been matched + * before the first ** or the end of the pattern. + * + * IMPORTANT : this function should return false "with care". + * + * @param name the relative path to test. + * @return true if there is no exclude pattern more powerful than + * this include pattern. + * @since Ant 1.6 + */ + private boolean isMorePowerfulThanExcludes(final String name) { + final String soughtexclude = + name + File.separatorChar + SelectorUtils.DEEP_TREE_MATCH; + for (int counter = 0; counter < excludePatterns.length; counter++) { + if (excludePatterns[counter].toString().equals(soughtexclude)) { + return false; + } + } + return true; + } + + /** + * Test whether all contents of the specified directory must be excluded. + * @param path the path to check. + * @return whether all the specified directory's contents are excluded. + */ + /* package */ boolean contentsExcluded(final TokenizedPath path) { + for (int i = 0; i < excludePatterns.length; i++) { + if (excludePatterns[i].endsWith(SelectorUtils.DEEP_TREE_MATCH) + && excludePatterns[i].withoutLastToken() + .matchPath(path, isCaseSensitive())) { + return true; + } + } + return false; + } + + /** + * Test whether or not a name matches against at least one exclude + * pattern. + * + * @param name The name to match. Must not be null. + * @return true when the name matches against at least one + * exclude pattern, or false otherwise. + */ + protected boolean isExcluded(final String name) { + return isExcluded(new TokenizedPath(name)); + } + + /** + * Test whether or not a name matches against at least one exclude + * pattern. + * + * @param name The name to match. Must not be null. + * @return true when the name matches against at least one + * exclude pattern, or false otherwise. + */ + private boolean isExcluded(final TokenizedPath name) { + ensureNonPatternSetsReady(); + + if (isCaseSensitive() + ? excludeNonPatterns.containsKey(name.toString()) + : excludeNonPatterns.containsKey(name.toString().toUpperCase())) { + return true; + } + for (int i = 0; i < excludePatterns.length; i++) { + if (excludePatterns[i].matchPath(name, isCaseSensitive())) { + return true; + } + } + return false; + } + + /** + * Test whether a file should be selected. + * + * @param name the filename to check for selecting. + * @param file the java.io.File object for this filename. + * @return false when the selectors says that the file + * should not be selected, true otherwise. + */ + protected boolean isSelected(final String name, final File file) { + if (selectors != null) { + for (int i = 0; i < selectors.length; i++) { + if (!selectors[i].isSelected(basedir, name, file)) { + return false; + } + } + } + return true; + } + + /** + * Return the names of the files which matched at least one of the + * include patterns and none of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the files which matched at least one of the + * include patterns and none of the exclude patterns. + */ + public String[] getIncludedFiles() { + String[] files; + synchronized (this) { + if (filesIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + files = new String[filesIncluded.size()]; + filesIncluded.copyInto(files); + } + Arrays.sort(files); + return files; + } + + /** + * Return the count of included files. + * @return int. + * @since Ant 1.6.3 + */ + public synchronized int getIncludedFilesCount() { + if (filesIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + return filesIncluded.size(); + } + + /** + * Return the names of the files which matched none of the include + * patterns. The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed. + * + * @return the names of the files which matched none of the include + * patterns. + * + * @see #slowScan + */ + public synchronized String[] getNotIncludedFiles() { + slowScan(); + final String[] files = new String[filesNotIncluded.size()]; + filesNotIncluded.copyInto(files); + return files; + } + + /** + * Return the names of the files which matched at least one of the + * include patterns and at least one of the exclude patterns. + * The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed. + * + * @return the names of the files which matched at least one of the + * include patterns and at least one of the exclude patterns. + * + * @see #slowScan + */ + public synchronized String[] getExcludedFiles() { + slowScan(); + final String[] files = new String[filesExcluded.size()]; + filesExcluded.copyInto(files); + return files; + } + + /** + *

    Return the names of the files which were selected out and + * therefore not ultimately included.

    + * + *

    The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed.

    + * + * @return the names of the files which were deselected. + * + * @see #slowScan + */ + public synchronized String[] getDeselectedFiles() { + slowScan(); + final String[] files = new String[filesDeselected.size()]; + filesDeselected.copyInto(files); + return files; + } + + /** + * Return the names of the directories which matched at least one of the + * include patterns and none of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the directories which matched at least one of the + * include patterns and none of the exclude patterns. + */ + public String[] getIncludedDirectories() { + String[] directories; + synchronized (this) { + if (dirsIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + directories = new String[dirsIncluded.size()]; + dirsIncluded.copyInto(directories); + } + Arrays.sort(directories); + return directories; + } + + /** + * Return the count of included directories. + * @return int. + * @since Ant 1.6.3 + */ + public synchronized int getIncludedDirsCount() { + if (dirsIncluded == null) { + throw new IllegalStateException("Must call scan() first"); + } + return dirsIncluded.size(); + } + + /** + * Return the names of the directories which matched none of the include + * patterns. The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed. + * + * @return the names of the directories which matched none of the include + * patterns. + * + * @see #slowScan + */ + public synchronized String[] getNotIncludedDirectories() { + slowScan(); + final String[] directories = new String[dirsNotIncluded.size()]; + dirsNotIncluded.copyInto(directories); + return directories; + } + + /** + * Return the names of the directories which matched at least one of the + * include patterns and at least one of the exclude patterns. + * The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed. + * + * @return the names of the directories which matched at least one of the + * include patterns and at least one of the exclude patterns. + * + * @see #slowScan + */ + public synchronized String[] getExcludedDirectories() { + slowScan(); + final String[] directories = new String[dirsExcluded.size()]; + dirsExcluded.copyInto(directories); + return directories; + } + + /** + *

    Return the names of the directories which were selected out and + * therefore not ultimately included.

    + * + *

    The names are relative to the base directory. This involves + * performing a slow scan if one has not already been completed.

    + * + * @return the names of the directories which were deselected. + * + * @see #slowScan + */ + public synchronized String[] getDeselectedDirectories() { + slowScan(); + final String[] directories = new String[dirsDeselected.size()]; + dirsDeselected.copyInto(directories); + return directories; + } + + /** + * Absolute paths of all symbolic links that haven't been followed + * but would have been followed had followsymlinks been true or + * maxLevelsOfSymlinks been bigger. + * + * @return sorted array of not followed symlinks + * @since Ant 1.8.0 + * @see #notFollowedSymlinks + */ + public synchronized String[] getNotFollowedSymlinks() { + String[] links; + synchronized (this) { + links = notFollowedSymlinks + .toArray(new String[notFollowedSymlinks.size()]); + } + Arrays.sort(links); + return links; + } + + /** + * Add default exclusions to the current exclusions set. + */ + public synchronized void addDefaultExcludes() { + final int excludesLength = excludes == null ? 0 : excludes.length; + String[] newExcludes; + final String[] defaultExcludesTemp = getDefaultExcludes(); + newExcludes = new String[excludesLength + defaultExcludesTemp.length]; + if (excludesLength > 0) { + System.arraycopy(excludes, 0, newExcludes, 0, excludesLength); + } + for (int i = 0; i < defaultExcludesTemp.length; i++) { + newExcludes[i + excludesLength] = + defaultExcludesTemp[i].replace('/', File.separatorChar) + .replace('\\', File.separatorChar); + } + excludes = newExcludes; + } + + /** + * Get the named resource. + * @param name path name of the file relative to the dir attribute. + * + * @return the resource with the given name. + * @since Ant 1.5.2 + */ + public synchronized Resource getResource(final String name) { + return new FileResource(basedir, name); + } + + /** + * Has the directory with the given path relative to the base + * directory already been scanned? + * + *

    Registers the given directory as scanned as a side effect.

    + * + * @since Ant 1.6 + */ + private boolean hasBeenScanned(final String vpath) { + return !scannedDirs.add(vpath); + } + + /** + * This method is of interest for testing purposes. The returned + * Set is live and should not be modified. + * @return the Set of relative directory names that have been scanned. + */ + /* package-private */ Set getScannedDirs() { + return scannedDirs; + } + + /** + * Clear internal caches. + * + * @since Ant 1.6 + */ + private synchronized void clearCaches() { + includeNonPatterns.clear(); + excludeNonPatterns.clear(); + includePatterns = null; + excludePatterns = null; + areNonPatternSetsReady = false; + } + + /** + * Ensure that the in|exclude "patterns" + * have been properly divided up. + * + * @since Ant 1.6.3 + */ + /* package */ synchronized void ensureNonPatternSetsReady() { + if (!areNonPatternSetsReady) { + includePatterns = fillNonPatternSet(includeNonPatterns, includes); + excludePatterns = fillNonPatternSet(excludeNonPatterns, excludes); + areNonPatternSetsReady = true; + } + } + + /** + * Add all patterns that are not real patterns (do not contain + * wildcards) to the set and returns the real patterns. + * + * @param map Map to populate. + * @param patterns String[] of patterns. + * @since Ant 1.8.0 + */ + private TokenizedPattern[] fillNonPatternSet(final Map map, final String[] patterns) { + final ArrayList al = new ArrayList(patterns.length); + for (int i = 0; i < patterns.length; i++) { + if (!SelectorUtils.hasWildcards(patterns[i])) { + final String s = isCaseSensitive() + ? patterns[i] : patterns[i].toUpperCase(); + map.put(s, new TokenizedPath(s)); + } else { + al.add(new TokenizedPattern(patterns[i])); + } + } + return al.toArray(new TokenizedPattern[al.size()]); + } + + /** + * Would following the given directory cause a loop of symbolic + * links deeper than allowed? + * + *

    Can only happen if the given directory has been seen at + * least more often than allowed during the current scan and it is + * a symbolic link and enough other occurrences of the same name + * higher up are symbolic links that point to the same place.

    + * + * @since Ant 1.8.0 + */ + private boolean causesIllegalSymlinkLoop(final String dirName, final File parent, + final LinkedList directoryNamesFollowed) { + try { + if (directoryNamesFollowed.size() >= maxLevelsOfSymlinks + && CollectionUtils.frequency(directoryNamesFollowed, dirName) + >= maxLevelsOfSymlinks + && SYMLINK_UTILS.isSymbolicLink(parent, dirName)) { + + final ArrayList files = new ArrayList(); + File f = FILE_UTILS.resolveFile(parent, dirName); + final String target = f.getCanonicalPath(); + files.add(target); + + String relPath = ""; + for (final String dir : directoryNamesFollowed) { + relPath += "../"; + if (dirName.equals(dir)) { + f = FILE_UTILS.resolveFile(parent, relPath + dir); + files.add(f.getCanonicalPath()); + if (files.size() > maxLevelsOfSymlinks + && CollectionUtils.frequency(files, target) + > maxLevelsOfSymlinks) { + return true; + } + } + } + + } + return false; + } catch (final IOException ex) { + throw new BuildException("Caught error while checking for" + + " symbolic links", ex); + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttribute.java new file mode 100644 index 00000000..445c33ee --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttribute.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Enables a task to control unknown attributes + * + * @since Ant 1.5 + */ +public interface DynamicAttribute { + + /** + * Set a named attribute to the given value + * + * @param name the name of the attribute + * @param value the new value of the attribute + * @throws BuildException when any error occurs + */ + void setDynamicAttribute(String name, String value) + throws BuildException; + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttributeNS.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttributeNS.java new file mode 100644 index 00000000..7d6e84e5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicAttributeNS.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Enables a task to control unknown attributes. + * + * @since Ant 1.7 + */ +public interface DynamicAttributeNS { + + /** + * Set a named attribute to the given value + * + * @param uri The namespace uri for this attribute, "" is + * used if there is no namespace uri. + * @param localName The localname of this attribute. + * @param qName The qualified name for this attribute + * @param value The value of this attribute. + * @throws BuildException when any error occurs + */ + void setDynamicAttribute( + String uri, String localName, String qName, String value) + throws BuildException; + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfigurator.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfigurator.java new file mode 100644 index 00000000..e48062be --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfigurator.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Enables a task to control unknown attributes and elements. + * + * @since Ant 1.5 + */ +public interface DynamicConfigurator + extends DynamicAttribute, DynamicElement { +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfiguratorNS.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfiguratorNS.java new file mode 100644 index 00000000..40b3d656 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicConfiguratorNS.java @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Enables a task to control unknown attributes and elements. + * + * @since Ant 1.7 + */ +public interface DynamicConfiguratorNS + extends DynamicAttributeNS, DynamicElementNS { +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElement.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElement.java new file mode 100644 index 00000000..b9caf0c4 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElement.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Enables a task to control unknown elements. + * + * @since Ant 1.5 + */ +public interface DynamicElement { + + /** + * Create an element with the given name + * + * @param name the element name + * @throws BuildException when any error occurs + * @return the element created + */ + Object createDynamicElement(String name) throws BuildException; +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElementNS.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElementNS.java new file mode 100644 index 00000000..57bfa530 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicElementNS.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Enables a task to control unknown elements. + * + * @since Ant 1.7 + */ +public interface DynamicElementNS { + /** + * Create an element with the given name + * + * @param uri The namespace uri for this attribute. + * @param localName The localname of this attribute. + * @param qName The qualified name for this element. + * @throws BuildException when any error occurs + * @return the element created for this element. + */ + Object createDynamicElement( + String uri, String localName, String qName) throws BuildException; +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicObjectAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicObjectAttribute.java new file mode 100644 index 00000000..9a9aca90 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/DynamicObjectAttribute.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Enables a task to control unknown attributes. + * Same as {@link DynamicAttribute} but authorize arbitrary Object as value + * rather than String + * + * @see DynamicAttribute + * @since Ant 1.9 + */ +public interface DynamicObjectAttribute { + + /** + * Set a named attribute to the given value + * + * @param name the name of the attribute + * @param value the new value of the attribute + * @throws BuildException when any error occurs + */ + void setDynamicAttribute(String name, Object value) + throws BuildException; + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Evaluable.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Evaluable.java new file mode 100644 index 00000000..47f09c73 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Evaluable.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Kind of task attribute that can be evaluated before being assigned + * + * @see RuntimeConfigurable + */ +public interface Evaluable { + + Object eval(); + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Executor.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Executor.java new file mode 100644 index 00000000..9aff1487 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Executor.java @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Target executor abstraction. + * @since Ant 1.6.3 + */ +public interface Executor { + + /** + * Execute the specified Targets for the specified Project. + * @param project the Ant Project. + * @param targetNames String[] of Target names as specified on the command line. + * @throws BuildException on error + */ + void executeTargets(Project project, String[] targetNames) + throws BuildException; + + /** + * Get the appropriate subproject Executor instance. + * + * This allows the top executor to control what type of executor is used to execute + * subprojects via <ant>/<antcall>/<subant> and task that extend these. + * All bundled Executors return a SingleCheckExecutor (running a merged set of + * depended targets for all targets called) to run sub-builds. + * + * @return an Executor instance. + */ + Executor getSubProjectExecutor(); + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitException.java new file mode 100644 index 00000000..11e1bc81 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitException.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Used to report exit status of classes which call System.exit(). + * + * @see org.apache.tools.ant.util.optional.NoExitSecurityManager + * @see org.apache.tools.ant.types.Permissions + * + */ +public class ExitException extends SecurityException { + + private static final long serialVersionUID = 2772487854280543363L; + + /** Status code */ + private int status; + + /** + * Constructs an exit exception. + * @param status the status code returned via System.exit() + */ + public ExitException(int status) { + super("ExitException: status " + status); + this.status = status; + } + + /** + * Constructs an exit exception. + * @param msg the message to be displayed. + * @param status the status code returned via System.exit() + */ + public ExitException(String msg, int status) { + super(msg); + this.status = status; + } + + /** + * The status code returned by System.exit() + * + * @return the status code returned by System.exit() + */ + public int getStatus() { + return status; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitStatusException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitStatusException.java new file mode 100644 index 00000000..1eb5127b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExitStatusException.java @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * BuildException + exit status. + * + * @since Ant 1.7 + */ +public class ExitStatusException extends BuildException { + + private static final long serialVersionUID = 7760846806886585968L; + + /** Status code */ + private int status; + + /** + * Constructs an ExitStatusException. + * @param status the associated status code + */ + public ExitStatusException(int status) { + super(); + this.status = status; + } + + /** + * Constructs an ExitStatusException. + * @param msg the associated message + * @param status the associated status code + */ + public ExitStatusException(String msg, int status) { + super(msg); + this.status = status; + } + + /** + * Construct an exit status exception with location information too + * @param message error message + * @param status exit status + * @param location exit location + */ + public ExitStatusException(String message, int status, Location location) { + super(message, location); + this.status = status; + } + + /** + * Get the status code. + * @return int + */ + public int getStatus() { + return status; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExtensionPoint.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExtensionPoint.java new file mode 100644 index 00000000..32c8c55e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ExtensionPoint.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * An extension point build files can provide as a place where other + * build files can add new dependencies. + * + * @since Ant 1.8.0 + */ +public class ExtensionPoint extends Target { + + public ExtensionPoint() { + } + + /** + * Cloning constructor. + * @param other the Target to clone. + */ + public ExtensionPoint(Target other) { + //Should we have a clone constructor taking an ExtensionPoint as parameter? + super(other); + } + + + private static final String NO_CHILDREN_ALLOWED + = "you must not nest child elements into an extension-point"; + + /** + * Throws an exception. + */ + @Override + public final void addTask(Task task) { + throw new BuildException(NO_CHILDREN_ALLOWED); + } + + /** + * Throws an exception. + */ + @Override + public final void addDataType(RuntimeConfigurable r) { + throw new BuildException(NO_CHILDREN_ALLOWED); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/FileScanner.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/FileScanner.java new file mode 100644 index 00000000..a7cb9dea --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/FileScanner.java @@ -0,0 +1,158 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.File; + +/** + * An interface used to describe the actions required of any type of + * directory scanner. + * + */ +public interface FileScanner { + /** + * Adds default exclusions to the current exclusions set. + */ + void addDefaultExcludes(); + + /** + * Returns the base directory to be scanned. + * This is the directory which is scanned recursively. + * + * @return the base directory to be scanned + */ + File getBasedir(); + + /** + * Returns the names of the directories which matched at least one of the + * include patterns and at least one of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the directories which matched at least one of the + * include patterns and at least one of the exclude patterns. + */ + String[] getExcludedDirectories(); + + /** + * Returns the names of the files which matched at least one of the + * include patterns and at least one of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the files which matched at least one of the + * include patterns and at least one of the exclude patterns. + * + */ + String[] getExcludedFiles(); + + /** + * Returns the names of the directories which matched at least one of the + * include patterns and none of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the directories which matched at least one of the + * include patterns and none of the exclude patterns. + */ + String[] getIncludedDirectories(); + + /** + * Returns the names of the files which matched at least one of the + * include patterns and none of the exclude patterns. + * The names are relative to the base directory. + * + * @return the names of the files which matched at least one of the + * include patterns and none of the exclude patterns. + */ + String[] getIncludedFiles(); + + /** + * Returns the names of the directories which matched none of the include + * patterns. The names are relative to the base directory. + * + * @return the names of the directories which matched none of the include + * patterns. + */ + String[] getNotIncludedDirectories(); + + /** + * Returns the names of the files which matched none of the include + * patterns. The names are relative to the base directory. + * + * @return the names of the files which matched none of the include + * patterns. + */ + String[] getNotIncludedFiles(); + + /** + * Scans the base directory for files which match at least one include + * pattern and don't match any exclude patterns. + * + * @exception IllegalStateException if the base directory was set + * incorrectly (i.e. if it is null, doesn't exist, + * or isn't a directory). + */ + void scan() throws IllegalStateException; + + /** + * Sets the base directory to be scanned. This is the directory which is + * scanned recursively. All '/' and '\' characters should be replaced by + * File.separatorChar, so the separator used need not match + * File.separatorChar. + * + * @param basedir The base directory to scan. + * Must not be null. + */ + void setBasedir(String basedir); + + /** + * Sets the base directory to be scanned. This is the directory which is + * scanned recursively. + * + * @param basedir The base directory for scanning. + * Should not be null. + */ + void setBasedir(File basedir); + + /** + * Sets the list of exclude patterns to use. + * + * @param excludes A list of exclude patterns. + * May be null, indicating that no files + * should be excluded. If a non-null list is + * given, all elements must be non-null. + */ + void setExcludes(String[] excludes); + + /** + * Sets the list of include patterns to use. + * + * @param includes A list of include patterns. + * May be null, indicating that all files + * should be included. If a non-null + * list is given, all elements must be + * non-null. + */ + void setIncludes(String[] includes); + + /** + * Sets whether or not the file system should be regarded as case sensitive. + * + * @param isCaseSensitive whether or not the file system should be + * regarded as a case sensitive one + */ + void setCaseSensitive(boolean isCaseSensitive); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/IntrospectionHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/IntrospectionHelper.java new file mode 100644 index 00000000..30086563 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/IntrospectionHelper.java @@ -0,0 +1,1745 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.apache.tools.ant.taskdefs.PreSetDef; +import org.apache.tools.ant.types.EnumeratedAttribute; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileProvider; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.util.StringUtils; + +/** + * Helper class that collects the methods a task or nested element + * holds to set attributes, create nested elements or hold PCDATA + * elements. + * + * It contains hashtables containing classes that use introspection + * to handle all the invocation of the project-component specific methods. + * + * This class is somewhat complex, as it implements the O/X mapping between + * Ant XML and Java class instances. This is not the best place for someone new + * to Ant to start contributing to the codebase, as a change here can break the + * entire system in interesting ways. Always run a full test of Ant before checking + * in/submitting changes to this file. + * + * The class is final and has a private constructor. + * To get an instance for a specific (class,project) combination, + * use {@link #getHelper(Project,Class)}. + * This may return an existing version, or a new one + * ...do not make any assumptions about its uniqueness, or its validity after the Project + * instance has finished its build. + * + */ +public final class IntrospectionHelper { + + /** + * Helper instances we've already created (Class.getName() to IntrospectionHelper). + */ + private static final Map HELPERS = new Hashtable(); + + /** + * Map from primitive types to wrapper classes for use in + * createAttributeSetter (Class to Class). Note that char + * and boolean are in here even though they get special treatment + * - this way we only need to test for the wrapper class. + */ + private static final Map, Class> PRIMITIVE_TYPE_MAP = new HashMap, Class>(8); + + // Set up PRIMITIVE_TYPE_MAP + static { + final Class[] primitives = {Boolean.TYPE, Byte.TYPE, Character.TYPE, Short.TYPE, + Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE}; + final Class[] wrappers = {Boolean.class, Byte.class, Character.class, Short.class, + Integer.class, Long.class, Float.class, Double.class}; + for (int i = 0; i < primitives.length; i++) { + PRIMITIVE_TYPE_MAP.put (primitives[i], wrappers[i]); + } + } + + private static final int MAX_REPORT_NESTED_TEXT = 20; + private static final String ELLIPSIS = "..."; + + /** + * Map from attribute names to attribute types + * (String to Class). + */ + private final Hashtable> attributeTypes = new Hashtable>(); + + /** + * Map from attribute names to attribute setter methods + * (String to AttributeSetter). + */ + private final Hashtable attributeSetters = new Hashtable(); + + /** + * Map from attribute names to nested types + * (String to Class). + */ + private final Hashtable> nestedTypes = new Hashtable>(); + + /** + * Map from attribute names to methods to create nested types + * (String to NestedCreator). + */ + private final Hashtable nestedCreators = new Hashtable(); + + /** + * Vector of methods matching add[Configured](Class) pattern. + */ + private final List addTypeMethods = new ArrayList(); + + /** + * The method to invoke to add PCDATA. + */ + private final Method addText; + + /** + * The class introspected by this instance. + */ + private final Class bean; + + /** + * Sole constructor, which is private to ensure that all + * IntrospectionHelpers are created via {@link #getHelper(Class) getHelper}. + * Introspects the given class for bean-like methods. + * Each method is examined in turn, and the following rules are applied: + *

    + *

      + *
    • If the method is Task.setLocation(Location), + * Task.setTaskType(String) + * or TaskContainer.addTask(Task), it is ignored. These + * methods are handled differently elsewhere. + *
    • void addText(String) is recognised as the method for + * adding PCDATA to a bean. + *
    • void setFoo(Bar) is recognised as a method for + * setting the value of attribute foo, so long as + * Bar is non-void and is not an array type. + * As of Ant 1.8, a Resource or FileProvider parameter overrides a java.io.File parameter; + * in practice the only effect of this is to allow objects rendered from + * the 1.8 PropertyHelper implementation to be used as Resource parameters, + * since Resources set from Strings are resolved as project-relative files + * to preserve backward compatibility. Beyond this, non-String + * parameter types always overload String parameter types; these are + * the only guarantees made in terms of priority. + *
    • Foo createBar() is recognised as a method for + * creating a nested element called bar of type + * Foo, so long as Foo is not a primitive or + * array type. + *
    • void addConfiguredFoo(Bar) is recognised as a + * method for storing a pre-configured element called + * foo and of type Bar, so long as + * Bar is not an array, primitive or String type. + * Bar must have an accessible constructor taking no + * arguments. + *
    • void addFoo(Bar) is recognised as a method for storing + * an element called foo and of type Bar, so + * long as Bar is not an array, primitive or String type. + * Bar must have an accessible constructor taking no + * arguments. This is distinct from the 'addConfigured' idiom in that + * the nested element is added to the parent immediately after it is + * constructed; in practice this means that addFoo(Bar) should + * do little or nothing with its argument besides storing it for later use. + *
    + * Note that only one method is retained to create/set/addConfigured/add + * any element or attribute. + * + * @param bean The bean type to introspect. + * Must not be null. + * + * @see #getHelper(Class) + */ + private IntrospectionHelper(final Class bean) { + this.bean = bean; + final Method[] methods = bean.getMethods(); + Method addTextMethod = null; + for (int i = 0; i < methods.length; i++) { + final Method m = methods[i]; + final String name = m.getName(); + final Class returnType = m.getReturnType(); + final Class[] args = m.getParameterTypes(); + + // check of add[Configured](Class) pattern + if (args.length == 1 && java.lang.Void.TYPE.equals(returnType) + && ("add".equals(name) || "addConfigured".equals(name))) { + insertAddTypeMethod(m); + continue; + } + // not really user settable properties on tasks/project components + if (org.apache.tools.ant.ProjectComponent.class.isAssignableFrom(bean) + && args.length == 1 && isHiddenSetMethod(name, args[0])) { + continue; + } + // hide addTask for TaskContainers + if (isContainer() && args.length == 1 && "addTask".equals(name) + && org.apache.tools.ant.Task.class.equals(args[0])) { + continue; + } + if ("addText".equals(name) && java.lang.Void.TYPE.equals(returnType) + && args.length == 1 && java.lang.String.class.equals(args[0])) { + addTextMethod = methods[i]; + } else if (name.startsWith("set") && java.lang.Void.TYPE.equals(returnType) + && args.length == 1 && !args[0].isArray()) { + final String propName = getPropertyName(name, "set"); + AttributeSetter as = attributeSetters.get(propName); + if (as != null) { + if (java.lang.String.class.equals(args[0])) { + /* + Ignore method m, as there is an overloaded + form of this method that takes in a + non-string argument, which gains higher + priority. + */ + continue; + } + if (java.io.File.class.equals(args[0])) { + // Ant Resources/FileProviders override java.io.File + if (Resource.class.equals(as.type) || FileProvider.class.equals(as.type)) { + continue; + } + } + /* + In cases other than those just explicitly covered, + we just override that with the new one. + This mechanism does not guarantee any specific order + in which the methods will be selected: so any code + that depends on the order in which "set" methods have + been defined, is not guaranteed to be selected in any + particular order. + */ + } + as = createAttributeSetter(m, args[0], propName); + if (as != null) { + attributeTypes.put(propName, args[0]); + attributeSetters.put(propName, as); + } + } else if (name.startsWith("create") && !returnType.isArray() + && !returnType.isPrimitive() && args.length == 0) { + + final String propName = getPropertyName(name, "create"); + // Check if a create of this property is already present + // add takes preference over create for CB purposes + if (nestedCreators.get(propName) == null) { + nestedTypes.put(propName, returnType); + nestedCreators.put(propName, new CreateNestedCreator(m)); + } + } else if (name.startsWith("addConfigured") + && java.lang.Void.TYPE.equals(returnType) && args.length == 1 + && !java.lang.String.class.equals(args[0]) + && !args[0].isArray() && !args[0].isPrimitive()) { + try { + Constructor constructor = null; + try { + constructor = args[0].getConstructor(); + } catch (final NoSuchMethodException ex) { + constructor = args[0].getConstructor(Project.class); + } + final String propName = getPropertyName(name, "addConfigured"); + nestedTypes.put(propName, args[0]); + nestedCreators.put(propName, new AddNestedCreator(m, + constructor, AddNestedCreator.ADD_CONFIGURED)); + } catch (final NoSuchMethodException nse) { + // ignore + } + } else if (name.startsWith("add") + && java.lang.Void.TYPE.equals(returnType) && args.length == 1 + && !java.lang.String.class.equals(args[0]) + && !args[0].isArray() && !args[0].isPrimitive()) { + try { + Constructor constructor = null; + try { + constructor = args[0].getConstructor(); + } catch (final NoSuchMethodException ex) { + constructor = args[0].getConstructor(Project.class); + } + final String propName = getPropertyName(name, "add"); + if (nestedTypes.get(propName) != null) { + /* + * Ignore this method as there is an addConfigured + * form of this method that has a higher + * priority + */ + continue; + } + nestedTypes.put(propName, args[0]); + nestedCreators.put(propName, new AddNestedCreator(m, + constructor, AddNestedCreator.ADD)); + } catch (final NoSuchMethodException nse) { + // ignore + } + } + } + addText = addTextMethod; + } + + /** + * Certain set methods are part of the Ant core interface to tasks and + * therefore not to be considered for introspection + * + * @param name the name of the set method + * @param type the type of the set method's parameter + * @return true if the given set method is to be hidden. + */ + private boolean isHiddenSetMethod(final String name, final Class type) { + if ("setLocation".equals(name) && org.apache.tools.ant.Location.class.equals(type)) { + return true; + } + if ("setTaskType".equals(name) && java.lang.String.class.equals(type)) { + return true; + } + return false; + } + + /** + * Returns a helper for the given class, either from the cache + * or by creating a new instance. + * + * @param c The class for which a helper is required. + * Must not be null. + * + * @return a helper for the specified class + */ + public static synchronized IntrospectionHelper getHelper(final Class c) { + return getHelper(null, c); + } + + /** + * Returns a helper for the given class, either from the cache + * or by creating a new instance. + * + * The method will make sure the helper will be cleaned up at the end of + * the project, and only one instance will be created for each class. + * + * @param p the project instance. Can be null, in which case the helper is not cached. + * @param c The class for which a helper is required. + * Must not be null. + * + * @return a helper for the specified class + */ + public static synchronized IntrospectionHelper getHelper(final Project p, final Class c) { + IntrospectionHelper ih = HELPERS.get(c.getName()); + // If a helper cannot be found, or if the helper is for another + // classloader, create a new IH + if (ih == null || ih.bean != c) { + ih = new IntrospectionHelper(c); + if (p != null) { + // #30162: do *not* cache this if there is no project, as we + // cannot guarantee that the cache will be cleared. + HELPERS.put(c.getName(), ih); + } + } + return ih; + } + + /** + * Sets the named attribute in the given element, which is part of the + * given project. + * + * @param p The project containing the element. This is used when files + * need to be resolved. Must not be null. + * @param element The element to set the attribute in. Must not be + * null. + * @param attributeName The name of the attribute to set. Must not be + * null. + * @param value The value to set the attribute to. This may be interpreted + * or converted to the necessary type if the setter method + * doesn't accept an object of the supplied type. + * + * @exception BuildException if the introspected class doesn't support + * the given attribute, or if the setting + * method fails. + */ + public void setAttribute(final Project p, final Object element, final String attributeName, + final Object value) throws BuildException { + final AttributeSetter as = attributeSetters.get( + attributeName.toLowerCase(Locale.ENGLISH)); + if (as == null && value != null) { + if (element instanceof DynamicAttributeNS) { + final DynamicAttributeNS dc = (DynamicAttributeNS) element; + final String uriPlusPrefix = ProjectHelper.extractUriFromComponentName(attributeName); + final String uri = ProjectHelper.extractUriFromComponentName(uriPlusPrefix); + final String localName = ProjectHelper.extractNameFromComponentName(attributeName); + final String qName = "".equals(uri) ? localName : uri + ":" + localName; + dc.setDynamicAttribute(uri, localName, qName, value.toString()); + return; + } + if (element instanceof DynamicObjectAttribute) { + final DynamicObjectAttribute dc = (DynamicObjectAttribute) element; + dc.setDynamicAttribute(attributeName.toLowerCase(Locale.ENGLISH), value); + return; + } + if (element instanceof DynamicAttribute) { + final DynamicAttribute dc = (DynamicAttribute) element; + dc.setDynamicAttribute(attributeName.toLowerCase(Locale.ENGLISH), value.toString()); + return; + } + if (attributeName.indexOf(':') >= 0) { + return; // Ignore attribute from unknown uri's + } + final String msg = getElementName(p, element) + + " doesn't support the \"" + attributeName + "\" attribute."; + throw new UnsupportedAttributeException(msg, attributeName); + } + try { + as.setObject(p, element, value); + } catch (final IllegalAccessException ie) { + // impossible as getMethods should only return public methods + throw new BuildException(ie); + } catch (final InvocationTargetException ite) { + throw extractBuildException(ite); + } + } + + /** + * Sets the named attribute in the given element, which is part of the + * given project. + * + * @param p The project containing the element. This is used when files + * need to be resolved. Must not be null. + * @param element The element to set the attribute in. Must not be + * null. + * @param attributeName The name of the attribute to set. Must not be + * null. + * @param value The value to set the attribute to. This may be interpreted + * or converted to the necessary type if the setter method + * doesn't just take a string. Must not be null. + * + * @exception BuildException if the introspected class doesn't support + * the given attribute, or if the setting + * method fails. + */ + public void setAttribute(final Project p, final Object element, final String attributeName, + final String value) throws BuildException { + setAttribute(p, element, attributeName, (Object) value); + } + + /** + * Adds PCDATA to an element, using the element's + * void addText(String) method, if it has one. If no + * such method is present, a BuildException is thrown if the + * given text contains non-whitespace. + * + * @param project The project which the element is part of. + * Must not be null. + * @param element The element to add the text to. + * Must not be null. + * @param text The text to add. + * Must not be null. + * + * @exception BuildException if non-whitespace text is provided and no + * method is available to handle it, or if + * the handling method fails. + */ + public void addText(final Project project, final Object element, String text) + throws BuildException { + if (addText == null) { + text = text.trim(); + // Element doesn't handle text content + if (text.length() == 0) { + // Only whitespace - ignore + return; + } + // Not whitespace - fail + throw new BuildException(project.getElementName(element) + + " doesn't support nested text data (\"" + condenseText(text) + "\")."); + } + try { + addText.invoke(element, new Object[] {text}); + } catch (final IllegalAccessException ie) { + // impossible as getMethods should only return public methods + throw new BuildException(ie); + } catch (final InvocationTargetException ite) { + throw extractBuildException(ite); + } + } + + /** + * part of the error message created by {@link #throwNotSupported + * throwNotSupported}. + * @since Ant 1.8.0 + */ + protected static final String NOT_SUPPORTED_CHILD_PREFIX = + " doesn't support the nested \""; + + /** + * part of the error message created by {@link #throwNotSupported + * throwNotSupported}. + * @since Ant 1.8.0 + */ + protected static final String NOT_SUPPORTED_CHILD_POSTFIX = "\" element."; + + /** + * Utility method to throw a NotSupported exception + * + * @param project the Project instance. + * @param parent the object which doesn't support a requested element + * @param elementName the name of the Element which is trying to be created. + */ + public void throwNotSupported(final Project project, final Object parent, final String elementName) { + final String msg = project.getElementName(parent) + + NOT_SUPPORTED_CHILD_PREFIX + elementName + + NOT_SUPPORTED_CHILD_POSTFIX; + throw new UnsupportedElementException(msg, elementName); + } + + /** + * Get the specific NestedCreator for a given project/parent/element combination + * @param project ant project + * @param parentUri URI of the parent. + * @param parent the parent class + * @param elementName element to work with. This can contain + * a URI,localname tuple of of the form uri:localname + * @param child the bit of XML to work with + * @return a nested creator that can handle the child elements. + * @throws BuildException if the parent does not support child elements of that name + */ + private NestedCreator getNestedCreator( + final Project project, String parentUri, final Object parent, + final String elementName, final UnknownElement child) throws BuildException { + + String uri = ProjectHelper.extractUriFromComponentName(elementName); + final String name = ProjectHelper.extractNameFromComponentName(elementName); + + if (uri.equals(ProjectHelper.ANT_CORE_URI)) { + uri = ""; + } + if (parentUri.equals(ProjectHelper.ANT_CORE_URI)) { + parentUri = ""; + } + NestedCreator nc = null; + if (uri.equals(parentUri) || uri.length() == 0) { + nc = nestedCreators.get(name.toLowerCase(Locale.ENGLISH)); + } + if (nc == null) { + nc = createAddTypeCreator(project, parent, elementName); + } + if (nc == null && + (parent instanceof DynamicElementNS + || parent instanceof DynamicElement) + ) { + final String qName = child == null ? name : child.getQName(); + final Object nestedElement = + createDynamicElement(parent, + child == null ? "" : child.getNamespace(), + name, qName); + if (nestedElement != null) { + nc = new NestedCreator(null) { + @Override + Object create(final Project project, final Object parent, final Object ignore) { + return nestedElement; + } + }; + } + } + if (nc == null) { + throwNotSupported(project, parent, elementName); + } + return nc; + } + + /** + * Invokes the "correct" createDynamicElement method on parent in + * order to obtain a child element by name. + * + * @since Ant 1.8.0. + */ + private Object createDynamicElement(final Object parent, final String ns, + final String localName, final String qName) { + Object nestedElement = null; + if (parent instanceof DynamicElementNS) { + final DynamicElementNS dc = (DynamicElementNS) parent; + nestedElement = dc.createDynamicElement(ns, localName, qName); + } + if (nestedElement == null && parent instanceof DynamicElement) { + final DynamicElement dc = (DynamicElement) parent; + nestedElement = + dc.createDynamicElement(localName.toLowerCase(Locale.ENGLISH)); + } + return nestedElement; + } + + /** + * Creates a named nested element. Depending on the results of the + * initial introspection, either a method in the given parent instance + * or a simple no-arg constructor is used to create an instance of the + * specified element type. + * + * @param project Project to which the parent object belongs. + * Must not be null. If the resulting + * object is an instance of ProjectComponent, its + * Project reference is set to this parameter value. + * @param parent Parent object used to create the instance. + * Must not be null. + * @param elementName Name of the element to create an instance of. + * Must not be null. + * + * @return an instance of the specified element type + * @deprecated since 1.6.x. + * This is not a namespace aware method. + * + * @exception BuildException if no method is available to create the + * element instance, or if the creating method fails. + */ + @Deprecated + public Object createElement(final Project project, final Object parent, final String elementName) + throws BuildException { + final NestedCreator nc = getNestedCreator(project, "", parent, elementName, null); + try { + final Object nestedElement = nc.create(project, parent, null); + if (project != null) { + project.setProjectReference(nestedElement); + } + return nestedElement; + } catch (final IllegalAccessException ie) { + // impossible as getMethods should only return public methods + throw new BuildException(ie); + } catch (final InstantiationException ine) { + // impossible as getMethods should only return public methods + throw new BuildException(ine); + } catch (final InvocationTargetException ite) { + throw extractBuildException(ite); + } + } + + /** + * returns an object that creates and stores an object + * for an element of a parent. + * + * @param project Project to which the parent object belongs. + * @param parentUri The namespace uri of the parent object. + * @param parent Parent object used to create the creator object to + * create and store and instance of a subelement. + * @param elementName Name of the element to create an instance of. + * @param ue The unknown element associated with the element. + * @return a creator object to create and store the element instance. + */ + public Creator getElementCreator( + final Project project, final String parentUri, final Object parent, final String elementName, final UnknownElement ue) { + final NestedCreator nc = getNestedCreator(project, parentUri, parent, elementName, ue); + return new Creator(project, parent, nc); + } + + /** + * Indicates whether the introspected class is a dynamic one, + * supporting arbitrary nested elements and/or attributes. + * + * @return
    true if the introspected class is dynamic; + * false otherwise.
    + * @since Ant 1.6.3 + * + * @see DynamicElement + * @see DynamicElementNS + */ + public boolean isDynamic() { + return DynamicElement.class.isAssignableFrom(bean) + || DynamicElementNS.class.isAssignableFrom(bean); + } + + /** + * Indicates whether the introspected class is a task container, + * supporting arbitrary nested tasks/types. + * + * @return true if the introspected class is a container; + * false otherwise. + * @since Ant 1.6.3 + * + * @see TaskContainer + */ + public boolean isContainer() { + return TaskContainer.class.isAssignableFrom(bean); + } + + /** + * Indicates if this element supports a nested element of the + * given name. + * + * @param elementName the name of the nested element being checked + * + * @return true if the given nested element is supported + */ + public boolean supportsNestedElement(final String elementName) { + return supportsNestedElement("", elementName); + } + + /** + * Indicate if this element supports a nested element of the + * given name. + * + *

    Note that this method will always return true if the + * introspected class is {@link #isDynamic dynamic} or contains a + * method named "add" with void return type and a single argument. + * To ge a more thorough answer, use the four-arg version of this + * method instead.

    + * + * @param parentUri the uri of the parent + * @param elementName the name of the nested element being checked + * + * @return true if the given nested element is supported + */ + public boolean supportsNestedElement(final String parentUri, final String elementName) { + if (isDynamic() || addTypeMethods.size() > 0) { + return true; + } + return supportsReflectElement(parentUri, elementName); + } + + /** + * Indicate if this element supports a nested element of the + * given name. + * + *

    Note that this method will always return true if the + * introspected class is {@link #isDynamic dynamic}, so be + * prepared to catch an exception about unsupported children when + * calling {@link #getElementCreator getElementCreator}.

    + * + * @param parentUri the uri of the parent + * @param elementName the name of the nested element being checked + * @param project currently executing project instance + * @param parent the parent element + * + * @return true if the given nested element is supported + * @since Ant 1.8.0. + */ + public boolean supportsNestedElement(final String parentUri, final String elementName, + final Project project, final Object parent) { + if (addTypeMethods.size() > 0 + && createAddTypeCreator(project, parent, elementName) != null) { + return true; + } + return isDynamic() || supportsReflectElement(parentUri, elementName); + } + + /** + * Check if this element supports a nested element from reflection. + * + * @param parentUri the uri of the parent + * @param elementName the name of the nested element being checked + * + * @return true if the given nested element is supported + * @since Ant 1.8.0 + */ + public boolean supportsReflectElement( + String parentUri, final String elementName) { + final String name = ProjectHelper.extractNameFromComponentName(elementName); + if (!nestedCreators.containsKey(name.toLowerCase(Locale.ENGLISH))) { + return false; + } + String uri = ProjectHelper.extractUriFromComponentName(elementName); + if (uri.equals(ProjectHelper.ANT_CORE_URI)) { + uri = ""; + } + if ("".equals(uri)) { + return true; + } + if (parentUri.equals(ProjectHelper.ANT_CORE_URI)) { + parentUri = ""; + } + return uri.equals(parentUri); + } + + /** + * Stores a named nested element using a storage method determined + * by the initial introspection. If no appropriate storage method + * is available, this method returns immediately. + * + * @param project Ignored in this implementation. + * May be null. + * + * @param parent Parent instance to store the child in. + * Must not be null. + * + * @param child Child instance to store in the parent. + * Should not be null. + * + * @param elementName Name of the child element to store. + * May be null, in which case + * this method returns immediately. + * + * @exception BuildException if the storage method fails. + */ + public void storeElement(final Project project, final Object parent, final Object child, + final String elementName) throws BuildException { + if (elementName == null) { + return; + } + final NestedCreator ns = nestedCreators.get(elementName.toLowerCase(Locale.ENGLISH)); + if (ns == null) { + return; + } + try { + ns.store(parent, child); + } catch (final IllegalAccessException ie) { + // impossible as getMethods should only return public methods + throw new BuildException(ie); + } catch (final InstantiationException ine) { + // impossible as getMethods should only return public methods + throw new BuildException(ine); + } catch (final InvocationTargetException ite) { + throw extractBuildException(ite); + } + } + + /** + * Helper method to extract the inner fault from an {@link InvocationTargetException}, and turn + * it into a BuildException. If it is already a BuildException, it is type cast and returned; if + * not a new BuildException is created containing the child as nested text. + * @param ite + * @return the nested exception + */ + private static BuildException extractBuildException(final InvocationTargetException ite) { + final Throwable t = ite.getTargetException(); + if (t instanceof BuildException) { + return (BuildException) t; + } + return new BuildException(t); + } + + /** + * Returns the type of a named nested element. + * + * @param elementName The name of the element to find the type of. + * Must not be null. + * + * @return the type of the nested element with the specified name. + * This will never be null. + * + * @exception BuildException if the introspected class does not + * support the named nested element. + */ + public Class getElementType(final String elementName) throws BuildException { + final Class nt = nestedTypes.get(elementName); + if (nt == null) { + throw new UnsupportedElementException("Class " + + bean.getName() + " doesn't support the nested \"" + + elementName + "\" element.", elementName); + } + return nt; + } + + /** + * Returns the type of a named attribute. + * + * @param attributeName The name of the attribute to find the type of. + * Must not be null. + * + * @return the type of the attribute with the specified name. + * This will never be null. + * + * @exception BuildException if the introspected class does not + * support the named attribute. + */ + public Class getAttributeType(final String attributeName) throws BuildException { + final Class at = attributeTypes.get(attributeName); + if (at == null) { + throw new UnsupportedAttributeException("Class " + + bean.getName() + " doesn't support the \"" + + attributeName + "\" attribute.", attributeName); + } + return at; + } + + /** + * Returns the addText method when the introspected + * class supports nested text. + * + * @return the method on this introspected class that adds nested text. + * Cannot be null. + * @throws BuildException if the introspected class does not + * support the nested text. + * @since Ant 1.6.3 + */ + public Method getAddTextMethod() throws BuildException { + if (!supportsCharacters()) { + throw new BuildException("Class " + bean.getName() + + " doesn't support nested text data."); + } + return addText; + } + + /** + * Returns the adder or creator method of a named nested element. + * + * @param elementName The name of the attribute to find the setter + * method of. Must not be null. + * @return the method on this introspected class that adds or creates this + * nested element. Can be null when the introspected + * class is a dynamic configurator! + * @throws BuildException if the introspected class does not + * support the named nested element. + * @since Ant 1.6.3 + */ + public Method getElementMethod(final String elementName) throws BuildException { + final Object creator = nestedCreators.get(elementName); + if (creator == null) { + throw new UnsupportedElementException("Class " + + bean.getName() + " doesn't support the nested \"" + + elementName + "\" element.", elementName); + } + return ((NestedCreator) creator).method; + } + + /** + * Returns the setter method of a named attribute. + * + * @param attributeName The name of the attribute to find the setter + * method of. Must not be null. + * @return the method on this introspected class that sets this attribute. + * This will never be null. + * @throws BuildException if the introspected class does not + * support the named attribute. + * @since Ant 1.6.3 + */ + public Method getAttributeMethod(final String attributeName) throws BuildException { + final Object setter = attributeSetters.get(attributeName); + if (setter == null) { + throw new UnsupportedAttributeException("Class " + + bean.getName() + " doesn't support the \"" + + attributeName + "\" attribute.", attributeName); + } + return ((AttributeSetter) setter).method; + } + + /** + * Returns whether or not the introspected class supports PCDATA. + * + * @return whether or not the introspected class supports PCDATA. + */ + public boolean supportsCharacters() { + return addText != null; + } + + /** + * Returns an enumeration of the names of the attributes supported by the introspected class. + * + * @return an enumeration of the names of the attributes supported by the introspected class. + * @see #getAttributeMap + */ + public Enumeration getAttributes() { + return attributeSetters.keys(); + } + + /** + * Returns a read-only map of attributes supported by the introspected class. + * + * @return an attribute name to attribute Class + * unmodifiable map. Can be empty, but never null. + * @since Ant 1.6.3 + */ + public Map> getAttributeMap() { + return attributeTypes.isEmpty() + ? Collections.> emptyMap() : Collections.unmodifiableMap(attributeTypes); + } + + /** + * Returns an enumeration of the names of the nested elements supported + * by the introspected class. + * + * @return an enumeration of the names of the nested elements supported + * by the introspected class. + * @see #getNestedElementMap + */ + public Enumeration getNestedElements() { + return nestedTypes.keys(); + } + + /** + * Returns a read-only map of nested elements supported + * by the introspected class. + * + * @return a nested-element name to nested-element Class + * unmodifiable map. Can be empty, but never null. + * @since Ant 1.6.3 + */ + public Map> getNestedElementMap() { + return nestedTypes.isEmpty() + ? Collections.> emptyMap() : Collections.unmodifiableMap(nestedTypes); + } + + /** + * Returns a read-only list of extension points supported + * by the introspected class. + *

    + * A task/type or nested element with void methods named add() + * or addConfigured(), taking a single class or interface + * argument, supports extensions point. This method returns the list of + * all these void add[Configured](type) methods. + * + * @return a list of void, single argument add() or addConfigured() + * Methods of all supported extension points. + * These methods are sorted such that if the argument type of a + * method derives from another type also an argument of a method + * of this list, the method with the most derived argument will + * always appear first. Can be empty, but never null. + * @since Ant 1.6.3 + */ + public List getExtensionPoints() { + return addTypeMethods.isEmpty() + ? Collections. emptyList() : Collections.unmodifiableList(addTypeMethods); + } + + /** + * Creates an implementation of AttributeSetter for the given + * attribute type. Conversions (where necessary) are automatically + * made for the following types: + *

      + *
    • String (left as it is) + *
    • Character/char (first character is used) + *
    • Boolean/boolean + * ({@link Project#toBoolean(String) Project.toBoolean(String)} is used) + *
    • Class (Class.forName is used) + *
    • File (resolved relative to the appropriate project) + *
    • Path (resolve relative to the appropriate project) + *
    • Resource (resolved as a FileResource relative to the appropriate project) + *
    • FileProvider (resolved as a FileResource relative to the appropriate project) + *
    • EnumeratedAttribute (uses its own + * {@link EnumeratedAttribute#setValue(String) setValue} method) + *
    • Other primitive types (wrapper classes are used with constructors + * taking String) + *
    + * + * If none of the above covers the given parameters, a constructor for the + * appropriate class taking a String parameter is used if it is available. + * + * @param m The method to invoke on the bean when the setter is invoked. + * Must not be null. + * @param arg The type of the single argument of the bean's method. + * Must not be null. + * @param attrName the name of the attribute for which the setter is being + * created. + * + * @return an appropriate AttributeSetter instance, or null + * if no appropriate conversion is available. + */ + private AttributeSetter createAttributeSetter(final Method m, + final Class arg, + final String attrName) { + // use wrappers for primitive classes, e.g. int and + // Integer are treated identically + final Class reflectedArg = PRIMITIVE_TYPE_MAP.containsKey(arg) + ? PRIMITIVE_TYPE_MAP.get(arg) : arg; + + // Object.class - it gets handled differently by AttributeSetter + if (java.lang.Object.class == reflectedArg) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, + IllegalAccessException { + throw new BuildException( + "Internal ant problem - this should not get called"); + } + }; + } + // simplest case - setAttribute expects String + if (java.lang.String.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException { + m.invoke(parent, (Object[]) new String[] {value}); + } + }; + } + // char and Character get special treatment - take the first character + if (java.lang.Character.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException { + if (value.length() == 0) { + throw new BuildException("The value \"\" is not a " + + "legal value for attribute \"" + attrName + "\""); + } + m.invoke(parent, (Object[]) new Character[] {new Character(value.charAt(0))}); + } + }; + } + // boolean and Boolean get special treatment because we have a nice method in Project + if (java.lang.Boolean.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException { + m.invoke(parent, (Object[]) new Boolean[] { + Project.toBoolean(value) ? Boolean.TRUE : Boolean.FALSE }); + } + }; + } + // Class doesn't have a String constructor but a decent factory method + if (java.lang.Class.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException, BuildException { + try { + m.invoke(parent, new Object[] {Class.forName(value)}); + } catch (final ClassNotFoundException ce) { + throw new BuildException(ce); + } + } + }; + } + // resolve relative paths through Project + if (java.io.File.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException { + m.invoke(parent, new Object[] {p.resolveFile(value)}); + } + }; + } + // resolve Resources/FileProviders as FileResources relative to Project: + if (Resource.class.equals(reflectedArg) || FileProvider.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + void set(final Project p, final Object parent, final String value) throws InvocationTargetException, + IllegalAccessException, BuildException { + m.invoke(parent, new Object[] {new FileResource(p, p.resolveFile(value))}); + }; + }; + } + // EnumeratedAttributes have their own helper class + if (EnumeratedAttribute.class.isAssignableFrom(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException, BuildException { + try { + final EnumeratedAttribute ea = (EnumeratedAttribute) reflectedArg.newInstance(); + ea.setValue(value); + m.invoke(parent, new Object[] {ea}); + } catch (final InstantiationException ie) { + throw new BuildException(ie); + } + } + }; + } + + final AttributeSetter setter = getEnumSetter(reflectedArg, m, arg); + if (setter != null) { + return setter; + } + + if (java.lang.Long.class.equals(reflectedArg)) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException, BuildException { + try { + m.invoke(parent, new Object[] { + new Long(StringUtils.parseHumanSizes(value)) }); + } catch (final NumberFormatException e) { + throw new BuildException("Can't assign non-numeric" + + " value '" + value + "' to" + + " attribute " + attrName); + } catch (final InvocationTargetException e) { + throw e; + } catch (final IllegalAccessException e) { + throw e; + } catch (final Exception e) { + throw new BuildException(e); + } + } + }; + } + // worst case. look for a public String constructor and use it + // also supports new Whatever(Project, String) as for Path or Reference + // This is used (deliberately) for all primitives/wrappers other than + // char, boolean, and long. + boolean includeProject; + Constructor c; + try { + // First try with Project. + c = reflectedArg.getConstructor(Project.class, String.class); + includeProject = true; + } catch (final NoSuchMethodException nme) { + // OK, try without. + try { + c = reflectedArg.getConstructor(String.class); + includeProject = false; + } catch (final NoSuchMethodException nme2) { + // Well, no matching constructor. + return null; + } + } + final boolean finalIncludeProject = includeProject; + final Constructor finalConstructor = c; + + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException, BuildException { + try { + final Object[] args = finalIncludeProject + ? new Object[] {p, value} : new Object[] {value}; + + final Object attribute = finalConstructor.newInstance(args); + if (p != null) { + p.setProjectReference(attribute); + } + m.invoke(parent, new Object[] {attribute}); + } catch (final InvocationTargetException e) { + final Throwable cause = e.getCause(); + if (cause instanceof IllegalArgumentException) { + throw new BuildException("Can't assign value '" + value + + "' to attribute " + attrName + + ", reason: " + + cause.getClass() + + " with message '" + + cause.getMessage() + "'"); + } + throw e; + } catch (final InstantiationException ie) { + throw new BuildException(ie); + } + } + }; + } + + private AttributeSetter getEnumSetter( + final Class reflectedArg, final Method m, final Class arg) { + if (reflectedArg.isEnum()) { + return new AttributeSetter(m, arg) { + @Override + public void set(final Project p, final Object parent, final String value) + throws InvocationTargetException, IllegalAccessException, + BuildException { + Enum setValue; + try { + @SuppressWarnings({ "unchecked", "rawtypes" }) + final Enum enumValue = Enum.valueOf((Class) reflectedArg, + value); + setValue = enumValue; + } catch (final IllegalArgumentException e) { + //there is specific logic here for the value + // being out of the allowed set of enumerations. + throw new BuildException("'" + value + "' is not a permitted value for " + + reflectedArg.getName()); + } + m.invoke(parent, setValue); + } + }; + } + return null; + } + + /** + * Returns a description of the type of the given element in + * relation to a given project. This is used for logging purposes + * when the element is asked to cope with some data it has no way of handling. + * + * @param project The project the element is defined in. Must not be null. + * + * @param element The element to describe. Must not be null. + * + * @return a description of the element type + */ + private String getElementName(final Project project, final Object element) { + return project.getElementName(element); + } + + /** + * Extracts the name of a property from a method name by subtracting + * a given prefix and converting into lower case. It is up to calling + * code to make sure the method name does actually begin with the + * specified prefix - no checking is done in this method. + * + * @param methodName The name of the method in question. Must not be null. + * @param prefix The prefix to remove. Must not be null. + * + * @return the lower-cased method name with the prefix removed. + */ + private static String getPropertyName(final String methodName, final String prefix) { + return methodName.substring(prefix.length()).toLowerCase(Locale.ENGLISH); + } + + /** + * creator - allows use of create/store external + * to IntrospectionHelper. + * The class is final as it has a private constructor. + */ + public static final class Creator { + private final NestedCreator nestedCreator; + private final Object parent; + private final Project project; + private Object nestedObject; + private String polyType; + + /** + * Creates a new Creator instance. + * This object is given to the UnknownElement to create + * objects for sub-elements. UnknownElement calls + * create to create an object, the object then gets + * configured and then UnknownElement calls store. + * SetPolyType may be used to override the type used + * to create the object with. SetPolyType gets called before create. + * + * @param project the current project + * @param parent the parent object to create the object in + * @param nestedCreator the nested creator object to use + */ + private Creator(final Project project, final Object parent, final NestedCreator nestedCreator) { + this.project = project; + this.parent = parent; + this.nestedCreator = nestedCreator; + } + + /** + * Used to override the class used to create the object. + * + * @param polyType a ant component type name + */ + public void setPolyType(final String polyType) { + this.polyType = polyType; + } + + /** + * Create an object using this creator, which is determined by introspection. + * + * @return the created object + */ + public Object create() { + if (polyType != null) { + if (!nestedCreator.isPolyMorphic()) { + throw new BuildException( + "Not allowed to use the polymorphic form for this element"); + } + final ComponentHelper helper = ComponentHelper.getComponentHelper(project); + nestedObject = helper.createComponent(polyType); + if (nestedObject == null) { + throw new BuildException("Unable to create object of type " + polyType); + } + } + try { + nestedObject = nestedCreator.create(project, parent, nestedObject); + if (project != null) { + project.setProjectReference(nestedObject); + } + return nestedObject; + } catch (final IllegalAccessException ex) { + throw new BuildException(ex); + } catch (final InstantiationException ex) { + throw new BuildException(ex); + } catch (final IllegalArgumentException ex) { + if (polyType == null) { + throw ex; + } + throw new BuildException("Invalid type used " + polyType); + } catch (final InvocationTargetException ex) { + throw extractBuildException(ex); + } + } + + /** + * @return the real object (used currently only for presetdef). + */ + public Object getRealObject() { + return nestedCreator.getRealObject(); + } + + /** + * Stores the nested element object using a storage method determined by introspection. + * + */ + public void store() { + try { + nestedCreator.store(parent, nestedObject); + } catch (final IllegalAccessException ex) { + throw new BuildException(ex); + } catch (final InstantiationException ex) { + throw new BuildException(ex); + } catch (final IllegalArgumentException ex) { + if (polyType == null) { + throw ex; + } + throw new BuildException("Invalid type used " + polyType); + } catch (final InvocationTargetException ex) { + throw extractBuildException(ex); + } + } + } + + /** + * Internal interface used to create nested elements. Not documented + * in detail for reasons of source code readability. + */ + private abstract static class NestedCreator { + private final Method method; // the method called to add/create the nested element + + protected NestedCreator(final Method m) { + method = m; + } + Method getMethod() { + return method; + } + boolean isPolyMorphic() { + return false; + } + Object getRealObject() { + return null; + } + abstract Object create(Project project, Object parent, Object child) + throws InvocationTargetException, IllegalAccessException, InstantiationException; + + void store(final Object parent, final Object child) + throws InvocationTargetException, IllegalAccessException, InstantiationException { + // DO NOTHING + } + } + + private static class CreateNestedCreator extends NestedCreator { + CreateNestedCreator(final Method m) { + super(m); + } + + @Override + Object create(final Project project, final Object parent, final Object ignore) + throws InvocationTargetException, IllegalAccessException { + return getMethod().invoke(parent, new Object[] {}); + } + } + + /** Version to use for addXXX and addConfiguredXXX */ + private static class AddNestedCreator extends NestedCreator { + + static final int ADD = 1; + static final int ADD_CONFIGURED = 2; + + private final Constructor constructor; + private final int behavior; // ADD or ADD_CONFIGURED + + AddNestedCreator(final Method m, final Constructor c, final int behavior) { + super(m); + this.constructor = c; + this.behavior = behavior; + } + + @Override + boolean isPolyMorphic() { + return true; + } + + @Override + Object create(final Project project, final Object parent, Object child) + throws InvocationTargetException, IllegalAccessException, InstantiationException { + if (child == null) { + child = constructor.newInstance( + constructor.getParameterTypes().length == 0 + ? new Object[] {} : new Object[] {project}); + } + if (child instanceof PreSetDef.PreSetDefinition) { + child = ((PreSetDef.PreSetDefinition) child).createObject(project); + } + if (behavior == ADD) { + istore(parent, child); + } + return child; + } + + @Override + void store(final Object parent, final Object child) + throws InvocationTargetException, IllegalAccessException, InstantiationException { + if (behavior == ADD_CONFIGURED) { + istore(parent, child); + } + } + + private void istore(final Object parent, final Object child) + throws InvocationTargetException, IllegalAccessException, InstantiationException { + getMethod().invoke(parent, new Object[] {child}); + } + } + + /** + * Internal interface used to setting element attributes. Not documented + * in detail for reasons of source code readability. + */ + private abstract static class AttributeSetter { + private final Method method; // the method called to set the attribute + private final Class type; + protected AttributeSetter(final Method m, final Class type) { + method = m; + this.type = type; + } + void setObject(final Project p, final Object parent, final Object value) + throws InvocationTargetException, IllegalAccessException, BuildException { + if (type != null) { + Class useType = type; + if (type.isPrimitive()) { + if (value == null) { + throw new BuildException( + "Attempt to set primitive " + + getPropertyName(method.getName(), "set") + + " to null on " + parent); + } + useType = PRIMITIVE_TYPE_MAP.get(type); + } + if (value == null || useType.isInstance(value)) { + method.invoke(parent, new Object[] {value}); + return; + } + } + set(p, parent, value.toString()); + } + abstract void set(Project p, Object parent, String value) + throws InvocationTargetException, IllegalAccessException, BuildException; + } + + /** + * Clears the static cache of on build finished. + */ + public static synchronized void clearCache() { + HELPERS.clear(); + } + + /** + * Create a NestedCreator for the given element. + * @param project owning project + * @param parent Parent object used to create the instance. + * @param elementName name of the element + * @return a nested creator, or null if there is no component of the given name, or it + * has no matching add type methods + * @throws BuildException + */ + private NestedCreator createAddTypeCreator( + final Project project, final Object parent, final String elementName) throws BuildException { + if (addTypeMethods.size() == 0) { + return null; + } + final ComponentHelper helper = ComponentHelper.getComponentHelper(project); + + final MethodAndObject restricted = createRestricted( + helper, elementName, addTypeMethods); + final MethodAndObject topLevel = createTopLevel( + helper, elementName, addTypeMethods); + + if (restricted == null && topLevel == null) { + return null; + } + + if (restricted != null && topLevel != null) { + throw new BuildException( + "ambiguous: type and component definitions for " + + elementName); + } + + final MethodAndObject methodAndObject + = restricted != null ? restricted : topLevel; + + Object rObject = methodAndObject.object; + if (methodAndObject.object instanceof PreSetDef.PreSetDefinition) { + rObject = ((PreSetDef.PreSetDefinition) methodAndObject.object) + .createObject(project); + } + final Object nestedObject = methodAndObject.object; + final Object realObject = rObject; + + return new NestedCreator(methodAndObject.method) { + @Override + Object create(final Project project, final Object parent, final Object ignore) + throws InvocationTargetException, IllegalAccessException { + if (!getMethod().getName().endsWith("Configured")) { + getMethod().invoke(parent, new Object[] {realObject}); + } + return nestedObject; + } + + @Override + Object getRealObject() { + return realObject; + } + + @Override + void store(final Object parent, final Object child) throws InvocationTargetException, + IllegalAccessException, InstantiationException { + if (getMethod().getName().endsWith("Configured")) { + getMethod().invoke(parent, new Object[] {realObject}); + } + } + }; + } + + /** + * Inserts an add or addConfigured method into + * the addTypeMethods array. The array is + * ordered so that the more derived classes are first. + * If both add and addConfigured are present, the addConfigured will take priority. + * @param method the Method to insert. + */ + private void insertAddTypeMethod(final Method method) { + final Class argClass = method.getParameterTypes()[0]; + final int size = addTypeMethods.size(); + for (int c = 0; c < size; ++c) { + final Method current = addTypeMethods.get(c); + if (current.getParameterTypes()[0].equals(argClass)) { + if (method.getName().equals("addConfigured")) { + // add configured replaces the add method + addTypeMethods.set(c, method); + } + return; // Already present + } + if (current.getParameterTypes()[0].isAssignableFrom(argClass)) { + addTypeMethods.add(c, method); + return; // higher derived + } + } + addTypeMethods.add(method); + } + + /** + * Search the list of methods to find the first method + * that has a parameter that accepts the nested element object. + * @param paramClass the Class type to search for. + * @param methods the List of methods to search. + * @return a matching Method; null if none found. + */ + private Method findMatchingMethod(final Class paramClass, final List methods) { + if (paramClass == null) { + return null; + } + Class matchedClass = null; + Method matchedMethod = null; + + final int size = methods.size(); + for (int i = 0; i < size; ++i) { + final Method method = methods.get(i); + final Class methodClass = method.getParameterTypes()[0]; + if (methodClass.isAssignableFrom(paramClass)) { + if (matchedClass == null) { + matchedClass = methodClass; + matchedMethod = method; + } else if (!methodClass.isAssignableFrom(matchedClass)) { + throw new BuildException("ambiguous: types " + matchedClass.getName() + " and " + + methodClass.getName() + " match " + paramClass.getName()); + } + } + } + return matchedMethod; + } + + private String condenseText(final String text) { + if (text.length() <= MAX_REPORT_NESTED_TEXT) { + return text; + } + final int ends = (MAX_REPORT_NESTED_TEXT - ELLIPSIS.length()) / 2; + return new StringBuffer(text).replace(ends, text.length() - ends, ELLIPSIS).toString(); + } + + + private static class MethodAndObject { + private final Method method; + private final Object object; + public MethodAndObject(final Method method, final Object object) { + this.method = method; + this.object = object; + } + } + + /** + * + */ + private AntTypeDefinition findRestrictedDefinition( + final ComponentHelper helper, final String componentName, final List methods) { + AntTypeDefinition definition = null; + Class matchedDefinitionClass = null; + + final List definitions = helper.getRestrictedDefinitions(componentName); + if (definitions == null) { + return null; + } + synchronized (definitions) { + final int size = definitions.size(); + for (int i = 0; i < size; ++i) { + final AntTypeDefinition d = definitions.get(i); + final Class exposedClass = d.getExposedClass(helper.getProject()); + if (exposedClass == null) { + continue; + } + final Method method = findMatchingMethod(exposedClass, methods); + if (method == null) { + continue; + } + if (matchedDefinitionClass != null) { + throw new BuildException( + "ambiguous: restricted definitions for " + + componentName + " " + + matchedDefinitionClass + " and " + exposedClass); + } + matchedDefinitionClass = exposedClass; + definition = d; + } + } + return definition; + } + + private MethodAndObject createRestricted( + final ComponentHelper helper, final String elementName, final List addTypeMethods) { + + final Project project = helper.getProject(); + + final AntTypeDefinition restrictedDefinition = + findRestrictedDefinition(helper, elementName, addTypeMethods); + + if (restrictedDefinition == null) { + return null; + } + + final Method addMethod = findMatchingMethod( + restrictedDefinition.getExposedClass(project), addTypeMethods); + if (addMethod == null) { + throw new BuildException( + "Ant Internal Error - contract mismatch for " + + elementName); + } + final Object addedObject = restrictedDefinition.create(project); + if (addedObject == null) { + throw new BuildException( + "Failed to create object " + elementName + + " of type " + restrictedDefinition.getTypeClass(project)); + } + return new MethodAndObject(addMethod, addedObject); + } + + private MethodAndObject createTopLevel( + final ComponentHelper helper, final String elementName, final List methods) { + final Class clazz = helper.getComponentClass(elementName); + if (clazz == null) { + return null; + } + final Method addMethod = findMatchingMethod(clazz, addTypeMethods); + if (addMethod == null) { + return null; + } + final Object addedObject = helper.createComponent(elementName); + return new MethodAndObject(addMethod, addedObject); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Location.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Location.java new file mode 100644 index 00000000..8e25d107 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Location.java @@ -0,0 +1,179 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.Serializable; + +import org.apache.tools.ant.util.FileUtils; +import org.xml.sax.Locator; + +/** + * Stores the location of a piece of text within a file (file name, + * line number and column number). Note that the column number is + * currently ignored. + * + */ +public class Location implements Serializable { + private static final long serialVersionUID = 1L; + + /** Name of the file. */ + private final String fileName; + /** Line number within the file. */ + private final int lineNumber; + /** Column number within the file. */ + private final int columnNumber; + + /** Location to use when one is needed but no information is available */ + public static final Location UNKNOWN_LOCATION = new Location(); + + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** + * Creates an "unknown" location. + */ + private Location() { + this(null, 0, 0); + } + + /** + * Creates a location consisting of a file name but no line number or + * column number. + * + * @param fileName The name of the file. May be null, + * in which case the location is equivalent to + * {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. + */ + public Location(String fileName) { + this(fileName, 0, 0); + } + + /** + * Creates a location from the SAX locator using the system ID as + * the filename. + * + * @param loc Must not be null. + * + * @since Ant 1.6 + */ + public Location(Locator loc) { + this(loc.getSystemId(), loc.getLineNumber(), loc.getColumnNumber()); + } + + /** + * Creates a location consisting of a file name, line number and + * column number. + * + * @param fileName The name of the file. May be null, + * in which case the location is equivalent to + * {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. + * + * @param lineNumber Line number within the file. Use 0 for unknown + * positions within a file. + * @param columnNumber Column number within the line. + */ + public Location(String fileName, int lineNumber, int columnNumber) { + if (fileName != null && fileName.startsWith("file:")) { + this.fileName = FILE_UTILS.fromURI(fileName); + } else { + this.fileName = fileName; + } + this.lineNumber = lineNumber; + this.columnNumber = columnNumber; + } + + /** + * @return the filename portion of the location + * @since Ant 1.6 + */ + public String getFileName() { + return fileName; + } + + /** + * @return the line number + * @since Ant 1.6 + */ + public int getLineNumber() { + return lineNumber; + } + + /** + * @return the column number + * @since Ant 1.7 + */ + public int getColumnNumber() { + return columnNumber; + } + + /** + * Returns the file name, line number, a colon and a trailing space. + * An error message can be appended easily. For unknown locations, an + * empty string is returned. + * + * @return a String of the form "fileName:lineNumber: " + * if both file name and line number are known, + * "fileName: " if only the file name is known, + * and the empty string for unknown locations. + */ + public String toString() { + StringBuffer buf = new StringBuffer(); + + if (fileName != null) { + buf.append(fileName); + + if (lineNumber != 0) { + buf.append(":"); + buf.append(lineNumber); + } + + buf.append(": "); + } + + return buf.toString(); + } + + /** + * Equality operation. + * @param other the object to compare to. + * @return true if the other object contains the same information + * as this object. + * @since Ant 1.6.3 + */ + public boolean equals(Object other) { + if (this == other) { + return true; + } + if (other == null) { + return false; + } + if (!(other.getClass() == getClass())) { + return false; + } + return toString().equals(other.toString()); + } + + /** + * Hash operation. + * @return a hash code value for this location. + * @since Ant 1.6.3 + */ + public int hashCode() { + return toString().hashCode(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/MagicNames.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/MagicNames.java new file mode 100644 index 00000000..bc39a257 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/MagicNames.java @@ -0,0 +1,293 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import org.apache.tools.ant.launch.Launcher; + +/** + * Magic names used within Ant. + * + * Not all magic names are here yet. + * + * @since Ant 1.6 + */ +public final class MagicNames { + + private MagicNames() { + } + + /** + * prefix for antlib URIs: + * {@value} + */ + public static final String ANTLIB_PREFIX = "antlib:"; + + /** + * Ant version property. + * Value: {@value} + */ + public static final String ANT_VERSION = "ant.version"; + + /** + * System classpath policy. + * Value: {@value} + */ + public static final String BUILD_SYSCLASSPATH = "build.sysclasspath"; + + /** + * The name of the script repository used by the script repo task. + * Value {@value} + */ + public static final String SCRIPT_REPOSITORY = "org.apache.ant.scriptrepo"; + + /** + * The name of the reference to the System Class Loader. + * Value {@value} + **/ + public static final String SYSTEM_LOADER_REF = "ant.coreLoader"; + + /** + * Name of the property which can provide an override of the repository dir. + * for the libraries task + * Value {@value} + */ + public static final String REPOSITORY_DIR_PROPERTY = "ant.maven.repository.dir"; + + /** + * Name of the property which can provide an override of the repository URL. + * for the libraries task + * Value {@value} + */ + public static final String REPOSITORY_URL_PROPERTY = "ant.maven.repository.url"; + + /** + * name of the resource that taskdefs are stored under. + * Value: {@value} + */ + public static final String TASKDEF_PROPERTIES_RESOURCE = + "/org/apache/tools/ant/taskdefs/defaults.properties"; + + /** + * name of the resource that typedefs are stored under. + * Value: {@value} + */ + public static final String TYPEDEFS_PROPERTIES_RESOURCE = + "/org/apache/tools/ant/types/defaults.properties"; + + /** + * Reference to the current Ant executor. + * Value: {@value} + */ + public static final String ANT_EXECUTOR_REFERENCE = "ant.executor"; + + /** + * Property defining the classname of an executor. + * Value: {@value} + */ + public static final String ANT_EXECUTOR_CLASSNAME = "ant.executor.class"; + + /** + * property name for basedir of the project. + * Value: {@value} + */ + public static final String PROJECT_BASEDIR = "basedir"; + + /** + * property for ant file name. + * Value: {@value} + */ + public static final String ANT_FILE = "ant.file"; + + /** + * property for type of ant build file (either file or url) + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String ANT_FILE_TYPE = "ant.file.type"; + + /** + * ant build file of type file + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String ANT_FILE_TYPE_FILE = "file"; + + /** + * ant build file of type url + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String ANT_FILE_TYPE_URL = "url"; + + /** + * Property used to store the java version ant is running in. + * Value: {@value} + * @since Ant 1.7 + */ + public static final String ANT_JAVA_VERSION = "ant.java.version"; + + /** + * Property used to store the location of ant. + * Value: {@value} + * @since Ant 1.7 + */ + public static final String ANT_HOME = Launcher.ANTHOME_PROPERTY; + + /** + * Property used to store the location of the ant library (typically the ant.jar file.) + * Value: {@value} + * @since Ant 1.7 + */ + public static final String ANT_LIB = "ant.core.lib"; + + /** + * property for regular expression implementation. + * Value: {@value} + */ + public static final String REGEXP_IMPL = "ant.regexp.regexpimpl"; + + /** + * property that provides the default value for javac's and + * javadoc's source attribute. + * Value: {@value} + * @since Ant 1.7 + */ + public static final String BUILD_JAVAC_SOURCE = "ant.build.javac.source"; + + /** + * property that provides the default value for javac's target attribute. + * Value: {@value} + * @since Ant 1.7 + */ + public static final String BUILD_JAVAC_TARGET = "ant.build.javac.target"; + + /** + * Name of the magic property that controls classloader reuse. + * Value: {@value} + * @since Ant 1.4. + */ + public static final String REFID_CLASSPATH_REUSE_LOADER = "ant.reuse.loader"; + + /** + * Prefix used to store classloader references. + * Value: {@value} + */ + public static final String REFID_CLASSPATH_LOADER_PREFIX = "ant.loader."; + + /** + * Reference used to store the property helper. + * Value: {@value} + */ + public static final String REFID_PROPERTY_HELPER = "ant.PropertyHelper"; + + /** + * Reference used to store the local properties. + * Value: {@value} + */ + public static final String REFID_LOCAL_PROPERTIES = "ant.LocalProperties"; + + /** + * Name of JVM system property which provides the name of the ProjectHelper class to use. + * Value: {@value} + */ + public static final String PROJECT_HELPER_CLASS = "org.apache.tools.ant.ProjectHelper"; + + /** + * The service identifier in jars which provide ProjectHelper implementations. + * Value: {@value} + */ + public static final String PROJECT_HELPER_SERVICE = + "META-INF/services/org.apache.tools.ant.ProjectHelper"; + + /** + * Name of ProjectHelper reference that we add to a project. + * Value: {@value} + */ + public static final String REFID_PROJECT_HELPER = "ant.projectHelper"; + + /** + * Name of the property holding the name of the currently + * executing project, if one has been specified. + * + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String PROJECT_NAME = "ant.project.name"; + + /** + * Name of the property holding the default target of the + * currently executing project, if one has been specified. + * + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String PROJECT_DEFAULT_TARGET + = "ant.project.default-target"; + + /** + * Name of the property holding a comma separated list of targets + * that have been invoked (from the command line). + * + * Value: {@value} + * @since Ant 1.8.0 + */ + public static final String PROJECT_INVOKED_TARGETS + = "ant.project.invoked-targets"; + + /** + * Name of the project reference holding an instance of {@link + * org.apache.tools.ant.taskdefs.launcher.CommandLauncher} to use + * when executing commands with the help of an external skript. + * + *

    Alternatively this is the name of a system property holding + * the fully qualified class name of a {@link + * org.apache.tools.ant.taskdefs.launcher.CommandLauncher}.

    + * + * Value: {@value} + * @since Ant 1.9.0 + */ + public static final String ANT_SHELL_LAUNCHER_REF_ID = "ant.shellLauncher"; + + /** + * Name of the project reference holding an instance of {@link + * org.apache.tools.ant.taskdefs.launcher.CommandLauncher} to use + * when executing commands without the help of an external skript. + * + *

    Alternatively this is the name of a system property holding + * the fully qualified class name of a {@link + * org.apache.tools.ant.taskdefs.launcher.CommandLauncher}.

    + * + * Value: {@value} + * @since Ant 1.9.0 + */ + public static final String ANT_VM_LAUNCHER_REF_ID = "ant.vmLauncher"; + /** + * Name of the namespace "type". + * (Note: cannot be used as an element.) + * @since Ant 1.9.1 + */ + public static final String ATTRIBUTE_NAMESPACE = "attribute namespace"; + + /** + * Name of the property which can provide an override of the + * User-Agent used in <get> tasks. + * Value {@value} + */ + public static final String HTTP_AGENT_PROPERTY = "ant.http.agent"; +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Main.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Main.java new file mode 100644 index 00000000..a9c23a53 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Main.java @@ -0,0 +1,1317 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.Vector; + +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.InputHandler; +import org.apache.tools.ant.launch.AntMain; +import org.apache.tools.ant.listener.SilentLogger; +import org.apache.tools.ant.property.GetProperty; +import org.apache.tools.ant.property.ResolvePropertyMap; +import org.apache.tools.ant.util.ClasspathUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.ProxySetup; + + +/** + * Command line entry point into Ant. This class is entered via the + * canonical `public static void main` entry point and reads the + * command line arguments. It then assembles and executes an Ant + * project. + *

    + * If you integrating Ant into some other tool, this is not the class + * to use as an entry point. Please see the source code of this + * class to see how it manipulates the Ant project classes. + * + */ +public class Main implements AntMain { + + /** + * A Set of args that are handled by the launcher and should + * not be seen by Main. + */ + private static final Set LAUNCH_COMMANDS = Collections + .unmodifiableSet(new HashSet(Arrays.asList("-lib", "-cp", "-noclasspath", + "--noclasspath", "-nouserlib", "-main"))); + + /** The default build file name. {@value} */ + public static final String DEFAULT_BUILD_FILENAME = "build.xml"; + + /** Our current message output status. Follows Project.MSG_XXX. */ + private int msgOutputLevel = Project.MSG_INFO; + + /** File that we are using for configuration. */ + private File buildFile; /* null */ + + /** Stream to use for logging. */ + private static PrintStream out = System.out; + + /** Stream that we are using for logging error messages. */ + private static PrintStream err = System.err; + + /** The build targets. */ + private final Vector targets = new Vector(); + + /** Set of properties that can be used by tasks. */ + private final Properties definedProps = new Properties(); + + /** Names of classes to add as listeners to project. */ + private final Vector listeners = new Vector(1); + + /** File names of property files to load on startup. */ + private final Vector propertyFiles = new Vector(1); + + /** Indicates whether this build is to support interactive input */ + private boolean allowInput = true; + + /** keep going mode */ + private boolean keepGoingMode = false; + + /** + * The Ant logger class. There may be only one logger. It will have + * the right to use the 'out' PrintStream. The class must implements the + * BuildLogger interface. + */ + private String loggerClassname = null; + + /** + * The Ant InputHandler class. There may be only one input + * handler. + */ + private String inputHandlerClassname = null; + + /** + * Whether or not output to the log is to be unadorned. + */ + private boolean emacsMode = false; + + /** + * Whether or not log output should be reduced to the minimum + */ + private boolean silent = false; + + /** + * Whether or not this instance has successfully been + * constructed and is ready to run. + */ + private boolean readyToRun = false; + + /** + * Whether or not we should only parse and display the project help + * information. + */ + private boolean projectHelp = false; + + /** + * Whether or not a logfile is being used. This is used to + * check if the output streams must be closed. + */ + private static boolean isLogFileUsed = false; + + /** + * optional thread priority + */ + private Integer threadPriority = null; + + /** + * proxy flag: default is false + */ + private boolean proxy = false; + + private final Map, List> extraArguments = new HashMap, List>(); + + private static final GetProperty NOPROPERTIES = new GetProperty() { + public Object getProperty(final String aName) { + // No existing property takes precedence + return null; + } + }; + + + + + /** + * Prints the message of the Throwable if it (the message) is not + * null. + * + * @param t Throwable to print the message of. + * Must not be null. + */ + private static void printMessage(final Throwable t) { + final String message = t.getMessage(); + if (message != null) { + System.err.println(message); + } + } + + /** + * Creates a new instance of this class using the + * arguments specified, gives it any extra user properties which have been + * specified, and then runs the build using the classloader provided. + * + * @param args Command line arguments. Must not be null. + * @param additionalUserProperties Any extra properties to use in this + * build. May be null, which is the equivalent to + * passing in an empty set of properties. + * @param coreLoader Classloader used for core classes. May be + * null in which case the system classloader is used. + */ + public static void start(final String[] args, final Properties additionalUserProperties, + final ClassLoader coreLoader) { + final Main m = new Main(); + m.startAnt(args, additionalUserProperties, coreLoader); + } + + /** + * Start Ant + * @param args command line args + * @param additionalUserProperties properties to set beyond those that + * may be specified on the args list + * @param coreLoader - not used + * + * @since Ant 1.6 + */ + public void startAnt(final String[] args, final Properties additionalUserProperties, + final ClassLoader coreLoader) { + + try { + processArgs(args); + } catch (final Throwable exc) { + handleLogfile(); + printMessage(exc); + exit(1); + return; + } + + if (additionalUserProperties != null) { + for (final Enumeration e = additionalUserProperties.keys(); + e.hasMoreElements();) { + final String key = (String) e.nextElement(); + final String property = additionalUserProperties.getProperty(key); + definedProps.put(key, property); + } + } + + // expect the worst + int exitCode = 1; + try { + try { + runBuild(coreLoader); + exitCode = 0; + } catch (final ExitStatusException ese) { + exitCode = ese.getStatus(); + if (exitCode != 0) { + throw ese; + } + } + } catch (final BuildException be) { + if (err != System.err) { + printMessage(be); + } + } catch (final Throwable exc) { + exc.printStackTrace(); + printMessage(exc); + } finally { + handleLogfile(); + } + exit(exitCode); + } + + /** + * This operation is expected to call {@link System#exit(int)}, which + * is what the base version does. + * However, it is possible to do something else. + * @param exitCode code to exit with + */ + protected void exit(final int exitCode) { + System.exit(exitCode); + } + + /** + * Close logfiles, if we have been writing to them. + * + * @since Ant 1.6 + */ + private static void handleLogfile() { + if (isLogFileUsed) { + FileUtils.close(out); + FileUtils.close(err); + } + } + + /** + * Command line entry point. This method kicks off the building + * of a project object and executes a build using either a given + * target or the default target. + * + * @param args Command line arguments. Must not be null. + */ + public static void main(final String[] args) { + start(args, null, null); + } + + /** + * Constructor used when creating Main for later arg processing + * and startup + */ + public Main() { + } + + /** + * Sole constructor, which parses and deals with command line + * arguments. + * + * @param args Command line arguments. Must not be null. + * + * @exception BuildException if the specified build file doesn't exist + * or is a directory. + * + * @deprecated since 1.6.x + */ + @Deprecated + protected Main(final String[] args) throws BuildException { + processArgs(args); + } + + /** + * Process command line arguments. + * When ant is started from Launcher, launcher-only arguments do not get + * passed through to this routine. + * + * @param args the command line arguments. + * + * @since Ant 1.6 + */ + private void processArgs(final String[] args) { + String searchForThis = null; + boolean searchForFile = false; + PrintStream logTo = null; + + // cycle through given args + + boolean justPrintUsage = false; + boolean justPrintVersion = false; + boolean justPrintDiagnostics = false; + + final ArgumentProcessorRegistry processorRegistry = ArgumentProcessorRegistry.getInstance(); + + for (int i = 0; i < args.length; i++) { + final String arg = args[i]; + + if (arg.equals("-help") || arg.equals("-h")) { + justPrintUsage = true; + } else if (arg.equals("-version")) { + justPrintVersion = true; + } else if (arg.equals("-diagnostics")) { + justPrintDiagnostics = true; + } else if (arg.equals("-quiet") || arg.equals("-q")) { + msgOutputLevel = Project.MSG_WARN; + } else if (arg.equals("-verbose") || arg.equals("-v")) { + msgOutputLevel = Project.MSG_VERBOSE; + } else if (arg.equals("-debug") || arg.equals("-d")) { + msgOutputLevel = Project.MSG_DEBUG; + } else if (arg.equals("-silent") || arg.equals("-S")) { + silent = true; + } else if (arg.equals("-noinput")) { + allowInput = false; + } else if (arg.equals("-logfile") || arg.equals("-l")) { + try { + final File logFile = new File(args[i + 1]); + i++; + logTo = new PrintStream(new FileOutputStream(logFile)); + isLogFileUsed = true; + } catch (final IOException ioe) { + final String msg = "Cannot write on the specified log file. " + + "Make sure the path exists and you have write " + + "permissions."; + throw new BuildException(msg); + } catch (final ArrayIndexOutOfBoundsException aioobe) { + final String msg = "You must specify a log file when " + + "using the -log argument"; + throw new BuildException(msg); + } + } else if (arg.equals("-buildfile") || arg.equals("-file") + || arg.equals("-f")) { + i = handleArgBuildFile(args, i); + } else if (arg.equals("-listener")) { + i = handleArgListener(args, i); + } else if (arg.startsWith("-D")) { + i = handleArgDefine(args, i); + } else if (arg.equals("-logger")) { + i = handleArgLogger(args, i); + } else if (arg.equals("-inputhandler")) { + i = handleArgInputHandler(args, i); + } else if (arg.equals("-emacs") || arg.equals("-e")) { + emacsMode = true; + } else if (arg.equals("-projecthelp") || arg.equals("-p")) { + // set the flag to display the targets and quit + projectHelp = true; + } else if (arg.equals("-find") || arg.equals("-s")) { + searchForFile = true; + // eat up next arg if present, default to build.xml + if (i < args.length - 1) { + searchForThis = args[++i]; + } + } else if (arg.startsWith("-propertyfile")) { + i = handleArgPropertyFile(args, i); + } else if (arg.equals("-k") || arg.equals("-keep-going")) { + keepGoingMode = true; + } else if (arg.equals("-nice")) { + i = handleArgNice(args, i); + } else if (LAUNCH_COMMANDS.contains(arg)) { + //catch script/ant mismatch with a meaningful message + //we could ignore it, but there are likely to be other + //version problems, so we stamp down on the configuration now + final String msg = "Ant's Main method is being handed " + + "an option " + arg + " that is only for the launcher class." + + "\nThis can be caused by a version mismatch between " + + "the ant script/.bat file and Ant itself."; + throw new BuildException(msg); + } else if (arg.equals("-autoproxy")) { + proxy = true; + } else if (arg.startsWith("-")) { + boolean processed = false; + for (final ArgumentProcessor processor : processorRegistry.getProcessors()) { + final int newI = processor.readArguments(args, i); + if (newI != -1) { + List extraArgs = extraArguments.get(processor.getClass()); + if (extraArgs == null) { + extraArgs = new ArrayList(); + extraArguments.put(processor.getClass(), extraArgs); + } + for (; i < newI && i < args.length; i++) { + extraArgs.add(args[i]); + } + processed = true; + break; + } + } + if (!processed) { + // we don't have any more args to recognize! + final String msg = "Unknown argument: " + arg; + System.err.println(msg); + printUsage(); + throw new BuildException(""); + } + } else { + // if it's no other arg, it may be the target + targets.addElement(arg); + } + } + + if (msgOutputLevel >= Project.MSG_VERBOSE || justPrintVersion) { + printVersion(msgOutputLevel); + } + + if (justPrintUsage || justPrintVersion || justPrintDiagnostics) { + if (justPrintUsage) { + printUsage(); + } + if (justPrintDiagnostics) { + Diagnostics.doReport(System.out, msgOutputLevel); + } + return; + } + + // if buildFile was not specified on the command line, + if (buildFile == null) { + // but -find then search for it + if (searchForFile) { + if (searchForThis != null) { + buildFile = findBuildFile(System.getProperty("user.dir"), searchForThis); + if (buildFile == null) { + throw new BuildException("Could not locate a build file!"); + } + } else { + // no search file specified: so search an existing default file + final Iterator it = ProjectHelperRepository.getInstance().getHelpers(); + do { + final ProjectHelper helper = it.next(); + searchForThis = helper.getDefaultBuildFile(); + if (msgOutputLevel >= Project.MSG_VERBOSE) { + System.out.println("Searching the default build file: " + searchForThis); + } + buildFile = findBuildFile(System.getProperty("user.dir"), searchForThis); + } while (buildFile == null && it.hasNext()); + if (buildFile == null) { + throw new BuildException("Could not locate a build file!"); + } + } + } else { + // no build file specified: so search an existing default file + final Iterator it = ProjectHelperRepository.getInstance().getHelpers(); + do { + final ProjectHelper helper = it.next(); + buildFile = new File(helper.getDefaultBuildFile()); + if (msgOutputLevel >= Project.MSG_VERBOSE) { + System.out.println("Trying the default build file: " + buildFile); + } + } while (!buildFile.exists() && it.hasNext()); + } + } + + // make sure buildfile exists + if (!buildFile.exists()) { + System.out.println("Buildfile: " + buildFile + " does not exist!"); + throw new BuildException("Build failed"); + } + + if (buildFile.isDirectory()) { + final File whatYouMeant = new File(buildFile, "build.xml"); + if (whatYouMeant.isFile()) { + buildFile = whatYouMeant; + } else { + System.out.println("What? Buildfile: " + buildFile + " is a dir!"); + throw new BuildException("Build failed"); + } + } + + // Normalize buildFile for re-import detection + buildFile = + FileUtils.getFileUtils().normalize(buildFile.getAbsolutePath()); + + // Load the property files specified by -propertyfile + loadPropertyFiles(); + + if (msgOutputLevel >= Project.MSG_INFO) { + System.out.println("Buildfile: " + buildFile); + } + + if (logTo != null) { + out = logTo; + err = logTo; + System.setOut(out); + System.setErr(err); + } + readyToRun = true; + } + + // -------------------------------------------------------- + // Methods for handling the command line arguments + // -------------------------------------------------------- + + /** Handle the -buildfile, -file, -f argument */ + private int handleArgBuildFile(final String[] args, int pos) { + try { + buildFile = new File( + args[++pos].replace('/', File.separatorChar)); + } catch (final ArrayIndexOutOfBoundsException aioobe) { + throw new BuildException( + "You must specify a buildfile when using the -buildfile argument"); + } + return pos; + } + + /** Handle -listener argument */ + private int handleArgListener(final String[] args, int pos) { + try { + listeners.addElement(args[pos + 1]); + pos++; + } catch (final ArrayIndexOutOfBoundsException aioobe) { + final String msg = "You must specify a classname when " + + "using the -listener argument"; + throw new BuildException(msg); + } + return pos; + } + + /** Handler -D argument */ + private int handleArgDefine(final String[] args, int argPos) { + /* Interestingly enough, we get to here when a user + * uses -Dname=value. However, in some cases, the OS + * goes ahead and parses this out to args + * {"-Dname", "value"} + * so instead of parsing on "=", we just make the "-D" + * characters go away and skip one argument forward. + * + * I don't know how to predict when the JDK is going + * to help or not, so we simply look for the equals sign. + */ + final String arg = args[argPos]; + String name = arg.substring(2, arg.length()); + String value = null; + final int posEq = name.indexOf("="); + if (posEq > 0) { + value = name.substring(posEq + 1); + name = name.substring(0, posEq); + } else if (argPos < args.length - 1) { + value = args[++argPos]; + } else { + throw new BuildException("Missing value for property " + + name); + } + definedProps.put(name, value); + return argPos; + } + + /** Handle the -logger argument. */ + private int handleArgLogger(final String[] args, int pos) { + if (loggerClassname != null) { + throw new BuildException( + "Only one logger class may be specified."); + } + try { + loggerClassname = args[++pos]; + } catch (final ArrayIndexOutOfBoundsException aioobe) { + throw new BuildException( + "You must specify a classname when using the -logger argument"); + } + return pos; + } + + /** Handle the -inputhandler argument. */ + private int handleArgInputHandler(final String[] args, int pos) { + if (inputHandlerClassname != null) { + throw new BuildException("Only one input handler class may " + + "be specified."); + } + try { + inputHandlerClassname = args[++pos]; + } catch (final ArrayIndexOutOfBoundsException aioobe) { + throw new BuildException("You must specify a classname when" + + " using the -inputhandler" + + " argument"); + } + return pos; + } + + /** Handle the -propertyfile argument. */ + private int handleArgPropertyFile(final String[] args, int pos) { + try { + propertyFiles.addElement(args[++pos]); + } catch (final ArrayIndexOutOfBoundsException aioobe) { + final String msg = "You must specify a property filename when " + + "using the -propertyfile argument"; + throw new BuildException(msg); + } + return pos; + } + + /** Handle the -nice argument. */ + private int handleArgNice(final String[] args, int pos) { + try { + threadPriority = Integer.decode(args[++pos]); + } catch (final ArrayIndexOutOfBoundsException aioobe) { + throw new BuildException( + "You must supply a niceness value (1-10)" + + " after the -nice option"); + } catch (final NumberFormatException e) { + throw new BuildException("Unrecognized niceness value: " + + args[pos]); + } + + if (threadPriority.intValue() < Thread.MIN_PRIORITY + || threadPriority.intValue() > Thread.MAX_PRIORITY) { + throw new BuildException( + "Niceness value is out of the range 1-10"); + } + return pos; + } + + // -------------------------------------------------------- + // other methods + // -------------------------------------------------------- + + /** Load the property files specified by -propertyfile */ + private void loadPropertyFiles() { + for (final String filename : propertyFiles) { + final Properties props = new Properties(); + FileInputStream fis = null; + try { + fis = new FileInputStream(filename); + props.load(fis); + } catch (final IOException e) { + System.out.println("Could not load property file " + + filename + ": " + e.getMessage()); + } finally { + FileUtils.close(fis); + } + + // ensure that -D properties take precedence + final Enumeration propertyNames = props.propertyNames(); + while (propertyNames.hasMoreElements()) { + final String name = (String) propertyNames.nextElement(); + if (definedProps.getProperty(name) == null) { + definedProps.put(name, props.getProperty(name)); + } + } + } + } + + /** + * Helper to get the parent file for a given file. + *

    + * Added to simulate File.getParentFile() from JDK 1.2. + * @deprecated since 1.6.x + * + * @param file File to find parent of. Must not be null. + * @return Parent file or null if none + */ + @Deprecated + private File getParentFile(final File file) { + final File parent = file.getParentFile(); + + if (parent != null && msgOutputLevel >= Project.MSG_VERBOSE) { + System.out.println("Searching in " + parent.getAbsolutePath()); + } + + return parent; + } + + /** + * Search parent directories for the build file. + *

    + * Takes the given target as a suffix to append to each + * parent directory in search of a build file. Once the + * root of the file-system has been reached null + * is returned. + * + * @param start Leaf directory of search. + * Must not be null. + * @param suffix Suffix filename to look for in parents. + * Must not be null. + * + * @return A handle to the build file if one is found, null if not + */ + private File findBuildFile(final String start, final String suffix) { + if (msgOutputLevel >= Project.MSG_INFO) { + System.out.println("Searching for " + suffix + " ..."); + } + + File parent = new File(new File(start).getAbsolutePath()); + File file = new File(parent, suffix); + + // check if the target file exists in the current directory + while (!file.exists()) { + // change to parent directory + parent = getParentFile(parent); + + // if parent is null, then we are at the root of the fs, + // complain that we can't find the build file. + if (parent == null) { + return null; + } + + // refresh our file handle + file = new File(parent, suffix); + } + + return file; + } + + /** + * Executes the build. If the constructor for this instance failed + * (e.g. returned after issuing a warning), this method returns + * immediately. + * + * @param coreLoader The classloader to use to find core classes. + * May be null, in which case the + * system classloader is used. + * + * @exception BuildException if the build fails + */ + private void runBuild(final ClassLoader coreLoader) throws BuildException { + + if (!readyToRun) { + return; + } + + final ArgumentProcessorRegistry processorRegistry = ArgumentProcessorRegistry.getInstance(); + + for (final ArgumentProcessor processor : processorRegistry.getProcessors()) { + final List extraArgs = extraArguments.get(processor.getClass()); + if (extraArgs != null) { + if (processor.handleArg(extraArgs)) { + return; + } + } + } + + final Project project = new Project(); + project.setCoreLoader(coreLoader); + + Throwable error = null; + + try { + addBuildListeners(project); + addInputHandler(project); + + final PrintStream savedErr = System.err; + final PrintStream savedOut = System.out; + final InputStream savedIn = System.in; + + // use a system manager that prevents from System.exit() + SecurityManager oldsm = null; + oldsm = System.getSecurityManager(); + + //SecurityManager can not be installed here for backwards + //compatibility reasons (PD). Needs to be loaded prior to + //ant class if we are going to implement it. + //System.setSecurityManager(new NoExitSecurityManager()); + try { + if (allowInput) { + project.setDefaultInputStream(System.in); + } + System.setIn(new DemuxInputStream(project)); + System.setOut(new PrintStream(new DemuxOutputStream(project, false))); + System.setErr(new PrintStream(new DemuxOutputStream(project, true))); + + + if (!projectHelp) { + project.fireBuildStarted(); + } + + // set the thread priorities + if (threadPriority != null) { + try { + project.log("Setting Ant's thread priority to " + + threadPriority, Project.MSG_VERBOSE); + Thread.currentThread().setPriority(threadPriority.intValue()); + } catch (final SecurityException swallowed) { + //we cannot set the priority here. + project.log("A security manager refused to set the -nice value"); + } + } + + setProperties(project); + + project.setKeepGoingMode(keepGoingMode); + if (proxy) { + //proxy setup if enabled + final ProxySetup proxySetup = new ProxySetup(project); + proxySetup.enableProxies(); + } + + for (final ArgumentProcessor processor : processorRegistry.getProcessors()) { + final List extraArgs = extraArguments.get(processor.getClass()); + if (extraArgs != null) { + processor.prepareConfigure(project, extraArgs); + } + } + + ProjectHelper.configureProject(project, buildFile); + + for (final ArgumentProcessor processor : processorRegistry.getProcessors()) { + final List extraArgs = extraArguments.get(processor.getClass()); + if (extraArgs != null) { + if (processor.handleArg(project, extraArgs)) { + return; + } + } + } + + if (projectHelp) { + printDescription(project); + printTargets(project, msgOutputLevel > Project.MSG_INFO, + msgOutputLevel > Project.MSG_VERBOSE); + return; + } + + // make sure that we have a target to execute + if (targets.size() == 0) { + if (project.getDefaultTarget() != null) { + targets.addElement(project.getDefaultTarget()); + } + } + + project.executeTargets(targets); + } finally { + // put back the original security manager + //The following will never eval to true. (PD) + if (oldsm != null) { + System.setSecurityManager(oldsm); + } + + System.setOut(savedOut); + System.setErr(savedErr); + System.setIn(savedIn); + } + } catch (final RuntimeException exc) { + error = exc; + throw exc; + } catch (final Error e) { + error = e; + throw e; + } finally { + if (!projectHelp) { + try { + project.fireBuildFinished(error); + } catch (final Throwable t) { + // yes, I know it is bad style to catch Throwable, + // but if we don't, we lose valuable information + System.err.println("Caught an exception while logging the" + + " end of the build. Exception was:"); + t.printStackTrace(); + if (error != null) { + System.err.println("There has been an error prior to" + + " that:"); + error.printStackTrace(); + } + throw new BuildException(t); + } + } else if (error != null) { + project.log(error.toString(), Project.MSG_ERR); + } + } + } + + private void setProperties(final Project project) { + + project.init(); + + // resolve properties + final PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(project); + @SuppressWarnings({ "rawtypes", "unchecked" }) + final Map raw = new HashMap(definedProps); + @SuppressWarnings("unchecked") + final Map props = raw; + + final ResolvePropertyMap resolver = new ResolvePropertyMap(project, + NOPROPERTIES, propertyHelper.getExpanders()); + resolver.resolveAllProperties(props, null, false); + + // set user-define properties + for (final Entry ent : props.entrySet()) { + final String arg = ent.getKey(); + final Object value = ent.getValue(); + project.setUserProperty(arg, String.valueOf(value)); + } + + project.setUserProperty(MagicNames.ANT_FILE, + buildFile.getAbsolutePath()); + project.setUserProperty(MagicNames.ANT_FILE_TYPE, + MagicNames.ANT_FILE_TYPE_FILE); + } + + /** + * Adds the listeners specified in the command line arguments, + * along with the default listener, to the specified project. + * + * @param project The project to add listeners to. + * Must not be null. + */ + protected void addBuildListeners(final Project project) { + + // Add the default listener + project.addBuildListener(createLogger()); + + final int count = listeners.size(); + for (int i = 0; i < count; i++) { + final String className = listeners.elementAt(i); + final BuildListener listener = + (BuildListener) ClasspathUtils.newInstance(className, + Main.class.getClassLoader(), BuildListener.class); + project.setProjectReference(listener); + + project.addBuildListener(listener); + } + } + + /** + * Creates the InputHandler and adds it to the project. + * + * @param project the project instance. + * + * @exception BuildException if a specified InputHandler + * implementation could not be loaded. + */ + private void addInputHandler(final Project project) throws BuildException { + InputHandler handler = null; + if (inputHandlerClassname == null) { + handler = new DefaultInputHandler(); + } else { + handler = (InputHandler) ClasspathUtils.newInstance( + inputHandlerClassname, Main.class.getClassLoader(), + InputHandler.class); + project.setProjectReference(handler); + } + project.setInputHandler(handler); + } + + // TODO: (Jon Skeet) Any reason for writing a message and then using a bare + // RuntimeException rather than just using a BuildException here? Is it + // in case the message could end up being written to no loggers (as the + // loggers could have failed to be created due to this failure)? + /** + * Creates the default build logger for sending build events to the ant + * log. + * + * @return the logger instance for this build. + */ + private BuildLogger createLogger() { + BuildLogger logger = null; + if (silent) { + logger = new SilentLogger(); + msgOutputLevel = Project.MSG_WARN; + emacsMode = true; + } else if (loggerClassname != null) { + try { + logger = (BuildLogger) ClasspathUtils.newInstance( + loggerClassname, Main.class.getClassLoader(), + BuildLogger.class); + } catch (final BuildException e) { + System.err.println("The specified logger class " + + loggerClassname + + " could not be used because " + e.getMessage()); + throw new RuntimeException(); + } + } else { + logger = new DefaultLogger(); + } + + logger.setMessageOutputLevel(msgOutputLevel); + logger.setOutputPrintStream(out); + logger.setErrorPrintStream(err); + logger.setEmacsMode(emacsMode); + + return logger; + } + + /** + * Prints the usage information for this class to System.out. + */ + private static void printUsage() { + System.out.println("ant [options] [target [target2 [target3] ...]]"); + System.out.println("Options: "); + System.out.println(" -help, -h print this message and exit"); + System.out.println(" -projecthelp, -p print project help information and exit"); + System.out.println(" -version print the version information and exit"); + System.out.println(" -diagnostics print information that might be helpful to"); + System.out.println(" diagnose or report problems and exit"); + System.out.println(" -quiet, -q be extra quiet"); + System.out.println(" -silent, -S print nothing but task outputs and build failures"); + System.out.println(" -verbose, -v be extra verbose"); + System.out.println(" -debug, -d print debugging information"); + System.out.println(" -emacs, -e produce logging information without adornments"); + System.out.println(" -lib specifies a path to search for jars and classes"); + System.out.println(" -logfile use given file for log"); + System.out.println(" -l ''"); + System.out.println(" -logger the class which is to perform logging"); + System.out.println(" -listener add an instance of class as a project listener"); + System.out.println(" -noinput do not allow interactive input"); + System.out.println(" -buildfile use given buildfile"); + System.out.println(" -file ''"); + System.out.println(" -f ''"); + System.out.println(" -D= use value for given property"); + System.out.println(" -keep-going, -k execute all targets that do not depend"); + System.out.println(" on failed target(s)"); + System.out.println(" -propertyfile load all properties from file with -D"); + System.out.println(" properties taking precedence"); + System.out.println(" -inputhandler the class which will handle input requests"); + System.out.println(" -find (s)earch for buildfile towards the root of"); + System.out.println(" -s the filesystem and use it"); + System.out.println(" -nice number A niceness value for the main thread:" + + " 1 (lowest) to 10 (highest); 5 is the default"); + System.out.println(" -nouserlib Run ant without using the jar files from" + + " ${user.home}/.ant/lib"); + System.out.println(" -noclasspath Run ant without using CLASSPATH"); + System.out.println(" -autoproxy Java1.5+: use the OS proxy settings"); + System.out.println(" -main override Ant's normal entry point"); + for (final ArgumentProcessor processor : ArgumentProcessorRegistry.getInstance().getProcessors()) { + processor.printUsage(System.out); + } + } + + /** + * Prints the Ant version information to System.out. + * + * @exception BuildException if the version information is unavailable + */ + private static void printVersion(final int logLevel) throws BuildException { + System.out.println(getAntVersion()); + } + + /** + * Cache of the Ant version information when it has been loaded. + */ + private static String antVersion = null; + + /** + * Cache of the short Ant version information when it has been loaded. + */ + private static String shortAntVersion = null; + + /** + * Returns the Ant version information, if available. Once the information + * has been loaded once, it's cached and returned from the cache on future + * calls. + * + * @return the Ant version information as a String + * (always non-null) + * + * @exception BuildException if the version information is unavailable + */ + public static synchronized String getAntVersion() throws BuildException { + if (antVersion == null) { + try { + final Properties props = new Properties(); + final InputStream in = + Main.class.getResourceAsStream("/org/apache/tools/ant/version.txt"); + props.load(in); + in.close(); + shortAntVersion = props.getProperty("VERSION"); + + final StringBuffer msg = new StringBuffer(); + msg.append("Apache Ant(TM) version "); + msg.append(shortAntVersion); + msg.append(" compiled on "); + msg.append(props.getProperty("DATE")); + antVersion = msg.toString(); + } catch (final IOException ioe) { + throw new BuildException("Could not load the version information:" + + ioe.getMessage()); + } catch (final NullPointerException npe) { + throw new BuildException("Could not load the version information."); + } + } + return antVersion; + } + + /** + * Returns the short Ant version information, if available. Once the information + * has been loaded once, it's cached and returned from the cache on future + * calls. + * + * @return the short Ant version information as a String + * (always non-null) + * + * @throws BuildException BuildException if the version information is unavailable + * @since Ant 1.9.3 + */ + public static String getShortAntVersion() throws BuildException { + if (shortAntVersion == null) { + getAntVersion(); + } + return shortAntVersion; + } + + /** + * Prints the description of a project (if there is one) to + * System.out. + * + * @param project The project to display a description of. + * Must not be null. + */ + private static void printDescription(final Project project) { + if (project.getDescription() != null) { + project.log(project.getDescription()); + } + } + + /** + * Targets in imported files with a project name + * and not overloaded by the main build file will + * be in the target map twice. This method + * removes the duplicate target. + * @param targets the targets to filter. + * @return the filtered targets. + */ + private static Map removeDuplicateTargets(final Map targets) { + final Map locationMap = new HashMap(); + for (final Entry entry : targets.entrySet()) { + final String name = entry.getKey(); + final Target target = entry.getValue(); + final Target otherTarget = locationMap.get(target.getLocation()); + // Place this entry in the location map if + // a) location is not in the map + // b) location is in map, but its name is longer + // (an imported target will have a name. prefix) + if (otherTarget == null + || otherTarget.getName().length() > name.length()) { + locationMap.put( + target.getLocation(), target); // Smallest name wins + } + } + final Map ret = new HashMap(); + for (final Target target : locationMap.values()) { + ret.put(target.getName(), target); + } + return ret; + } + + /** + * Prints a list of all targets in the specified project to + * System.out, optionally including subtargets. + * + * @param project The project to display a description of. + * Must not be null. + * @param printSubTargets Whether or not subtarget names should also be + * printed. + */ + private static void printTargets(final Project project, boolean printSubTargets, + final boolean printDependencies) { + // find the target with the longest name + int maxLength = 0; + final Map ptargets = removeDuplicateTargets(project.getTargets()); + // split the targets in top-level and sub-targets depending + // on the presence of a description + final Vector topNames = new Vector(); + final Vector topDescriptions = new Vector(); + final Vector> topDependencies = new Vector>(); + final Vector subNames = new Vector(); + final Vector> subDependencies = new Vector>(); + + for (final Target currentTarget : ptargets.values()) { + final String targetName = currentTarget.getName(); + if (targetName.equals("")) { + continue; + } + final String targetDescription = currentTarget.getDescription(); + // maintain a sorted list of targets + if (targetDescription == null) { + final int pos = findTargetPosition(subNames, targetName); + subNames.insertElementAt(targetName, pos); + if (printDependencies) { + subDependencies.insertElementAt(currentTarget.getDependencies(), pos); + } + } else { + final int pos = findTargetPosition(topNames, targetName); + topNames.insertElementAt(targetName, pos); + topDescriptions.insertElementAt(targetDescription, pos); + if (targetName.length() > maxLength) { + maxLength = targetName.length(); + } + if (printDependencies) { + topDependencies.insertElementAt(currentTarget.getDependencies(), pos); + } + } + } + + printTargets(project, topNames, topDescriptions, topDependencies, + "Main targets:", maxLength); + //if there were no main targets, we list all subtargets + //as it means nothing has a description + if (topNames.size() == 0) { + printSubTargets = true; + } + if (printSubTargets) { + printTargets(project, subNames, null, subDependencies, "Other targets:", 0); + } + + final String defaultTarget = project.getDefaultTarget(); + if (defaultTarget != null && !"".equals(defaultTarget)) { + // shouldn't need to check but... + project.log("Default target: " + defaultTarget); + } + } + + /** + * Searches for the correct place to insert a name into a list so as + * to keep the list sorted alphabetically. + * + * @param names The current list of names. Must not be null. + * @param name The name to find a place for. + * Must not be null. + * + * @return the correct place in the list for the given name + */ + private static int findTargetPosition(final Vector names, final String name) { + final int size = names.size(); + int res = size; + for (int i = 0; i < size && res == size; i++) { + if (name.compareTo(names.elementAt(i)) < 0) { + res = i; + } + } + return res; + } + + /** + * Writes a formatted list of target names to System.out + * with an optional description. + * + * + * @param project the project instance. + * @param names The names to be printed. + * Must not be null. + * @param descriptions The associated target descriptions. + * May be null, in which case + * no descriptions are displayed. + * If non-null, this should have + * as many elements as names. + * @param topDependencies The list of dependencies for each target. + * The dependencies are listed as a non null + * enumeration of String. + * @param heading The heading to display. + * Should not be null. + * @param maxlen The maximum length of the names of the targets. + * If descriptions are given, they are padded to this + * position so they line up (so long as the names really + * are shorter than this). + */ + private static void printTargets(final Project project, final Vector names, + final Vector descriptions, final Vector> dependencies, + final String heading, + final int maxlen) { + // now, start printing the targets and their descriptions + final String lSep = System.getProperty("line.separator"); + // got a bit annoyed that I couldn't find a pad function + String spaces = " "; + while (spaces.length() <= maxlen) { + spaces += spaces; + } + final StringBuilder msg = new StringBuilder(); + msg.append(heading + lSep + lSep); + final int size = names.size(); + for (int i = 0; i < size; i++) { + msg.append(" "); + msg.append(names.elementAt(i)); + if (descriptions != null) { + msg.append( + spaces.substring(0, maxlen - names.elementAt(i).length() + 2)); + msg.append(descriptions.elementAt(i)); + } + msg.append(lSep); + if (!dependencies.isEmpty()) { + final Enumeration deps = dependencies.elementAt(i); + if (deps.hasMoreElements()) { + msg.append(" depends on: "); + while (deps.hasMoreElements()) { + msg.append(deps.nextElement()); + if (deps.hasMoreElements()) { + msg.append(", "); + } + } + msg.append(lSep); + } + } + } + project.log(msg.toString(), Project.MSG_WARN); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/NoBannerLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/NoBannerLogger.java new file mode 100644 index 00000000..a086bf5e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/NoBannerLogger.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import org.apache.tools.ant.util.StringUtils; + +/** + * Extends DefaultLogger to strip out empty targets. + * + */ +public class NoBannerLogger extends DefaultLogger { + + // CheckStyle:VisibilityModifier OFF - bc + /** + * Name of the current target, if it should + * be displayed on the next message. This is + * set when a target starts building, and reset + * to null after the first message for + * the target is logged. + */ + protected String targetName; + // CheckStyle:VisibilityModifier ON + + /** Sole constructor. */ + public NoBannerLogger() { + } + + /** + * Notes the name of the target so it can be logged + * if it generates any messages. + * + * @param event A BuildEvent containing target information. + * Must not be null. + */ + public synchronized void targetStarted(BuildEvent event) { + targetName = extractTargetName(event); + } + + /** + * Override point, extract the target name + * @param event the event to work on + * @return the target name to print + * @since Ant1.7.1 + */ + protected String extractTargetName(BuildEvent event) { + return event.getTarget().getName(); + } + + /** + * Resets the current target name to null. + * + * @param event Ignored in this implementation. + */ + public synchronized void targetFinished(BuildEvent event) { + targetName = null; + } + + /** + * Logs a message for a target if it is of an appropriate + * priority, also logging the name of the target if this + * is the first message which needs to be logged for the + * target. + * + * @param event A BuildEvent containing message information. + * Must not be null. + */ + public void messageLogged(BuildEvent event) { + + if (event.getPriority() > msgOutputLevel + || null == event.getMessage() + || "".equals(event.getMessage().trim())) { + return; + } + + synchronized (this) { + if (null != targetName) { + out.println(StringUtils.LINE_SEP + targetName + ":"); + targetName = null; + } + } + + super.messageLogged(event); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PathTokenizer.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PathTokenizer.java new file mode 100644 index 00000000..6e6bea62 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PathTokenizer.java @@ -0,0 +1,166 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.File; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; + +import org.apache.tools.ant.taskdefs.condition.Os; + +/** + * A Path tokenizer takes a path and returns the components that make up + * that path. + * + * The path can use path separators of either ':' or ';' and file separators + * of either '/' or '\'. + * + */ +public class PathTokenizer { + /** + * A tokenizer to break the string up based on the ':' or ';' separators. + */ + private StringTokenizer tokenizer; + + /** + * A String which stores any path components which have been read ahead + * due to DOS filesystem compensation. + */ + private String lookahead = null; + + /** + * A boolean that determines if we are running on Novell NetWare, which + * exhibits slightly different path name characteristics (multi-character + * volume / drive names) + */ + private boolean onNetWare = Os.isFamily("netware"); + + /** + * Flag to indicate whether or not we are running on a platform with a + * DOS style filesystem + */ + private boolean dosStyleFilesystem; + + /** + * Constructs a path tokenizer for the specified path. + * + * @param path The path to tokenize. Must not be null. + */ + public PathTokenizer(String path) { + if (onNetWare) { + // For NetWare, use the boolean=true mode, so we can use delimiter + // information to make a better decision later. + tokenizer = new StringTokenizer(path, ":;", true); + } else { + // on Windows and Unix, we can ignore delimiters and still have + // enough information to tokenize correctly. + tokenizer = new StringTokenizer(path, ":;", false); + } + dosStyleFilesystem = File.pathSeparatorChar == ';'; + } + + /** + * Tests if there are more path elements available from this tokenizer's + * path. If this method returns true, then a subsequent call + * to nextToken will successfully return a token. + * + * @return true if and only if there is at least one token + * in the string after the current position; false otherwise. + */ + public boolean hasMoreTokens() { + if (lookahead != null) { + return true; + } + + return tokenizer.hasMoreTokens(); + } + + /** + * Returns the next path element from this tokenizer. + * + * @return the next path element from this tokenizer. + * + * @exception NoSuchElementException if there are no more elements in this + * tokenizer's path. + */ + public String nextToken() throws NoSuchElementException { + String token = null; + if (lookahead != null) { + token = lookahead; + lookahead = null; + } else { + token = tokenizer.nextToken().trim(); + } + + if (!onNetWare) { + if (token.length() == 1 && Character.isLetter(token.charAt(0)) + && dosStyleFilesystem + && tokenizer.hasMoreTokens()) { + // we are on a dos style system so this path could be a drive + // spec. We look at the next token + String nextToken = tokenizer.nextToken().trim(); + if (nextToken.startsWith("\\") || nextToken.startsWith("/")) { + // we know we are on a DOS style platform and the next path + // starts with a slash or backslash, so we know this is a + // drive spec + token += ":" + nextToken; + } else { + // store the token just read for next time + lookahead = nextToken; + } + } + } else { + // we are on NetWare, tokenizing is handled a little differently, + // due to the fact that NetWare has multiple-character volume names. + if (token.equals(File.pathSeparator) || token.equals(":")) { + // ignore ";" and get the next token + token = tokenizer.nextToken().trim(); + } + + if (tokenizer.hasMoreTokens()) { + // this path could be a drive spec, so look at the next token + String nextToken = tokenizer.nextToken().trim(); + + // make sure we aren't going to get the path separator next + if (!nextToken.equals(File.pathSeparator)) { + if (nextToken.equals(":")) { + if (!token.startsWith("/") && !token.startsWith("\\") + && !token.startsWith(".") + && !token.startsWith("..")) { + // it indeed is a drive spec, get the next bit + String oneMore = tokenizer.nextToken().trim(); + if (!oneMore.equals(File.pathSeparator)) { + token += ":" + oneMore; + } else { + token += ":"; + lookahead = oneMore; + } + } + // implicit else: ignore the ':' since we have either a + // UNIX or a relative path + } else { + // store the token just read for next time + lookahead = nextToken; + } + } + } + } + return token; + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Project.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Project.java new file mode 100644 index 00000000..3a0c4b82 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Project.java @@ -0,0 +1,2494 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.EOFException; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.Stack; +import java.util.Vector; +import java.util.WeakHashMap; + +import org.apache.tools.ant.helper.DefaultExecutor; +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.InputHandler; +import org.apache.tools.ant.types.Description; +import org.apache.tools.ant.types.FilterSet; +import org.apache.tools.ant.types.FilterSetCollection; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.ResourceFactory; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.util.CollectionUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JavaEnvUtils; +import org.apache.tools.ant.util.StringUtils; +import org.apache.tools.ant.util.VectorSet; + +/** + * Central representation of an Ant project. This class defines an + * Ant project with all of its targets, tasks and various other + * properties. It also provides the mechanism to kick off a build using + * a particular target name. + *

    + * This class also encapsulates methods which allow files to be referred + * to using abstract path names which are translated to native system + * file paths at runtime. + * + */ +public class Project implements ResourceFactory { + /** Message priority of "error". */ + public static final int MSG_ERR = 0; + /** Message priority of "warning". */ + public static final int MSG_WARN = 1; + /** Message priority of "information". */ + public static final int MSG_INFO = 2; + /** Message priority of "verbose". */ + public static final int MSG_VERBOSE = 3; + /** Message priority of "debug". */ + public static final int MSG_DEBUG = 4; + + /** + * Constant for the "visiting" state, used when + * traversing a DFS of target dependencies. + */ + private static final String VISITING = "VISITING"; + /** + * Constant for the "visited" state, used when + * traversing a DFS of target dependencies. + */ + private static final String VISITED = "VISITED"; + + /** + * Version constant for Java 1.0 . + * + * @deprecated since 1.5.x. + * Use {@link JavaEnvUtils#JAVA_1_0} instead. + */ + @Deprecated + public static final String JAVA_1_0 = JavaEnvUtils.JAVA_1_0; + /** + * Version constant for Java 1.1 . + * + * @deprecated since 1.5.x. + * Use {@link JavaEnvUtils#JAVA_1_1} instead. + */ + @Deprecated + public static final String JAVA_1_1 = JavaEnvUtils.JAVA_1_1; + /** + * Version constant for Java 1.2 . + * + * @deprecated since 1.5.x. + * Use {@link JavaEnvUtils#JAVA_1_2} instead. + */ + @Deprecated + public static final String JAVA_1_2 = JavaEnvUtils.JAVA_1_2; + /** + * Version constant for Java 1.3 . + * + * @deprecated since 1.5.x. + * Use {@link JavaEnvUtils#JAVA_1_3} instead. + */ + @Deprecated + public static final String JAVA_1_3 = JavaEnvUtils.JAVA_1_3; + /** + * Version constant for Java 1.4 . + * + * @deprecated since 1.5.x. + * Use {@link JavaEnvUtils#JAVA_1_4} instead. + */ + @Deprecated + public static final String JAVA_1_4 = JavaEnvUtils.JAVA_1_4; + + /** Default filter start token. */ + public static final String TOKEN_START = FilterSet.DEFAULT_TOKEN_START; + /** Default filter end token. */ + public static final String TOKEN_END = FilterSet.DEFAULT_TOKEN_END; + + /** Instance of a utility class to use for file operations. */ + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** Name of this project. */ + private String name; + /** Description for this project (if any). */ + private String description; + + + /** Map of references within the project (paths etc) (String to Object). */ + private final Hashtable references = new AntRefTable(); + + /** Map of id references - used for indicating broken build files */ + private final HashMap idReferences = new HashMap(); + + /** Name of the project's default target. */ + private String defaultTarget; + + /** Map from target names to targets (String to Target). */ + private final Hashtable targets = new Hashtable(); + + /** Set of global filters. */ + private final FilterSet globalFilterSet = new FilterSet(); + { + // Initialize the globalFileSet's project + globalFilterSet.setProject(this); + } + + /** + * Wrapper around globalFilterSet. This collection only ever + * contains one FilterSet, but the wrapper is needed in order to + * make it easier to use the FileUtils interface. + */ + private final FilterSetCollection globalFilters + = new FilterSetCollection(globalFilterSet); + + /** Project base directory. */ + private File baseDir; + + /** lock object used when adding/removing listeners */ + private final Object listenersLock = new Object(); + + /** List of listeners to notify of build events. */ + private volatile BuildListener[] listeners = new BuildListener[0]; + + /** for each thread, record whether it is currently executing + messageLogged */ + private final ThreadLocal isLoggingMessage = new ThreadLocal() { + @Override + protected Boolean initialValue() { + return Boolean.FALSE; + } + }; + + /** + * The Ant core classloader--may be null if using + * parent classloader. + */ + private ClassLoader coreLoader = null; + + /** Records the latest task to be executed on a thread. */ + private final Map threadTasks = + Collections.synchronizedMap(new WeakHashMap()); + + /** Records the latest task to be executed on a thread group. */ + private final Map threadGroupTasks + = Collections.synchronizedMap(new WeakHashMap()); + + /** + * Called to handle any input requests. + */ + private InputHandler inputHandler = null; + + /** + * The default input stream used to read any input. + */ + private InputStream defaultInputStream = null; + + /** + * Keep going flag. + */ + private boolean keepGoingMode = false; + + /** + * Set the input handler. + * + * @param handler the InputHandler instance to use for gathering input. + */ + public void setInputHandler(final InputHandler handler) { + inputHandler = handler; + } + + /** + * Set the default System input stream. Normally this stream is set to + * System.in. This inputStream is used when no task input redirection is + * being performed. + * + * @param defaultInputStream the default input stream to use when input + * is requested. + * @since Ant 1.6 + */ + public void setDefaultInputStream(final InputStream defaultInputStream) { + this.defaultInputStream = defaultInputStream; + } + + /** + * Get this project's input stream. + * + * @return the InputStream instance in use by this Project instance to + * read input. + */ + public InputStream getDefaultInputStream() { + return defaultInputStream; + } + + /** + * Retrieve the current input handler. + * + * @return the InputHandler instance currently in place for the project + * instance. + */ + public InputHandler getInputHandler() { + return inputHandler; + } + + /** + * Create a new Ant project. + */ + public Project() { + inputHandler = new DefaultInputHandler(); + } + + /** + * Create and initialize a subproject. By default the subproject will be of + * the same type as its parent. If a no-arg constructor is unavailable, the + * Project class will be used. + * @return a Project instance configured as a subproject of this Project. + * @since Ant 1.7 + */ + public Project createSubProject() { + Project subProject = null; + try { + subProject = (getClass().newInstance()); + } catch (final Exception e) { + subProject = new Project(); + } + initSubProject(subProject); + return subProject; + } + + /** + * Initialize a subproject. + * @param subProject the subproject to initialize. + */ + public void initSubProject(final Project subProject) { + ComponentHelper.getComponentHelper(subProject) + .initSubProject(ComponentHelper.getComponentHelper(this)); + subProject.setDefaultInputStream(getDefaultInputStream()); + subProject.setKeepGoingMode(this.isKeepGoingMode()); + subProject.setExecutor(getExecutor().getSubProjectExecutor()); + } + + /** + * Initialise the project. + * + * This involves setting the default task definitions and loading the + * system properties. + * + * @exception BuildException if the default task list cannot be loaded. + */ + public void init() throws BuildException { + initProperties(); + + ComponentHelper.getComponentHelper(this).initDefaultDefinitions(); + } + + /** + * Initializes the properties. + * @exception BuildException if an vital property could not be set. + * @since Ant 1.7 + */ + public void initProperties() throws BuildException { + setJavaVersionProperty(); + setSystemProperties(); + setPropertyInternal(MagicNames.ANT_VERSION, Main.getAntVersion()); + setAntLib(); + } + + /** + * Set a property to the location of ant.jar. + * Use the locator to find the location of the Project.class, and + * if this is not null, set the property {@link MagicNames#ANT_LIB} + * to the result + */ + private void setAntLib() { + final File antlib = org.apache.tools.ant.launch.Locator.getClassSource( + Project.class); + if (antlib != null) { + setPropertyInternal(MagicNames.ANT_LIB, antlib.getAbsolutePath()); + } + } + /** + * Factory method to create a class loader for loading classes from + * a given path. + * + * @param path the path from which classes are to be loaded. + * + * @return an appropriate classloader. + */ + public AntClassLoader createClassLoader(final Path path) { + return AntClassLoader + .newAntClassLoader(getClass().getClassLoader(), this, path, true); + } + + /** + * Factory method to create a class loader for loading classes from + * a given path. + * + * @param parent the parent classloader for the new loader. + * @param path the path from which classes are to be loaded. + * + * @return an appropriate classloader. + */ + public AntClassLoader createClassLoader( + final ClassLoader parent, final Path path) { + return AntClassLoader.newAntClassLoader(parent, this, path, true); + } + + /** + * Set the core classloader for the project. If a null + * classloader is specified, the parent classloader should be used. + * + * @param coreLoader The classloader to use for the project. + * May be null. + */ + public void setCoreLoader(final ClassLoader coreLoader) { + this.coreLoader = coreLoader; + } + + /** + * Return the core classloader to use for this project. + * This may be null, indicating that + * the parent classloader should be used. + * + * @return the core classloader to use for this project. + * + */ + public ClassLoader getCoreLoader() { + return coreLoader; + } + + /** + * Add a build listener to the list. This listener will + * be notified of build events for this project. + * + * @param listener The listener to add to the list. + * Must not be null. + */ + public void addBuildListener(final BuildListener listener) { + synchronized (listenersLock) { + // If the listeners already has this listener, do nothing + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] == listener) { + return; + } + } + // copy on write semantics + final BuildListener[] newListeners = + new BuildListener[listeners.length + 1]; + System.arraycopy(listeners, 0, newListeners, 0, listeners.length); + newListeners[listeners.length] = listener; + listeners = newListeners; + } + } + + /** + * Remove a build listener from the list. This listener + * will no longer be notified of build events for this project. + * + * @param listener The listener to remove from the list. + * Should not be null. + */ + public void removeBuildListener(final BuildListener listener) { + synchronized (listenersLock) { + // copy on write semantics + for (int i = 0; i < listeners.length; i++) { + if (listeners[i] == listener) { + final BuildListener[] newListeners = + new BuildListener[listeners.length - 1]; + System.arraycopy(listeners, 0, newListeners, 0, i); + System.arraycopy(listeners, i + 1, newListeners, i, + listeners.length - i - 1); + listeners = newListeners; + break; + } + } + } + } + + /** + * Return a copy of the list of build listeners for the project. + * + * @return a list of build listeners for the project + */ + public Vector getBuildListeners() { + synchronized (listenersLock) { + final Vector r = new Vector(listeners.length); + for (int i = 0; i < listeners.length; i++) { + r.add(listeners[i]); + } + return r; + } + } + + /** + * Write a message to the log with the default log level + * of MSG_INFO . + * @param message The text to log. Should not be null. + */ + + public void log(final String message) { + log(message, MSG_INFO); + } + + /** + * Write a project level message to the log with the given log level. + * @param message The text to log. Should not be null. + * @param msgLevel The log priority level to use. + */ + public void log(final String message, final int msgLevel) { + log(message, null, msgLevel); + } + + /** + * Write a project level message to the log with the given log level. + * @param message The text to log. Should not be null. + * @param throwable The exception causing this log, may be null. + * @param msgLevel The log priority level to use. + * @since 1.7 + */ + public void log(final String message, final Throwable throwable, final int msgLevel) { + fireMessageLogged(this, message, throwable, msgLevel); + } + + /** + * Write a task level message to the log with the given log level. + * @param task The task to use in the log. Must not be null. + * @param message The text to log. Should not be null. + * @param msgLevel The log priority level to use. + */ + public void log(final Task task, final String message, final int msgLevel) { + fireMessageLogged(task, message, null, msgLevel); + } + + /** + * Write a task level message to the log with the given log level. + * @param task The task to use in the log. Must not be null. + * @param message The text to log. Should not be null. + * @param throwable The exception causing this log, may be null. + * @param msgLevel The log priority level to use. + * @since 1.7 + */ + public void log(final Task task, final String message, final Throwable throwable, final int msgLevel) { + fireMessageLogged(task, message, throwable, msgLevel); + } + + /** + * Write a target level message to the log with the given log level. + * @param target The target to use in the log. + * Must not be null. + * @param message The text to log. Should not be null. + * @param msgLevel The log priority level to use. + */ + public void log(final Target target, final String message, final int msgLevel) { + log(target, message, null, msgLevel); + } + + /** + * Write a target level message to the log with the given log level. + * @param target The target to use in the log. + * Must not be null. + * @param message The text to log. Should not be null. + * @param throwable The exception causing this log, may be null. + * @param msgLevel The log priority level to use. + * @since 1.7 + */ + public void log(final Target target, final String message, final Throwable throwable, + final int msgLevel) { + fireMessageLogged(target, message, throwable, msgLevel); + } + + /** + * Return the set of global filters. + * + * @return the set of global filters. + */ + public FilterSet getGlobalFilterSet() { + return globalFilterSet; + } + + /** + * Set a property. Any existing property of the same name + * is overwritten, unless it is a user property. + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + */ + public void setProperty(final String name, final String value) { + PropertyHelper.getPropertyHelper(this).setProperty(name, value, true); + } + + /** + * Set a property if no value currently exists. If the property + * exists already, a message is logged and the method returns with + * no other effect. + * + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @since 1.5 + */ + public void setNewProperty(final String name, final String value) { + PropertyHelper.getPropertyHelper(this).setNewProperty(name, value); + } + + /** + * Set a user property, which cannot be overwritten by + * set/unset property calls. Any previous value is overwritten. + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @see #setProperty(String,String) + */ + public void setUserProperty(final String name, final String value) { + PropertyHelper.getPropertyHelper(this).setUserProperty(name, value); + } + + /** + * Set a user property, which cannot be overwritten by set/unset + * property calls. Any previous value is overwritten. Also marks + * these properties as properties that have not come from the + * command line. + * + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @see #setProperty(String,String) + */ + public void setInheritedProperty(final String name, final String value) { + PropertyHelper.getPropertyHelper(this).setInheritedProperty(name, value); + } + + /** + * Set a property unless it is already defined as a user property + * (in which case the method returns silently). + * + * @param name The name of the property. + * Must not be null. + * @param value The property value. Must not be null. + */ + private void setPropertyInternal(final String name, final String value) { + PropertyHelper.getPropertyHelper(this).setProperty(name, value, false); + } + + /** + * Return the value of a property, if it is set. + * + * @param propertyName The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + */ + public String getProperty(final String propertyName) { + final Object value = PropertyHelper.getPropertyHelper(this).getProperty(propertyName); + return value == null ? null : String.valueOf(value); + } + + /** + * Replace ${} style constructions in the given value with the + * string value of the corresponding data types. + * + * @param value The string to be scanned for property references. + * May be null. + * + * @return the given string with embedded property names replaced + * by values, or null if the given string is + * null. + * + * @exception BuildException if the given value has an unclosed + * property name, e.g. ${xxx. + */ + public String replaceProperties(final String value) throws BuildException { + return PropertyHelper.getPropertyHelper(this).replaceProperties(null, value, null); + } + + /** + * Return the value of a user property, if it is set. + * + * @param propertyName The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + */ + public String getUserProperty(final String propertyName) { + return (String) PropertyHelper.getPropertyHelper(this).getUserProperty(propertyName); + } + + /** + * Return a copy of the properties table. + * @return a hashtable containing all properties + * (including user properties). + */ + public Hashtable getProperties() { + return PropertyHelper.getPropertyHelper(this).getProperties(); + } + + /** + * Return a copy of the user property hashtable. + * @return a hashtable containing just the user properties. + */ + public Hashtable getUserProperties() { + return PropertyHelper.getPropertyHelper(this).getUserProperties(); + } + + /** + * Return a copy of the inherited property hashtable. + * @return a hashtable containing just the inherited properties. + * @since Ant 1.8.0 + */ + public Hashtable getInheritedProperties() { + return PropertyHelper.getPropertyHelper(this).getInheritedProperties(); + } + + /** + * Copy all user properties that have been set on the command + * line or a GUI tool from this instance to the Project instance + * given as the argument. + * + *

    To copy all "user" properties, you will also have to call + * {@link #copyInheritedProperties copyInheritedProperties}.

    + * + * @param other the project to copy the properties to. Must not be null. + * + * @since Ant 1.5 + */ + public void copyUserProperties(final Project other) { + PropertyHelper.getPropertyHelper(this).copyUserProperties(other); + } + + /** + * Copy all user properties that have not been set on the + * command line or a GUI tool from this instance to the Project + * instance given as the argument. + * + *

    To copy all "user" properties, you will also have to call + * {@link #copyUserProperties copyUserProperties}.

    + * + * @param other the project to copy the properties to. Must not be null. + * + * @since Ant 1.5 + */ + public void copyInheritedProperties(final Project other) { + PropertyHelper.getPropertyHelper(this).copyInheritedProperties(other); + } + + /** + * Set the default target of the project. + * + * @param defaultTarget The name of the default target for this project. + * May be null, indicating that there is + * no default target. + * + * @deprecated since 1.5.x. + * Use setDefault. + * @see #setDefault(String) + */ + @Deprecated + public void setDefaultTarget(final String defaultTarget) { + setDefault(defaultTarget); + } + + /** + * Return the name of the default target of the project. + * @return name of the default target or + * null if no default has been set. + */ + public String getDefaultTarget() { + return defaultTarget; + } + + /** + * Set the default target of the project. + * + * @param defaultTarget The name of the default target for this project. + * May be null, indicating that there is + * no default target. + */ + public void setDefault(final String defaultTarget) { + if (defaultTarget != null) { + setUserProperty(MagicNames.PROJECT_DEFAULT_TARGET, defaultTarget); + } + this.defaultTarget = defaultTarget; + } + + /** + * Set the name of the project, also setting the user + * property ant.project.name. + * + * @param name The name of the project. + * Must not be null. + */ + public void setName(final String name) { + setUserProperty(MagicNames.PROJECT_NAME, name); + this.name = name; + } + + /** + * Return the project name, if one has been set. + * + * @return the project name, or null if it hasn't been set. + */ + public String getName() { + return name; + } + + /** + * Set the project description. + * + * @param description The description of the project. + * May be null. + */ + public void setDescription(final String description) { + this.description = description; + } + + /** + * Return the project description, if one has been set. + * + * @return the project description, or null if it hasn't + * been set. + */ + public String getDescription() { + if (description == null) { + description = Description.getDescription(this); + } + return description; + } + + /** + * Add a filter to the set of global filters. + * + * @param token The token to filter. + * Must not be null. + * @param value The replacement value. + * Must not be null. + * @deprecated since 1.4.x. + * Use getGlobalFilterSet().addFilter(token,value) + * + * @see #getGlobalFilterSet() + * @see FilterSet#addFilter(String,String) + */ + @Deprecated + public void addFilter(final String token, final String value) { + if (token == null) { + return; + } + globalFilterSet.addFilter(new FilterSet.Filter(token, value)); + } + + /** + * Return a hashtable of global filters, mapping tokens to values. + * + * @return a hashtable of global filters, mapping tokens to values + * (String to String). + * + * @deprecated since 1.4.x + * Use getGlobalFilterSet().getFilterHash(). + * + * @see #getGlobalFilterSet() + * @see FilterSet#getFilterHash() + */ + @Deprecated + public Hashtable getFilters() { + // we need to build the hashtable dynamically + return globalFilterSet.getFilterHash(); + } + + /** + * Set the base directory for the project, checking that + * the given filename exists and is a directory. + * + * @param baseD The project base directory. + * Must not be null. + * + * @exception BuildException if the directory if invalid. + */ + public void setBasedir(final String baseD) throws BuildException { + setBaseDir(new File(baseD)); + } + + /** + * Set the base directory for the project, checking that + * the given file exists and is a directory. + * + * @param baseDir The project base directory. + * Must not be null. + * @exception BuildException if the specified file doesn't exist or + * isn't a directory. + */ + public void setBaseDir(File baseDir) throws BuildException { + baseDir = FILE_UTILS.normalize(baseDir.getAbsolutePath()); + if (!baseDir.exists()) { + throw new BuildException("Basedir " + baseDir.getAbsolutePath() + + " does not exist"); + } + if (!baseDir.isDirectory()) { + throw new BuildException("Basedir " + baseDir.getAbsolutePath() + + " is not a directory"); + } + this.baseDir = baseDir; + setPropertyInternal(MagicNames.PROJECT_BASEDIR, this.baseDir.getPath()); + final String msg = "Project base dir set to: " + this.baseDir; + log(msg, MSG_VERBOSE); + } + + /** + * Return the base directory of the project as a file object. + * + * @return the project base directory, or null if the + * base directory has not been successfully set to a valid value. + */ + public File getBaseDir() { + if (baseDir == null) { + try { + setBasedir("."); + } catch (final BuildException ex) { + ex.printStackTrace(); + } + } + return baseDir; + } + + /** + * Set "keep-going" mode. In this mode Ant will try to execute + * as many targets as possible. All targets that do not depend + * on failed target(s) will be executed. If the keepGoing settor/getter + * methods are used in conjunction with the ant.executor.class + * property, they will have no effect. + * @param keepGoingMode "keep-going" mode + * @since Ant 1.6 + */ + public void setKeepGoingMode(final boolean keepGoingMode) { + this.keepGoingMode = keepGoingMode; + } + + /** + * Return the keep-going mode. If the keepGoing settor/getter + * methods are used in conjunction with the ant.executor.class + * property, they will have no effect. + * @return "keep-going" mode + * @since Ant 1.6 + */ + public boolean isKeepGoingMode() { + return this.keepGoingMode; + } + + /** + * Return the version of Java this class is running under. + * @return the version of Java as a String, e.g. "1.1" . + * @see org.apache.tools.ant.util.JavaEnvUtils#getJavaVersion + * @deprecated since 1.5.x. + * Use org.apache.tools.ant.util.JavaEnvUtils instead. + */ + @Deprecated + public static String getJavaVersion() { + return JavaEnvUtils.getJavaVersion(); + } + + /** + * Set the ant.java.version property and tests for + * unsupported JVM versions. If the version is supported, + * verbose log messages are generated to record the Java version + * and operating system name. + * + * @exception BuildException if this Java version is not supported. + * + * @see org.apache.tools.ant.util.JavaEnvUtils#getJavaVersion + */ + public void setJavaVersionProperty() throws BuildException { + final String javaVersion = JavaEnvUtils.getJavaVersion(); + setPropertyInternal(MagicNames.ANT_JAVA_VERSION, javaVersion); + + // sanity check + if (!JavaEnvUtils.isAtLeastJavaVersion(JavaEnvUtils.JAVA_1_5)) { + throw new BuildException("Ant cannot work on Java prior to 1.5"); + } + log("Detected Java version: " + javaVersion + " in: " + + System.getProperty("java.home"), MSG_VERBOSE); + + log("Detected OS: " + System.getProperty("os.name"), MSG_VERBOSE); + } + + /** + * Add all system properties which aren't already defined as + * user properties to the project properties. + */ + public void setSystemProperties() { + final Properties systemP = System.getProperties(); + final Enumeration e = systemP.propertyNames(); + while (e.hasMoreElements()) { + final String propertyName = (String) e.nextElement(); + final String value = systemP.getProperty(propertyName); + if (value != null) { + this.setPropertyInternal(propertyName, value); + } + } + } + + /** + * Add a new task definition to the project. + * Attempting to override an existing definition with an + * equivalent one (i.e. with the same classname) results in + * a verbose log message. Attempting to override an existing definition + * with a different one results in a warning log message and + * invalidates any tasks which have already been created with the + * old definition. + * + * @param taskName The name of the task to add. + * Must not be null. + * @param taskClass The full name of the class implementing the task. + * Must not be null. + * + * @exception BuildException if the class is unsuitable for being an Ant + * task. An error level message is logged before + * this exception is thrown. + * + * @see #checkTaskClass(Class) + */ + public void addTaskDefinition(final String taskName, final Class taskClass) + throws BuildException { + ComponentHelper.getComponentHelper(this).addTaskDefinition(taskName, + taskClass); + } + + /** + * Check whether or not a class is suitable for serving as Ant task. + * Ant task implementation classes must be public, concrete, and have + * a no-arg constructor. + * + * @param taskClass The class to be checked. + * Must not be null. + * + * @exception BuildException if the class is unsuitable for being an Ant + * task. An error level message is logged before + * this exception is thrown. + */ + public void checkTaskClass(final Class taskClass) throws BuildException { + ComponentHelper.getComponentHelper(this).checkTaskClass(taskClass); + + if (!Modifier.isPublic(taskClass.getModifiers())) { + final String message = taskClass + " is not public"; + log(message, Project.MSG_ERR); + throw new BuildException(message); + } + if (Modifier.isAbstract(taskClass.getModifiers())) { + final String message = taskClass + " is abstract"; + log(message, Project.MSG_ERR); + throw new BuildException(message); + } + try { + taskClass.getConstructor(); + // don't have to check for public, since + // getConstructor finds public constructors only. + } catch (final NoSuchMethodException e) { + final String message = "No public no-arg constructor in " + + taskClass; + log(message, Project.MSG_ERR); + throw new BuildException(message); + } catch (final LinkageError e) { + final String message = "Could not load " + taskClass + ": " + e; + log(message, Project.MSG_ERR); + throw new BuildException(message, e); + } + if (!Task.class.isAssignableFrom(taskClass)) { + TaskAdapter.checkTaskClass(taskClass, this); + } + } + + /** + * Return the current task definition hashtable. The returned hashtable is + * "live" and so should not be modified. + * + * @return a map of from task name to implementing class + * (String to Class). + */ + public Hashtable> getTaskDefinitions() { + return ComponentHelper.getComponentHelper(this).getTaskDefinitions(); + } + + /** + * Return the current task definition map. The returned map is a + * copy of the "live" definitions. + * + * @return a map of from task name to implementing class + * (String to Class). + * + * @since Ant 1.8.1 + */ + public Map> getCopyOfTaskDefinitions() { + return new HashMap>(getTaskDefinitions()); + } + + /** + * Add a new datatype definition. + * Attempting to override an existing definition with an + * equivalent one (i.e. with the same classname) results in + * a verbose log message. Attempting to override an existing definition + * with a different one results in a warning log message, but the + * definition is changed. + * + * @param typeName The name of the datatype. + * Must not be null. + * @param typeClass The full name of the class implementing the datatype. + * Must not be null. + */ + public void addDataTypeDefinition(final String typeName, final Class typeClass) { + ComponentHelper.getComponentHelper(this).addDataTypeDefinition(typeName, + typeClass); + } + + /** + * Return the current datatype definition hashtable. The returned + * hashtable is "live" and so should not be modified. + * + * @return a map of from datatype name to implementing class + * (String to Class). + */ + public Hashtable> getDataTypeDefinitions() { + return ComponentHelper.getComponentHelper(this).getDataTypeDefinitions(); + } + + /** + * Return the current datatype definition map. The returned + * map is a copy pf the "live" definitions. + * + * @return a map of from datatype name to implementing class + * (String to Class). + * + * @since Ant 1.8.1 + */ + public Map> getCopyOfDataTypeDefinitions() { + return new HashMap>(getDataTypeDefinitions()); + } + + /** + * Add a new target to the project. + * + * @param target The target to be added to the project. + * Must not be null. + * + * @exception BuildException if the target already exists in the project + * + * @see Project#addOrReplaceTarget(Target) + */ + public void addTarget(final Target target) throws BuildException { + addTarget(target.getName(), target); + } + + /** + * Add a new target to the project. + * + * @param targetName The name to use for the target. + * Must not be null. + * @param target The target to be added to the project. + * Must not be null. + * + * @exception BuildException if the target already exists in the project. + * + * @see Project#addOrReplaceTarget(String, Target) + */ + public void addTarget(final String targetName, final Target target) + throws BuildException { + if (targets.get(targetName) != null) { + throw new BuildException("Duplicate target: `" + targetName + "'"); + } + addOrReplaceTarget(targetName, target); + } + + /** + * Add a target to the project, or replaces one with the same + * name. + * + * @param target The target to be added or replaced in the project. + * Must not be null. + */ + public void addOrReplaceTarget(final Target target) { + addOrReplaceTarget(target.getName(), target); + } + + /** + * Add a target to the project, or replaces one with the same + * name. + * + * @param targetName The name to use for the target. + * Must not be null. + * @param target The target to be added or replaced in the project. + * Must not be null. + */ + public void addOrReplaceTarget(final String targetName, final Target target) { + final String msg = " +Target: " + targetName; + log(msg, MSG_DEBUG); + target.setProject(this); + targets.put(targetName, target); + } + + /** + * Return the hashtable of targets. The returned hashtable + * is "live" and so should not be modified. + * @return a map from name to target (String to Target). + */ + public Hashtable getTargets() { + return targets; + } + + /** + * Return the map of targets. The returned map + * is a copy of the "live" targets. + * @return a map from name to target (String to Target). + * @since Ant 1.8.1 + */ + public Map getCopyOfTargets() { + return new HashMap(targets); + } + + /** + * Create a new instance of a task, adding it to a list of + * created tasks for later invalidation. This causes all tasks + * to be remembered until the containing project is removed + * @param taskType The name of the task to create an instance of. + * Must not be null. + * + * @return an instance of the specified task, or null if + * the task name is not recognised. + * + * @exception BuildException if the task name is recognised but task + * creation fails. + */ + public Task createTask(final String taskType) throws BuildException { + return ComponentHelper.getComponentHelper(this).createTask(taskType); + } + + /** + * Create a new instance of a data type. + * + * @param typeName The name of the data type to create an instance of. + * Must not be null. + * + * @return an instance of the specified data type, or null if + * the data type name is not recognised. + * + * @exception BuildException if the data type name is recognised but + * instance creation fails. + */ + public Object createDataType(final String typeName) throws BuildException { + return ComponentHelper.getComponentHelper(this).createDataType(typeName); + } + + /** + * Set the Executor instance for this Project. + * @param e the Executor to use. + */ + public void setExecutor(final Executor e) { + addReference(MagicNames.ANT_EXECUTOR_REFERENCE, e); + } + + /** + * Get this Project's Executor (setting it if necessary). + * @return an Executor instance. + */ + public Executor getExecutor() { + Object o = getReference(MagicNames.ANT_EXECUTOR_REFERENCE); + if (o == null) { + String classname = getProperty(MagicNames.ANT_EXECUTOR_CLASSNAME); + if (classname == null) { + classname = DefaultExecutor.class.getName(); + } + log("Attempting to create object of type " + classname, MSG_DEBUG); + try { + o = Class.forName(classname, true, coreLoader).newInstance(); + } catch (final ClassNotFoundException seaEnEfEx) { + //try the current classloader + try { + o = Class.forName(classname).newInstance(); + } catch (final Exception ex) { + log(ex.toString(), MSG_ERR); + } + } catch (final Exception ex) { + log(ex.toString(), MSG_ERR); + } + if (o == null) { + throw new BuildException( + "Unable to obtain a Target Executor instance."); + } + setExecutor((Executor) o); + } + return (Executor) o; + } + + /** + * Execute the specified sequence of targets, and the targets + * they depend on. + * + * @param names A vector of target name strings to execute. + * Must not be null. + * + * @exception BuildException if the build failed. + */ + public void executeTargets(final Vector names) throws BuildException { + setUserProperty(MagicNames.PROJECT_INVOKED_TARGETS, + CollectionUtils.flattenToString(names)); + getExecutor().executeTargets(this, names.toArray(new String[names.size()])); + } + + /** + * Demultiplex output so that each task receives the appropriate + * messages. If the current thread is not currently executing a task, + * the message is logged directly. + * + * @param output Message to handle. Should not be null. + * @param isWarning Whether the text represents an warning (true) + * or information (false). + */ + public void demuxOutput(final String output, final boolean isWarning) { + final Task task = getThreadTask(Thread.currentThread()); + if (task == null) { + log(output, isWarning ? MSG_WARN : MSG_INFO); + } else { + if (isWarning) { + task.handleErrorOutput(output); + } else { + task.handleOutput(output); + } + } + } + + /** + * Read data from the default input stream. If no default has been + * specified, System.in is used. + * + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @since Ant 1.6 + */ + public int defaultInput(final byte[] buffer, final int offset, final int length) + throws IOException { + if (defaultInputStream != null) { + System.out.flush(); + return defaultInputStream.read(buffer, offset, length); + } else { + throw new EOFException("No input provided for project"); + } + } + + /** + * Demux an input request to the correct task. + * + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @since Ant 1.6 + */ + public int demuxInput(final byte[] buffer, final int offset, final int length) + throws IOException { + final Task task = getThreadTask(Thread.currentThread()); + if (task == null) { + return defaultInput(buffer, offset, length); + } else { + return task.handleInput(buffer, offset, length); + } + } + + /** + * Demultiplex flush operations so that each task receives the appropriate + * messages. If the current thread is not currently executing a task, + * the message is logged directly. + * + * @since Ant 1.5.2 + * + * @param output Message to handle. Should not be null. + * @param isError Whether the text represents an error (true) + * or information (false). + */ + public void demuxFlush(final String output, final boolean isError) { + final Task task = getThreadTask(Thread.currentThread()); + if (task == null) { + fireMessageLogged(this, output, isError ? MSG_ERR : MSG_INFO); + } else { + if (isError) { + task.handleErrorFlush(output); + } else { + task.handleFlush(output); + } + } + } + + /** + * Execute the specified target and any targets it depends on. + * + * @param targetName The name of the target to execute. + * Must not be null. + * + * @exception BuildException if the build failed. + */ + public void executeTarget(final String targetName) throws BuildException { + + // sanity check ourselves, if we've been asked to build nothing + // then we should complain + + if (targetName == null) { + final String msg = "No target specified"; + throw new BuildException(msg); + } + + // Sort and run the dependency tree. + // Sorting checks if all the targets (and dependencies) + // exist, and if there is any cycle in the dependency + // graph. + executeSortedTargets(topoSort(targetName, targets, false)); + } + + /** + * Execute a Vector of sorted targets. + * @param sortedTargets the aforementioned Vector. + * @throws BuildException on error. + */ + public void executeSortedTargets(final Vector sortedTargets) + throws BuildException { + final Set succeededTargets = new HashSet(); + BuildException buildException = null; // first build exception + for (final Target curtarget : sortedTargets) { + boolean canExecute = true; + for (final Enumeration depIter = curtarget.getDependencies(); + depIter.hasMoreElements();) { + final String dependencyName = depIter.nextElement(); + if (!succeededTargets.contains(dependencyName)) { + canExecute = false; + log(curtarget, + "Cannot execute '" + curtarget.getName() + "' - '" + + dependencyName + "' failed or was not executed.", + MSG_ERR); + break; + } + } + if (canExecute) { + Throwable thrownException = null; + try { + curtarget.performTasks(); + succeededTargets.add(curtarget.getName()); + } catch (final RuntimeException ex) { + if (!(keepGoingMode)) { + throw ex; // throw further + } + thrownException = ex; + } catch (final Throwable ex) { + if (!(keepGoingMode)) { + throw new BuildException(ex); + } + thrownException = ex; + } + if (thrownException != null) { + if (thrownException instanceof BuildException) { + log(curtarget, + "Target '" + curtarget.getName() + + "' failed with message '" + + thrownException.getMessage() + "'.", MSG_ERR); + // only the first build exception is reported + if (buildException == null) { + buildException = (BuildException) thrownException; + } + } else { + log(curtarget, + "Target '" + curtarget.getName() + + "' failed with message '" + + thrownException.getMessage() + "'.", MSG_ERR); + thrownException.printStackTrace(System.err); + if (buildException == null) { + buildException = + new BuildException(thrownException); + } + } + } + } + } + if (buildException != null) { + throw buildException; + } + } + + /** + * Return the canonical form of a filename. + *

    + * If the specified file name is relative it is resolved + * with respect to the given root directory. + * + * @param fileName The name of the file to resolve. + * Must not be null. + * + * @param rootDir The directory respective to which relative file names + * are resolved. May be null, in which case + * the current directory is used. + * + * @return the resolved File. + * + * @deprecated since 1.4.x + */ + @Deprecated + public File resolveFile(final String fileName, final File rootDir) { + return FILE_UTILS.resolveFile(rootDir, fileName); + } + + /** + * Return the canonical form of a filename. + *

    + * If the specified file name is relative it is resolved + * with respect to the project's base directory. + * + * @param fileName The name of the file to resolve. + * Must not be null. + * + * @return the resolved File. + * + */ + public File resolveFile(final String fileName) { + return FILE_UTILS.resolveFile(baseDir, fileName); + } + + /** + * Translate a path into its native (platform specific) format. + *

    + * This method uses PathTokenizer to separate the input path + * into its components. This handles DOS style paths in a relatively + * sensible way. The file separators are then converted to their platform + * specific versions. + * + * @param toProcess The path to be translated. + * May be null. + * + * @return the native version of the specified path or + * an empty string if the path is null or empty. + * + * @deprecated since 1.7 + * Use FileUtils.translatePath instead. + * + * @see PathTokenizer + */ + @Deprecated + public static String translatePath(final String toProcess) { + return FileUtils.translatePath(toProcess); + } + + /** + * Convenience method to copy a file from a source to a destination. + * No filtering is performed. + * + * @param sourceFile Name of file to copy from. + * Must not be null. + * @param destFile Name of file to copy to. + * Must not be null. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final String sourceFile, final String destFile) + throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile); + } + + /** + * Convenience method to copy a file from a source to a destination + * specifying if token filtering should be used. + * + * @param sourceFile Name of file to copy from. + * Must not be null. + * @param destFile Name of file to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final String sourceFile, final String destFile, final boolean filtering) + throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null); + } + + /** + * Convenience method to copy a file from a source to a + * destination specifying if token filtering should be used and if + * source files may overwrite newer destination files. + * + * @param sourceFile Name of file to copy from. + * Must not be null. + * @param destFile Name of file to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * @param overwrite Whether or not the destination file should be + * overwritten if it already exists. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final String sourceFile, final String destFile, final boolean filtering, + final boolean overwrite) throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null, overwrite); + } + + /** + * Convenience method to copy a file from a source to a + * destination specifying if token filtering should be used, if + * source files may overwrite newer destination files, and if the + * last modified time of the resulting file should be set to + * that of the source file. + * + * @param sourceFile Name of file to copy from. + * Must not be null. + * @param destFile Name of file to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * @param overwrite Whether or not the destination file should be + * overwritten if it already exists. + * @param preserveLastModified Whether or not the last modified time of + * the resulting file should be set to that + * of the source file. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final String sourceFile, final String destFile, final boolean filtering, + final boolean overwrite, final boolean preserveLastModified) + throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null, overwrite, preserveLastModified); + } + + /** + * Convenience method to copy a file from a source to a destination. + * No filtering is performed. + * + * @param sourceFile File to copy from. + * Must not be null. + * @param destFile File to copy to. + * Must not be null. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final File sourceFile, final File destFile) throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile); + } + + /** + * Convenience method to copy a file from a source to a destination + * specifying if token filtering should be used. + * + * @param sourceFile File to copy from. + * Must not be null. + * @param destFile File to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * + * @exception IOException if the copying fails. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final File sourceFile, final File destFile, final boolean filtering) + throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null); + } + + /** + * Convenience method to copy a file from a source to a + * destination specifying if token filtering should be used and if + * source files may overwrite newer destination files. + * + * @param sourceFile File to copy from. + * Must not be null. + * @param destFile File to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * @param overwrite Whether or not the destination file should be + * overwritten if it already exists. + * + * @exception IOException if the file cannot be copied. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final File sourceFile, final File destFile, final boolean filtering, + final boolean overwrite) throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null, overwrite); + } + + /** + * Convenience method to copy a file from a source to a + * destination specifying if token filtering should be used, if + * source files may overwrite newer destination files, and if the + * last modified time of the resulting file should be set to + * that of the source file. + * + * @param sourceFile File to copy from. + * Must not be null. + * @param destFile File to copy to. + * Must not be null. + * @param filtering Whether or not token filtering should be used during + * the copy. + * @param overwrite Whether or not the destination file should be + * overwritten if it already exists. + * @param preserveLastModified Whether or not the last modified time of + * the resulting file should be set to that + * of the source file. + * + * @exception IOException if the file cannot be copied. + * + * @deprecated since 1.4.x + */ + @Deprecated + public void copyFile(final File sourceFile, final File destFile, final boolean filtering, + final boolean overwrite, final boolean preserveLastModified) + throws IOException { + FILE_UTILS.copyFile(sourceFile, destFile, + filtering ? globalFilters : null, overwrite, preserveLastModified); + } + + /** + * Call File.setLastModified(long time) on Java above 1.1, and logs + * a warning on Java 1.1. + * + * @param file The file to set the last modified time on. + * Must not be null. + * + * @param time the required modification time. + * + * @deprecated since 1.4.x + * + * @exception BuildException if the last modified time cannot be set + * despite running on a platform with a version + * above 1.1. + */ + @Deprecated + public void setFileLastModified(final File file, final long time) + throws BuildException { + FILE_UTILS.setFileLastModified(file, time); + log("Setting modification time for " + file, MSG_VERBOSE); + } + + /** + * Return the boolean equivalent of a string, which is considered + * true if either "on", "true", + * or "yes" is found, ignoring case. + * + * @param s The string to convert to a boolean value. + * + * @return true if the given string is "on", + * "true" or "yes", or + * false otherwise. + */ + public static boolean toBoolean(final String s) { + return ("on".equalsIgnoreCase(s) + || "true".equalsIgnoreCase(s) + || "yes".equalsIgnoreCase(s)); + } + + /** + * Get the Project instance associated with the specified object. + * @param o the object to query. + * @return Project instance, if any. + * @since Ant 1.7.1 + */ + public static Project getProject(final Object o) { + if (o instanceof ProjectComponent) { + return ((ProjectComponent) o).getProject(); + } + try { + final Method m = o.getClass().getMethod("getProject", (Class[]) null); + if (Project.class == m.getReturnType()) { + return (Project) m.invoke(o, (Object[]) null); + } + } catch (final Exception e) { + //too bad + } + return null; + } + + /** + * Topologically sort a set of targets. Equivalent to calling + * topoSort(new String[] {root}, targets, true). + * + * @param root The name of the root target. The sort is created in such + * a way that the sequence of Targets up to the root + * target is the minimum possible such sequence. + * Must not be null. + * @param targetTable A Hashtable mapping names to Targets. + * Must not be null. + * @return a Vector of ALL Target objects in sorted order. + * @exception BuildException if there is a cyclic dependency among the + * targets, or if a named target does not exist. + */ + public final Vector topoSort(final String root, final Hashtable targetTable) + throws BuildException { + return topoSort(new String[] {root}, targetTable, true); + } + + /** + * Topologically sort a set of targets. Equivalent to calling + * topoSort(new String[] {root}, targets, returnAll). + * + * @param root The name of the root target. The sort is created in such + * a way that the sequence of Targets up to the root + * target is the minimum possible such sequence. + * Must not be null. + * @param targetTable A Hashtable mapping names to Targets. + * Must not be null. + * @param returnAll boolean indicating whether to return all + * targets, or the execution sequence only. + * @return a Vector of Target objects in sorted order. + * @exception BuildException if there is a cyclic dependency among the + * targets, or if a named target does not exist. + * @since Ant 1.6.3 + */ + public final Vector topoSort(final String root, final Hashtable targetTable, + final boolean returnAll) throws BuildException { + return topoSort(new String[] {root}, targetTable, returnAll); + } + + /** + * Topologically sort a set of targets. + * + * @param root String[] containing the names of the root targets. + * The sort is created in such a way that the ordered sequence of + * Targets is the minimum possible such sequence to the specified + * root targets. + * Must not be null. + * @param targetTable A map of names to targets (String to Target). + * Must not be null. + * @param returnAll boolean indicating whether to return all + * targets, or the execution sequence only. + * @return a Vector of Target objects in sorted order. + * @exception BuildException if there is a cyclic dependency among the + * targets, or if a named target does not exist. + * @since Ant 1.6.3 + */ + public final Vector topoSort(final String[] root, final Hashtable targetTable, + final boolean returnAll) throws BuildException { + final Vector ret = new VectorSet(); + final Hashtable state = new Hashtable(); + final Stack visiting = new Stack(); + + // We first run a DFS based sort using each root as a starting node. + // This creates the minimum sequence of Targets to the root node(s). + // We then do a sort on any remaining unVISITED targets. + // This is unnecessary for doing our build, but it catches + // circular dependencies or missing Targets on the entire + // dependency tree, not just on the Targets that depend on the + // build Target. + + for (int i = 0; i < root.length; i++) { + final String st = (state.get(root[i])); + if (st == null) { + tsort(root[i], targetTable, state, visiting, ret); + } else if (st == VISITING) { + throw new RuntimeException("Unexpected node in visiting state: " + + root[i]); + } + } + final StringBuffer buf = new StringBuffer("Build sequence for target(s)"); + + for (int j = 0; j < root.length; j++) { + buf.append((j == 0) ? " `" : ", `").append(root[j]).append('\''); + } + buf.append(" is " + ret); + log(buf.toString(), MSG_VERBOSE); + + final Vector complete = (returnAll) ? ret : new Vector(ret); + for (final Enumeration en = targetTable.keys(); en.hasMoreElements();) { + final String curTarget = en.nextElement(); + final String st = state.get(curTarget); + if (st == null) { + tsort(curTarget, targetTable, state, visiting, complete); + } else if (st == VISITING) { + throw new RuntimeException("Unexpected node in visiting state: " + + curTarget); + } + } + log("Complete build sequence is " + complete, MSG_VERBOSE); + return ret; + } + + /** + * Perform a single step in a recursive depth-first-search traversal of + * the target dependency tree. + *

    + * The current target is first set to the "visiting" state, and + * pushed onto the "visiting" stack. + *

    + * An exception is then thrown if any child of the current node is in the + * visiting state, as that implies a circular dependency. The exception + * contains details of the cycle, using elements of the "visiting" + * stack. + *

    + * If any child has not already been "visited", this method is + * called recursively on it. + *

    + * The current target is then added to the ordered list of targets. Note + * that this is performed after the children have been visited in order + * to get the correct order. The current target is set to the + * "visited" state. + *

    + * By the time this method returns, the ordered list contains the sequence + * of targets up to and including the current target. + * + * @param root The current target to inspect. + * Must not be null. + * @param targetTable A mapping from names to targets (String to Target). + * Must not be null. + * @param state A mapping from target names to states (String to String). + * The states in question are "VISITING" and + * "VISITED". Must not be null. + * @param visiting A stack of targets which are currently being visited. + * Must not be null. + * @param ret The list to add target names to. This will end up + * containing the complete list of dependencies in + * dependency order. + * Must not be null. + * + * @exception BuildException if a non-existent target is specified or if + * a circular dependency is detected. + */ + private void tsort(final String root, final Hashtable targetTable, + final Hashtable state, final Stack visiting, + final Vector ret) + throws BuildException { + state.put(root, VISITING); + visiting.push(root); + + final Target target = targetTable.get(root); + + // Make sure we exist + if (target == null) { + final StringBuilder sb = new StringBuilder("Target \""); + sb.append(root); + sb.append("\" does not exist in the project \""); + sb.append(name); + sb.append("\". "); + visiting.pop(); + if (!visiting.empty()) { + final String parent = visiting.peek(); + sb.append("It is used from target \""); + sb.append(parent); + sb.append("\"."); + } + throw new BuildException(new String(sb)); + } + for (final Enumeration en = target.getDependencies(); en.hasMoreElements();) { + final String cur = en.nextElement(); + final String m = state.get(cur); + if (m == null) { + // Not been visited + tsort(cur, targetTable, state, visiting, ret); + } else if (m == VISITING) { + // Currently visiting this node, so have a cycle + throw makeCircularException(cur, visiting); + } + } + final String p = visiting.pop(); + if (root != p) { + throw new RuntimeException("Unexpected internal error: expected to " + + "pop " + root + " but got " + p); + } + state.put(root, VISITED); + ret.addElement(target); + } + + /** + * Build an appropriate exception detailing a specified circular + * dependency. + * + * @param end The dependency to stop at. Must not be null. + * @param stk A stack of dependencies. Must not be null. + * + * @return a BuildException detailing the specified circular dependency. + */ + private static BuildException makeCircularException(final String end, final Stack stk) { + final StringBuilder sb = new StringBuilder("Circular dependency: "); + sb.append(end); + String c; + do { + c = stk.pop(); + sb.append(" <- "); + sb.append(c); + } while (!c.equals(end)); + return new BuildException(sb.toString()); + } + + /** + * Inherit the id references. + * @param parent the parent project of this project. + */ + public void inheritIDReferences(final Project parent) { + } + + /** + * Add an id reference. + * Used for broken build files. + * @param id the id to set. + * @param value the value to set it to (Unknown element in this case. + */ + public void addIdReference(final String id, final Object value) { + idReferences.put(id, value); + } + + /** + * Add a reference to the project. + * + * @param referenceName The name of the reference. Must not be null. + * @param value The value of the reference. + */ + public void addReference(final String referenceName, final Object value) { + final Object old = ((AntRefTable) references).getReal(referenceName); + if (old == value) { + // no warning, this is not changing anything + return; + } + if (old != null && !(old instanceof UnknownElement)) { + log("Overriding previous definition of reference to " + referenceName, + MSG_VERBOSE); + } + log("Adding reference: " + referenceName, MSG_DEBUG); + references.put(referenceName, value); + } + + /** + * Return a map of the references in the project (String to Object). + * The returned hashtable is "live" and so must not be modified. + * + * @return a map of the references in the project (String to Object). + */ + public Hashtable getReferences() { + return references; + } + + /** + * Does the project know this reference? + * + * @since Ant 1.8.0 + */ + public boolean hasReference(final String key) { + return references.containsKey(key); + } + + /** + * Return a map of the references in the project (String to + * Object). The returned hashtable is a copy of the + * "live" references. + * + * @return a map of the references in the project (String to Object). + * + * @since Ant 1.8.1 + */ + public Map getCopyOfReferences() { + return new HashMap(references); + } + + /** + * Look up a reference by its key (ID). + * + * @param key The key for the desired reference. + * Must not be null. + * + * @return the reference with the specified ID, or null if + * there is no such reference in the project, with type inference. + */ + public T getReference(final String key) { + @SuppressWarnings("unchecked") + final T ret = (T) references.get(key); + if (ret != null) { + return ret; + } + if (!key.equals(MagicNames.REFID_PROPERTY_HELPER)) { + try { + if (PropertyHelper.getPropertyHelper(this).containsProperties(key)) { + log("Unresolvable reference " + key + + " might be a misuse of property expansion syntax.", MSG_WARN); + } + } catch (final Exception e) { + //ignore + } + } + return null; + } + + /** + * Return a description of the type of the given element, with + * special handling for instances of tasks and data types. + *

    + * This is useful for logging purposes. + * + * @param element The element to describe. + * Must not be null. + * + * @return a description of the element type. + * + * @since 1.95, Ant 1.5 + */ + public String getElementName(final Object element) { + return ComponentHelper.getComponentHelper(this).getElementName(element); + } + + /** + * Send a "build started" event + * to the build listeners for this project. + */ + public void fireBuildStarted() { + final BuildEvent event = new BuildEvent(this); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].buildStarted(event); + } + } + + /** + * Send a "build finished" event to the build listeners + * for this project. + * @param exception an exception indicating a reason for a build + * failure. May be null, indicating + * a successful build. + */ + public void fireBuildFinished(final Throwable exception) { + final BuildEvent event = new BuildEvent(this); + event.setException(exception); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].buildFinished(event); + } + // Inform IH to clear the cache + IntrospectionHelper.clearCache(); + } + + /** + * Send a "subbuild started" event to the build listeners for + * this project. + * + * @since Ant 1.6.2 + */ + public void fireSubBuildStarted() { + final BuildEvent event = new BuildEvent(this); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + if (currListeners[i] instanceof SubBuildListener) { + ((SubBuildListener) currListeners[i]).subBuildStarted(event); + } + } + } + + /** + * Send a "subbuild finished" event to the build listeners for + * this project. + * @param exception an exception indicating a reason for a build + * failure. May be null, indicating + * a successful build. + * + * @since Ant 1.6.2 + */ + public void fireSubBuildFinished(final Throwable exception) { + final BuildEvent event = new BuildEvent(this); + event.setException(exception); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + if (currListeners[i] instanceof SubBuildListener) { + ((SubBuildListener) currListeners[i]).subBuildFinished(event); + } + } + } + + /** + * Send a "target started" event to the build listeners + * for this project. + * + * @param target The target which is starting to build. + * Must not be null. + */ + protected void fireTargetStarted(final Target target) { + final BuildEvent event = new BuildEvent(target); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].targetStarted(event); + } + + } + + /** + * Send a "target finished" event to the build listeners + * for this project. + * + * @param target The target which has finished building. + * Must not be null. + * @param exception an exception indicating a reason for a build + * failure. May be null, indicating + * a successful build. + */ + protected void fireTargetFinished(final Target target, final Throwable exception) { + final BuildEvent event = new BuildEvent(target); + event.setException(exception); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].targetFinished(event); + } + + } + + /** + * Send a "task started" event to the build listeners + * for this project. + * + * @param task The target which is starting to execute. + * Must not be null. + */ + protected void fireTaskStarted(final Task task) { + // register this as the current task on the current thread. + registerThreadTask(Thread.currentThread(), task); + final BuildEvent event = new BuildEvent(task); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].taskStarted(event); + } + } + + /** + * Send a "task finished" event to the build listeners for this + * project. + * + * @param task The task which has finished executing. + * Must not be null. + * @param exception an exception indicating a reason for a build + * failure. May be null, indicating + * a successful build. + */ + protected void fireTaskFinished(final Task task, final Throwable exception) { + registerThreadTask(Thread.currentThread(), null); + System.out.flush(); + System.err.flush(); + final BuildEvent event = new BuildEvent(task); + event.setException(exception); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].taskFinished(event); + } + + } + + /** + * Send a "message logged" event to the build listeners + * for this project. + * + * @param event The event to send. This should be built up with the + * appropriate task/target/project by the caller, so that + * this method can set the message and priority, then send + * the event. Must not be null. + * @param message The message to send. Should not be null. + * @param priority The priority of the message. + */ + private void fireMessageLoggedEvent(final BuildEvent event, String message, + final int priority) { + + if (message == null) { + message = String.valueOf(message); + } + if (message.endsWith(StringUtils.LINE_SEP)) { + final int endIndex = message.length() - StringUtils.LINE_SEP.length(); + event.setMessage(message.substring(0, endIndex), priority); + } else { + event.setMessage(message, priority); + } + if (isLoggingMessage.get() != Boolean.FALSE) { + /* + * One of the Listeners has attempted to access + * System.err or System.out. + * + * We used to throw an exception in this case, but + * sometimes Listeners can't prevent it(like our own + * Log4jListener which invokes getLogger() which in + * turn wants to write to the console). + * + * @see http://marc.theaimsgroup.com/?t=110538624200006&r=1&w=2 + * + * We now (Ant 1.6.3 and later) simply swallow the message. + */ + return; + } + try { + isLoggingMessage.set(Boolean.TRUE); + final BuildListener[] currListeners = listeners; + for (int i = 0; i < currListeners.length; i++) { + currListeners[i].messageLogged(event); + } + } finally { + isLoggingMessage.set(Boolean.FALSE); + } + } + + /** + * Send a "message logged" project level event + * to the build listeners for this project. + * + * @param project The project generating the event. + * Should not be null. + * @param message The message to send. Should not be null. + * @param priority The priority of the message. + */ + protected void fireMessageLogged(final Project project, final String message, + final int priority) { + fireMessageLogged(project, message, null, priority); + } + + /** + * Send a "message logged" project level event + * to the build listeners for this project. + * + * @param project The project generating the event. + * Should not be null. + * @param message The message to send. Should not be null. + * @param throwable The exception that caused this message. May be null. + * @param priority The priority of the message. + * @since 1.7 + */ + protected void fireMessageLogged(final Project project, final String message, + final Throwable throwable, final int priority) { + final BuildEvent event = new BuildEvent(project); + event.setException(throwable); + fireMessageLoggedEvent(event, message, priority); + } + + /** + * Send a "message logged" target level event + * to the build listeners for this project. + * + * @param target The target generating the event. + * Must not be null. + * @param message The message to send. Should not be null. + * @param priority The priority of the message. + */ + protected void fireMessageLogged(final Target target, final String message, + final int priority) { + fireMessageLogged(target, message, null, priority); + } + + /** + * Send a "message logged" target level event + * to the build listeners for this project. + * + * @param target The target generating the event. + * Must not be null. + * @param message The message to send. Should not be null. + * @param throwable The exception that caused this message. May be null. + * @param priority The priority of the message. + * @since 1.7 + */ + protected void fireMessageLogged(final Target target, final String message, + final Throwable throwable, final int priority) { + final BuildEvent event = new BuildEvent(target); + event.setException(throwable); + fireMessageLoggedEvent(event, message, priority); + } + + /** + * Send a "message logged" task level event + * to the build listeners for this project. + * + * @param task The task generating the event. + * Must not be null. + * @param message The message to send. Should not be null. + * @param priority The priority of the message. + */ + protected void fireMessageLogged(final Task task, final String message, final int priority) { + fireMessageLogged(task, message, null, priority); + } + + /** + * Send a "message logged" task level event + * to the build listeners for this project. + * + * @param task The task generating the event. + * Must not be null. + * @param message The message to send. Should not be null. + * @param throwable The exception that caused this message. May be null. + * @param priority The priority of the message. + * @since 1.7 + */ + protected void fireMessageLogged(final Task task, final String message, + final Throwable throwable, final int priority) { + final BuildEvent event = new BuildEvent(task); + event.setException(throwable); + fireMessageLoggedEvent(event, message, priority); + } + + /** + * Register a task as the current task for a thread. + * If the task is null, the thread's entry is removed. + * + * @param thread the thread on which the task is registered. + * @param task the task to be registered. + * @since Ant 1.5 + */ + public void registerThreadTask(final Thread thread, final Task task) { + synchronized (threadTasks) { + if (task != null) { + threadTasks.put(thread, task); + threadGroupTasks.put(thread.getThreadGroup(), task); + } else { + threadTasks.remove(thread); + threadGroupTasks.remove(thread.getThreadGroup()); + } + } + } + + /** + * Get the current task associated with a thread, if any. + * + * @param thread the thread for which the task is required. + * @return the task which is currently registered for the given thread or + * null if no task is registered. + */ + public Task getThreadTask(final Thread thread) { + synchronized (threadTasks) { + Task task = threadTasks.get(thread); + if (task == null) { + ThreadGroup group = thread.getThreadGroup(); + while (task == null && group != null) { + task = threadGroupTasks.get(group); + group = group.getParent(); + } + } + return task; + } + } + + + // Should move to a separate public class - and have API to add + // listeners, etc. + private static class AntRefTable extends Hashtable { + private static final long serialVersionUID = 1L; + + AntRefTable() { + super(); + } + + /** Returns the unmodified original object. + * This method should be called internally to + * get the "real" object. + * The normal get method will do the replacement + * of UnknownElement (this is similar with the JDNI + * refs behavior). + */ + private Object getReal(final Object key) { + return super.get(key); + } + + /** Get method for the reference table. + * It can be used to hook dynamic references and to modify + * some references on the fly--for example for delayed + * evaluation. + * + * It is important to make sure that the processing that is + * done inside is not calling get indirectly. + * + * @param key lookup key. + * @return mapped value. + */ + @Override + public Object get(final Object key) { + Object o = getReal(key); + if (o instanceof UnknownElement) { + // Make sure that + final UnknownElement ue = (UnknownElement) o; + ue.maybeConfigure(); + o = ue.getRealThing(); + } + return o; + } + } + + /** + * Set a reference to this Project on the parameterized object. + * Need to set the project before other set/add elements + * are called. + * @param obj the object to invoke setProject(this) on. + */ + public final void setProjectReference(final Object obj) { + if (obj instanceof ProjectComponent) { + ((ProjectComponent) obj).setProject(this); + return; + } + try { + final Method method = + obj.getClass().getMethod( + "setProject", new Class[] {Project.class}); + if (method != null) { + method.invoke(obj, new Object[] {this}); + } + } catch (final Throwable e) { + // ignore this if the object does not have + // a set project method or the method + // is private/protected. + } + } + + /** + * Resolve the file relative to the project's basedir and return it as a + * FileResource. + * @param name the name of the file to resolve. + * @return the file resource. + * @since Ant 1.7 + */ + public Resource getResource(final String name) { + return new FileResource(getBaseDir(), name); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectComponent.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectComponent.java new file mode 100644 index 00000000..ad92a317 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectComponent.java @@ -0,0 +1,169 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Base class for components of a project, including tasks and data types. + * Provides common facilities. + * + */ +public abstract class ProjectComponent implements Cloneable { + + // CheckStyle:VisibilityModifier OFF - bc + /** + * Project object of this component. + * @deprecated since 1.6.x. + * You should not be directly accessing this variable directly. + * You should access project object via the getProject() + * or setProject() accessor/mutators. + */ + protected Project project; + + /** + * Location within the build file of this task definition. + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the {@link #getLocation()} method. + */ + protected Location location = Location.UNKNOWN_LOCATION; + + /** + * Description of this component, if any. + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + */ + protected String description; + // CheckStyle:VisibilityModifier ON + + /** Sole constructor. */ + public ProjectComponent() { + } + + /** + * Sets the project object of this component. This method is used by + * Project when a component is added to it so that the component has + * access to the functions of the project. It should not be used + * for any other purpose. + * + * @param project Project in whose scope this component belongs. + * Must not be null. + */ + public void setProject(Project project) { + this.project = project; + } + + /** + * Returns the project to which this component belongs. + * + * @return the components's project. + */ + public Project getProject() { + return project; + } + + /** + * Returns the file/location where this task was defined. + * + * @return the file/location where this task was defined. + * Should not return null. Location.UNKNOWN_LOCATION + * is used for unknown locations. + * + * @see Location#UNKNOWN_LOCATION + */ + public Location getLocation() { + return location; + } + + /** + * Sets the file/location where this task was defined. + * + * @param location The file/location where this task was defined. + * Should not be null--use + * Location.UNKNOWN_LOCATION if the location isn't known. + * + * @see Location#UNKNOWN_LOCATION + */ + public void setLocation(Location location) { + this.location = location; + } + + /** + * Sets a description of the current action. This may be used for logging + * purposes. + * + * @param desc Description of the current action. + * May be null, indicating that no description is + * available. + * + */ + public void setDescription(String desc) { + description = desc; + } + + /** + * Returns the description of the current action. + * + * @return the description of the current action, or null if + * no description is available. + */ + public String getDescription() { + return description; + } + + /** + * Logs a message with the default (INFO) priority. + * + * @param msg The message to be logged. Should not be null. + */ + public void log(String msg) { + log(msg, Project.MSG_INFO); + } + + /** + * Logs a message with the given priority. + * + * @param msg The message to be logged. Should not be null. + * @param msgLevel the message priority at which this message is + * to be logged. + */ + public void log(String msg, int msgLevel) { + if (getProject() != null) { + getProject().log(msg, msgLevel); + } else { + // 'reasonable' default, if the component is used without + // a Project ( for example as a standalone Bean ). + // Most ant components can be used this way. + if (msgLevel <= Project.MSG_INFO) { + System.err.println(msg); + } + } + } + + /** + * @since Ant 1.7 + * @return a shallow copy of this projectcomponent. + * @throws CloneNotSupportedException does not happen, + * but is declared to allow subclasses to do so. + */ + public Object clone() throws CloneNotSupportedException { + ProjectComponent pc = (ProjectComponent) super.clone(); + pc.setLocation(getLocation()); + pc.setProject(getProject()); + return pc; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelper.java new file mode 100644 index 00000000..c6eaa077 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelper.java @@ -0,0 +1,698 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.File; +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Vector; + +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.util.LoaderUtils; +import org.xml.sax.AttributeList; + +/** + * Configures a Project (complete with Targets and Tasks) based on + * a build file. It'll rely on a plugin to do the actual processing + * of the file. + *

    + * This class also provide static wrappers for common introspection. + */ +public class ProjectHelper { + /** The URI for ant name space */ + public static final String ANT_CORE_URI = "antlib:org.apache.tools.ant"; + + /** The URI for antlib current definitions */ + public static final String ANT_CURRENT_URI = "ant:current"; + + /** The URI for ant specific attributes + * @since Ant 1.9.1 + * */ + public static final String ANT_ATTRIBUTE_URI = "ant:attribute"; + + /** The URI for defined types/tasks - the format is antlib:<package> */ + public static final String ANTLIB_URI = "antlib:"; + + /** Polymorphic attribute */ + public static final String ANT_TYPE = "ant-type"; + + /** + * Name of JVM system property which provides the name of the + * ProjectHelper class to use. + */ + public static final String HELPER_PROPERTY = MagicNames.PROJECT_HELPER_CLASS; + + /** + * The service identifier in jars which provide Project Helper + * implementations. + */ + public static final String SERVICE_ID = MagicNames.PROJECT_HELPER_SERVICE; + + /** + * name of project helper reference that we add to a project + */ + public static final String PROJECTHELPER_REFERENCE = MagicNames.REFID_PROJECT_HELPER; + + /** + * constant to denote use project name as target prefix + * @since Ant 1.9.1 + */ + public static final String USE_PROJECT_NAME_AS_TARGET_PREFIX = "USE_PROJECT_NAME_AS_TARGET_PREFIX"; + + /** + * Configures the project with the contents of the specified build file. + * + * @param project The project to configure. Must not be null. + * @param buildFile A build file giving the project's configuration. + * Must not be null. + * + * @exception BuildException if the configuration is invalid or cannot be read + */ + public static void configureProject(Project project, File buildFile) throws BuildException { + FileResource resource = new FileResource(buildFile); + ProjectHelper helper = ProjectHelperRepository.getInstance().getProjectHelperForBuildFile(resource); + project.addReference(PROJECTHELPER_REFERENCE, helper); + helper.parse(project, buildFile); + } + + /** + * Possible value for target's onMissingExtensionPoint attribute. It determines how to deal with + * targets that want to extend missing extension-points. + *

    + * This class behaves like a Java 1.5 Enum class. + * + * @since 1.8.2 + */ + public static final class OnMissingExtensionPoint { + + /** fail if the extension-point is not defined */ + public static final OnMissingExtensionPoint FAIL = new OnMissingExtensionPoint( + "fail"); + + /** warn if the extension-point is not defined */ + public static final OnMissingExtensionPoint WARN = new OnMissingExtensionPoint( + "warn"); + + /** ignore the extensionOf attribute if the extension-point is not defined */ + public static final OnMissingExtensionPoint IGNORE = new OnMissingExtensionPoint( + "ignore"); + + private static final OnMissingExtensionPoint[] values = new OnMissingExtensionPoint[] { + FAIL, WARN, IGNORE }; + + private final String name; + + private OnMissingExtensionPoint(String name) { + this.name = name; + } + + public String name() { + return name; + } + + public String toString() { + return name; + } + + public static OnMissingExtensionPoint valueOf(String name) { + if (name == null) { + throw new NullPointerException(); + } + for (int i = 0; i < values.length; i++) { + if (name.equals(values[i].name())) { + return values[i]; + } + } + throw new IllegalArgumentException( + "Unknown onMissingExtensionPoint " + name); + } + } + + /** Default constructor */ + public ProjectHelper() { + } + + // -------------------- Common properties -------------------- + // The following properties are required by import ( and other tasks + // that read build files using ProjectHelper ). + + private Vector importStack = new Vector(); + private List extensionStack = new LinkedList(); + + /** + * Import stack. + * Used to keep track of imported files. Error reporting should + * display the import path. + * + * @return the stack of import source objects. + */ + public Vector getImportStack() { + return importStack; + } + + /** + * Extension stack. + * Used to keep track of targets that extend extension points. + * + * @return a list of three element string arrays where the first + * element is the name of the extensionpoint, the second the name + * of the target and the third the name of the enum like class + * {@link OnMissingExtensionPoint}. + */ + public List getExtensionStack() { + return extensionStack; + } + + private static final ThreadLocal targetPrefix = new ThreadLocal(); + + /** + * The prefix to prepend to imported target names. + * + *

    May be set by <import>'s as attribute.

    + * + * @return the configured prefix or null + * + * @since Ant 1.8.0 + */ + public static String getCurrentTargetPrefix() { + return targetPrefix.get(); + } + + /** + * Sets the prefix to prepend to imported target names. + * + * @since Ant 1.8.0 + */ + public static void setCurrentTargetPrefix(String prefix) { + targetPrefix.set(prefix); + } + + private static final ThreadLocal prefixSeparator = new ThreadLocal() { + protected String initialValue() { + return "."; + } + }; + + /** + * The separator between the prefix and the target name. + * + *

    May be set by <import>'s prefixSeparator attribute.

    + * + * @since Ant 1.8.0 + */ + public static String getCurrentPrefixSeparator() { + return prefixSeparator.get(); + } + + /** + * Sets the separator between the prefix and the target name. + * + * @since Ant 1.8.0 + */ + public static void setCurrentPrefixSeparator(String sep) { + prefixSeparator.set(sep); + } + + private static final ThreadLocal inIncludeMode = new ThreadLocal() { + protected Boolean initialValue() { + return Boolean.FALSE; + } + }; + + /** + * Whether the current file should be read in include as opposed + * to import mode. + * + *

    In include mode included targets are only known by their + * prefixed names and their depends lists get rewritten so that + * all dependencies get the prefix as well.

    + * + *

    In import mode imported targets are known by an adorned as + * well as a prefixed name and the unadorned target may be + * overwritten in the importing build file. The depends list of + * the imported targets is not modified at all.

    + * + * @since Ant 1.8.0 + */ + public static boolean isInIncludeMode() { + return Boolean.TRUE.equals(inIncludeMode.get()); + } + + /** + * Sets whether the current file should be read in include as + * opposed to import mode. + * + * @since Ant 1.8.0 + */ + public static void setInIncludeMode(boolean includeMode) { + inIncludeMode.set(Boolean.valueOf(includeMode)); + } + + // -------------------- Parse method -------------------- + /** + * Parses the project file, configuring the project as it goes. + * + * @param project The project for the resulting ProjectHelper to configure. + * Must not be null. + * @param source The source for XML configuration. A helper must support + * at least File, for backward compatibility. Helpers may + * support URL, InputStream, etc or specialized types. + * + * @since Ant1.5 + * @exception BuildException if the configuration is invalid or cannot + * be read + */ + public void parse(Project project, Object source) throws BuildException { + throw new BuildException("ProjectHelper.parse() must be implemented " + + "in a helper plugin " + this.getClass().getName()); + } + + /** + * Get the first project helper found in the classpath + * + * @return an project helper, never null + * @see org.apache.tools.ant.ProjectHelperRepository#getHelpers() + */ + public static ProjectHelper getProjectHelper() { + return (ProjectHelper) ProjectHelperRepository.getInstance().getHelpers().next(); + } + + /** + * JDK1.1 compatible access to the context class loader. Cut & paste from JAXP. + * + * @deprecated since 1.6.x. + * Use LoaderUtils.getContextClassLoader() + * + * @return the current context class loader, or null + * if the context class loader is unavailable. + */ + public static ClassLoader getContextClassLoader() { + return LoaderUtils.isContextLoaderAvailable() ? LoaderUtils.getContextClassLoader() : null; + } + + // -------------------- Static utils, used by most helpers ---------------- + + /** + * Configures an object using an introspection handler. + * + * @param target The target object to be configured. + * Must not be null. + * @param attrs A list of attributes to configure within the target. + * Must not be null. + * @param project The project containing the target. + * Must not be null. + * + * @deprecated since 1.6.x. + * Use IntrospectionHelper for each property. + * + * @exception BuildException if any of the attributes can't be handled by + * the target + */ + public static void configure(Object target, AttributeList attrs, + Project project) throws BuildException { + if (target instanceof TypeAdapter) { + target = ((TypeAdapter) target).getProxy(); + } + IntrospectionHelper ih = IntrospectionHelper.getHelper(project, target.getClass()); + + for (int i = 0, length = attrs.getLength(); i < length; i++) { + // reflect these into the target + String value = replaceProperties(project, attrs.getValue(i), project.getProperties()); + try { + ih.setAttribute(project, target, attrs.getName(i).toLowerCase(Locale.ENGLISH), value); + } catch (BuildException be) { + // id attribute must be set externally + if (!attrs.getName(i).equals("id")) { + throw be; + } + } + } + } + + /** + * Adds the content of #PCDATA sections to an element. + * + * @param project The project containing the target. + * Must not be null. + * @param target The target object to be configured. + * Must not be null. + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * + * @exception BuildException if the target object doesn't accept text + */ + public static void addText(Project project, Object target, char[] buf, + int start, int count) throws BuildException { + addText(project, target, new String(buf, start, count)); + } + + /** + * Adds the content of #PCDATA sections to an element. + * + * @param project The project containing the target. + * Must not be null. + * @param target The target object to be configured. + * Must not be null. + * @param text Text to add to the target. + * May be null, in which case this + * method call is a no-op. + * + * @exception BuildException if the target object doesn't accept text + */ + public static void addText(Project project, Object target, String text) + throws BuildException { + + if (text == null) { + return; + } + if (target instanceof TypeAdapter) { + target = ((TypeAdapter) target).getProxy(); + } + IntrospectionHelper.getHelper(project, target.getClass()).addText(project, target, text); + } + + /** + * Stores a configured child element within its parent object. + * + * @param project Project containing the objects. + * May be null. + * @param parent Parent object to add child to. + * Must not be null. + * @param child Child object to store in parent. + * Should not be null. + * @param tag Name of element which generated the child. + * May be null, in which case + * the child is not stored. + */ + public static void storeChild(Project project, Object parent, Object child, String tag) { + IntrospectionHelper ih = IntrospectionHelper.getHelper(project, parent.getClass()); + ih.storeElement(project, parent, child, tag); + } + + /** + * Replaces ${xxx} style constructions in the given value with + * the string value of the corresponding properties. + * + * @param project The project containing the properties to replace. + * Must not be null. + * + * @param value The string to be scanned for property references. + * May be null. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @return the original string with the properties replaced, or + * null if the original string is null. + * + * @deprecated since 1.6.x. + * Use project.replaceProperties(). + * @since 1.5 + */ + public static String replaceProperties(Project project, String value) throws BuildException { + // needed since project properties are not accessible + return project.replaceProperties(value); + } + + /** + * Replaces ${xxx} style constructions in the given value + * with the string value of the corresponding data types. + * + * @param project The container project. This is used solely for + * logging purposes. Must not be null. + * @param value The string to be scanned for property references. + * May be null, in which case this + * method returns immediately with no effect. + * @param keys Mapping (String to Object) of property names to their + * values. Must not be null. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @return the original string with the properties replaced, or + * null if the original string is null. + * @deprecated since 1.6.x. + * Use PropertyHelper. + */ + public static String replaceProperties(Project project, String value, Hashtable keys) + throws BuildException { + PropertyHelper ph = PropertyHelper.getPropertyHelper(project); + return ph.replaceProperties(null, value, keys); + } + + /** + * Parses a string containing ${xxx} style property + * references into two lists. The first list is a collection + * of text fragments, while the other is a set of string property names. + * null entries in the first list indicate a property + * reference from the second list. + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself.

    + * + * @param value Text to parse. Must not be null. + * @param fragments List to add text fragments to. + * Must not be null. + * @param propertyRefs List to add property names to. + * Must not be null. + * + * @deprecated since 1.6.x. + * Use PropertyHelper. + * @exception BuildException if the string contains an opening + * ${ without a closing } + */ + public static void parsePropertyString(String value, Vector fragments, Vector propertyRefs) + throws BuildException { + PropertyHelper.parsePropertyStringDefault(value, fragments, propertyRefs); + } + + /** + * Map a namespaced {uri,name} to an internal string format. + * For BC purposes the names from the ant core uri will be + * mapped to "name", other names will be mapped to + * uri + ":" + name. + * @param uri The namespace URI + * @param name The localname + * @return The stringified form of the ns name + */ + public static String genComponentName(String uri, String name) { + if (uri == null || uri.equals("") || uri.equals(ANT_CORE_URI)) { + return name; + } + return uri + ":" + name; + } + + /** + * extract a uri from a component name + * + * @param componentName The stringified form for {uri, name} + * @return The uri or "" if not present + */ + public static String extractUriFromComponentName(String componentName) { + if (componentName == null) { + return ""; + } + int index = componentName.lastIndexOf(':'); + if (index == -1) { + return ""; + } + return componentName.substring(0, index); + } + + /** + * extract the element name from a component name + * + * @param componentName The stringified form for {uri, name} + * @return The element name of the component + */ + public static String extractNameFromComponentName(String componentName) { + int index = componentName.lastIndexOf(':'); + if (index == -1) { + return componentName; + } + return componentName.substring(index + 1); + } + + /** + * Convert an attribute namespace to a "component name". + * @param ns the xml namespace uri. + * @return the converted value. + * @since Ant 1.9.1 + */ + public static String nsToComponentName(String ns) { + return "attribute namespace:" + ns; + } + + /** + * Add location to build exception. + * @param ex the build exception, if the build exception + * does not include + * @param newLocation the location of the calling task (may be null) + * @return a new build exception based in the build exception with + * location set to newLocation. If the original exception + * did not have a location, just return the build exception + */ + public static BuildException addLocationToBuildException( + BuildException ex, Location newLocation) { + if (ex.getLocation() == null || ex.getMessage() == null) { + return ex; + } + String errorMessage + = "The following error occurred while executing this line:" + + System.getProperty("line.separator") + + ex.getLocation().toString() + + ex.getMessage(); + if (newLocation == null) { + return new BuildException(errorMessage, ex); + } + return new BuildException(errorMessage, ex, newLocation); + } + + /** + * Whether this instance of ProjectHelper can parse an Antlib + * descriptor given by the URL and return its content as an + * UnknownElement ready to be turned into an Antlib task. + * + *

    This method should not try to parse the content of the + * descriptor, the URL is only given as an argument to allow + * subclasses to decide whether they can support a given URL + * scheme or not.

    + * + *

    Subclasses that return true in this method must also + * override {@link #parseAntlibDescriptor + * parseAntlibDescriptor}.

    + * + *

    This implementation returns false.

    + * + * @since Ant 1.8.0 + */ + public boolean canParseAntlibDescriptor(Resource r) { + return false; + } + + /** + * Parse the given URL as an antlib descriptor and return the + * content as something that can be turned into an Antlib task. + * + * @since ant 1.8.0 + */ + public UnknownElement parseAntlibDescriptor(Project containingProject, + Resource source) { + throw new BuildException("can't parse antlib descriptors"); + } + + /** + * Check if the helper supports the kind of file. Some basic check on the + * extension's file should be done here. + * + * @param buildFile + * the file expected to be parsed (never null) + * @return true if the helper supports it + * @since Ant 1.8.0 + */ + public boolean canParseBuildFile(Resource buildFile) { + return true; + } + + /** + * The file name of the build script to be parsed if none specified on the command line + * + * @return the name of the default file (never null) + * @since Ant 1.8.0 + */ + public String getDefaultBuildFile() { + return Main.DEFAULT_BUILD_FILENAME; + } + + /** + * Check extensionStack and inject all targets having extensionOf attributes + * into extensionPoint. + *

    + * This method allow you to defer injection and have a powerful control of + * extensionPoint wiring. + *

    + *

    + * This should be invoked by each concrete implementation of ProjectHelper + * when the root "buildfile" and all imported/included buildfile are loaded. + *

    + * + * @param project The project containing the target. Must not be + * null. + * @exception BuildException if OnMissingExtensionPoint.FAIL and + * extensionPoint does not exist + * @see OnMissingExtensionPoint + * @since 1.9 + */ + public void resolveExtensionOfAttributes(Project project) + throws BuildException { + for (String[] extensionInfo : getExtensionStack()) { + String extPointName = extensionInfo[0]; + String targetName = extensionInfo[1]; + OnMissingExtensionPoint missingBehaviour = OnMissingExtensionPoint.valueOf(extensionInfo[2]); + // if the file has been included or imported, it may have a prefix + // we should consider when trying to resolve the target it is + // extending + String prefixAndSep = extensionInfo.length > 3 ? extensionInfo[3] : null; + + // find the target we're extending + Hashtable projectTargets = project.getTargets(); + Target extPoint = null; + if (prefixAndSep == null) { + // no prefix - not from an imported/included build file + extPoint = projectTargets.get(extPointName); + } else { + // we have a prefix, which means we came from an include/import + + // FIXME: here we handle no particular level of include. We try + // the fully prefixed name, and then the non-prefixed name. But + // there might be intermediate project in the import stack, + // which prefix should be tested before testing the non-prefix + // root name. + + extPoint = projectTargets.get(prefixAndSep + extPointName); + if (extPoint == null) { + extPoint = projectTargets.get(extPointName); + } + } + + // make sure we found a point to extend on + if (extPoint == null) { + String message = "can't add target " + targetName + + " to extension-point " + extPointName + + " because the extension-point is unknown."; + if (missingBehaviour == OnMissingExtensionPoint.FAIL) { + throw new BuildException(message); + } else if (missingBehaviour == OnMissingExtensionPoint.WARN) { + Target t = projectTargets.get(targetName); + project.log(t, "Warning: " + message, Project.MSG_WARN); + } + } else { + if (!(extPoint instanceof ExtensionPoint)) { + throw new BuildException("referenced target " + extPointName + + " is not an extension-point"); + } + extPoint.addDependency(targetName); + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelperRepository.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelperRepository.java new file mode 100644 index 00000000..1dd44124 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/ProjectHelperRepository.java @@ -0,0 +1,337 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.BufferedReader; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.lang.reflect.Constructor; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; + +import org.apache.tools.ant.helper.ProjectHelper2; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.util.LoaderUtils; + +/** + * Repository of {@link ProjectHelper} found in the classpath or via + * some System properties. + * + *

    See the ProjectHelper documentation in the manual.

    + * + * @since Ant 1.8.0 + */ +public class ProjectHelperRepository { + + private static final String DEBUG_PROJECT_HELPER_REPOSITORY = + "ant.project-helper-repo.debug"; + + // The message log level is not accessible here because everything + // is instanciated statically + private static final boolean DEBUG = + "true".equals(System.getProperty(DEBUG_PROJECT_HELPER_REPOSITORY)); + + private static ProjectHelperRepository instance = + new ProjectHelperRepository(); + + private List> helpers = new ArrayList>(); + + private static Constructor PROJECTHELPER2_CONSTRUCTOR; + + static { + try { + PROJECTHELPER2_CONSTRUCTOR = ProjectHelper2.class.getConstructor(); + } catch (Exception e) { + // ProjectHelper2 must be available + throw new RuntimeException(e); + } + } + + public static ProjectHelperRepository getInstance() { + return instance; + } + + private ProjectHelperRepository() { + collectProjectHelpers(); + } + + private void collectProjectHelpers() { + // First, try the system property + Constructor projectHelper = getProjectHelperBySystemProperty(); + registerProjectHelper(projectHelper); + + // A JDK1.3 'service' ( like in JAXP ). That will plug a helper + // automatically if in CLASSPATH, with the right META-INF/services. + try { + ClassLoader classLoader = LoaderUtils.getContextClassLoader(); + if (classLoader != null) { + Enumeration resources = + classLoader.getResources(ProjectHelper.SERVICE_ID); + while (resources.hasMoreElements()) { + URL resource = resources.nextElement(); + URLConnection conn = resource.openConnection(); + conn.setUseCaches(false); + projectHelper = + getProjectHelperByService(conn.getInputStream()); + registerProjectHelper(projectHelper); + } + } + + InputStream systemResource = + ClassLoader.getSystemResourceAsStream(ProjectHelper.SERVICE_ID); + if (systemResource != null) { + projectHelper = getProjectHelperByService(systemResource); + registerProjectHelper(projectHelper); + } + } catch (Exception e) { + System.err.println("Unable to load ProjectHelper from service " + + ProjectHelper.SERVICE_ID + " (" + + e.getClass().getName() + + ": " + e.getMessage() + ")"); + if (DEBUG) { + e.printStackTrace(System.err); + } + } + } + + /** + * Register the specified project helper into the repository. + *

    + * The helper will be added after all the already registered helpers, but + * before the default one (ProjectHelper2) + * + * @param helperClassName + * the fully qualified name of the helper + * @throws BuildException + * if the class cannot be loaded or if there is no constructor + * with no argument + * @since Ant 1.8.2 + */ + public void registerProjectHelper(String helperClassName) + throws BuildException { + registerProjectHelper(getHelperConstructor(helperClassName)); + } + + /** + * Register the specified project helper into the repository. + *

    + * The helper will be added after all the already registered helpers, but + * before the default one (ProjectHelper2) + * + * @param helperClass + * the class of the helper + * @throws BuildException + * if there is no constructor with no argument + * @since Ant 1.8.2 + */ + public void registerProjectHelper(Class helperClass) throws BuildException { + try { + registerProjectHelper(helperClass.getConstructor()); + } catch (NoSuchMethodException e) { + throw new BuildException("Couldn't find no-arg constructor in " + + helperClass.getName()); + } + } + + private void registerProjectHelper(Constructor helperConstructor) { + if (helperConstructor == null) { + return; + } + if (DEBUG) { + System.out.println("ProjectHelper " + + helperConstructor.getClass().getName() + " registered."); + } + helpers.add(helperConstructor); + } + + private Constructor getProjectHelperBySystemProperty() { + String helperClass = System.getProperty(ProjectHelper.HELPER_PROPERTY); + try { + if (helperClass != null) { + return getHelperConstructor(helperClass); + } + } catch (SecurityException e) { + System.err.println("Unable to load ProjectHelper class \"" + + helperClass + " specified in system property " + + ProjectHelper.HELPER_PROPERTY + " (" + + e.getMessage() + ")"); + if (DEBUG) { + e.printStackTrace(System.err); + } + } + return null; + } + + private Constructor getProjectHelperByService(InputStream is) { + try { + // This code is needed by EBCDIC and other strange systems. + // It's a fix for bugs reported in xerces + InputStreamReader isr; + try { + isr = new InputStreamReader(is, "UTF-8"); + } catch (java.io.UnsupportedEncodingException e) { + isr = new InputStreamReader(is); + } + BufferedReader rd = new BufferedReader(isr); + + String helperClassName = rd.readLine(); + rd.close(); + + if (helperClassName != null && !"".equals(helperClassName)) { + return getHelperConstructor(helperClassName); + } + } catch (Exception e) { + System.out.println("Unable to load ProjectHelper from service " + + ProjectHelper.SERVICE_ID + " (" + e.getMessage() + ")"); + if (DEBUG) { + e.printStackTrace(System.err); + } + } + return null; + } + + /** + * Get the constructor with not argument of an helper from its class name. + * It'll first try the thread class loader, then Class.forName() will load + * from the same loader that loaded this class. + * + * @param helperClass + * The name of the class to create an instance of. Must not be + * null. + * + * @return the constructor of the specified class. + * + * @exception BuildException + * if the class cannot be found or if a constructor with no + * argument cannot be found. + */ + private Constructor getHelperConstructor(String helperClass) throws BuildException { + ClassLoader classLoader = LoaderUtils.getContextClassLoader(); + try { + Class clazz = null; + if (classLoader != null) { + try { + clazz = classLoader.loadClass(helperClass); + } catch (ClassNotFoundException ex) { + // try next method + } + } + if (clazz == null) { + clazz = Class.forName(helperClass); + } + return clazz.asSubclass(ProjectHelper.class).getConstructor(); + } catch (Exception e) { + throw new BuildException(e); + } + } + + /** + * Get the helper that will be able to parse the specified build file. The helper + * will be chosen among the ones found in the classpath + * + * @return the first ProjectHelper that fit the requirement (never null). + */ + public ProjectHelper getProjectHelperForBuildFile(Resource buildFile) throws BuildException { + for (Iterator it = getHelpers(); it.hasNext();) { + ProjectHelper helper = it.next(); + if (helper.canParseBuildFile(buildFile)) { + if (DEBUG) { + System.out.println("ProjectHelper " + + helper.getClass().getName() + + " selected for the build file " + + buildFile); + } + return helper; + } + } + throw new RuntimeException("BUG: at least the ProjectHelper2 should " + + "have supported the file " + buildFile); + } + + /** + * Get the helper that will be able to parse the specified antlib. The helper + * will be chosen among the ones found in the classpath + * + * @return the first ProjectHelper that fit the requirement (never null). + */ + public ProjectHelper getProjectHelperForAntlib(Resource antlib) throws BuildException { + for (Iterator it = getHelpers(); it.hasNext();) { + ProjectHelper helper = it.next(); + if (helper.canParseAntlibDescriptor(antlib)) { + if (DEBUG) { + System.out.println("ProjectHelper " + + helper.getClass().getName() + + " selected for the antlib " + + antlib); + } + return helper; + } + } + throw new RuntimeException("BUG: at least the ProjectHelper2 should " + + "have supported the file " + antlib); + } + + /** + * Get an iterator on the list of project helpers configured. The iterator + * will always return at least one element as there will always be the + * default project helper configured. + * + * @return an iterator of {@link ProjectHelper} + */ + public Iterator getHelpers() { + return new ConstructingIterator(helpers.iterator()); + } + + private static class ConstructingIterator implements Iterator { + private final Iterator> nested; + private boolean empty = false; + + ConstructingIterator(Iterator> nested) { + this.nested = nested; + } + + public boolean hasNext() { + return nested.hasNext() || !empty; + } + + public ProjectHelper next() { + Constructor c; + if (nested.hasNext()) { + c = nested.next(); + } else { + // last but not least, ant default project helper + empty = true; + c = PROJECTHELPER2_CONSTRUCTOR; + } + try { + return c.newInstance(); + } catch (Exception e) { + throw new BuildException("Failed to invoke no-arg constructor" + + " on " + c.getName()); + } + } + + public void remove() { + throw new UnsupportedOperationException("remove is not supported"); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PropertyHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PropertyHelper.java new file mode 100644 index 00000000..1dbb280c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/PropertyHelper.java @@ -0,0 +1,1215 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.text.ParsePosition; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; +import java.util.Vector; + +import org.apache.tools.ant.property.GetProperty; +import org.apache.tools.ant.property.NullReturn; +import org.apache.tools.ant.property.ParseNextProperty; +import org.apache.tools.ant.property.ParseProperties; +import org.apache.tools.ant.property.PropertyExpander; + +/* ISSUES: + - ns param. It could be used to provide "namespaces" for properties, which + may be more flexible. + - Object value. In ant1.5 String is used for Properties - but it would be nice + to support generic Objects (the property remains immutable - you can't change + the associated object). This will also allow JSP-EL style setting using the + Object if an attribute contains only the property (name="${property}" could + avoid Object->String->Object conversion) + - Currently we "chain" only for get and set property (probably most users + will only need that - if they need more they can replace the top helper). + Need to discuss this and find if we need more. + */ + +/* update for impending Ant 1.8.0: + + - I can't see any reason for ns and would like to deprecate it. + - Replacing chaining with delegates for certain behavioral aspects. + - Object value seems valuable as outlined. + + */ + +/** + * Deals with properties - substitution, dynamic properties, etc. + * + *

    This code has been heavily restructured for Ant 1.8.0. It is + * expected that custom PropertyHelper implementation that used the + * older chaining mechanism of Ant 1.6 won't work in all cases, and + * its usage is deprecated. The preferred way to customize Ant's + * property handling is by {@link #add adding} {@link + * PropertyHelper.Delegate delegates} of the appropriate subinterface + * and have this implementation use them.

    + * + *

    When {@link #parseProperties expanding a string that may contain + * properties} this class will delegate the actual parsing to {@link + * org.apache.tools.ant.property.ParseProperties#parseProperties + * parseProperties} inside the ParseProperties class which in turn + * uses the {@link org.apache.tools.ant.property.PropertyExpander + * PropertyExpander delegates} to find properties inside the string + * and this class to expand the propertiy names found into the + * corresponding values.

    + * + *

    When {@link #getProperty looking up a property value} this class + * will first consult all {@link PropertyHelper.PropertyEvaluator + * PropertyEvaluator} delegates and fall back to an internal map of + * "project properties" if no evaluator matched the property name.

    + * + *

    When {@link #setProperty setting a property value} this class + * will first consult all {@link PropertyHelper.PropertySetter + * PropertySetter} delegates and fall back to an internal map of + * "project properties" if no setter matched the property name.

    + * + * @since Ant 1.6 + */ +public class PropertyHelper implements GetProperty { + + // -------------------------------------------------------- + // + // The property delegate interfaces + // + // -------------------------------------------------------- + + /** + * Marker interface for a PropertyHelper delegate. + * @since Ant 1.8.0 + */ + public interface Delegate { + } + + /** + * Looks up a property's value based on its name. + * + *

    Can be used to look up properties in a different storage + * than the project instance (like local properties for example) + * or to implement custom "protocols" like Ant's + * ${toString:refid} syntax.

    + * + * @since Ant 1.8.0 + */ + public interface PropertyEvaluator extends Delegate { + /** + * Evaluate a property. + * + * @param property the property's String "identifier". + * @param propertyHelper the invoking PropertyHelper. + * @return null if the property name could not be found, an + * instance of {@link org.apache.tools.ant.property.NullReturn + * NullReturn} to indicate a property with a name that can be + * matched but a value of null and the property's + * value otherwise. + */ + Object evaluate(String property, PropertyHelper propertyHelper); + } + + /** + * Sets or overrides a property. + * + *

    Can be used to store properties in a different storage than + * the project instance (like local properties for example).

    + * + * @since Ant 1.8.0 + */ + public interface PropertySetter extends Delegate { + /** + * Set a *new" property. + * + *

    Should not replace the value of an existing property.

    + * + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + boolean setNew( + String property, Object value, PropertyHelper propertyHelper); + + /** + * Set a property. + * + *

    May replace the value of an existing property.

    + * + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + boolean set( + String property, Object value, PropertyHelper propertyHelper); + } + + //TODO PropertyEnumerator Delegate type, would improve PropertySet + + // -------------------------------------------------------- + // + // The predefined property delegates + // + // -------------------------------------------------------- + + private static final PropertyEvaluator TO_STRING = new PropertyEvaluator() { + private final String PREFIX = "toString:"; + private final int PREFIX_LEN = PREFIX.length(); + + public Object evaluate(String property, PropertyHelper propertyHelper) { + Object o = null; + if (property.startsWith(PREFIX) && propertyHelper.getProject() != null) { + o = propertyHelper.getProject().getReference(property.substring(PREFIX_LEN)); + } + return o == null ? null : o.toString(); + } + }; + + private static final PropertyExpander DEFAULT_EXPANDER = new PropertyExpander() { + public String parsePropertyName( + String s, ParsePosition pos, ParseNextProperty notUsed) { + int index = pos.getIndex(); + //directly check near, triggering characters: + if (s.length() - index >= 3 + && '$' == s.charAt(index) && '{' == s.charAt(index + 1)) { + int start = index + 2; + //defer to String.indexOf() for protracted check: + int end = s.indexOf('}', start); + if (end < 0) { + throw new BuildException("Syntax error in property: " + + s.substring(index)); + } + pos.setIndex(end + 1); + return start == end ? "" : s.substring(start, end); + } + return null; + } + }; + + /** dummy */ + private static final PropertyExpander SKIP_DOUBLE_DOLLAR + = new PropertyExpander() { + // CheckStyle:LineLengthCheck OFF see too long + /** + * {@inheritDoc} + * @see org.apache.tools.ant.property.PropertyExpander#parsePropertyName(java.lang.String, java.text.ParsePosition, org.apache.tools.ant.PropertyHelper) + */ + // CheckStyle:LineLengthCheck ON + public String parsePropertyName( + String s, ParsePosition pos, ParseNextProperty notUsed) { + int index = pos.getIndex(); + if (s.length() - index >= 2) { + /* check for $$; if found, advance by one-- + * this expander is at the bottom of the stack + * and will thus be the last consulted, + * so the next thing that ParseProperties will do + * is advance the parse position beyond the second $ + */ + if ('$' == s.charAt(index) && '$' == s.charAt(++index)) { + pos.setIndex(index); + } + } + return null; + } + }; + + /** + * @since Ant 1.8.0 + */ + private static final PropertyEvaluator FROM_REF = new PropertyEvaluator() { + private final String PREFIX = "ant.refid:"; + private final int PREFIX_LEN = PREFIX.length(); + + public Object evaluate(String prop, PropertyHelper helper) { + return prop.startsWith(PREFIX) && helper.getProject() != null + ? helper.getProject().getReference(prop.substring(PREFIX_LEN)) + : null; + } + }; + + private Project project; + private PropertyHelper next; + private final Hashtable, List> delegates = new Hashtable, List>(); + + /** Project properties map (usually String to String). */ + private Hashtable properties = new Hashtable(); + + /** + * Map of "user" properties (as created in the Ant task, for example). + * Note that these key/value pairs are also always put into the + * project properties, so only the project properties need to be queried. + */ + private Hashtable userProperties = new Hashtable(); + + /** + * Map of inherited "user" properties - that are those "user" + * properties that have been created by tasks and not been set + * from the command line or a GUI tool. + */ + private Hashtable inheritedProperties = new Hashtable(); + + /** + * Default constructor. + */ + protected PropertyHelper() { + add(FROM_REF); + add(TO_STRING); + add(SKIP_DOUBLE_DOLLAR); + add(DEFAULT_EXPANDER); + } + + // -------------------------------------------------------- + // + // Some helper static methods to get and set properties + // + // -------------------------------------------------------- + + /** + * A helper static method to get a property + * from a particular project. + * @param project the project in question. + * @param name the property name + * @return the value of the property if present, null otherwise. + * @since Ant 1.8.0 + */ + public static Object getProperty(Project project, String name) { + return PropertyHelper.getPropertyHelper(project) + .getProperty(name); + } + + /** + * A helper static method to set a property + * from a particular project. + * @param project the project in question. + * @param name the property name + * @param value the value to use. + * @since Ant 1.8.0 + */ + public static void setProperty(Project project, String name, Object value) { + PropertyHelper.getPropertyHelper(project) + .setProperty(name, value, true); + } + + /** + * A helper static method to set a new property + * from a particular project. + * @param project the project in question. + * @param name the property name + * @param value the value to use. + * @since Ant 1.8.0 + */ + public static void setNewProperty( + Project project, String name, Object value) { + PropertyHelper.getPropertyHelper(project) + .setNewProperty(name, value); + } + + //override facility for subclasses to put custom hashtables in + + // -------------------- Hook management -------------------- + + /** + * Set the project for which this helper is performing property resolution. + * + * @param p the project instance. + */ + public void setProject(Project p) { + this.project = p; + } + + /** + * Get this PropertyHelper's Project. + * @return Project + */ + public Project getProject() { + return project; + } + + /** + * Prior to Ant 1.8.0 there have been 2 ways to hook into property handling: + * + * - you can replace the main PropertyHelper. The replacement is required + * to support the same semantics (of course :-) + * + * - you can chain a property helper capable of storing some properties. + * Again, you are required to respect the immutability semantics (at + * least for non-dynamic properties) + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself.

    + * + * @param next the next property helper in the chain. + * @deprecated use the delegate mechanism instead + */ + public void setNext(PropertyHelper next) { + this.next = next; + } + + /** + * Get the next property helper in the chain. + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself except the {@link #setPropertyHook + * setPropertyHook} and {@link #getPropertyHook getPropertyHook} + * methods in this class.

    + * + * @return the next property helper. + * @deprecated use the delegate mechanism instead + */ + public PropertyHelper getNext() { + return next; + } + + /** + * Factory method to create a property processor. + * Users can provide their own or replace it using "ant.PropertyHelper" + * reference. User tasks can also add themselves to the chain, and provide + * dynamic properties. + * + * @param project the project for which the property helper is required. + * + * @return the project's property helper. + */ + public static synchronized PropertyHelper getPropertyHelper(Project project) { + PropertyHelper helper = null; + if (project != null) { + helper = (PropertyHelper) project.getReference(MagicNames + .REFID_PROPERTY_HELPER); + } + if (helper != null) { + return helper; + } + + helper = new PropertyHelper(); + helper.setProject(project); + + if (project != null) { + project.addReference(MagicNames.REFID_PROPERTY_HELPER, helper); + } + + return helper; + } + + /** + * Get the {@link PropertyExpander expanders}. + * @since Ant 1.8.0 + * @return the expanders. + */ + public Collection getExpanders() { + return getDelegates(PropertyExpander.class); + } + + + // -------------------- Methods to override -------------------- + + /** + * Sets a property. Any existing property of the same name + * is overwritten, unless it is a user property. + * + * If all helpers return false, the property will be saved in + * the default properties table by setProperty. + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself.

    + * + * @param ns The namespace that the property is in (currently + * not used. + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @param inherited True if this property is inherited (an [sub]ant[call] property). + * @param user True if this property is a user property. + * @param isNew True is this is a new property. + * @return true if this helper has stored the property, false if it + * couldn't. Each helper should delegate to the next one (unless it + * has a good reason not to). + * @deprecated PropertyHelper chaining is deprecated. + */ + public boolean setPropertyHook(String ns, String name, + Object value, + boolean inherited, boolean user, + boolean isNew) { + if (getNext() != null) { + boolean subst = getNext().setPropertyHook(ns, name, value, inherited, user, isNew); + // If next has handled the property + if (subst) { + return true; + } + } + return false; + } + + /** + * Get a property. If all hooks return null, the default + * tables will be used. + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself.

    + * + * @param ns namespace of the sought property. + * @param name name of the sought property. + * @param user True if this is a user property. + * @return The property, if returned by a hook, or null if none. + * @deprecated PropertyHelper chaining is deprecated. + */ + public Object getPropertyHook(String ns, String name, boolean user) { + if (getNext() != null) { + Object o = getNext().getPropertyHook(ns, name, user); + if (o != null) { + return o; + } + } + // Experimental/Testing, will be removed + if (project != null && name.startsWith("toString:")) { + name = name.substring("toString:".length()); + Object v = project.getReference(name); + return (v == null) ? null : v.toString(); + } + return null; + } + + // -------------------- Optional methods -------------------- + // You can override those methods if you want to optimize or + // do advanced things (like support a special syntax). + // The methods do not chain - you should use them when embedding ant + // (by replacing the main helper) + + /** + * Parses a string containing ${xxx} style property + * references into two lists. The first list is a collection + * of text fragments, while the other is a set of string property names. + * null entries in the first list indicate a property + * reference from the second list. + * + *

    Delegates to {@link #parsePropertyStringDefault + * parsePropertyStringDefault}.

    + * + *

    As of Ant 1.8.0 this method is never invoked by any code + * inside of Ant itself except {ProjectHelper#parsePropertyString + * ProjectHelper.parsePropertyString}.

    + * + * @param value Text to parse. Must not be null. + * @param fragments List to add text fragments to. + * Must not be null. + * @param propertyRefs List to add property names to. + * Must not be null. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @deprecated use the other mechanisms of this class instead + */ + public void parsePropertyString(String value, Vector fragments, + Vector propertyRefs) throws BuildException { + parsePropertyStringDefault(value, fragments, propertyRefs); + } + + /** + * Replaces ${xxx} style constructions in the given value + * with the string value of the corresponding data types. + * + *

    Delegates to the one-arg version, completely ignoring the ns + * and keys parameters.

    + * + * @param ns The namespace for the property. + * @param value The string to be scanned for property references. + * May be null, in which case this + * method returns immediately with no effect. + * @param keys Mapping (String to Object) of property names to their + * values. If null, only project properties will + * be used. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @return the original string with the properties replaced, or + * null if the original string is null. + */ + //TODO deprecate? Recall why no longer using ns/keys params + public String replaceProperties(String ns, String value, Hashtable keys) throws BuildException { + return replaceProperties(value); + } + + /** + * Replaces ${xxx} style constructions in the given value + * with the string value of the corresponding data types. + * + * @param value The string to be scanned for property references. + * May be null, in which case this + * method returns immediately with no effect. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @return the original string with the properties replaced, or + * null if the original string is null. + */ + public String replaceProperties(String value) throws BuildException { + Object o = parseProperties(value); + return o == null || o instanceof String ? (String) o : o.toString(); + } + + /** + * Decode properties from a String representation. If the entire + * contents of the String resolve to a single property, that value + * is returned. Otherwise a String is returned. + * + * @param value The string to be scanned for property references. + * May be null, in which case this + * method returns immediately with no effect. + * + * @exception BuildException if the string contains an opening + * ${ without a closing + * } + * @return the original string with the properties replaced, or + * null if the original string is null. + */ + public Object parseProperties(String value) throws BuildException { + return new ParseProperties(getProject(), getExpanders(), this) + .parseProperties(value); + } + + /** + * Learn whether a String contains replaceable properties. + * @param value the String to check. + * @return true if value contains property notation. + */ + public boolean containsProperties(String value) { + return new ParseProperties(getProject(), getExpanders(), this) + .containsProperties(value); + } + + // -------------------- Default implementation -------------------- + // Methods used to support the default behavior and provide backward + // compatibility. Some will be deprecated, you should avoid calling them. + + /** + * Default implementation of setProperty. Will be called from Project. + * This is the original 1.5 implementation, with calls to the hook + * added. + * + *

    Delegates to the three-arg version, completely ignoring the + * ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of the property. + * @param value The value to set the property to. + * @param verbose If this is true output extra log messages. + * @return true if the property is set. + * @deprecated namespaces are unnecessary. + */ + public boolean setProperty(String ns, String name, Object value, boolean verbose) { + return setProperty(name, value, verbose); + } + + /** + * Default implementation of setProperty. Will be called from Project. + * @param name The name of the property. + * @param value The value to set the property to. + * @param verbose If this is true output extra log messages. + * @return true if the property is set. + */ + public boolean setProperty(String name, Object value, boolean verbose) { + for (PropertySetter setter : getDelegates(PropertySetter.class)) { + if (setter.set(name, value, this)) { + return true; + } + } + synchronized (this) { + // user (CLI) properties take precedence + if (userProperties.containsKey(name)) { + if (project != null && verbose) { + project.log("Override ignored for user property \"" + + name + "\"", Project.MSG_VERBOSE); + } + return false; + } + if (project != null && verbose) { + if (properties.containsKey(name)) { + project.log("Overriding previous definition of property \"" + + name + "\"", Project.MSG_VERBOSE); + } + project.log("Setting project property: " + name + " -> " + + value, Project.MSG_DEBUG); + } + if (name != null && value != null) { + properties.put(name, value); + } + return true; + } + } + + /** + * Sets a property if no value currently exists. If the property + * exists already, a message is logged and the method returns with + * no other effect. + * + *

    Delegates to the two-arg version, completely ignoring the + * ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @since Ant 1.6 + * @deprecated namespaces are unnecessary. + */ + public void setNewProperty(String ns, String name, Object value) { + setNewProperty(name, value); + } + + /** + * Sets a property if no value currently exists. If the property + * exists already, a message is logged and the method returns with + * no other effect. + * + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @since Ant 1.8.0 + */ + public void setNewProperty(String name, Object value) { + for (PropertySetter setter : getDelegates(PropertySetter.class)) { + if (setter.setNew(name, value, this)) { + return; + } + } + synchronized (this) { + if (project != null && properties.containsKey(name)) { + project.log("Override ignored for property \"" + name + + "\"", Project.MSG_VERBOSE); + return; + } + if (project != null) { + project.log("Setting project property: " + name + + " -> " + value, Project.MSG_DEBUG); + } + if (name != null && value != null) { + properties.put(name, value); + } + } + } + + /** + * Sets a user property, which cannot be overwritten by + * set/unset property calls. Any previous value is overwritten. + * + *

    Delegates to the two-arg version, completely ignoring the + * ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @deprecated namespaces are unnecessary. + */ + public void setUserProperty(String ns, String name, Object value) { + setUserProperty(name, value); + } + + /** + * Sets a user property, which cannot be overwritten by + * set/unset property calls. Any previous value is overwritten. + * + *

    Does not consult any delegates.

    + * + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + */ + public void setUserProperty(String name, Object value) { + if (project != null) { + project.log("Setting ro project property: " + + name + " -> " + value, Project.MSG_DEBUG); + } + synchronized (this) { + userProperties.put(name, value); + properties.put(name, value); + } + } + + /** + * Sets an inherited user property, which cannot be overwritten by set/unset + * property calls. Any previous value is overwritten. Also marks + * these properties as properties that have not come from the + * command line. + * + *

    Delegates to the two-arg version, completely ignoring the + * ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + * @deprecated namespaces are unnecessary. + */ + public void setInheritedProperty(String ns, String name, Object value) { + setInheritedProperty(name, value); + } + + /** + * Sets an inherited user property, which cannot be overwritten by set/unset + * property calls. Any previous value is overwritten. Also marks + * these properties as properties that have not come from the + * command line. + * + *

    Does not consult any delegates.

    + * + * @param name The name of property to set. + * Must not be null. + * @param value The new value of the property. + * Must not be null. + */ + public void setInheritedProperty(String name, Object value) { + if (project != null) { + project.log("Setting ro project property: " + name + " -> " + + value, Project.MSG_DEBUG); + } + + synchronized (this) { + inheritedProperties.put(name, value); + userProperties.put(name, value); + properties.put(name, value); + } + } + + // -------------------- Getting properties -------------------- + + /** + * Returns the value of a property, if it is set. You can override + * this method in order to plug your own storage. + * + *

    Delegates to the one-arg version ignoring the ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + * @deprecated namespaces are unnecessary. + */ + public Object getProperty(String ns, String name) { + return getProperty(name); + } + + /** + * Returns the value of a property, if it is set. + * + *

    This is the method that is invoked by {Project#getProperty + * Project.getProperty}.

    + * + *

    You can override this method in order to plug your own + * storage but the recommended approach is to add your own + * implementation of {@link PropertyEvaluator PropertyEvaluator} + * instead.

    + * + * @param name The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + */ + public Object getProperty(String name) { + if (name == null) { + return null; + } + for (PropertyEvaluator evaluator : getDelegates(PropertyEvaluator.class)) { + final Object o = evaluator.evaluate(name, this); + if (o == null) { + continue; + } + return o instanceof NullReturn ? null : o; + } + return properties.get(name); + } + + /** + * Returns the value of a user property, if it is set. + * + *

    Delegates to the one-arg version ignoring the ns parameter.

    + * + * @param ns The namespace for the property (currently not used). + * @param name The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + * @deprecated namespaces are unnecessary. + */ + public Object getUserProperty(String ns, String name) { + return getUserProperty(name); + } + + /** + * Returns the value of a user property, if it is set. + * + *

    Does not consult any delegates.

    + * + * @param name The name of the property. + * May be null, in which case + * the return value is also null. + * @return the property value, or null for no match + * or if a null name is provided. + */ + public Object getUserProperty(String name) { + if (name == null) { + return null; + } + return userProperties.get(name); + } + + // -------------------- Access to property tables -------------------- + // This is used to support ant call and similar tasks. It should be + // deprecated, it is possible to use a better (more efficient) + // mechanism to preserve the context. + + /** + * Returns a copy of the properties table. + * + *

    Does not contain properties held by implementations of + * delegates (like local properties).

    + * + * @return a hashtable containing all properties (including user properties). + */ + public Hashtable getProperties() { + //avoid concurrent modification: + synchronized (properties) { + return new Hashtable(properties); + } + // There is a better way to save the context. This shouldn't + // delegate to next, it's for backward compatibility only. + } + + /** + * Returns a copy of the user property hashtable + * + *

    Does not contain properties held by implementations of + * delegates (like local properties).

    + * + * @return a hashtable containing just the user properties + */ + public Hashtable getUserProperties() { + //avoid concurrent modification: + synchronized (userProperties) { + return new Hashtable(userProperties); + } + } + + /** + * Returns a copy of the inherited property hashtable + * + *

    Does not contain properties held by implementations of + * delegates (like local properties).

    + * + * @return a hashtable containing just the inherited properties + */ + public Hashtable getInheritedProperties() { + //avoid concurrent modification: + synchronized (inheritedProperties) { + return new Hashtable(inheritedProperties); + } + } + + /** + * special back door for subclasses, internal access to the hashtables + * @return the live hashtable of all properties + */ + protected Hashtable getInternalProperties() { + return properties; + } + + /** + * special back door for subclasses, internal access to the hashtables + * + * @return the live hashtable of user properties + */ + protected Hashtable getInternalUserProperties() { + return userProperties; + } + + /** + * special back door for subclasses, internal access to the hashtables + * + * @return the live hashtable inherited properties + */ + protected Hashtable getInternalInheritedProperties() { + return inheritedProperties; + } + + /** + * Copies all user properties that have not been set on the + * command line or a GUI tool from this instance to the Project + * instance given as the argument. + * + *

    To copy all "user" properties, you will also have to call + * {@link #copyUserProperties copyUserProperties}.

    + * + *

    Does not copy properties held by implementations of + * delegates (like local properties).

    + * + * @param other the project to copy the properties to. Must not be null. + * + * @since Ant 1.6 + */ + public void copyInheritedProperties(Project other) { + //avoid concurrent modification: + synchronized (inheritedProperties) { + Enumeration e = inheritedProperties.keys(); + while (e.hasMoreElements()) { + String arg = e.nextElement().toString(); + if (other.getUserProperty(arg) != null) { + continue; + } + Object value = inheritedProperties.get(arg); + other.setInheritedProperty(arg, value.toString()); + } + } + } + + /** + * Copies all user properties that have been set on the command + * line or a GUI tool from this instance to the Project instance + * given as the argument. + * + *

    To copy all "user" properties, you will also have to call + * {@link #copyInheritedProperties copyInheritedProperties}.

    + * + *

    Does not copy properties held by implementations of + * delegates (like local properties).

    + * + * @param other the project to copy the properties to. Must not be null. + * + * @since Ant 1.6 + */ + public void copyUserProperties(Project other) { + //avoid concurrent modification: + synchronized (userProperties) { + Enumeration e = userProperties.keys(); + while (e.hasMoreElements()) { + Object arg = e.nextElement(); + if (inheritedProperties.containsKey(arg)) { + continue; + } + Object value = userProperties.get(arg); + other.setUserProperty(arg.toString(), value.toString()); + } + } + } + + // -------------------- Property parsing -------------------- + // Moved from ProjectHelper. You can override the static method - + // this is used for backward compatibility (for code that calls + // the parse method in ProjectHelper). + + /** + * Default parsing method. It is here only to support backward compatibility + * for the static ProjectHelper.parsePropertyString(). + */ + static void parsePropertyStringDefault(String value, Vector fragments, Vector propertyRefs) + throws BuildException { + int prev = 0; + int pos; + //search for the next instance of $ from the 'prev' position + while ((pos = value.indexOf("$", prev)) >= 0) { + + //if there was any text before this, add it as a fragment + //TODO, this check could be modified to go if pos>prev; + //seems like this current version could stick empty strings + //into the list + if (pos > 0) { + fragments.addElement(value.substring(prev, pos)); + } + //if we are at the end of the string, we tack on a $ + //then move past it + if (pos == (value.length() - 1)) { + fragments.addElement("$"); + prev = pos + 1; + } else if (value.charAt(pos + 1) != '{') { + //peek ahead to see if the next char is a property or not + //not a property: insert the char as a literal + /* + fragments.addElement(value.substring(pos + 1, pos + 2)); + prev = pos + 2; + */ + if (value.charAt(pos + 1) == '$') { + //backwards compatibility two $ map to one mode + fragments.addElement("$"); + prev = pos + 2; + } else { + //new behaviour: $X maps to $X for all values of X!='$' + fragments.addElement(value.substring(pos, pos + 2)); + prev = pos + 2; + } + } else { + //property found, extract its name or bail on a typo + int endName = value.indexOf('}', pos); + if (endName < 0) { + throw new BuildException("Syntax error in property: " + value); + } + String propertyName = value.substring(pos + 2, endName); + fragments.addElement(null); + propertyRefs.addElement(propertyName); + prev = endName + 1; + } + } + //no more $ signs found + //if there is any tail to the file, append it + if (prev < value.length()) { + fragments.addElement(value.substring(prev)); + } + } + + /** + * Add the specified delegate object to this PropertyHelper. + * Delegates are processed in LIFO order. + * @param delegate the delegate to add. + * @since Ant 1.8.0 + */ + public void add(Delegate delegate) { + synchronized (delegates) { + for (Class key : getDelegateInterfaces(delegate)) { + List list = delegates.get(key); + if (list == null) { + list = new ArrayList(); + } else { + //copy on write, top priority + list = new ArrayList(list); + list.remove(delegate); + } + list.add(0, delegate); + delegates.put(key, Collections.unmodifiableList(list)); + } + } + } + + /** + * Get the Collection of delegates of the specified type. + * + * @param type + * delegate type. + * @return Collection. + * @since Ant 1.8.0 + */ + protected List getDelegates(Class type) { + @SuppressWarnings("unchecked") + final List result = (List) delegates.get(type); + return result == null ? Collections. emptyList() : result; + } + + /** + * Get all Delegate interfaces (excluding Delegate itself) from the specified Delegate. + * @param d the Delegate to inspect. + * @return Set<Class> + * @since Ant 1.8.0 + */ + protected static Set> getDelegateInterfaces(Delegate d) { + final HashSet> result = new HashSet>(); + Class c = d.getClass(); + while (c != null) { + Class[] ifs = c.getInterfaces(); + for (int i = 0; i < ifs.length; i++) { + if (Delegate.class.isAssignableFrom(ifs[i])) { + @SuppressWarnings("unchecked") + final Class delegateInterface = (Class) ifs[i]; + result.add(delegateInterface); + } + } + c = c.getSuperclass(); + } + result.remove(Delegate.class); + return result; + } + + /** + * If the given object can be interpreted as a true/false value, + * turn it into a matching Boolean - otherwise return null. + * @since Ant 1.8.0 + */ + public static Boolean toBoolean(Object value) { + if (value instanceof Boolean) { + return (Boolean) value; + } + if (value instanceof String) { + String s = (String) value; + if (Project.toBoolean(s)) { + return Boolean.TRUE; + } + if ("off".equalsIgnoreCase(s) + || "false".equalsIgnoreCase(s) + || "no".equalsIgnoreCase(s)) { + return Boolean.FALSE; + } + } + return null; + } + + /** + * Returns true if the object is null or an empty string. + * + * @since Ant 1.8.0 + */ + private static boolean nullOrEmpty(Object value) { + return value == null || "".equals(value); + + } + + /** + * Returns true if the value can be interpreted as a true value or + * cannot be interpreted as a false value and a property of the + * value's name exists. + * @since Ant 1.8.0 + */ + private boolean evalAsBooleanOrPropertyName(Object value) { + Boolean b = toBoolean(value); + if (b != null) { + return b.booleanValue(); + } + return getProperty(String.valueOf(value)) != null; + } + + /** + * Returns true if the value is null or an empty string, can be + * interpreted as a true value or cannot be interpreted as a false + * value and a property of the value's name exists. + * @since Ant 1.8.0 + */ + public boolean testIfCondition(Object value) { + return nullOrEmpty(value) || evalAsBooleanOrPropertyName(value); + } + + /** + * Returns true if the value is null or an empty string, can be + * interpreted as a false value or cannot be interpreted as a true + * value and a property of the value's name doesn't exist. + * @since Ant 1.8.0 + */ + public boolean testUnlessCondition(Object value) { + return nullOrEmpty(value) || !evalAsBooleanOrPropertyName(value); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/RuntimeConfigurable.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/RuntimeConfigurable.java new file mode 100644 index 00000000..26f68dfe --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/RuntimeConfigurable.java @@ -0,0 +1,608 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map.Entry; + +import org.apache.tools.ant.attribute.EnableAttribute; +import org.apache.tools.ant.taskdefs.MacroDef.Attribute; +import org.apache.tools.ant.taskdefs.MacroInstance; +import org.apache.tools.ant.util.CollectionUtils; +import org.xml.sax.AttributeList; +import org.xml.sax.helpers.AttributeListImpl; + +/** + * Wrapper class that holds the attributes of an element, its children, and + * any text within it. It then takes care of configuring that element at + * runtime. + */ +public class RuntimeConfigurable implements Serializable { + + /** Serialization version */ + private static final long serialVersionUID = 1L; + + /** Empty Hashtable. */ + private static final Hashtable EMPTY_HASHTABLE = + new Hashtable(0); + + /** Name of the element to configure. */ + private String elementTag = null; + + /** List of child element wrappers. */ + private List children = null; + + /** The element to configure. It is only used during + * maybeConfigure. + */ + private transient Object wrappedObject = null; + + /** + * XML attributes for the element. + * @deprecated since 1.6.x + */ + private transient AttributeList attributes; + + // The following is set to true if any of the attributes are namespaced + private transient boolean namespacedAttribute = false; + + /** Attribute names and values. While the XML spec doesn't require + * preserving the order ( AFAIK ), some ant tests do rely on the + * exact order. + * The only exception to this order is the treatment of + * refid. A number of datatypes check if refid is set + * when other attributes are set. This check will not + * work if the build script has the other attribute before + * the "refid" attribute, so now (ANT 1.7) the refid + * attribute will be processed first. + */ + private LinkedHashMap attributeMap = null; + + /** Text appearing within the element. */ + private StringBuffer characters = null; + + /** Indicates if the wrapped object has been configured */ + private boolean proxyConfigured = false; + + /** the polymorphic type */ + private String polyType = null; + + /** the "id" of this Element if it has one */ + private String id = null; + + /** + * Sole constructor creating a wrapper for the specified object. + * + * @param proxy The element to configure. Must not be null. + * @param elementTag The tag name generating this element. + */ + public RuntimeConfigurable(Object proxy, String elementTag) { + setProxy(proxy); + setElementTag(elementTag); + // Most likely an UnknownElement + if (proxy instanceof Task) { + ((Task) proxy).setRuntimeConfigurableWrapper(this); + } + } + + /** + * Sets the element to configure. + * + * @param proxy The element to configure. Must not be null. + */ + public synchronized void setProxy(Object proxy) { + wrappedObject = proxy; + proxyConfigured = false; + } + + private static class EnableAttributeConsumer { + public void add(EnableAttribute b) { + // Ignore + } + } + + /** + * contains the attribute component name and boolean restricted set to true when + * the attribute is in one of the name spaces managed by ant (if and unless currently) + * @since Ant 1.9.3 + */ + private static class AttributeComponentInformation { + String componentName; + boolean restricted; + + private AttributeComponentInformation(String componentName, boolean restricted) { + this.componentName = componentName; + this.restricted = restricted; + } + + public String getComponentName() { + return componentName; + } + + public boolean isRestricted() { + return restricted; + } + } + + /** + * + * @param name the name of the attribute. + * @param componentHelper current component helper + * @return AttributeComponentInformation instance + */ + private AttributeComponentInformation isRestrictedAttribute(String name, ComponentHelper componentHelper) { + if (name.indexOf(':') == -1) { + return new AttributeComponentInformation(null, false); + } + String componentName = attrToComponent(name); + String ns = ProjectHelper.extractUriFromComponentName(componentName); + if (componentHelper.getRestrictedDefinitions( + ProjectHelper.nsToComponentName(ns)) == null) { + return new AttributeComponentInformation(null, false); + } + return new AttributeComponentInformation(componentName, true); + } + + /** + * Check if an UE is enabled. + * This looks tru the attributes and checks if there + * are any Ant attributes, and if so, the method calls the + * isEnabled() method on them. + * @param owner the UE that owns this RC. + * @return true if enabled, false if any of the ant attribures return + * false. + * @since 1.9.1 + */ + public boolean isEnabled(UnknownElement owner) { + if (!namespacedAttribute) { + return true; + } + ComponentHelper componentHelper = ComponentHelper + .getComponentHelper(owner.getProject()); + + IntrospectionHelper ih + = IntrospectionHelper.getHelper( + owner.getProject(), EnableAttributeConsumer.class); + for (int i = 0; i < attributeMap.keySet().size(); ++i) { + String name = (String) attributeMap.keySet().toArray()[i]; + AttributeComponentInformation attributeComponentInformation = isRestrictedAttribute(name, componentHelper); + if (!attributeComponentInformation.isRestricted()) { + continue; + } + String value = (String) attributeMap.get(name); + EnableAttribute enable = null; + try { + enable = (EnableAttribute) + ih.createElement( + owner.getProject(), new EnableAttributeConsumer(), + attributeComponentInformation.getComponentName()); + } catch (BuildException ex) { + throw new BuildException( + "Unsupported attribute " + attributeComponentInformation.getComponentName()); + } + if (enable == null) { + continue; + } + value = owner.getProject().replaceProperties(value); // FixMe: need to make config + if (!enable.isEnabled(owner, value)) { + return false; + } + } + return true; + } + + private String attrToComponent(String a) { + // need to remove the prefix + int p1 = a.lastIndexOf(':'); + int p2 = a.lastIndexOf(':', p1 - 1); + return a.substring(0, p2) + a.substring(p1); + } + + /** + * Sets the creator of the element to be configured + * used to store the element in the parent. + * + * @param creator the creator object. + */ + synchronized void setCreator(IntrospectionHelper.Creator creator) { + } + + /** + * Get the object for which this RuntimeConfigurable holds the configuration + * information. + * + * @return the object whose configure is held by this instance. + */ + public synchronized Object getProxy() { + return wrappedObject; + } + + /** + * Returns the id for this element. + * @return the id. + */ + public synchronized String getId() { + return id; + } + + /** + * Get the polymorphic type for this element. + * @return the ant component type name, null if not set. + */ + public synchronized String getPolyType() { + return polyType; + } + + /** + * Set the polymorphic type for this element. + * @param polyType the ant component type name, null if not set. + */ + public synchronized void setPolyType(String polyType) { + this.polyType = polyType; + } + + /** + * Sets the attributes for the wrapped element. + * + * @deprecated since 1.6.x. + * @param attributes List of attributes defined in the XML for this + * element. May be null. + */ + public synchronized void setAttributes(AttributeList attributes) { + this.attributes = new AttributeListImpl(attributes); + for (int i = 0; i < attributes.getLength(); i++) { + setAttribute(attributes.getName(i), attributes.getValue(i)); + } + } + + /** + * Set an attribute to a given value. + * + * @param name the name of the attribute. + * @param value the attribute's value. + */ + public synchronized void setAttribute(String name, String value) { + if (name.indexOf(':') != -1) { + namespacedAttribute = true; + } + setAttribute(name, (Object) value); + } + + /** + * Set an attribute to a given value. + * + * @param name the name of the attribute. + * @param value the attribute's value. + * @since 1.9 + */ + public synchronized void setAttribute(String name, Object value) { + if (name.equalsIgnoreCase(ProjectHelper.ANT_TYPE)) { + this.polyType = value == null ? null : value.toString(); + } else { + if (attributeMap == null) { + attributeMap = new LinkedHashMap(); + } + if (name.equalsIgnoreCase("refid") && !attributeMap.isEmpty()) { + LinkedHashMap newAttributeMap = new LinkedHashMap(); + newAttributeMap.put(name, value); + newAttributeMap.putAll(attributeMap); + attributeMap = newAttributeMap; + } else { + attributeMap.put(name, value); + } + if (name.equals("id")) { + this.id = value == null ? null : value.toString(); + } + } + } + + /** + * Delete an attribute. Not for the faint of heart. + * @param name the name of the attribute to be removed. + */ + public synchronized void removeAttribute(String name) { + attributeMap.remove(name); + } + + /** + * Return the attribute map. + * + * @return Attribute name to attribute value map. + * @since Ant 1.6 + */ + public synchronized Hashtable getAttributeMap() { + return (attributeMap == null) + ? EMPTY_HASHTABLE : new Hashtable(attributeMap); + } + + /** + * Returns the list of attributes for the wrapped element. + * + * @deprecated Deprecated since Ant 1.6 in favor of {@link #getAttributeMap}. + * @return An AttributeList representing the attributes defined in the + * XML for this element. May be null. + */ + public synchronized AttributeList getAttributes() { + return attributes; + } + + /** + * Adds a child element to the wrapped element. + * + * @param child The child element wrapper to add to this one. + * Must not be null. + */ + public synchronized void addChild(RuntimeConfigurable child) { + children = (children == null) ? new ArrayList() : children; + children.add(child); + } + + /** + * Returns the child wrapper at the specified position within the list. + * + * @param index The index of the child to return. + * + * @return The child wrapper at position index within the + * list. + */ + synchronized RuntimeConfigurable getChild(int index) { + return children.get(index); + } + + /** + * Returns an enumeration of all child wrappers. + * @return an enumeration of the child wrappers. + * @since Ant 1.6 + */ + public synchronized Enumeration getChildren() { + return (children == null) ? new CollectionUtils.EmptyEnumeration() + : Collections.enumeration(children); + } + + /** + * Adds characters from #PCDATA areas to the wrapped element. + * + * @param data Text to add to the wrapped element. + * Should not be null. + */ + public synchronized void addText(String data) { + if (data.length() == 0) { + return; + } + characters = (characters == null) + ? new StringBuffer(data) : characters.append(data); + } + + /** + * Adds characters from #PCDATA areas to the wrapped element. + * + * @param buf A character array of the text within the element. + * Must not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * + */ + public synchronized void addText(char[] buf, int start, int count) { + if (count == 0) { + return; + } + characters = ((characters == null) + ? new StringBuffer(count) : characters).append(buf, start, count); + } + + /** + * Get the text content of this element. Various text chunks are + * concatenated, there is no way ( currently ) of keeping track of + * multiple fragments. + * + * @return the text content of this element. + * @since Ant 1.6 + */ + public synchronized StringBuffer getText() { + return (characters == null) ? new StringBuffer(0) : characters; + } + + /** + * Set the element tag. + * @param elementTag The tag name generating this element. + */ + public synchronized void setElementTag(String elementTag) { + this.elementTag = elementTag; + } + + /** + * Returns the tag name of the wrapped element. + * + * @return The tag name of the wrapped element. This is unlikely + * to be null, but may be. + */ + public synchronized String getElementTag() { + return elementTag; + } + + /** + * Configures the wrapped element and all its children. + * The attributes and text for the wrapped element are configured, + * and then each child is configured and added. Each time the + * wrapper is configured, the attributes and text for it are + * reset. + * + * If the element has an id attribute, a reference + * is added to the project as well. + * + * @param p The project containing the wrapped element. + * Must not be null. + * + * @exception BuildException if the configuration fails, for instance due + * to invalid attributes or children, or text being added to + * an element which doesn't accept it. + */ + public void maybeConfigure(Project p) throws BuildException { + maybeConfigure(p, true); + } + + /** + * Configures the wrapped element. The attributes and text for + * the wrapped element are configured. Each time the wrapper is + * configured, the attributes and text for it are reset. + * + * If the element has an id attribute, a reference + * is added to the project as well. + * + * @param p The project containing the wrapped element. + * Must not be null. + * + * @param configureChildren ignored. + + * + * @exception BuildException if the configuration fails, for instance due + * to invalid attributes , or text being added to + * an element which doesn't accept it. + */ + public synchronized void maybeConfigure(Project p, boolean configureChildren) + throws BuildException { + + if (proxyConfigured) { + return; + } + + // Configure the object + Object target = (wrappedObject instanceof TypeAdapter) + ? ((TypeAdapter) wrappedObject).getProxy() : wrappedObject; + + IntrospectionHelper ih = + IntrospectionHelper.getHelper(p, target.getClass()); + ComponentHelper componentHelper = ComponentHelper.getComponentHelper(p); + if (attributeMap != null) { + for (Entry entry : attributeMap.entrySet()) { + String name = entry.getKey(); + // skip restricted attributes such as if:set + AttributeComponentInformation attributeComponentInformation = isRestrictedAttribute(name, componentHelper); + if (attributeComponentInformation.isRestricted()) { + continue; + } + Object value = entry.getValue(); + // reflect these into the target, defer for + // MacroInstance where properties are expanded for the + // nested sequential + Object attrValue; + if (value instanceof Evaluable) { + attrValue = ((Evaluable) value).eval(); + } else { + attrValue = PropertyHelper.getPropertyHelper(p).parseProperties(value.toString()); + } + if (target instanceof MacroInstance) { + for (Attribute attr : ((MacroInstance) target).getMacroDef().getAttributes()) { + if (attr.getName().equals(name)) { + if (!attr.isDoubleExpanding()) { + attrValue = value; + } + break; + } + } + } + try { + ih.setAttribute(p, target, name, attrValue); + } catch (UnsupportedAttributeException be) { + // id attribute must be set externally + if (name.equals("id")) { + // Do nothing + } else if (getElementTag() == null) { + throw be; + } else { + throw new BuildException( + getElementTag() + " doesn't support the \"" + + be.getAttribute() + "\" attribute", be); + } + } catch (BuildException be) { + if (name.equals("id")) { + // Assume that this is an not supported attribute type + // thrown for example by a dymanic attribute task + // Do nothing + } else { + throw be; + } + } + } + } + + if (characters != null) { + ProjectHelper.addText(p, wrappedObject, characters.substring(0)); + } + + if (id != null) { + p.addReference(id, wrappedObject); + } + proxyConfigured = true; + } + + /** + * Reconfigure the element, even if it has already been configured. + * + * @param p the project instance for this configuration. + */ + public void reconfigure(Project p) { + proxyConfigured = false; + maybeConfigure(p); + } + + /** + * Apply presets, attributes and text are set if not currently set. + * Nested elements are prepended. + * + * @param r a RuntimeConfigurable value. + */ + public void applyPreSet(RuntimeConfigurable r) { + // Attributes + if (r.attributeMap != null) { + for (String name : r.attributeMap.keySet()) { + if (attributeMap == null || attributeMap.get(name) == null) { + setAttribute(name, (String) r.attributeMap.get(name)); + } + } + } + // poly type + + polyType = (polyType == null) ? r.polyType : polyType; + + // Children (this is a shadow of UnknownElement#children) + if (r.children != null) { + List newChildren = new ArrayList(); + newChildren.addAll(r.children); + if (children != null) { + newChildren.addAll(children); + } + children = newChildren; + } + + // Text + if (r.characters != null) { + if (characters == null + || characters.toString().trim().length() == 0) { + characters = new StringBuffer(r.characters.toString()); + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/SubBuildListener.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/SubBuildListener.java new file mode 100644 index 00000000..196a88b5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/SubBuildListener.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Instances of classes that implement this interface can register + * to be also notified when things happened during a subbuild. + * + *

    A subbuild is a separate project instance created by the + * <ant> task family. These project instances will + * never fire the buildStarted and buildFinished events, but they will + * fire subBuildStarted/ and subBuildFinished. The main project + * instance - the one created by running Ant in the first place - will + * never invoke one of the methods of this interface.

    + * + * @see BuildEvent + * @see Project#addBuildListener(BuildListener) + * + * @since Ant 1.6.2 + */ +public interface SubBuildListener extends BuildListener { + + /** + * Signals that a subbuild has started. This event + * is fired before any targets have started. + * + * @param event An event with any relevant extra information. + * Must not be null. + */ + void subBuildStarted(BuildEvent event); + + /** + * Signals that the last target has finished. This event + * will still be fired if an error occurred during the build. + * + * @param event An event with any relevant extra information. + * Must not be null. + * + * @see BuildEvent#getException() + */ + void subBuildFinished(BuildEvent event); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Target.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Target.java new file mode 100644 index 00000000..796b7e18 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Target.java @@ -0,0 +1,532 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.List; +import java.util.StringTokenizer; + +import org.apache.tools.ant.property.LocalProperties; +import org.apache.tools.ant.taskdefs.condition.And; +import org.apache.tools.ant.taskdefs.condition.Condition; +import org.apache.tools.ant.taskdefs.condition.Or; + +/** + * Class to implement a target object with required parameters. + * + *

    If you are creating Targets programmatically, make sure you set + * the Location to a useful value. In particular all targets should + * have different location values.

    + */ +public class Target implements TaskContainer { + + /** Name of this target. */ + private String name; + + /** The "if" condition to test on execution. */ + private String ifString = ""; + + /** The "unless" condition to test on execution. */ + private String unlessString = ""; + + private Condition ifCondition; + + private Condition unlessCondition; + + /** List of targets this target is dependent on. */ + private List dependencies = null; + + /** Children of this target (tasks and data types). */ + private List children = new ArrayList(); + + /** Since Ant 1.6.2 */ + private Location location = Location.UNKNOWN_LOCATION; + + /** Project this target belongs to. */ + private Project project; + + /** Description of this target, if any. */ + private String description = null; + + /** Default constructor. */ + public Target() { + //empty + } + + /** + * Cloning constructor. + * @param other the Target to clone. + */ + public Target(Target other) { + this.name = other.name; + this.ifString = other.ifString; + this.unlessString = other.unlessString; + this.ifCondition = other.ifCondition; + this.unlessCondition = other.unlessCondition; + this.dependencies = other.dependencies; + this.location = other.location; + this.project = other.project; + this.description = other.description; + // The children are added to after this cloning + this.children = other.children; + } + + /** + * Sets the project this target belongs to. + * + * @param project The project this target belongs to. + * Must not be null. + */ + public void setProject(Project project) { + this.project = project; + } + + /** + * Returns the project this target belongs to. + * + * @return The project this target belongs to, or null if + * the project has not been set yet. + */ + public Project getProject() { + return project; + } + + /** + * Sets the location of this target's definition. + * + * @param location Location + * @since 1.6.2 + */ + public void setLocation(Location location) { + this.location = location; + } + + /** + * Get the location of this target's definition. + * + * @return Location + * @since 1.6.2 + */ + public Location getLocation() { + return location; + } + + /** + * Sets the list of targets this target is dependent on. + * The targets themselves are not resolved at this time. + * + * @param depS A comma-separated list of targets this target + * depends on. Must not be null. + */ + public void setDepends(String depS) { + for (String dep : parseDepends(depS, getName(), "depends")) { + addDependency(dep); + } + } + + public static List parseDepends(String depends, + String targetName, + String attributeName) { + List list = new ArrayList(); + if (depends.length() > 0) { + StringTokenizer tok = + new StringTokenizer(depends, ",", true); + while (tok.hasMoreTokens()) { + String token = tok.nextToken().trim(); + + // Make sure the dependency is not empty string + if ("".equals(token) || ",".equals(token)) { + throw new BuildException("Syntax Error: " + + attributeName + + " attribute of target \"" + + targetName + + "\" contains an empty string."); + } + + list.add(token); + + // Make sure that depends attribute does not + // end in a , + if (tok.hasMoreTokens()) { + token = tok.nextToken(); + if (!tok.hasMoreTokens() || !",".equals(token)) { + throw new BuildException("Syntax Error: " + + attributeName + + " attribute for target \"" + + targetName + + "\" ends with a \",\" " + + "character"); + } + } + } + } + return list; + } + + /** + * Sets the name of this target. + * + * @param name The name of this target. Should not be null. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Returns the name of this target. + * + * @return the name of this target, or null if the + * name has not been set yet. + */ + public String getName() { + return name; + } + + /** + * Adds a task to this target. + * + * @param task The task to be added. Must not be null. + */ + public void addTask(Task task) { + children.add(task); + } + + /** + * Adds the wrapper for a data type element to this target. + * + * @param r The wrapper for the data type element to be added. + * Must not be null. + */ + public void addDataType(RuntimeConfigurable r) { + children.add(r); + } + + /** + * Returns the current set of tasks to be executed by this target. + * + * @return an array of the tasks currently within this target + */ + public Task[] getTasks() { + List tasks = new ArrayList(children.size()); + for (Object o : children) { + if (o instanceof Task) { + tasks.add((Task) o); + } + } + return tasks.toArray(new Task[tasks.size()]); + } + + /** + * Adds a dependency to this target. + * + * @param dependency The name of a target this target is dependent on. + * Must not be null. + */ + public void addDependency(String dependency) { + if (dependencies == null) { + dependencies = new ArrayList(2); + } + dependencies.add(dependency); + } + + /** + * Returns an enumeration of the dependencies of this target. + * + * @return an enumeration of the dependencies of this target (enumeration of String) + */ + public Enumeration getDependencies() { + return Collections + .enumeration(dependencies == null ? Collections. emptyList() : dependencies); + } + + /** + * Does this target depend on the named target? + * @param other the other named target. + * @return true if the target does depend on the named target + * @since Ant 1.6 + */ + public boolean dependsOn(String other) { + Project p = getProject(); + Hashtable t = p == null ? null : p.getTargets(); + return p != null && p.topoSort(getName(), t, false).contains(t.get(other)); + } + + /** + * Sets the "if" condition to test on execution. This is the + * name of a property to test for existence - if the property + * is not set, the task will not execute. The property goes + * through property substitution once before testing, so if + * property foo has value bar, setting + * the "if" condition to ${foo}_x will mean that the + * task will only execute if property bar_x is set. + * + * @param property The property condition to test on execution. + * May be null, in which case + * no "if" test is performed. + */ + public void setIf(String property) { + ifString = property == null ? "" : property; + setIf(new IfStringCondition(ifString)); + } + + /** + * Returns the "if" property condition of this target. + * + * @return the "if" property condition or null if no + * "if" condition had been defined. + * @since 1.6.2 + */ + public String getIf() { + return "".equals(ifString) ? null : ifString; + } + + /** + * Same as {@link #setIf(String)} but requires a {@link Condition} instance + * + * @since 1.9 + */ + public void setIf(Condition condition) { + if (ifCondition == null) { + ifCondition = condition; + } else { + And andCondition = new And(); + andCondition.setProject(getProject()); + andCondition.setLocation(getLocation()); + andCondition.add(ifCondition); + andCondition.add(condition); + ifCondition = andCondition; + } + } + + /** + * Sets the "unless" condition to test on execution. This is the + * name of a property to test for existence - if the property + * is set, the task will not execute. The property goes + * through property substitution once before testing, so if + * property foo has value bar, setting + * the "unless" condition to ${foo}_x will mean that the + * task will only execute if property bar_x isn't set. + * + * @param property The property condition to test on execution. + * May be null, in which case + * no "unless" test is performed. + */ + public void setUnless(String property) { + unlessString = property == null ? "" : property; + setUnless(new UnlessStringCondition(unlessString)); + } + + /** + * Returns the "unless" property condition of this target. + * + * @return the "unless" property condition or null + * if no "unless" condition had been defined. + * @since 1.6.2 + */ + public String getUnless() { + return "".equals(unlessString) ? null : unlessString; + } + + /** + * Same as {@link #setUnless(String)} but requires a {@link Condition} instance + * + * @since 1.9 + */ + public void setUnless(Condition condition) { + if (unlessCondition == null) { + unlessCondition = condition; + } else { + Or orCondition = new Or(); + orCondition.setProject(getProject()); + orCondition.setLocation(getLocation()); + orCondition.add(unlessCondition); + orCondition.add(condition); + unlessCondition = orCondition; + } + } + + /** + * Sets the description of this target. + * + * @param description The description for this target. + * May be null, indicating that no + * description is available. + */ + public void setDescription(String description) { + this.description = description; + } + + /** + * Returns the description of this target. + * + * @return the description of this target, or null if no + * description is available. + */ + public String getDescription() { + return description; + } + + /** + * Returns the name of this target. + * + * @return the name of this target, or null if the + * name has not been set yet. + */ + public String toString() { + return name; + } + + /** + * Executes the target if the "if" and "unless" conditions are + * satisfied. Dependency checking should be done before calling this + * method, as it does no checking of its own. If either the "if" + * or "unless" test prevents this target from being executed, a verbose + * message is logged giving the reason. It is recommended that clients + * of this class call performTasks rather than this method so that + * appropriate build events are fired. + * + * @exception BuildException if any of the tasks fail or if a data type + * configuration fails. + * + * @see #performTasks() + * @see #setIf(String) + * @see #setUnless(String) + */ + public void execute() throws BuildException { + if (ifCondition != null && !ifCondition.eval()) { + project.log(this, "Skipped because property '" + project.replaceProperties(ifString) + + "' not set.", Project.MSG_VERBOSE); + return; + } + if (unlessCondition != null && unlessCondition.eval()) { + project.log(this, "Skipped because property '" + + project.replaceProperties(unlessString) + "' set.", Project.MSG_VERBOSE); + return; + } + LocalProperties localProperties = LocalProperties.get(getProject()); + localProperties.enterScope(); + try { + // use index-based approach to avoid ConcurrentModificationExceptions; + // also account for growing target children + // do not optimize this loop by replacing children.size() by a variable + // as children can be added dynamically as in RhinoScriptTest where a target is adding work for itself + for (int i = 0; i < children.size(); i++) { + Object o = children.get(i); + if (o instanceof Task) { + Task task = (Task) o; + task.perform(); + } else { + ((RuntimeConfigurable) o).maybeConfigure(project); + } + } + } finally { + localProperties.exitScope(); + } + } + + /** + * Performs the tasks within this target (if the conditions are met), + * firing target started/target finished messages around a call to + * execute. + * + * @see #execute() + */ + public final void performTasks() { + RuntimeException thrown = null; + project.fireTargetStarted(this); + try { + execute(); + } catch (RuntimeException exc) { + thrown = exc; + throw exc; + } finally { + project.fireTargetFinished(this, thrown); + } + } + + /** + * Replaces all occurrences of the given task in the list + * of children with the replacement data type wrapper. + * + * @param el The task to replace. + * Must not be null. + * @param o The data type wrapper to replace el with. + */ + void replaceChild(Task el, RuntimeConfigurable o) { + int index; + while ((index = children.indexOf(el)) >= 0) { + children.set(index, o); + } + } + + /** + * Replaces all occurrences of the given task in the list + * of children with the replacement task. + * + * @param el The task to replace. + * Must not be null. + * @param o The task to replace el with. + */ + void replaceChild(Task el, Task o) { + int index; + while ((index = children.indexOf(el)) >= 0) { + children.set(index, o); + } + } + + /** + * Condition evaluating the 'if' attribute with the PropertyHelper. + */ + private class IfStringCondition implements Condition { + + private String condition; + + public IfStringCondition(String condition) { + this.condition = condition; + } + + public boolean eval() throws BuildException { + PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject()); + Object o = propertyHelper.parseProperties(condition); + return propertyHelper.testIfCondition(o); + } + + } + + /** + * Condition evaluating the 'unless' attribute with the PropertyHelper. + */ + private class UnlessStringCondition implements Condition { + + private String condition; + + public UnlessStringCondition(String condition) { + this.condition = condition; + } + + public boolean eval() throws BuildException { + PropertyHelper propertyHelper = PropertyHelper.getPropertyHelper(getProject()); + Object o = propertyHelper.parseProperties(condition); + return !propertyHelper.testUnlessCondition(o); + } + + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Task.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Task.java new file mode 100644 index 00000000..0d08eb0e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/Task.java @@ -0,0 +1,481 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.IOException; +import java.util.Enumeration; + +import org.apache.tools.ant.dispatch.DispatchUtils; + +/** + * Base class for all tasks. + * + * Use Project.createTask to create a new task instance rather than + * using this class directly for construction. + * + * @see Project#createTask + */ +public abstract class Task extends ProjectComponent { + // CheckStyle:VisibilityModifier OFF - bc + /** + * Target this task belongs to, if any. + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the {@link #getOwningTarget()} method. + */ + protected Target target; + + /** + * Name of this task to be used for logging purposes. + * This defaults to the same as the type, but may be + * overridden by the user. For instance, the name "java" + * isn't terribly descriptive for a task used within + * another task - the outer task code can probably + * provide a better one. + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the {@link #getTaskName()} method. + */ + protected String taskName; + + /** + * Type of this task. + * + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the {@link #getTaskType()} method. + */ + protected String taskType; + + /** + * Wrapper for this object, used to configure it at runtime. + * + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the {@link #getWrapper()} method. + */ + protected RuntimeConfigurable wrapper; + + // CheckStyle:VisibilityModifier ON + + /** + * Whether or not this task is invalid. A task becomes invalid + * if a conflicting class is specified as the implementation for + * its type. + */ + private boolean invalid; + + /** Sole constructor. */ + public Task() { + } + + /** + * Sets the target container of this task. + * + * @param target Target in whose scope this task belongs. + * May be null, indicating a top-level task. + */ + public void setOwningTarget(Target target) { + this.target = target; + } + + /** + * Returns the container target of this task. + * + * @return The target containing this task, or null if + * this task is a top-level task. + */ + public Target getOwningTarget() { + return target; + } + + /** + * Sets the name to use in logging messages. + * + * @param name The name to use in logging messages. + * Should not be null. + */ + public void setTaskName(String name) { + this.taskName = name; + } + + /** + * Returns the name to use in logging messages. + * + * @return the name to use in logging messages. + */ + public String getTaskName() { + return taskName; + } + + /** + * Sets the name with which the task has been invoked. + * + * @param type The name the task has been invoked as. + * Should not be null. + */ + public void setTaskType(String type) { + this.taskType = type; + } + + /** + * Called by the project to let the task initialize properly. + * The default implementation is a no-op. + * + * @exception BuildException if something goes wrong with the build + */ + public void init() throws BuildException { + } + + /** + * Called by the project to let the task do its work. This method may be + * called more than once, if the task is invoked more than once. + * For example, + * if target1 and target2 both depend on target3, then running + * "ant target1 target2" will run all tasks in target3 twice. + * + * @exception BuildException if something goes wrong with the build. + */ + public void execute() throws BuildException { + } + + /** + * Returns the wrapper used for runtime configuration. + * + * @return the wrapper used for runtime configuration. This + * method will generate a new wrapper (and cache it) + * if one isn't set already. + */ + public RuntimeConfigurable getRuntimeConfigurableWrapper() { + if (wrapper == null) { + wrapper = new RuntimeConfigurable(this, getTaskName()); + } + return wrapper; + } + + /** + * Sets the wrapper to be used for runtime configuration. + * + * This method should be used only by the ProjectHelper and Ant internals. + * It is public to allow helper plugins to operate on tasks, normal tasks + * should never use it. + * + * @param wrapper The wrapper to be used for runtime configuration. + * May be null, in which case the next call + * to getRuntimeConfigurableWrapper will generate a new + * wrapper. + */ + public void setRuntimeConfigurableWrapper(RuntimeConfigurable wrapper) { + this.wrapper = wrapper; + } + + // TODO: (Jon Skeet) The comment "if it hasn't been done already" may + // not be strictly true. wrapper.maybeConfigure() won't configure the same + // attributes/text more than once, but it may well add the children again, + // unless I've missed something. + /** + * Configures this task - if it hasn't been done already. + * If the task has been invalidated, it is replaced with an + * UnknownElement task which uses the new definition in the project. + * + * @exception BuildException if the task cannot be configured. + */ + public void maybeConfigure() throws BuildException { + if (!invalid) { + if (wrapper != null) { + wrapper.maybeConfigure(getProject()); + } + } else { + getReplacement(); + } + } + + /** + * Force the task to be reconfigured from its RuntimeConfigurable. + */ + public void reconfigure() { + if (wrapper != null) { + wrapper.reconfigure(getProject()); + } + } + + /** + * Handles output by logging it with the INFO priority. + * + * @param output The output to log. Should not be null. + */ + protected void handleOutput(String output) { + log(output, Project.MSG_INFO); + } + + /** + * Handles output by logging it with the INFO priority. + * + * @param output The output to log. Should not be null. + * + * @since Ant 1.5.2 + */ + protected void handleFlush(String output) { + handleOutput(output); + } + + /** + * Handle an input request by this task. + * + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @since Ant 1.6 + */ + protected int handleInput(byte[] buffer, int offset, int length) + throws IOException { + return getProject().defaultInput(buffer, offset, length); + } + + /** + * Handles an error output by logging it with the WARN priority. + * + * @param output The error output to log. Should not be null. + */ + protected void handleErrorOutput(String output) { + log(output, Project.MSG_WARN); + } + + /** + * Handles an error line by logging it with the WARN priority. + * + * @param output The error output to log. Should not be null. + * + * @since Ant 1.5.2 + */ + protected void handleErrorFlush(String output) { + handleErrorOutput(output); + } + + /** + * Logs a message with the default (INFO) priority. + * + * @param msg The message to be logged. Should not be null. + */ + public void log(String msg) { + log(msg, Project.MSG_INFO); + } + + /** + * Logs a message with the given priority. This delegates + * the actual logging to the project. + * + * @param msg The message to be logged. Should not be null. + * @param msgLevel The message priority at which this message is to + * be logged. + */ + public void log(String msg, int msgLevel) { + if (getProject() != null) { + getProject().log(this, msg, msgLevel); + } else { + super.log(msg, msgLevel); + } + } + + /** + * Logs a message with the given priority. This delegates + * the actual logging to the project. + * + * @param t The exception to be logged. Should not be null. + * @param msgLevel The message priority at which this message is to + * be logged. + * @since 1.7 + */ + public void log(Throwable t, int msgLevel) { + if (t != null) { + log(t.getMessage(), t, msgLevel); + } + } + + /** + * Logs a message with the given priority. This delegates + * the actual logging to the project. + * + * @param msg The message to be logged. Should not be null. + * @param t The exception to be logged. May be null. + * @param msgLevel The message priority at which this message is to + * be logged. + * @since 1.7 + */ + public void log(String msg, Throwable t, int msgLevel) { + if (getProject() != null) { + getProject().log(this, msg, t, msgLevel); + } else { + super.log(msg, msgLevel); + } + } + + /** + * Performs this task if it's still valid, or gets a replacement + * version and performs that otherwise. + * + * Performing a task consists of firing a task started event, + * configuring the task, executing it, and then firing task finished + * event. If a runtime exception is thrown, the task finished event + * is still fired, but with the exception as the cause. + */ + public final void perform() { + if (!invalid) { + getProject().fireTaskStarted(this); + Throwable reason = null; + try { + maybeConfigure(); + DispatchUtils.execute(this); + } catch (BuildException ex) { + if (ex.getLocation() == Location.UNKNOWN_LOCATION) { + ex.setLocation(getLocation()); + } + reason = ex; + throw ex; + } catch (Exception ex) { + reason = ex; + BuildException be = new BuildException(ex); + be.setLocation(getLocation()); + throw be; + } catch (Error ex) { + reason = ex; + throw ex; + } finally { + getProject().fireTaskFinished(this, reason); + } + } else { + UnknownElement ue = getReplacement(); + Task task = ue.getTask(); + task.perform(); + } + } + + /** + * Marks this task as invalid. Any further use of this task + * will go through a replacement with the updated definition. + */ + final void markInvalid() { + invalid = true; + } + + /** + * Has this task been marked invalid? + * + * @return true if this task is no longer valid. A new task should be + * configured in this case. + * + * @since Ant 1.5 + */ + protected final boolean isInvalid() { + return invalid; + } + + /** + * Replacement element used if this task is invalidated. + */ + private UnknownElement replacement; + + /** + * Creates an UnknownElement that can be used to replace this task. + * Once this has been created once, it is cached and returned by + * future calls. + * + * @return the UnknownElement instance for the new definition of this task. + */ + private UnknownElement getReplacement() { + if (replacement == null) { + replacement = new UnknownElement(taskType); + replacement.setProject(getProject()); + replacement.setTaskType(taskType); + replacement.setTaskName(taskName); + replacement.setLocation(getLocation()); + replacement.setOwningTarget(target); + replacement.setRuntimeConfigurableWrapper(wrapper); + wrapper.setProxy(replacement); + replaceChildren(wrapper, replacement); + target.replaceChild(this, replacement); + replacement.maybeConfigure(); + } + return replacement; + } + + /** + * Recursively adds an UnknownElement instance for each child + * element of replacement. + * + * @since Ant 1.5.1 + */ + private void replaceChildren(RuntimeConfigurable wrapper, + UnknownElement parentElement) { + Enumeration e = wrapper.getChildren(); + while (e.hasMoreElements()) { + RuntimeConfigurable childWrapper = e.nextElement(); + UnknownElement childElement = + new UnknownElement(childWrapper.getElementTag()); + parentElement.addChild(childElement); + childElement.setProject(getProject()); + childElement.setRuntimeConfigurableWrapper(childWrapper); + childWrapper.setProxy(childElement); + replaceChildren(childWrapper, childElement); + } + } + + /** + * Return the type of task. + * + * @return the type of task. + */ + public String getTaskType() { + return taskType; + } + + /** + * Return the runtime configurable structure for this task. + * + * @return the runtime structure for this task. + */ + protected RuntimeConfigurable getWrapper() { + return wrapper; + } + + /** + * Bind a task to another; use this when configuring a newly created + * task to do work on behalf of another. + * Project, OwningTarget, TaskName, Location and Description are all copied + * + * Important: this method does not call {@link Task#init()}. + * If you are creating a task to delegate work to, call {@link Task#init()} + * to initialize it. + * + * @param owner owning target + * @since Ant1.7 + */ + public final void bindToOwner(Task owner) { + setProject(owner.getProject()); + setOwningTarget(owner.getOwningTarget()); + setTaskName(owner.getTaskName()); + setDescription(owner.getDescription()); + setLocation(owner.getLocation()); + setTaskType(owner.getTaskType()); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskAdapter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskAdapter.java new file mode 100644 index 00000000..3a3001f6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskAdapter.java @@ -0,0 +1,182 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.lang.reflect.Method; + +import org.apache.tools.ant.dispatch.DispatchUtils; +import org.apache.tools.ant.dispatch.Dispatchable; + +/** + * Uses introspection to "adapt" an arbitrary Bean which doesn't + * itself extend Task, but still contains an execute method and optionally + * a setProject method. + * + */ +public class TaskAdapter extends Task implements TypeAdapter { + + /** Object to act as a proxy for. */ + private Object proxy; + + /** + * No-arg constructor for reflection. + */ + public TaskAdapter() { + } + + /** + * Constructor for given proxy. + * So you could write easier code + *
    +     * myTaskContainer.addTask( new TaskAdapter(myProxy) );
    +     * 
    + * + * @param proxy The object which Ant should use as task. + */ + public TaskAdapter(Object proxy) { + this(); + setProxy(proxy); + } + + /** + * Checks whether or not a class is suitable to be adapted by TaskAdapter. + * If the class is of type Dispatchable, the check is not performed because + * the method that will be executed will be determined only at runtime of + * the actual task and not during parse time. + * + * This only checks conditions which are additionally required for + * tasks adapted by TaskAdapter. Thus, this method should be called by + * Project.checkTaskClass. + * + * Throws a BuildException and logs as Project.MSG_ERR for + * conditions that will cause the task execution to fail. + * Logs other suspicious conditions with Project.MSG_WARN. + * + * @param taskClass Class to test for suitability. + * Must not be null. + * @param project Project to log warnings/errors to. + * Must not be null. + * + * @see Project#checkTaskClass(Class) + */ + public static void checkTaskClass(final Class taskClass, + final Project project) { + if (!Dispatchable.class.isAssignableFrom(taskClass)) { + // don't have to check for interface, since then + // taskClass would be abstract too. + try { + final Method executeM = taskClass.getMethod("execute", (Class[]) null); + // don't have to check for public, since + // getMethod finds public method only. + // don't have to check for abstract, since then + // taskClass would be abstract too. + if (!Void.TYPE.equals(executeM.getReturnType())) { + final String message = "return type of execute() should be " + + "void but was \"" + executeM.getReturnType() + "\" in " + + taskClass; + project.log(message, Project.MSG_WARN); + } + } catch (NoSuchMethodException e) { + final String message = "No public execute() in " + taskClass; + project.log(message, Project.MSG_ERR); + throw new BuildException(message); + } catch (LinkageError e) { + String message = "Could not load " + taskClass + ": " + e; + project.log(message, Project.MSG_ERR); + throw new BuildException(message, e); + } + } + } + + /** + * Check if the proxy class is a valid class to use + * with this adapter. + * The class must have a public no-arg "execute()" method. + * @param proxyClass the class to check. + */ + public void checkProxyClass(Class proxyClass) { + checkTaskClass(proxyClass, getProject()); + } + + /** + * Executes the proxied task. + * + * @exception BuildException if the project could not be set + * or the method could not be executed. + */ + public void execute() throws BuildException { + try { + Method setLocationM = proxy.getClass().getMethod( + "setLocation", new Class[] {Location.class}); + if (setLocationM != null) { + setLocationM.invoke(proxy, new Object[] {getLocation()}); + } + } catch (NoSuchMethodException e) { + // ignore this if the class being used as a task does not have + // a set location method. + } catch (Exception ex) { + log("Error setting location in " + proxy.getClass(), + Project.MSG_ERR); + throw new BuildException(ex); + } + + try { + Method setProjectM = proxy.getClass().getMethod( + "setProject", new Class[] {Project.class}); + if (setProjectM != null) { + setProjectM.invoke(proxy, new Object[] {getProject()}); + } + } catch (NoSuchMethodException e) { + // ignore this if the class being used as a task does not have + // a set project method. + } catch (Exception ex) { + log("Error setting project in " + proxy.getClass(), + Project.MSG_ERR); + throw new BuildException(ex); + } + + try { + DispatchUtils.execute(proxy); + } catch (BuildException be) { + throw be; + } catch (Exception ex) { + log("Error in " + proxy.getClass(), Project.MSG_VERBOSE); + throw new BuildException(ex); + } + } + + /** + * Sets the target object to proxy for. + * + * @param o The target object. Must not be null. + */ + public void setProxy(Object o) { + this.proxy = o; + } + + /** + * Returns the target object being proxied. + * + * @return the target proxy object. + */ + public Object getProxy() { + return proxy; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskConfigurationChecker.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskConfigurationChecker.java new file mode 100644 index 00000000..e8e74441 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskConfigurationChecker.java @@ -0,0 +1,111 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.util.ArrayList; +import java.util.List; + +/** + *

    Helper class for the check of the configuration of a given task. + * This class provides methods for making assumptions about the task configuration. + * After collecting all violations with assert* and fail + * methods the checkErrors will throw a BuildException with all collected + * messages or does nothing if there wasn't any error.

    + * + *

    Example:

    + * + *
    + *     public class MyTask extends Task {
    + *         ...
    + *         public void execute() {
    + *             TaskConfigurationChecker checker = TaskConfigurationChecker(this);
    + *             checker.assertConfig(
    + *                 srcdir != null,
    + *                 "Attribute 'srcdir' must be set.
    + *             );
    + *             checker.assertConfig(
    + *                 srcdir.exists(),
    + *                 "Srcdir (" + srcdir + ") must exist."
    + *             );
    + *             if (someComplexCondition()) {
    + *                 fail("Complex condition failed.");
    + *             }
    + *             checker.checkErrors();
    + *         }
    + *     }
    + * 
    + * + * @see Notification Pattern + */ +public class TaskConfigurationChecker { + + /** List of all collected error messages. */ + private List errors = new ArrayList(); + + /** Task for which the configuration should be checked. */ + private final Task task; + + /** + * Constructor. + * @param task which task should be checked + */ + public TaskConfigurationChecker(Task task) { + this.task = task; + } + + /** + * Asserts that a condition is true. + * @param condition which condition to check + * @param errormessage errormessage to throw if a condition failed + */ + public void assertConfig(boolean condition, String errormessage) { + if (!condition) { + errors.add(errormessage); + } + } + + /** + * Registers an error. + * @param errormessage the message for the registered error + */ + public void fail(String errormessage) { + errors.add(errormessage); + } + + /** + * Checks if there are any collected errors and throws a BuildException + * with all messages if there was one or more. + * @throws BuildException if one or more errors were registered + */ + public void checkErrors() throws BuildException { + if (!errors.isEmpty()) { + StringBuffer sb = new StringBuffer(); + sb.append("Configurationerror on <"); + sb.append(task.getTaskName()); + sb.append(">:"); + sb.append(System.getProperty("line.separator")); + for (String msg : errors) { + sb.append("- "); + sb.append(msg); + sb.append(System.getProperty("line.separator")); + } + throw new BuildException(sb.toString(), task.getLocation()); + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskContainer.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskContainer.java new file mode 100644 index 00000000..12e8c075 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TaskContainer.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Interface for objects which can contain tasks. + *

    + * It is recommended that implementations call perform rather than + * execute for the tasks they contain, as this method ensures that the + * appropriate BuildEvents will be generated. + * + * @see Task#perform + * @see Task#execute + * @see BuildEvent + * + */ +public interface TaskContainer { + /** + * Adds a task to this task container + * + * @param task The task to be added to this container. + * Must not be null. + */ + void addTask(Task task); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TypeAdapter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TypeAdapter.java new file mode 100644 index 00000000..b8520fce --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/TypeAdapter.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +/** + * Used to wrap types. + * + */ +public interface TypeAdapter { + + /** + * Sets the project + * + * @param p the project instance. + */ + void setProject(Project p); + + /** + * Gets the project + * + * @return the project instance. + */ + Project getProject(); + + /** + * Sets the proxy object, whose methods are going to be + * invoked by ant. + * A proxy object is normally the object defined by + * a <typedef/> task that is adapted by the "adapter" + * attribute. + * + * @param o The target object. Must not be null. + */ + void setProxy(Object o); + + /** + * Returns the proxy object. + * + * @return the target proxy object + */ + Object getProxy(); + + /** + * Check if the proxy class is compatible with this adapter - i.e. + * the adapter will be able to adapt instances of the give class. + * + * @param proxyClass the class to be checked. + */ + void checkProxyClass(Class proxyClass); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnknownElement.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnknownElement.java new file mode 100644 index 00000000..88cd4989 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnknownElement.java @@ -0,0 +1,699 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.tools.ant.taskdefs.PreSetDef; + +/** + * Wrapper class that holds all the information necessary to create a task + * or data type that did not exist when Ant started, or one which + * has had its definition updated to use a different implementation class. + * + */ +public class UnknownElement extends Task { + + /** + * Holds the name of the task/type or nested child element of a + * task/type that hasn't been defined at parser time or has + * been redefined since original creation. + */ + private final String elementName; + + /** + * Holds the namespace of the element. + */ + private String namespace = ""; + + /** + * Holds the namespace qname of the element. + */ + private String qname; + + /** + * The real object after it has been loaded. + */ + private Object realThing; + + /** + * List of child elements (UnknownElements). + */ + private List children = null; + + /** Specifies if a predefined definition has been done */ + private boolean presetDefed = false; + + /** + * Creates an UnknownElement for the given element name. + * + * @param elementName The name of the unknown element. + * Must not be null. + */ + public UnknownElement(String elementName) { + this.elementName = elementName; + } + + /** + * @return the list of nested UnknownElements for this UnknownElement. + */ + public List getChildren() { + return children; + } + + /** + * Returns the name of the XML element which generated this unknown + * element. + * + * @return the name of the XML element which generated this unknown + * element. + */ + public String getTag() { + return elementName; + } + + /** + * Return the namespace of the XML element associated with this component. + * + * @return Namespace URI used in the xmlns declaration. + */ + public String getNamespace() { + return namespace; + } + + /** + * Set the namespace of the XML element associated with this component. + * This method is typically called by the XML processor. + * If the namespace is "ant:current", the component helper + * is used to get the current antlib uri. + * + * @param namespace URI used in the xmlns declaration. + */ + public void setNamespace(String namespace) { + if (namespace.equals(ProjectHelper.ANT_CURRENT_URI)) { + ComponentHelper helper = ComponentHelper.getComponentHelper( + getProject()); + namespace = helper.getCurrentAntlibUri(); + } + this.namespace = namespace == null ? "" : namespace; + } + + /** + * Return the qname of the XML element associated with this component. + * + * @return namespace Qname used in the element declaration. + */ + public String getQName() { + return qname; + } + + /** + * Set the namespace qname of the XML element. + * This method is typically called by the XML processor. + * + * @param qname the qualified name of the element + */ + public void setQName(String qname) { + this.qname = qname; + } + + + /** + * Get the RuntimeConfigurable instance for this UnknownElement, containing + * the configuration information. + * + * @return the configuration info. + */ + public RuntimeConfigurable getWrapper() { + return super.getWrapper(); + } + + /** + * Creates the real object instance and child elements, then configures + * the attributes and text of the real object. This unknown element + * is then replaced with the real object in the containing target's list + * of children. + * + * @exception BuildException if the configuration fails + */ + public void maybeConfigure() throws BuildException { + if (realThing != null) { + return; + } + configure(makeObject(this, getWrapper())); + } + + /** + * Configure the given object from this UnknownElement + * + * @param realObject the real object this UnknownElement is representing. + * + */ + public void configure(Object realObject) { + if (realObject == null) { + return; + } + realThing = realObject; + + getWrapper().setProxy(realThing); + Task task = null; + if (realThing instanceof Task) { + task = (Task) realThing; + + task.setRuntimeConfigurableWrapper(getWrapper()); + + // For Script example that modifies id'ed tasks in other + // targets to work. *very* Ugly + // The reference is replaced by RuntimeConfigurable + if (getWrapper().getId() != null) { + this.getOwningTarget().replaceChild(this, (Task) realThing); + } + } + + + // configure attributes of the object and it's children. If it is + // a task container, defer the configuration till the task container + // attempts to use the task + + if (task != null) { + task.maybeConfigure(); + } else { + getWrapper().maybeConfigure(getProject()); + } + + handleChildren(realThing, getWrapper()); + } + + /** + * Handles output sent to System.out by this task or its real task. + * + * @param output The output to log. Should not be null. + */ + protected void handleOutput(String output) { + if (realThing instanceof Task) { + ((Task) realThing).handleOutput(output); + } else { + super.handleOutput(output); + } + } + + /** + * Delegate to realThing if present and if it as task. + * @see Task#handleInput(byte[], int, int) + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @since Ant 1.6 + */ + protected int handleInput(byte[] buffer, int offset, int length) + throws IOException { + if (realThing instanceof Task) { + return ((Task) realThing).handleInput(buffer, offset, length); + } else { + return super.handleInput(buffer, offset, length); + } + + } + + /** + * Handles output sent to System.out by this task or its real task. + * + * @param output The output to log. Should not be null. + */ + protected void handleFlush(String output) { + if (realThing instanceof Task) { + ((Task) realThing).handleFlush(output); + } else { + super.handleFlush(output); + } + } + + /** + * Handles error output sent to System.err by this task or its real task. + * + * @param output The error output to log. Should not be null. + */ + protected void handleErrorOutput(String output) { + if (realThing instanceof Task) { + ((Task) realThing).handleErrorOutput(output); + } else { + super.handleErrorOutput(output); + } + } + + /** + * Handles error output sent to System.err by this task or its real task. + * + * @param output The error output to log. Should not be null. + */ + protected void handleErrorFlush(String output) { + if (realThing instanceof Task) { + ((Task) realThing).handleErrorFlush(output); + } else { + super.handleErrorFlush(output); + } + } + + /** + * Executes the real object if it's a task. If it's not a task + * (e.g. a data type) then this method does nothing. + */ + public void execute() { + if (realThing == null) { + // Got here if the runtimeconfigurable is not enabled. + return; + } + try { + if (realThing instanceof Task) { + ((Task) realThing).execute(); + } + } finally { + // Finished executing the task + // null it (unless it has an ID) to allow + // GC do its job + // If this UE is used again, a new "realthing" will be made + if (getWrapper().getId() == null) { + realThing = null; + getWrapper().setProxy(null); + } + } + } + + /** + * Adds a child element to this element. + * + * @param child The child element to add. Must not be null. + */ + public void addChild(UnknownElement child) { + if (children == null) { + children = new ArrayList(); + } + children.add(child); + } + + /** + * Creates child elements, creates children of the children + * (recursively), and sets attributes of the child elements. + * + * @param parent The configured object for the parent. + * Must not be null. + * + * @param parentWrapper The wrapper containing child wrappers + * to be configured. Must not be null + * if there are any children. + * + * @exception BuildException if the children cannot be configured. + */ + protected void handleChildren( + Object parent, + RuntimeConfigurable parentWrapper) + throws BuildException { + if (parent instanceof TypeAdapter) { + parent = ((TypeAdapter) parent).getProxy(); + } + + String parentUri = getNamespace(); + Class parentClass = parent.getClass(); + IntrospectionHelper ih = IntrospectionHelper.getHelper(getProject(), parentClass); + + + if (children != null) { + Iterator it = children.iterator(); + for (int i = 0; it.hasNext(); i++) { + RuntimeConfigurable childWrapper = parentWrapper.getChild(i); + UnknownElement child = it.next(); + try { + if (!childWrapper.isEnabled(child)) { + if (ih.supportsNestedElement( + parentUri, ProjectHelper.genComponentName( + child.getNamespace(), child.getTag()))) { + continue; + } + // fall tru and fail in handlechild (unsupported element) + } + if (!handleChild( + parentUri, ih, parent, child, childWrapper)) { + if (!(parent instanceof TaskContainer)) { + ih.throwNotSupported(getProject(), parent, + child.getTag()); + } else { + // a task container - anything could happen - just add the + // child to the container + TaskContainer container = (TaskContainer) parent; + container.addTask(child); + } + } + } catch (UnsupportedElementException ex) { + throw new BuildException( + parentWrapper.getElementTag() + + " doesn't support the nested \"" + ex.getElement() + + "\" element.", ex); + } + } + } + } + + /** + * @return the component name - uses ProjectHelper#genComponentName() + */ + protected String getComponentName() { + return ProjectHelper.genComponentName(getNamespace(), getTag()); + } + + /** + * This is used then the realobject of the UE is a PreSetDefinition. + * This is also used when a presetdef is used on a presetdef + * The attributes, elements and text are applied to this + * UE. + * + * @param u an UnknownElement containing the attributes, elements and text + */ + public void applyPreSet(UnknownElement u) { + if (presetDefed) { + return; + } + // Do the runtime + getWrapper().applyPreSet(u.getWrapper()); + if (u.children != null) { + List newChildren = new ArrayList(); + newChildren.addAll(u.children); + if (children != null) { + newChildren.addAll(children); + } + children = newChildren; + } + presetDefed = true; + } + + /** + * Creates a named task or data type. If the real object is a task, + * it is configured up to the init() stage. + * + * @param ue The unknown element to create the real object for. + * Must not be null. + * @param w Ignored in this implementation. + * + * @return the task or data type represented by the given unknown element. + */ + protected Object makeObject(UnknownElement ue, RuntimeConfigurable w) { + if (!w.isEnabled(ue)) { + return null; + } + ComponentHelper helper = ComponentHelper.getComponentHelper( + getProject()); + String name = ue.getComponentName(); + Object o = helper.createComponent(ue, ue.getNamespace(), name); + if (o == null) { + throw getNotFoundException("task or type", name); + } + if (o instanceof PreSetDef.PreSetDefinition) { + PreSetDef.PreSetDefinition def = (PreSetDef.PreSetDefinition) o; + o = def.createObject(ue.getProject()); + if (o == null) { + throw getNotFoundException( + "preset " + name, + def.getPreSets().getComponentName()); + } + ue.applyPreSet(def.getPreSets()); + if (o instanceof Task) { + Task task = (Task) o; + task.setTaskType(ue.getTaskType()); + task.setTaskName(ue.getTaskName()); + task.init(); + } + } + if (o instanceof UnknownElement) { + o = ((UnknownElement) o).makeObject((UnknownElement) o, w); + } + if (o instanceof Task) { + ((Task) o).setOwningTarget(getOwningTarget()); + } + if (o instanceof ProjectComponent) { + ((ProjectComponent) o).setLocation(getLocation()); + } + return o; + } + + /** + * Creates a named task and configures it up to the init() stage. + * + * @param ue The UnknownElement to create the real task for. + * Must not be null. + * @param w Ignored. + * + * @return the task specified by the given unknown element, or + * null if the task name is not recognised. + */ + protected Task makeTask(UnknownElement ue, RuntimeConfigurable w) { + Task task = getProject().createTask(ue.getTag()); + + if (task != null) { + task.setLocation(getLocation()); + // UnknownElement always has an associated target + task.setOwningTarget(getOwningTarget()); + task.init(); + } + return task; + } + + /** + * Returns a very verbose exception for when a task/data type cannot + * be found. + * + * @param what The kind of thing being created. For example, when + * a task name could not be found, this would be + * "task". Should not be null. + * @param name The name of the element which could not be found. + * Should not be null. + * + * @return a detailed description of what might have caused the problem. + */ + protected BuildException getNotFoundException(String what, + String name) { + ComponentHelper helper = ComponentHelper.getComponentHelper(getProject()); + String msg = helper.diagnoseCreationFailure(name, what); + return new BuildException(msg, getLocation()); + } + + /** + * Returns the name to use in logging messages. + * + * @return the name to use in logging messages. + */ + public String getTaskName() { + //return elementName; + return realThing == null + || !(realThing instanceof Task) ? super.getTaskName() + : ((Task) realThing).getTaskName(); + } + + /** + * Returns the task instance after it has been created and if it is a task. + * + * @return a task instance or null if the real object is not + * a task. + */ + public Task getTask() { + if (realThing instanceof Task) { + return (Task) realThing; + } + return null; + } + + /** + * Return the configured object + * + * @return the real thing whatever it is + * + * @since ant 1.6 + */ + public Object getRealThing() { + return realThing; + } + + /** + * Set the configured object + * @param realThing the configured object + * @since ant 1.7 + */ + public void setRealThing(Object realThing) { + this.realThing = realThing; + } + + /** + * Try to create a nested element of parent for the + * given tag. + * + * @return whether the creation has been successful + */ + private boolean handleChild( + String parentUri, + IntrospectionHelper ih, + Object parent, UnknownElement child, + RuntimeConfigurable childWrapper) { + String childName = ProjectHelper.genComponentName( + child.getNamespace(), child.getTag()); + if (ih.supportsNestedElement(parentUri, childName, getProject(), + parent)) { + IntrospectionHelper.Creator creator = null; + try { + creator = ih.getElementCreator(getProject(), parentUri, + parent, childName, child); + } catch (UnsupportedElementException use) { + if (!ih.isDynamic()) { + throw use; + } + // can't trust supportsNestedElement for dynamic elements + return false; + } + creator.setPolyType(childWrapper.getPolyType()); + Object realChild = creator.create(); + if (realChild instanceof PreSetDef.PreSetDefinition) { + PreSetDef.PreSetDefinition def = + (PreSetDef.PreSetDefinition) realChild; + realChild = creator.getRealObject(); + child.applyPreSet(def.getPreSets()); + } + childWrapper.setCreator(creator); + childWrapper.setProxy(realChild); + if (realChild instanceof Task) { + Task childTask = (Task) realChild; + childTask.setRuntimeConfigurableWrapper(childWrapper); + childTask.setTaskName(childName); + childTask.setTaskType(childName); + } + if (realChild instanceof ProjectComponent) { + ((ProjectComponent) realChild).setLocation(child.getLocation()); + } + childWrapper.maybeConfigure(getProject()); + child.handleChildren(realChild, childWrapper); + creator.store(); + return true; + } + return false; + } + + /** + * like contents equals, but ignores project + * @param obj the object to check against + * @return true if this unknownelement has the same contents the other + */ + public boolean similar(Object obj) { + if (obj == null) { + return false; + } + if (!getClass().getName().equals(obj.getClass().getName())) { + return false; + } + UnknownElement other = (UnknownElement) obj; + // Are the names the same ? + if (!equalsString(elementName, other.elementName)) { + return false; + } + if (!namespace.equals(other.namespace)) { + return false; + } + if (!qname.equals(other.qname)) { + return false; + } + // Are attributes the same ? + if (!getWrapper().getAttributeMap().equals( + other.getWrapper().getAttributeMap())) { + return false; + } + // Is the text the same? + // Need to use equals on the string and not + // on the stringbuffer as equals on the string buffer + // does not compare the contents. + if (!getWrapper().getText().toString().equals( + other.getWrapper().getText().toString())) { + return false; + } + // Are the sub elements the same ? + final int childrenSize = children == null ? 0 : children.size(); + if (childrenSize == 0) { + return other.children == null || other.children.size() == 0; + } + if (other.children == null) { + return false; + } + if (childrenSize != other.children.size()) { + return false; + } + for (int i = 0; i < childrenSize; ++i) { + UnknownElement child = (UnknownElement) children.get(i); + if (!child.similar(other.children.get(i))) { + return false; + } + } + return true; + } + + private static boolean equalsString(String a, String b) { + return (a == null) ? (b == null) : a.equals(b); + } + + /** + * Make a copy of the unknown element and set it in the new project. + * @param newProject the project to create the UE in. + * @return the copied UE. + */ + public UnknownElement copy(Project newProject) { + UnknownElement ret = new UnknownElement(getTag()); + ret.setNamespace(getNamespace()); + ret.setProject(newProject); + ret.setQName(getQName()); + ret.setTaskType(getTaskType()); + ret.setTaskName(getTaskName()); + ret.setLocation(getLocation()); + if (getOwningTarget() == null) { + Target t = new Target(); + t.setProject(getProject()); + ret.setOwningTarget(t); + } else { + ret.setOwningTarget(getOwningTarget()); + } + RuntimeConfigurable copyRC = new RuntimeConfigurable( + ret, getTaskName()); + copyRC.setPolyType(getWrapper().getPolyType()); + Map m = getWrapper().getAttributeMap(); + for (Map.Entry entry : m.entrySet()) { + copyRC.setAttribute(entry.getKey(), (String) entry.getValue()); + } + copyRC.addText(getWrapper().getText().toString()); + + for (Enumeration e = getWrapper().getChildren(); e.hasMoreElements();) { + RuntimeConfigurable r = e.nextElement(); + UnknownElement ueChild = (UnknownElement) r.getProxy(); + UnknownElement copyChild = ueChild.copy(newProject); + copyRC.addChild(copyChild.getWrapper()); + ret.addChild(copyChild); + } + return ret; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedAttributeException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedAttributeException.java new file mode 100644 index 00000000..1fd9ce51 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedAttributeException.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Used to report attempts to set an unsupported attribute + * + * @since Ant 1.6.3 + */ +public class UnsupportedAttributeException extends BuildException { + private static final long serialVersionUID = 1L; + + private final String attribute; + + /** + * Constructs an unsupported attribute exception. + * @param msg The string containing the message. + * @param attribute The unsupported attribute. + */ + public UnsupportedAttributeException(String msg, String attribute) { + super(msg); + this.attribute = attribute; + } + + /** + * Get the attribute that is wrong. + * + * @return the attribute name. + */ + public String getAttribute() { + return attribute; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedElementException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedElementException.java new file mode 100644 index 00000000..2a38120c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/UnsupportedElementException.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +/** + * Used to report attempts to set an unsupported element + * When the attempt to set the element is made, + * the code does not not know the name of the task/type + * based on a mapping from the classname to the task/type. + * However one class may be used by a lot of task/types. + * This exception may be caught by code that does know + * the task/type and it will reset the message to the + * correct message. + * This will be done once (in the case of a recursive + * call to handlechildren). + * + * @since Ant 1.6.3 + */ +public class UnsupportedElementException extends BuildException { + private static final long serialVersionUID = 1L; + + private final String element; + + /** + * Constructs an unsupported element exception. + * @param msg The string containing the message. + * @param element The name of the incorrect element. + */ + public UnsupportedElementException(String msg, String element) { + super(msg); + this.element = element; + } + + /** + * Get the element that is wrong. + * + * @return the element name. + */ + public String getElement() { + return element; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/XmlLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/XmlLogger.java new file mode 100644 index 00000000..a67a260e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/XmlLogger.java @@ -0,0 +1,474 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintStream; +import java.io.Writer; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Stack; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.tools.ant.util.DOMElementWriter; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.StringUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.Text; + +/** + * Generates a file in the current directory with + * an XML description of what happened during a build. + * The default filename is "log.xml", but this can be overridden + * with the property XmlLogger.file. + * + * This implementation assumes in its sanity checking that only one + * thread runs a particular target/task at a time. This is enforced + * by the way that parallel builds and antcalls are done - and + * indeed all but the simplest of tasks could run into problems + * if executed in parallel. + * + * @see Project#addBuildListener(BuildListener) + */ +public class XmlLogger implements BuildLogger { + + private int msgOutputLevel = Project.MSG_DEBUG; + private PrintStream outStream; + + /** DocumentBuilder to use when creating the document to start with. */ + private static DocumentBuilder builder = getDocumentBuilder(); + + /** + * Returns a default DocumentBuilder instance or throws an + * ExceptionInInitializerError if it can't be created. + * + * @return a default DocumentBuilder instance. + */ + private static DocumentBuilder getDocumentBuilder() { + try { + return DocumentBuilderFactory.newInstance().newDocumentBuilder(); + } catch (Exception exc) { + throw new ExceptionInInitializerError(exc); + } + } + + /** XML element name for a build. */ + private static final String BUILD_TAG = "build"; + + /** XML element name for a target. */ + private static final String TARGET_TAG = "target"; + + /** XML element name for a task. */ + private static final String TASK_TAG = "task"; + + /** XML element name for a message. */ + private static final String MESSAGE_TAG = "message"; + + /** XML attribute name for a name. */ + private static final String NAME_ATTR = "name"; + + /** XML attribute name for a time. */ + private static final String TIME_ATTR = "time"; + + /** XML attribute name for a message priority. */ + private static final String PRIORITY_ATTR = "priority"; + + /** XML attribute name for a file location. */ + private static final String LOCATION_ATTR = "location"; + + /** XML attribute name for an error description. */ + private static final String ERROR_ATTR = "error"; + + /** XML element name for a stack trace. */ + private static final String STACKTRACE_TAG = "stacktrace"; + + /** The complete log document for this build. */ + private Document doc = builder.newDocument(); + + /** Mapping for when tasks started (Task to TimedElement). */ + private Hashtable tasks = new Hashtable(); + + /** Mapping for when targets started (Target to TimedElement). */ + private Hashtable targets = new Hashtable(); + + /** + * Mapping of threads to stacks of elements + * (Thread to Stack of TimedElement). + */ + private Hashtable> threadStacks = new Hashtable>(); + + /** + * When the build started. + */ + private TimedElement buildElement = null; + + /** Utility class representing the time an element started. */ + private static class TimedElement { + /** + * Start time in milliseconds + * (as returned by System.currentTimeMillis()). + */ + private long startTime; + /** Element created at the start time. */ + private Element element; + public String toString() { + return element.getTagName() + ":" + element.getAttribute("name"); + } + } + + /** + * Constructs a new BuildListener that logs build events to an XML file. + */ + public XmlLogger() { + } + + /** + * Fired when the build starts, this builds the top-level element for the + * document and remembers the time of the start of the build. + * + * @param event Ignored. + */ + public void buildStarted(BuildEvent event) { + buildElement = new TimedElement(); + buildElement.startTime = System.currentTimeMillis(); + buildElement.element = doc.createElement(BUILD_TAG); + } + + /** + * Fired when the build finishes, this adds the time taken and any + * error stacktrace to the build element and writes the document to disk. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void buildFinished(BuildEvent event) { + long totalTime = System.currentTimeMillis() - buildElement.startTime; + buildElement.element.setAttribute(TIME_ATTR, DefaultLogger.formatTime(totalTime)); + + if (event.getException() != null) { + buildElement.element.setAttribute(ERROR_ATTR, event.getException().toString()); + // print the stacktrace in the build file it is always useful... + // better have too much info than not enough. + Throwable t = event.getException(); + Text errText = doc.createCDATASection(StringUtils.getStackTrace(t)); + Element stacktrace = doc.createElement(STACKTRACE_TAG); + stacktrace.appendChild(errText); + synchronizedAppend(buildElement.element, stacktrace); + } + String outFilename = getProperty(event, "XmlLogger.file", "log.xml"); + String xslUri = getProperty(event, "ant.XmlLogger.stylesheet.uri", "log.xsl"); + Writer out = null; + try { + // specify output in UTF8 otherwise accented characters will blow + // up everything + OutputStream stream = outStream; + if (stream == null) { + stream = new FileOutputStream(outFilename); + } + out = new OutputStreamWriter(stream, "UTF8"); + out.write("\n"); + if (xslUri.length() > 0) { + out.write("\n\n"); + } + new DOMElementWriter().write(buildElement.element, out, 0, "\t"); + out.flush(); + } catch (IOException exc) { + throw new BuildException("Unable to write log file", exc); + } finally { + FileUtils.close(out); + } + buildElement = null; + } + + private String getProperty(BuildEvent event, String propertyName, String defaultValue) { + String rv = defaultValue; + if (event != null && event.getProject() != null && event.getProject().getProperty(propertyName) != null) { + rv = event.getProject().getProperty(propertyName); + } + return rv; + } + + /** + * Returns the stack of timed elements for the current thread. + * @return the stack of timed elements for the current thread + */ + private Stack getStack() { + Stack threadStack = threadStacks.get(Thread.currentThread()); + if (threadStack == null) { + threadStack = new Stack(); + threadStacks.put(Thread.currentThread(), threadStack); + } + /* For debugging purposes uncomment: + org.w3c.dom.Comment s = doc.createComment("stack=" + threadStack); + buildElement.element.appendChild(s); + */ + return threadStack; + } + + /** + * Fired when a target starts building, this pushes a timed element + * for the target onto the stack of elements for the current thread, + * remembering the current time and the name of the target. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void targetStarted(BuildEvent event) { + Target target = event.getTarget(); + TimedElement targetElement = new TimedElement(); + targetElement.startTime = System.currentTimeMillis(); + targetElement.element = doc.createElement(TARGET_TAG); + targetElement.element.setAttribute(NAME_ATTR, target.getName()); + targets.put(target, targetElement); + getStack().push(targetElement); + } + + /** + * Fired when a target finishes building, this adds the time taken + * and any error stacktrace to the appropriate target element in the log. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void targetFinished(BuildEvent event) { + Target target = event.getTarget(); + TimedElement targetElement = targets.get(target); + if (targetElement != null) { + long totalTime = System.currentTimeMillis() - targetElement.startTime; + targetElement.element.setAttribute(TIME_ATTR, DefaultLogger.formatTime(totalTime)); + + TimedElement parentElement = null; + Stack threadStack = getStack(); + if (!threadStack.empty()) { + TimedElement poppedStack = threadStack.pop(); + if (poppedStack != targetElement) { + throw new RuntimeException("Mismatch - popped element = " + poppedStack + + " finished target element = " + targetElement); + } + if (!threadStack.empty()) { + parentElement = threadStack.peek(); + } + } + if (parentElement == null) { + synchronizedAppend(buildElement.element, targetElement.element); + } else { + synchronizedAppend(parentElement.element, + targetElement.element); + } + } + targets.remove(target); + } + + /** + * Fired when a task starts building, this pushes a timed element + * for the task onto the stack of elements for the current thread, + * remembering the current time and the name of the task. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void taskStarted(BuildEvent event) { + TimedElement taskElement = new TimedElement(); + taskElement.startTime = System.currentTimeMillis(); + taskElement.element = doc.createElement(TASK_TAG); + + Task task = event.getTask(); + String name = event.getTask().getTaskName(); + if (name == null) { + name = ""; + } + taskElement.element.setAttribute(NAME_ATTR, name); + taskElement.element.setAttribute(LOCATION_ATTR, event.getTask().getLocation().toString()); + tasks.put(task, taskElement); + getStack().push(taskElement); + } + + /** + * Fired when a task finishes building, this adds the time taken + * and any error stacktrace to the appropriate task element in the log. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void taskFinished(BuildEvent event) { + Task task = event.getTask(); + TimedElement taskElement = tasks.get(task); + if (taskElement == null) { + throw new RuntimeException("Unknown task " + task + " not in " + tasks); + } + long totalTime = System.currentTimeMillis() - taskElement.startTime; + taskElement.element.setAttribute(TIME_ATTR, DefaultLogger.formatTime(totalTime)); + Target target = task.getOwningTarget(); + TimedElement targetElement = null; + if (target != null) { + targetElement = targets.get(target); + } + if (targetElement == null) { + synchronizedAppend(buildElement.element, taskElement.element); + } else { + synchronizedAppend(targetElement.element, taskElement.element); + } + Stack threadStack = getStack(); + if (!threadStack.empty()) { + TimedElement poppedStack = threadStack.pop(); + if (poppedStack != taskElement) { + throw new RuntimeException("Mismatch - popped element = " + poppedStack + + " finished task element = " + taskElement); + } + } + tasks.remove(task); + } + + /** + * Get the TimedElement associated with a task. + * + * Where the task is not found directly, search for unknown elements which + * may be hiding the real task + */ + private TimedElement getTaskElement(Task task) { + TimedElement element = tasks.get(task); + if (element != null) { + return element; + } + for (Enumeration e = tasks.keys(); e.hasMoreElements();) { + Task key = e.nextElement(); + if (key instanceof UnknownElement) { + if (((UnknownElement) key).getTask() == task) { + return tasks.get(key); + } + } + } + return null; + } + + /** + * Fired when a message is logged, this adds a message element to the + * most appropriate parent element (task, target or build) and records + * the priority and text of the message. + * + * @param event An event with any relevant extra information. + * Will not be null. + */ + public void messageLogged(BuildEvent event) { + int priority = event.getPriority(); + if (priority > msgOutputLevel) { + return; + } + Element messageElement = doc.createElement(MESSAGE_TAG); + + String name = "debug"; + switch (priority) { + case Project.MSG_ERR: + name = "error"; + break; + case Project.MSG_WARN: + name = "warn"; + break; + case Project.MSG_INFO: + name = "info"; + break; + default: + name = "debug"; + break; + } + messageElement.setAttribute(PRIORITY_ATTR, name); + + Throwable ex = event.getException(); + if (Project.MSG_DEBUG <= msgOutputLevel && ex != null) { + Text errText = doc.createCDATASection(StringUtils.getStackTrace(ex)); + Element stacktrace = doc.createElement(STACKTRACE_TAG); + stacktrace.appendChild(errText); + synchronizedAppend(buildElement.element, stacktrace); + } + Text messageText = doc.createCDATASection(event.getMessage()); + messageElement.appendChild(messageText); + + TimedElement parentElement = null; + + Task task = event.getTask(); + + Target target = event.getTarget(); + if (task != null) { + parentElement = getTaskElement(task); + } + if (parentElement == null && target != null) { + parentElement = targets.get(target); + } + if (parentElement != null) { + synchronizedAppend(parentElement.element, messageElement); + } else { + synchronizedAppend(buildElement.element, messageElement); + } + } + + // -------------------------------------------------- BuildLogger interface + + /** + * Set the logging level when using this as a Logger + * + * @param level the logging level - + * see {@link org.apache.tools.ant.Project#MSG_ERR Project} + * class for level definitions + */ + public void setMessageOutputLevel(int level) { + msgOutputLevel = level; + } + + /** + * Set the output stream to which logging output is sent when operating + * as a logger. + * + * @param output the output PrintStream. + */ + public void setOutputPrintStream(PrintStream output) { + this.outStream = new PrintStream(output, true); + } + + /** + * Ignore emacs mode, as it has no meaning in XML format + * + * @param emacsMode true if logger should produce emacs compatible + * output + */ + public void setEmacsMode(boolean emacsMode) { + } + + /** + * Ignore error print stream. All output will be written to + * either the XML log file or the PrintStream provided to + * setOutputPrintStream + * + * @param err the stream we are going to ignore. + */ + public void setErrorPrintStream(PrintStream err) { + } + + private void synchronizedAppend(Node parent, Node child) { + synchronized(parent) { + parent.appendChild(child); + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/antlib.xml b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/antlib.xml new file mode 100644 index 00000000..b11bac52 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/antlib.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/AttributeNamespace.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/AttributeNamespace.java new file mode 100644 index 00000000..fba4c992 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/AttributeNamespace.java @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +/** + * This class is used to indicate that the XML namespace (URI) + * can be used to look for namespace attributes. + * @see org.apache.tools.ant.taskdefs.AttributeNamespaceDef + * @since Ant 1.9.1 + */ +public final class AttributeNamespace { +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java new file mode 100644 index 00000000..c2ec08ab --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/BaseIfAttribute.java @@ -0,0 +1,86 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.RuntimeConfigurable; +import org.apache.tools.ant.UnknownElement; + + +/** + * An abstract class for if/unless attributes. + * This contains a boolean flag to specify whether this is an + * if or unless attribute. + * @since Ant 1.9.1 + */ +public abstract class BaseIfAttribute + extends ProjectComponent implements EnableAttribute { + private boolean positive = true; + /** + * Set the positive flag. + * @param positive the value to use. + */ + protected void setPositive(boolean positive) { + this.positive = positive; + } + + /** + * Get the positive flag. + * @return the flag. + */ + protected boolean isPositive() { + return positive; + } + + /** + * convert the result. + * @param val the result to convert + * @return val if positive or !val if not. + */ + protected boolean convertResult(boolean val) { + return positive ? val : !val; + } + + /** + * Get all the attributes in the ant-attribute:param + * namespace and place them in a map. + * @param el the element this attribute is in. + * @return a map of attributes. + */ + protected Map getParams(UnknownElement el) { + Map ret = new HashMap(); + RuntimeConfigurable rc = el.getWrapper(); + Map attributes = rc.getAttributeMap(); // This does a copy! + for (Iterator i = attributes.entrySet().iterator(); i.hasNext();) { + Map.Entry entry = (Map.Entry) i.next(); + String key = (String) entry.getKey(); + String value = (String) entry.getValue(); + if (key.startsWith("ant-attribute:param")) { + int pos = key.lastIndexOf(':'); + ret.put(key.substring(pos + 1), + el.getProject().replaceProperties(value)); + } + } + return ret; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/EnableAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/EnableAttribute.java new file mode 100644 index 00000000..06c1186f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/EnableAttribute.java @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +import org.apache.tools.ant.UnknownElement; + +/** + * This interface is used by Ant attributes. + * @since Ant 1.9.1 + */ +public interface EnableAttribute { + /** + * is enabled. + * @param el the unknown element this attribute is in. + * @param value the value of the attribute. + * @return true if the attribute enables the element, false otherwise. + */ + boolean isEnabled(UnknownElement el, String value); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfBlankAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfBlankAttribute.java new file mode 100644 index 00000000..384476c8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfBlankAttribute.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +import org.apache.tools.ant.UnknownElement; + +/** + * Check if an attribute is blank or not. + * @since Ant 1.9.1 + */ +public class IfBlankAttribute extends BaseIfAttribute { + /** The unless version */ + public static class Unless extends IfBlankAttribute { + { setPositive(false); } + } + /** + * check if the attribute value is blank or not + * {@inheritDoc} + */ + public boolean isEnabled(UnknownElement el, String value) { + return convertResult((value == null || "".equals(value))); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfSetAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfSetAttribute.java new file mode 100644 index 00000000..d4531c59 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfSetAttribute.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +import org.apache.tools.ant.UnknownElement; + +/** + * Check if an attribute value as a property is set or not + * @since Ant 1.9.1 + */ +public class IfSetAttribute extends BaseIfAttribute { + /** The unless version */ + public static class Unless extends IfSetAttribute { + { setPositive(false); } + } + /** + * check if the attribute value is blank or not + * {@inheritDoc} + */ + public boolean isEnabled(UnknownElement el, String value) { + return convertResult(getProject().getProperty(value) != null); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfTrueAttribute.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfTrueAttribute.java new file mode 100644 index 00000000..5c10ea2f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/attribute/IfTrueAttribute.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.attribute; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.UnknownElement; + +/** + * Check if an attribute value is true or not. + * @since Ant 1.9.1 + */ +public class IfTrueAttribute extends BaseIfAttribute { + /** The unless version */ + public static class Unless extends IfTrueAttribute { + { setPositive(false); } + } + + /** + * check if the attribute value is true or not + * {@inheritDoc} + */ + public boolean isEnabled(UnknownElement el, String value) { + return convertResult(Project.toBoolean(value)); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/defaultManifest.mf b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/defaultManifest.mf new file mode 100644 index 00000000..fd30a23a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/defaultManifest.mf @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Ant-Version: Apache Ant ${project.version} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchTask.java new file mode 100644 index 00000000..a848ed13 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchTask.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.dispatch; + +import org.apache.tools.ant.Task; + +/** + * Tasks extending this class may contain multiple actions. + * The method that is invoked for execution depends upon the + * value of the action attribute of the task. + *
    + * Example:
    + * <mytask action="list"/> will invoke the method + * with the signature public void list() in mytask's class. + * If the action attribute is not defined in the task or is empty, + * the execute() method will be called. + */ +public abstract class DispatchTask extends Task implements Dispatchable { + private String action; + + /** + * Get the action parameter name. + * @return the String "action" by default (can be overridden). + */ + public String getActionParameterName() { + return "action"; + } + + /** + * Set the action. + * @param action the method name. + */ + public void setAction(String action) { + this.action = action; + } + + /** + * Get the action. + * @return the action. + */ + public String getAction() { + return action; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchUtils.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchUtils.java new file mode 100644 index 00000000..1a7c1f98 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/DispatchUtils.java @@ -0,0 +1,124 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.dispatch; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.UnknownElement; + +/** + * Determines and Executes the action method for the task. + */ +// CheckStyle:HideUtilityClassConstructorCheck OFF - (bc) +public class DispatchUtils { + /** + * Determines and Executes the action method for the task. + * @param task the task to execute. + * @throws BuildException on error. + */ + public static final void execute(Object task) throws BuildException { + String methodName = "execute"; + Dispatchable dispatchable = null; + try { + if (task instanceof Dispatchable) { + dispatchable = (Dispatchable) task; + } else if (task instanceof UnknownElement) { + UnknownElement ue = (UnknownElement) task; + Object realThing = ue.getRealThing(); + if (realThing != null + && realThing instanceof Dispatchable + && realThing instanceof Task) { + dispatchable = (Dispatchable) realThing; + } + } + if (dispatchable != null) { + String mName = null; + try { + final String name = dispatchable.getActionParameterName(); + if (name != null && name.trim().length() > 0) { + mName = "get" + name.trim().substring(0, 1).toUpperCase(); + if (name.length() > 1) { + mName += name.substring(1); + } + final Class c = dispatchable.getClass(); + final Method actionM = c.getMethod(mName, new Class[0]); + if (actionM != null) { + final Object o = actionM.invoke(dispatchable, (Object[]) null); + if (o != null) { + final String s = o.toString(); + if (s != null && s.trim().length() > 0) { + methodName = s.trim(); + Method executeM = null; + executeM = dispatchable.getClass().getMethod( + methodName, new Class[0]); + if (executeM == null) { + throw new BuildException( + "No public " + methodName + "() in " + + dispatchable.getClass()); + } + executeM.invoke(dispatchable, (Object[]) null); + if (task instanceof UnknownElement) { + ((UnknownElement) task).setRealThing(null); + } + } else { + throw new BuildException( + "Dispatchable Task attribute '" + name.trim() + + "' not set or value is empty."); + } + } else { + throw new BuildException( + "Dispatchable Task attribute '" + name.trim() + + "' not set or value is empty."); + } + } + } else { + throw new BuildException( + "Action Parameter Name must not be empty for Dispatchable Task."); + } + } catch (NoSuchMethodException nsme) { + throw new BuildException("No public " + mName + "() in " + task.getClass()); + } + } else { + Method executeM = null; + executeM = task.getClass().getMethod(methodName, new Class[0]); + if (executeM == null) { + throw new BuildException("No public " + methodName + "() in " + + task.getClass()); + } + executeM.invoke(task, (Object[]) null); + if (task instanceof UnknownElement) { + ((UnknownElement) task).setRealThing(null); + } + } + } catch (InvocationTargetException ie) { + Throwable t = ie.getTargetException(); + if (t instanceof BuildException) { + throw ((BuildException) t); + } else { + throw new BuildException(t); + } + } catch (NoSuchMethodException e) { + throw new BuildException(e); + } catch (IllegalAccessException e) { + throw new BuildException(e); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/Dispatchable.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/Dispatchable.java new file mode 100644 index 00000000..41684f48 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/dispatch/Dispatchable.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.dispatch; + +/** + * Classes implementing this interface specify the + * name of the parameter that contains the name + * of the task's method to execute. + */ +public interface Dispatchable { + /** + * Get the name of the parameter. + * @return the name of the parameter that contains the name of the method. + */ + String getActionParameterName(); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseFilterReader.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseFilterReader.java new file mode 100644 index 00000000..3b3b0270 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseFilterReader.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.FilterReader; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.util.FileUtils; + +/** + * Base class for core filter readers. + * + */ +public abstract class BaseFilterReader extends FilterReader { + /** Buffer size used when reading */ + private static final int BUFFER_SIZE = 8192; + + /** Have the parameters passed been interpreted? */ + private boolean initialized = false; + + /** The Ant project this filter is part of. */ + private Project project = null; + + /** + * Constructor used by Ant's introspection mechanism. + * The original filter reader is only used for chaining + * purposes, never for filtering purposes (and indeed + * it would be useless for filtering purposes, as it has + * no real data to filter). ChainedReaderHelper uses + * this placeholder instance to create a chain of real filters. + */ + public BaseFilterReader() { + super(new StringReader("")); + FileUtils.close(this); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + * + */ + public BaseFilterReader(final Reader in) { + super(in); + } + + /** + * Reads characters into a portion of an array. This method will block + * until some input is available, an I/O error occurs, or the end of the + * stream is reached. + * + * @param cbuf Destination buffer to write characters to. + * Must not be null. + * @param off Offset at which to start storing characters. + * @param len Maximum number of characters to read. + * + * @return the number of characters read, or -1 if the end of the + * stream has been reached + * + * @exception IOException If an I/O error occurs + */ + public final int read(final char[] cbuf, final int off, + final int len) throws IOException { + for (int i = 0; i < len; i++) { + final int ch = read(); + if (ch == -1) { + if (i == 0) { + return -1; + } else { + return i; + } + } + cbuf[off + i] = (char) ch; + } + return len; + } + + /** + * Skips characters. This method will block until some characters are + * available, an I/O error occurs, or the end of the stream is reached. + * + * @param n The number of characters to skip + * + * @return the number of characters actually skipped + * + * @exception IllegalArgumentException If n is negative. + * @exception IOException If an I/O error occurs + */ + public final long skip(final long n) + throws IOException, IllegalArgumentException { + if (n < 0L) { + throw new IllegalArgumentException("skip value is negative"); + } + + for (long i = 0; i < n; i++) { + if (read() == -1) { + return i; + } + } + return n; + } + + /** + * Sets the initialized status. + * + * @param initialized Whether or not the filter is initialized. + */ + protected final void setInitialized(final boolean initialized) { + this.initialized = initialized; + } + + /** + * Returns the initialized status. + * + * @return whether or not the filter is initialized + */ + protected final boolean getInitialized() { + return initialized; + } + + /** + * Sets the project to work with. + * + * @param project The project this filter is part of. + * Should not be null. + */ + public final void setProject(final Project project) { + this.project = project; + } + + /** + * Returns the project this filter is part of. + * + * @return the project this filter is part of + */ + protected final Project getProject() { + return project; + } + + /** + * Reads a line of text ending with '\n' (or until the end of the stream). + * The returned String retains the '\n'. + * + * @return the line read, or null if the end of the stream + * has already been reached + * + * @exception IOException if the underlying reader throws one during + * reading + */ + protected final String readLine() throws IOException { + int ch = in.read(); + + if (ch == -1) { + return null; + } + + StringBuffer line = new StringBuffer(); + + while (ch != -1) { + line.append ((char) ch); + if (ch == '\n') { + break; + } + ch = in.read(); + } + return line.toString(); + } + + /** + * Reads to the end of the stream, returning the contents as a String. + * + * @return the remaining contents of the reader, as a String + * + * @exception IOException if the underlying reader throws one during + * reading + */ + protected final String readFully() throws IOException { + return FileUtils.readFully(in, BUFFER_SIZE); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java new file mode 100644 index 00000000..54bc9ff9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/BaseParamFilterReader.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.types.Parameterizable; + +/** + * Parameterized base class for core filter readers. + * + */ +public abstract class BaseParamFilterReader + extends BaseFilterReader + implements Parameterizable { + /** The passed in parameter array. */ + private Parameter[] parameters; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public BaseParamFilterReader() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public BaseParamFilterReader(final Reader in) { + super(in); + } + + /** + * Sets the parameters used by this filter, and sets + * the filter to an uninitialized status. + * + * @param parameters The parameters to be used by this filter. + * Should not be null. + */ + public final void setParameters(final Parameter[] parameters) { + this.parameters = parameters; + setInitialized(false); + } + + /** + * Returns the parameters to be used by this filter. + * + * @return the parameters to be used by this filter + */ + protected final Parameter[] getParameters() { + return parameters; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ChainableReader.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ChainableReader.java new file mode 100644 index 00000000..67060393 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ChainableReader.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.Reader; + +/** + * Interface indicating that a reader may be chained to another one. + * + */ +public interface ChainableReader { + /** + * Returns a reader with the same configuration as this one, + * but filtering input from the specified reader. + * + * @param rdr the reader which the returned reader should be filtering + * + * @return a reader with the same configuration as this one, but + * filtering input from the specified reader + */ + Reader chain(Reader rdr); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ClassConstants.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ClassConstants.java new file mode 100644 index 00000000..35443012 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ClassConstants.java @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.ResourceUtils; + +/** + * Assembles the constants declared in a Java class in + * key1=value1(line separator)key2=value2 + * format. + *

    + * Notes: + *

      + *
    1. This filter uses the BCEL external toolkit. + *
    2. This assembles only those constants that are not created + * using the syntax new whatever() + *
    3. This assembles constants declared using the basic datatypes + * and String only.
    4. + *
    5. The access modifiers of the declared constants do not matter.
    6. + *
    + * Example:
    + *
    <classconstants/>
    + * Or: + *
    <filterreader
    + *    classname="org.apache.tools.ant.filters.ClassConstants"/>
    + */ +public final class ClassConstants + extends BaseFilterReader + implements ChainableReader { + /** Data that must be read from, if not null. */ + private String queuedData = null; + + /** Helper Class to be invoked via reflection. */ + private static final String JAVA_CLASS_HELPER = + "org.apache.tools.ant.filters.util.JavaClassHelper"; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public ClassConstants() { + super(); + } + + /** + * Creates a new filtered reader. The contents of the passed-in reader + * are expected to be the name of the class from which to produce a + * list of constants. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public ClassConstants(final Reader in) { + super(in); + } + + /** + * Reads and assembles the constants declared in a class file. + * + * @return the next character in the list of constants, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading, or if the constants for the specified class cannot + * be read (for example due to the class not being found). + */ + public int read() throws IOException { + + int ch = -1; + + if (queuedData != null && queuedData.length() == 0) { + queuedData = null; + } + + if (queuedData != null) { + ch = queuedData.charAt(0); + queuedData = queuedData.substring(1); + if (queuedData.length() == 0) { + queuedData = null; + } + } else { + final String clazz = readFully(); + if (clazz == null || clazz.length() == 0) { + ch = -1; + } else { + final byte[] bytes = clazz.getBytes(ResourceUtils.ISO_8859_1); + 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 static 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 (NoClassDefFoundError ex) { + throw ex; + } catch (RuntimeException ex) { + throw ex; + } catch (InvocationTargetException ex) { + Throwable t = ex.getTargetException(); + if (t instanceof NoClassDefFoundError) { + throw (NoClassDefFoundError) t; + } + if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } + throw new BuildException(t); + } catch (Exception ex) { + throw new BuildException(ex); + } + } + } + return ch; + } + + /** + * Creates a new ClassConstants using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + ClassConstants newFilter = new ClassConstants(rdr); + return newFilter; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ConcatFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ConcatFilter.java new file mode 100644 index 00000000..0ac6024b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ConcatFilter.java @@ -0,0 +1,218 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; + +/** + * Concats a file before and/or after the file. + * + *

    Example:

    + * <copy todir="build">
    + *     <fileset dir="src" includes="*.java"/>
    + *     <filterchain>
    + *         <concatfilter prepend="apache-license-java.txt"/>
    + *     </filterchain>
    + * </copy>
    + * 
    + * + *

    Copies all java sources from src to build and adds the + * content of apache-license-java.txt add the beginning of each + * file.

    + * + * @since 1.6 + * @version 2003-09-23 + */ +public final class ConcatFilter extends BaseParamFilterReader + implements ChainableReader { + + /** File to add before the content. */ + private File prepend; + + /** File to add after the content. */ + private File append; + + /** Reader for prepend-file. */ + private Reader prependReader = null; + + /** Reader for append-file. */ + private Reader appendReader = null; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public ConcatFilter() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public ConcatFilter(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream. If the desired + * number of lines have already been read, the resulting stream is + * effectively at an end. Otherwise, the next character from the + * underlying stream is read and returned. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + @Override + public int read() throws IOException { + // do the "singleton" initialization + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + // The readers return -1 if they end. So simply read the "prepend" + // after that the "content" and at the end the "append" file. + if (prependReader != null) { + ch = prependReader.read(); + if (ch == -1) { + // I am the only one so I have to close the reader + prependReader.close(); + prependReader = null; + } + } + if (ch == -1) { + ch = super.read(); + } + if (ch == -1) { + // don't call super.close() because that reader is used + // on other places ... + if (appendReader != null) { + ch = appendReader.read(); + if (ch == -1) { + // I am the only one so I have to close the reader + appendReader.close(); + appendReader = null; + } + } + } + + return ch; + } + + /** + * Sets prepend attribute. + * @param prepend new value + */ + public void setPrepend(final File prepend) { + this.prepend = prepend; + } + + /** + * Returns prepend attribute. + * @return prepend attribute + */ + public File getPrepend() { + return prepend; + } + + /** + * Sets append attribute. + * @param append new value + */ + public void setAppend(final File append) { + this.append = append; + } + + /** + * Returns append attribute. + * @return append attribute + */ + public File getAppend() { + return append; + } + + /** + * Creates a new ConcatReader using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + final ConcatFilter newFilter = new ConcatFilter(rdr); + newFilter.setPrepend(getPrepend()); + newFilter.setAppend(getAppend()); + // Usually the initialized is set to true. But here it must not. + // Because the prepend and append readers have to be instantiated + // on runtime + //newFilter.setInitialized(true); + return newFilter; + } + + /** + * Scans the parameters list for the "lines" parameter and uses + * it to set the number of lines to be returned in the filtered stream. + * also scan for skip parameter. + */ + private void initialize() throws IOException { + // get parameters + final Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if ("prepend".equals(params[i].getName())) { + setPrepend(new File(params[i].getValue())); + continue; + } + if ("append".equals(params[i].getName())) { + setAppend(new File(params[i].getValue())); + continue; + } + } + } + if (prepend != null) { + if (!prepend.isAbsolute()) { + prepend = new File(getProject().getBaseDir(), prepend.getPath()); + } + prependReader = new BufferedReader(new FileReader(prepend)); + } + if (append != null) { + if (!append.isAbsolute()) { + append = new File(getProject().getBaseDir(), append.getPath()); + } + appendReader = new BufferedReader(new FileReader(append)); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/EscapeUnicode.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/EscapeUnicode.java new file mode 100644 index 00000000..dd454395 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/EscapeUnicode.java @@ -0,0 +1,123 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.util.UnicodeUtil; + +/** + * This method converts non-latin characters to unicode escapes. + * Useful to load properties containing non latin + * Example: + * + *
    <escapeunicode>
    + * + * Or: + * + *
    <filterreader
    +        classname="org.apache.tools.ant.filters.EscapeUnicode"/>
    + *  
    + * + * @since Ant 1.6 + */ +public class EscapeUnicode + extends BaseParamFilterReader + implements ChainableReader { + //this field will hold unnnn right after reading a non latin character + //afterwards it will be truncated of one char every call to read + private StringBuffer unicodeBuf; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public EscapeUnicode() { + super(); + unicodeBuf = new StringBuffer(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public EscapeUnicode(final Reader in) { + super(in); + unicodeBuf = new StringBuffer(); + } + + /** + * Returns the next character in the filtered stream, converting non latin + * characters to unicode escapes. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws + * an IOException during reading + */ + public final int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + if (unicodeBuf.length() == 0) { + ch = in.read(); + if (ch != -1) { + char achar = (char) ch; + if (achar >= '\u0080') { + unicodeBuf = UnicodeUtil.EscapeUnicode(achar); + ch = '\\'; + } + } + } else { + ch = (int) unicodeBuf.charAt(0); + unicodeBuf.deleteCharAt(0); + } + return ch; + } + + /** + * Creates a new EscapeUnicode using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public final Reader chain(final Reader rdr) { + EscapeUnicode newFilter = new EscapeUnicode(rdr); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Parses the parameters (currently unused) + */ + private void initialize() { + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ExpandProperties.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ExpandProperties.java new file mode 100644 index 00000000..524a799b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ExpandProperties.java @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.Properties; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.PropertyHelper; +import org.apache.tools.ant.property.GetProperty; +import org.apache.tools.ant.property.ParseProperties; +import org.apache.tools.ant.types.PropertySet; + +/** + * Expands Ant properties, if any, in the data. + *

    + * Example:
    + *

    <expandproperties/>
    + * Or: + *
    <filterreader
    + *    classname="org.apache.tools.ant.filters.ExpandProperties"/>
    + * + */ +public final class ExpandProperties + extends BaseFilterReader + implements ChainableReader { + + private static final int EOF = -1; + + private char[] buffer; + private int index; + private PropertySet propertySet; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public ExpandProperties() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public ExpandProperties(final Reader in) { + super(in); + } + + /** + * Restrict the expanded properties using a PropertySet. + * @param propertySet replacement lookup + */ + public void add(PropertySet propertySet) { + if (this.propertySet != null) { + throw new BuildException("expandproperties filter accepts only one propertyset"); + } + this.propertySet = propertySet; + } + + /** + * Returns the next character in the filtered stream. The original + * stream is first read in fully, and the Ant properties are expanded. + * The results of this expansion are then queued so they can be read + * character-by-character. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (index > EOF) { + if (buffer == null) { + String data = readFully(); + Project project = getProject(); + GetProperty getProperty; + if (propertySet == null) { + getProperty = PropertyHelper.getPropertyHelper(project); + } else { + final Properties props = propertySet.getProperties(); + getProperty = new GetProperty() { + + public Object getProperty(String name) { + return props.getProperty(name); + } + }; + } + Object expanded = new ParseProperties(project, PropertyHelper + .getPropertyHelper(project) + .getExpanders(), + getProperty) + .parseProperties(data); + buffer = expanded == null ? new char[0] + : expanded.toString().toCharArray(); + } + if (index < buffer.length) { + return buffer[index++]; + } + index = EOF; + } + return EOF; + } + + /** + * Creates a new ExpandProperties filter using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + ExpandProperties newFilter = new ExpandProperties(rdr); + newFilter.setProject(getProject()); + newFilter.add(propertySet); + return newFilter; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java new file mode 100644 index 00000000..8a37924c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/FixCrLfFilter.java @@ -0,0 +1,1004 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.condition.Os; +import org.apache.tools.ant.types.EnumeratedAttribute; + +/** + * Converts text to local OS formatting conventions, as well as repair text + * damaged by misconfigured or misguided editors or file transfer programs. + *

    + * This filter can take the following arguments: + *

      + *
    • eof + *
    • eol + *
    • fixlast + *
    • javafiles + *
    • tab + *
    • tablength + *
    + * None of which are required. + *

    + * This version generalises the handling of EOL characters, and allows for + * CR-only line endings (the standard on Mac systems prior to OS X). Tab + * handling has also been generalised to accommodate any tabwidth from 2 to 80, + * inclusive. Importantly, it can leave untouched any literal TAB characters + * embedded within Java string or character constants. + *

    + * Caution: run with care on carefully formatted files. This may + * sound obvious, but if you don't specify asis, presume that your files are + * going to be modified. If "tabs" is "add" or "remove", whitespace characters + * may be added or removed as necessary. Similarly, for EOLs, eol="asis" + * actually means convert to your native O/S EOL convention while eol="crlf" or + * cr="add" can result in CR characters being removed in one special case + * accommodated, i.e., CRCRLF is regarded as a single EOL to handle cases where + * other programs have converted CRLF into CRCRLF. + * + *

    + * Example: + * + *

    + * <<fixcrlf tab="add" eol="crlf" eof="asis"/>
    + * 
    + * + * Or: + * + *
    + * <filterreader classname="org.apache.tools.ant.filters.FixCrLfFilter">
    + *   <param eol="crlf" tab="asis"/>
    + *  </filterreader>
    + * 
    + * + */ +public final class FixCrLfFilter extends BaseParamFilterReader implements ChainableReader { + private static final int DEFAULT_TAB_LENGTH = 8; + private static final int MIN_TAB_LENGTH = 2; + private static final int MAX_TAB_LENGTH = 80; + private static final char CTRLZ = '\u001A'; + + private int tabLength = DEFAULT_TAB_LENGTH; + + private CrLf eol; + + private AddAsisRemove ctrlz; + + private AddAsisRemove tabs; + + private boolean javafiles = false; + + private boolean fixlast = true; + + private boolean initialized = false; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public FixCrLfFilter() { + super(); + } + + /** + * Create a new filtered reader. + * + * @param in + * A Reader object providing the underlying stream. Must not be + * null. + * @throws IOException on error. + */ + public FixCrLfFilter(final Reader in) throws IOException { + super(in); + } + + // Instance initializer: Executes just after the super() call in this + // class's constructor. + { + tabs = AddAsisRemove.ASIS; + if (Os.isFamily("mac") && !Os.isFamily("unix")) { + ctrlz = AddAsisRemove.REMOVE; + setEol(CrLf.MAC); + } else if (Os.isFamily("dos")) { + ctrlz = AddAsisRemove.ASIS; + setEol(CrLf.DOS); + } else { + ctrlz = AddAsisRemove.REMOVE; + setEol(CrLf.UNIX); + } + } + + /** + * Create a new FixCrLfFilter using the passed in Reader for instantiation. + * + * @param rdr + * A Reader object providing the underlying stream. Must not be + * null. + * + * @return a new filter based on this configuration, but filtering the + * specified reader. + */ + public Reader chain(final Reader rdr) { + try { + FixCrLfFilter newFilter = new FixCrLfFilter(rdr); + + newFilter.setJavafiles(getJavafiles()); + newFilter.setEol(getEol()); + newFilter.setTab(getTab()); + newFilter.setTablength(getTablength()); + newFilter.setEof(getEof()); + newFilter.setFixlast(getFixlast()); + newFilter.initInternalFilters(); + + return newFilter; + } catch (IOException e) { + throw new BuildException(e); + } + } + + /** + * Get how DOS EOF (control-z) characters are being handled. + * + * @return values: + *
      + *
    • add: ensure that there is an eof at the end of the file + *
    • asis: leave eof characters alone + *
    • remove: remove any eof character found at the end + *
    + */ + public AddAsisRemove getEof() { + // Return copy so that the call must call setEof() to change the state + // of fixCRLF + return ctrlz.newInstance(); + } + + /** + * Get how EndOfLine characters are being handled. + * + * @return values: + *
      + *
    • asis: convert line endings to your O/S convention + *
    • cr: convert line endings to CR + *
    • lf: convert line endings to LF + *
    • crlf: convert line endings to CRLF + *
    + */ + public CrLf getEol() { + // Return copy so that the call must call setEol() to change the state + // of fixCRLF + return eol.newInstance(); + } + + /** + * Get whether a missing EOL be added to the final line of the stream. + * + * @return true if a filtered file will always end with an EOL + */ + public boolean getFixlast() { + return fixlast; + } + + /** + * Get whether the stream is to be treated as though it contains Java + * source. + *

    + * This attribute is only used in association with the "tab" + * attribute. Tabs found in Java literals are protected from changes by this + * filter. + * + * @return true if whitespace in Java character and string literals is + * ignored. + */ + public boolean getJavafiles() { + return javafiles; + } + + /** + * Return how tab characters are being handled. + * + * @return values: + *

      + *
    • add: convert sequences of spaces which span a tab stop to + * tabs + *
    • asis: leave tab and space characters alone + *
    • remove: convert tabs to spaces + *
    + */ + public AddAsisRemove getTab() { + // Return copy so that the caller must call setTab() to change the state + // of fixCRLF. + return tabs.newInstance(); + } + + /** + * Get the tab length to use. + * + * @return the length of tab in spaces + */ + public int getTablength() { + return tabLength; + } + + private static String calculateEolString(CrLf eol) { + // Calculate the EOL string per the current config + if (eol == CrLf.CR || eol == CrLf.MAC) { + return "\r"; + } + if (eol == CrLf.CRLF || eol == CrLf.DOS) { + return "\r\n"; + } + // assume (eol == CrLf.LF || eol == CrLf.UNIX) + return "\n"; + } + + /** + * Wrap the input stream with the internal filters necessary to perform the + * configuration settings. + */ + private void initInternalFilters() { + + // If I'm removing an EOF character, do so first so that the other + // filters don't see that character. + in = (ctrlz == AddAsisRemove.REMOVE) ? new RemoveEofFilter(in) : in; + + // Change all EOL characters to match the calculated EOL string. If + // configured to do so, append a trailing EOL so that the file ends on + // a EOL. + if (eol != CrLf.ASIS) { + in = new NormalizeEolFilter(in, calculateEolString(eol), getFixlast()); + } + + if (tabs != AddAsisRemove.ASIS) { + // If filtering Java source, prevent changes to whitespace in + // character and string literals. + if (getJavafiles()) { + in = new MaskJavaTabLiteralsFilter(in); + } + // Add/Remove tabs + in = (tabs == AddAsisRemove.ADD) ? (Reader) new AddTabFilter(in, getTablength()) + : (Reader) new RemoveTabFilter(in, getTablength()); + } + // Add missing EOF character + in = (ctrlz == AddAsisRemove.ADD) ? new AddEofFilter(in) : in; + initialized = true; + } + + /** + * Return the next character in the filtered stream. + * + * @return the next character in the resulting stream, or -1 if the end of + * the resulting stream has been reached. + * + * @exception IOException + * if the underlying stream throws an IOException during + * reading. + */ + public synchronized int read() throws IOException { + if (!initialized) { + initInternalFilters(); + } + return in.read(); + } + + /** + * Specify how DOS EOF (control-z) characters are to be handled. + * + * @param attr + * valid values: + *
      + *
    • add: ensure that there is an eof at the end of the file + *
    • asis: leave eof characters alone + *
    • remove: remove any eof character found at the end + *
    + */ + public void setEof(AddAsisRemove attr) { + ctrlz = attr.resolve(); + } + + /** + * Specify how end of line (EOL) characters are to be handled. + * + * @param attr + * valid values: + *
      + *
    • asis: convert line endings to your O/S convention + *
    • cr: convert line endings to CR + *
    • lf: convert line endings to LF + *
    • crlf: convert line endings to CRLF + *
    + */ + public void setEol(CrLf attr) { + eol = attr.resolve(); + } + + /** + * Specify whether a missing EOL will be added to the final line of input. + * + * @param fixlast + * if true a missing EOL will be appended. + */ + public void setFixlast(boolean fixlast) { + this.fixlast = fixlast; + } + + /** + * Indicate whether this stream contains Java source. + * + * This attribute is only used in association with the "tab" + * attribute. + * + * @param javafiles + * set to true to prevent this filter from changing tabs found in + * Java literals. + */ + public void setJavafiles(boolean javafiles) { + this.javafiles = javafiles; + } + + /** + * Specify how tab characters are to be handled. + * + * @param attr + * valid values: + *
      + *
    • add: convert sequences of spaces which span a tab stop to + * tabs + *
    • asis: leave tab and space characters alone + *
    • remove: convert tabs to spaces + *
    + */ + public void setTab(AddAsisRemove attr) { + tabs = attr.resolve(); + } + + /** + * Specify tab length in characters. + * + * @param tabLength + * specify the length of tab in spaces. Valid values are between + * 2 and 80 inclusive. The default for this parameter is 8. + * @throws IOException on error. + */ + public void setTablength(int tabLength) throws IOException { + if (tabLength < MIN_TAB_LENGTH + || tabLength > MAX_TAB_LENGTH) { + throw new IOException( + "tablength must be between " + MIN_TAB_LENGTH + + " and " + MAX_TAB_LENGTH); + } + this.tabLength = tabLength; + } + + /** + * This filter reader redirects all read I/O methods through its own read() + * method. + * + *

    + * The input stream is already buffered by the copy task so this doesn't + * significantly impact performance while it makes writing the individual + * fix filters much easier. + *

    + */ + private static class SimpleFilterReader extends Reader { + private static final int PREEMPT_BUFFER_LENGTH = 16; + private Reader in; + + private int[] preempt = new int[PREEMPT_BUFFER_LENGTH]; + + private int preemptIndex = 0; + + public SimpleFilterReader(Reader in) { + this.in = in; + } + + public void push(char c) { + push((int) c); + } + + public void push(int c) { + try { + preempt[preemptIndex++] = c; + } catch (ArrayIndexOutOfBoundsException e) { + int[] p2 = new int[preempt.length * 2]; + System.arraycopy(preempt, 0, p2, 0, preempt.length); + preempt = p2; + push(c); + } + } + + public void push(char[] cs, int start, int length) { + for (int i = start + length - 1; i >= start;) { + push(cs[i--]); + } + } + + public void push(char[] cs) { + push(cs, 0, cs.length); + } + + /** + * Does this filter want to block edits on the last character returned + * by read()? + */ + public boolean editsBlocked() { + return in instanceof SimpleFilterReader && ((SimpleFilterReader) in).editsBlocked(); + } + + public int read() throws java.io.IOException { + return preemptIndex > 0 ? preempt[--preemptIndex] : in.read(); + } + + public void close() throws java.io.IOException { + in.close(); + } + + public void reset() throws IOException { + in.reset(); + } + + public boolean markSupported() { + return in.markSupported(); + } + + public boolean ready() throws java.io.IOException { + return in.ready(); + } + + public void mark(int i) throws java.io.IOException { + in.mark(i); + } + + public long skip(long i) throws java.io.IOException { + return in.skip(i); + } + + public int read(char[] buf) throws java.io.IOException { + return read(buf, 0, buf.length); + } + + public int read(char[] buf, int start, int length) throws java.io.IOException { + int count = 0; + int c = 0; + + // CheckStyle:InnerAssignment OFF - leave alone + while (length-- > 0 && (c = this.read()) != -1) { + buf[start++] = (char) c; + count++; + } + // if at EOF with no characters in the buffer, return EOF + return (count == 0 && c == -1) ? -1 : count; + } + } + + private static class MaskJavaTabLiteralsFilter extends SimpleFilterReader { + private boolean editsBlocked = false; + + private static final int JAVA = 1; + + private static final int IN_CHAR_CONST = 2; + + private static final int IN_STR_CONST = 3; + + private static final int IN_SINGLE_COMMENT = 4; + + private static final int IN_MULTI_COMMENT = 5; + + private static final int TRANS_TO_COMMENT = 6; + + private static final int TRANS_FROM_MULTI = 8; + + private int state; + + public MaskJavaTabLiteralsFilter(Reader in) { + super(in); + state = JAVA; + } + + public boolean editsBlocked() { + return editsBlocked || super.editsBlocked(); + } + + public int read() throws IOException { + int thisChar = super.read(); + // Mask, block from being edited, all characters in constants. + editsBlocked = (state == IN_CHAR_CONST || state == IN_STR_CONST); + + switch (state) { + case JAVA: + // The current character is always emitted. + switch (thisChar) { + case '\'': + state = IN_CHAR_CONST; + break; + case '"': + state = IN_STR_CONST; + break; + case '/': + state = TRANS_TO_COMMENT; + break; + default: + // Fall tru + } + break; + case IN_CHAR_CONST: + switch (thisChar) { + case '\'': + state = JAVA; + break; + default: + // Fall tru + } + break; + case IN_STR_CONST: + switch (thisChar) { + case '"': + state = JAVA; + break; + default: + // Fall tru + } + break; + case IN_SINGLE_COMMENT: + // The current character is always emitted. + switch (thisChar) { + case '\n': + case '\r': // EOL + state = JAVA; + break; + default: + // Fall tru + } + break; + case IN_MULTI_COMMENT: + // The current character is always emitted. + switch (thisChar) { + case '*': + state = TRANS_FROM_MULTI; + break; + default: + // Fall tru + } + break; + case TRANS_TO_COMMENT: + // The current character is always emitted. + switch (thisChar) { + case '*': + state = IN_MULTI_COMMENT; + break; + case '/': + state = IN_SINGLE_COMMENT; + break; + case '\'': + state = IN_CHAR_CONST; + break; + case '"': + state = IN_STR_CONST; + break; + default: + state = JAVA; + } + break; + case TRANS_FROM_MULTI: + // The current character is always emitted. + switch (thisChar) { + case '/': + state = JAVA; + break; + default: + // Fall tru + } + break; + default: + // Fall tru + } + return thisChar; + } + } + + private static class NormalizeEolFilter extends SimpleFilterReader { + private boolean previousWasEOL; + + private boolean fixLast; + + private int normalizedEOL = 0; + + private char[] eol = null; + + public NormalizeEolFilter(Reader in, String eolString, boolean fixLast) { + super(in); + eol = eolString.toCharArray(); + this.fixLast = fixLast; + } + + public int read() throws IOException { + int thisChar = super.read(); + + if (normalizedEOL == 0) { + int numEOL = 0; + boolean atEnd = false; + switch (thisChar) { + case CTRLZ: + int c = super.read(); + if (c == -1) { + atEnd = true; + if (fixLast && !previousWasEOL) { + numEOL = 1; + push(thisChar); + } + } else { + push(c); + } + break; + case -1: + atEnd = true; + if (fixLast && !previousWasEOL) { + numEOL = 1; + } + break; + case '\n': + // EOL was "\n" + numEOL = 1; + break; + case '\r': + numEOL = 1; + int c1 = super.read(); + int c2 = super.read(); + + if (c1 == '\r' && c2 == '\n') { + // EOL was "\r\r\n" + } else if (c1 == '\r') { + // EOL was "\r\r" - handle as two consecutive "\r" and + // "\r" + numEOL = 2; + push(c2); + } else if (c1 == '\n') { + // EOL was "\r\n" + push(c2); + } else { + // EOL was "\r" + push(c2); + push(c1); + } + default: + // Fall tru + } + if (numEOL > 0) { + while (numEOL-- > 0) { + push(eol); + normalizedEOL += eol.length; + } + previousWasEOL = true; + thisChar = read(); + } else if (!atEnd) { + previousWasEOL = false; + } + } else { + normalizedEOL--; + } + return thisChar; + } + } + + private static class AddEofFilter extends SimpleFilterReader { + private int lastChar = -1; + + public AddEofFilter(Reader in) { + super(in); + } + + public int read() throws IOException { + int thisChar = super.read(); + + // if source is EOF but last character was NOT ctrl-z, return ctrl-z + if (thisChar == -1) { + if (lastChar != CTRLZ) { + lastChar = CTRLZ; + return lastChar; + } + } else { + lastChar = thisChar; + } + return thisChar; + } + } + + private static class RemoveEofFilter extends SimpleFilterReader { + private int lookAhead = -1; + + public RemoveEofFilter(Reader in) { + super(in); + + try { + lookAhead = in.read(); + } catch (IOException e) { + lookAhead = -1; + } + } + + public int read() throws IOException { + int lookAhead2 = super.read(); + + // If source at EOF and lookAhead is ctrl-z, return EOF (NOT ctrl-z) + if (lookAhead2 == -1 && lookAhead == CTRLZ) { + return -1; + } + // Return current look-ahead + int i = lookAhead; + lookAhead = lookAhead2; + return i; + } + } + + private static class AddTabFilter extends SimpleFilterReader { + private int columnNumber = 0; + + private int tabLength = 0; + + public AddTabFilter(Reader in, int tabLength) { + super(in); + this.tabLength = tabLength; + } + + public int read() throws IOException { + int c = super.read(); + + switch (c) { + case '\r': + case '\n': + columnNumber = 0; + break; + case ' ': + columnNumber++; + if (!editsBlocked()) { + int colNextTab = ((columnNumber + tabLength - 1) / tabLength) * tabLength; + int countSpaces = 1; + int numTabs = 0; + + scanWhitespace: while ((c = super.read()) != -1) { + switch (c) { + case ' ': + if (++columnNumber == colNextTab) { + numTabs++; + countSpaces = 0; + colNextTab += tabLength; + } else { + countSpaces++; + } + break; + case '\t': + columnNumber = colNextTab; + numTabs++; + countSpaces = 0; + colNextTab += tabLength; + break; + default: + push(c); + break scanWhitespace; + } + } + while (countSpaces-- > 0) { + push(' '); + columnNumber--; + } + while (numTabs-- > 0) { + push('\t'); + columnNumber -= tabLength; + } + c = super.read(); + switch (c) { + case ' ': + columnNumber++; + break; + case '\t': + columnNumber += tabLength; + break; + default: + // Fall tru + } + } + break; + case '\t': + columnNumber = ((columnNumber + tabLength - 1) / tabLength) * tabLength; + break; + default: + columnNumber++; + } + return c; + } + } + + private static class RemoveTabFilter extends SimpleFilterReader { + private int columnNumber = 0; + + private int tabLength = 0; + + public RemoveTabFilter(Reader in, int tabLength) { + super(in); + + this.tabLength = tabLength; + } + + public int read() throws IOException { + int c = super.read(); + + switch (c) { + case '\r': + case '\n': + columnNumber = 0; + break; + case '\t': + int width = tabLength - columnNumber % tabLength; + + if (!editsBlocked()) { + for (; width > 1; width--) { + push(' '); + } + c = ' '; + } + columnNumber += width; + break; + default: + columnNumber++; + } + return c; + } + } + + /** + * Enumerated attribute with the values "asis", "add" and "remove". + */ + public static class AddAsisRemove extends EnumeratedAttribute { + private static final AddAsisRemove ASIS = newInstance("asis"); + + private static final AddAsisRemove ADD = newInstance("add"); + + private static final AddAsisRemove REMOVE = newInstance("remove"); + + /** {@inheritDoc}. */ + public String[] getValues() { + return new String[] {"add", "asis", "remove"}; + } + + /** + * Equality depending in the index. + * @param other the object to test equality against. + * @return true if the object has the same index as this. + */ + public boolean equals(Object other) { + return other instanceof AddAsisRemove + && getIndex() == ((AddAsisRemove) other).getIndex(); + } + + /** + * Hashcode depending on the index. + * @return the index as the hashcode. + */ + public int hashCode() { + return getIndex(); + } + + AddAsisRemove resolve() throws IllegalStateException { + if (this.equals(ASIS)) { + return ASIS; + } + if (this.equals(ADD)) { + return ADD; + } + if (this.equals(REMOVE)) { + return REMOVE; + } + throw new IllegalStateException("No replacement for " + this); + } + + // Works like clone() but doesn't show up in the Javadocs + private AddAsisRemove newInstance() { + return newInstance(getValue()); + } + + /** + * Create an instance of this enumerated value based on the string value. + * @param value the value to use. + * @return an enumerated instance. + */ + public static AddAsisRemove newInstance(String value) { + AddAsisRemove a = new AddAsisRemove(); + a.setValue(value); + return a; + } + } + + /** + * Enumerated attribute with the values "asis", "cr", "lf" and "crlf". + */ + public static class CrLf extends EnumeratedAttribute { + private static final CrLf ASIS = newInstance("asis"); + + private static final CrLf CR = newInstance("cr"); + + private static final CrLf CRLF = newInstance("crlf"); + + private static final CrLf DOS = newInstance("dos"); + + private static final CrLf LF = newInstance("lf"); + + private static final CrLf MAC = newInstance("mac"); + + private static final CrLf UNIX = newInstance("unix"); + + /** + * @see EnumeratedAttribute#getValues + */ + /** {@inheritDoc}. */ + public String[] getValues() { + return new String[] {"asis", "cr", "lf", "crlf", "mac", "unix", "dos"}; + } + + /** + * Equality depending in the index. + * @param other the object to test equality against. + * @return true if the object has the same index as this. + */ + public boolean equals(Object other) { + return other instanceof CrLf && getIndex() == ((CrLf) other).getIndex(); + } + + /** + * Hashcode depending on the index. + * @return the index as the hashcode. + */ + public int hashCode() { + return getIndex(); + } + + CrLf resolve() { + if (this.equals(ASIS)) { + return ASIS; + } + if (this.equals(CR) || this.equals(MAC)) { + return CR; + } + if (this.equals(CRLF) || this.equals(DOS)) { + return CRLF; + } + if (this.equals(LF) || this.equals(UNIX)) { + return LF; + } + throw new IllegalStateException("No replacement for " + this); + } + + // Works like clone() but doesn't show up in the Javadocs + private CrLf newInstance() { + return newInstance(getValue()); + } + + /** + * Create an instance of this enumerated value based on the string value. + * @param value the value to use. + * @return an enumerated instance. + */ + public static CrLf newInstance(String value) { + CrLf c = new CrLf(); + c.setValue(value); + return c; + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/HeadFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/HeadFilter.java new file mode 100644 index 00000000..522fe57b --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/HeadFilter.java @@ -0,0 +1,222 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.util.LineTokenizer; + +/** + * Reads the first n lines of a stream. + * (Default is first 10 lines.) + *

    + * Example: + *

    <headfilter lines="3"/>
    + * Or: + *
    <filterreader classname="org.apache.tools.ant.filters.HeadFilter">
    + *    <param name="lines" value="3"/>
    + * </filterreader>
    + * + */ +public final class HeadFilter extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the number of lines to be returned. */ + private static final String LINES_KEY = "lines"; + + /** Parameter name for the number of lines to be skipped. */ + private static final String SKIP_KEY = "skip"; + + /** Number of lines currently read in. */ + private long linesRead = 0; + + /** Default number of lines to show */ + private static final int DEFAULT_NUM_LINES = 10; + + /** Number of lines to be returned in the filtered stream. */ + private long lines = DEFAULT_NUM_LINES; + + /** Number of lines to be skipped. */ + private long skip = 0; + + /** A line tokenizer */ + private LineTokenizer lineTokenizer = null; + + /** the current line from the input stream */ + private String line = null; + /** the position in the current line */ + private int linePos = 0; + + /** Whether this filter is finished */ + private boolean eof; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public HeadFilter() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public HeadFilter(final Reader in) { + super(in); + lineTokenizer = new LineTokenizer(); + lineTokenizer.setIncludeDelims(true); + } + + /** + * Returns the next character in the filtered stream. If the desired + * number of lines have already been read, the resulting stream is + * effectively at an end. Otherwise, the next character from the + * underlying stream is read and returned. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + while (line == null || line.length() == 0) { + line = lineTokenizer.getToken(in); + if (line == null) { + return -1; + } + line = headFilter(line); + if (eof) { + return -1; + } + linePos = 0; + } + + int ch = line.charAt(linePos); + linePos++; + if (linePos == line.length()) { + line = null; + } + return ch; + } + + /** + * Sets the number of lines to be returned in the filtered stream. + * + * @param lines the number of lines to be returned in the filtered stream + */ + public void setLines(final long lines) { + this.lines = lines; + } + + /** + * Returns the number of lines to be returned in the filtered stream. + * + * @return the number of lines to be returned in the filtered stream + */ + private long getLines() { + return lines; + } + + /** + * Sets the number of lines to be skipped in the filtered stream. + * + * @param skip the number of lines to be skipped in the filtered stream + */ + public void setSkip(final long skip) { + this.skip = skip; + } + + /** + * Returns the number of lines to be skipped in the filtered stream. + * + * @return the number of lines to be skipped in the filtered stream + */ + private long getSkip() { + return skip; + } + + /** + * Creates a new HeadFilter using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + HeadFilter newFilter = new HeadFilter(rdr); + newFilter.setLines(getLines()); + newFilter.setSkip(getSkip()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Scans the parameters list for the "lines" parameter and uses + * it to set the number of lines to be returned in the filtered stream. + * also scan for skip parameter. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (LINES_KEY.equals(params[i].getName())) { + lines = Long.parseLong(params[i].getValue()); + continue; + } + if (SKIP_KEY.equals(params[i].getName())) { + skip = Long.parseLong(params[i].getValue()); + continue; + } + } + } + } + + /** + * implements a head filter on the input stream + */ + private String headFilter(String line) { + linesRead++; + if (skip > 0) { + if ((linesRead - 1) < skip) { + return null; + } + } + + if (lines > 0) { + if (linesRead > (lines + skip)) { + eof = true; + return null; + } + } + return line; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContains.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContains.java new file mode 100644 index 00000000..c83cae28 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContains.java @@ -0,0 +1,244 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.Vector; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Parameter; + +/** + * Filter which includes only those lines that contain all the user-specified + * strings. + * + * Example: + * + *
    <linecontains>
    + *   <contains value="foo">
    + *   <contains value="bar">
    + * </linecontains>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.LineContains">
    + *    <param type="contains" value="foo"/>
    + *    <param type="contains" value="bar"/>
    + * </filterreader>
    + * + * This will include only those lines that contain foo and + * bar. + * + */ +public final class LineContains + extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the words to filter on. */ + private static final String CONTAINS_KEY = "contains"; + + /** Parameter name for the words to filter on. */ + private static final String NEGATE_KEY = "negate"; + + /** Vector that holds the strings that input lines must contain. */ + private Vector contains = new Vector(); + + /** + * Remaining line to be read from this filter, or null if + * the next call to read() should read the original stream + * to find the next matching line. + */ + private String line = null; + + private boolean negate = false; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public LineContains() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public LineContains(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, only including + * lines from the original stream which contain all of the specified words. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (line != null) { + ch = line.charAt(0); + if (line.length() == 1) { + line = null; + } else { + line = line.substring(1); + } + } else { + final int containsSize = contains.size(); + + for (line = readLine(); line != null; line = readLine()) { + boolean matches = true; + for (int i = 0; matches && i < containsSize; i++) { + String containsStr = (String) contains.elementAt(i); + matches = line.indexOf(containsStr) >= 0; + } + if (matches ^ isNegated()) { + break; + } + } + if (line != null) { + return read(); + } + } + return ch; + } + + /** + * Adds a contains element. + * + * @param contains The contains element to add. + * Must not be null. + */ + public void addConfiguredContains(final Contains contains) { + this.contains.addElement(contains.getValue()); + } + + /** + * Set the negation mode. Default false (no negation). + * @param b the boolean negation mode to set. + */ + public void setNegate(boolean b) { + negate = b; + } + + /** + * Find out whether we have been negated. + * @return boolean negation flag. + */ + public boolean isNegated() { + return negate; + } + + /** + * Sets the vector of words which must be contained within a line read + * from the original stream in order for it to match this filter. + * + * @param contains A vector of words which must be contained within a line + * in order for it to match in this filter. Must not be null. + */ + private void setContains(final Vector contains) { + this.contains = contains; + } + + /** + * Returns the vector of words which must be contained within a line read + * from the original stream in order for it to match this filter. + * + * @return the vector of words which must be contained within a line read + * from the original stream in order for it to match this filter. The + * returned object is "live" - in other words, changes made to the + * returned object are mirrored in the filter. + */ + private Vector getContains() { + return contains; + } + + /** + * Creates a new LineContains using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + LineContains newFilter = new LineContains(rdr); + newFilter.setContains(getContains()); + newFilter.setNegate(isNegated()); + return newFilter; + } + + /** + * Parses the parameters to add user-defined contains strings. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (CONTAINS_KEY.equals(params[i].getType())) { + contains.addElement(params[i].getValue()); + } else if (NEGATE_KEY.equals(params[i].getType())) { + setNegate(Project.toBoolean(params[i].getValue())); + } + } + } + } + + /** + * Holds a contains element + */ + public static class Contains { + + /** User defined contains string */ + private String value; + + /** + * Sets the contains string + * + * @param contains The contains string to set. + * Must not be null. + */ + public final void setValue(String contains) { + value = contains; + } + + /** + * Returns the contains string. + * + * @return the contains string for this element + */ + public final String getValue() { + return value; + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java new file mode 100644 index 00000000..23a2005d --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/LineContainsRegExp.java @@ -0,0 +1,242 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.Vector; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.types.RegularExpression; +import org.apache.tools.ant.util.regexp.Regexp; +import org.apache.tools.ant.util.regexp.RegexpUtil; + +/** + * Filter which includes only those lines that contain the user-specified + * regular expression matching strings. + * + * Example: + *
    <linecontainsregexp>
    + *   <regexp pattern="foo*">
    + * </linecontainsregexp>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.LineContainsRegExp">
    + *    <param type="regexp" value="foo*"/>
    + * </filterreader>
    + * + * This will fetch all those lines that contain the pattern foo + * + */ +public final class LineContainsRegExp + extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the regular expression to filter on. */ + private static final String REGEXP_KEY = "regexp"; + + /** Parameter name for the negate attribute. */ + private static final String NEGATE_KEY = "negate"; + + /** Parameter name for the casesensitive attribute. */ + private static final String CS_KEY = "casesensitive"; + + /** Vector that holds the expressions that input lines must contain. */ + private Vector regexps = new Vector(); + + /** + * Remaining line to be read from this filter, or null if + * the next call to read() should read the original stream + * to find the next matching line. + */ + private String line = null; + + private boolean negate = false; + private int regexpOptions = Regexp.MATCH_DEFAULT; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public LineContainsRegExp() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public LineContainsRegExp(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, only including + * lines from the original stream which match all of the specified + * regular expressions. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (line != null) { + ch = line.charAt(0); + if (line.length() == 1) { + line = null; + } else { + line = line.substring(1); + } + } else { + final int regexpsSize = regexps.size(); + + for (line = readLine(); line != null; line = readLine()) { + boolean matches = true; + for (int i = 0; matches && i < regexpsSize; i++) { + RegularExpression regexp + = (RegularExpression) regexps.elementAt(i); + Regexp re = regexp.getRegexp(getProject()); + matches = re.matches(line, regexpOptions); + } + if (matches ^ isNegated()) { + break; + } + } + if (line != null) { + return read(); + } + } + return ch; + } + + /** + * Adds a regexp element. + * + * @param regExp The regexp element to add. + * Must not be null. + */ + public void addConfiguredRegexp(final RegularExpression regExp) { + this.regexps.addElement(regExp); + } + + /** + * Sets the vector of regular expressions which must be contained within + * a line read from the original stream in order for it to match this + * filter. + * + * @param regexps A vector of regular expressions which must be contained + * within a line in order for it to match in this filter. Must not be + * null. + */ + private void setRegexps(final Vector regexps) { + this.regexps = regexps; + } + + /** + * Returns the vector of regular expressions which must be contained within + * a line read from the original stream in order for it to match this + * filter. + * + * @return the vector of regular expressions which must be contained within + * a line read from the original stream in order for it to match this + * filter. The returned object is "live" - in other words, changes made to + * the returned object are mirrored in the filter. + */ + private Vector getRegexps() { + return regexps; + } + + /** + * Creates a new LineContainsRegExp using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + LineContainsRegExp newFilter = new LineContainsRegExp(rdr); + newFilter.setRegexps(getRegexps()); + newFilter.setNegate(isNegated()); + newFilter + .setCaseSensitive(!RegexpUtil.hasFlag(regexpOptions, + Regexp.MATCH_CASE_INSENSITIVE) + ); + return newFilter; + } + + /** + * Set the negation mode. Default false (no negation). + * @param b the boolean negation mode to set. + */ + public void setNegate(boolean b) { + negate = b; + } + + /** + * Whether to match casesensitevly. + * @since Ant 1.8.2 + */ + public void setCaseSensitive(boolean b) { + regexpOptions = RegexpUtil.asOptions(b); + } + + /** + * Find out whether we have been negated. + * @return boolean negation flag. + */ + public boolean isNegated() { + return negate; + } + + /** + * Parses parameters to add user defined regular expressions. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (REGEXP_KEY.equals(params[i].getType())) { + String pattern = params[i].getValue(); + RegularExpression regexp = new RegularExpression(); + regexp.setPattern(pattern); + regexps.addElement(regexp); + } else if (NEGATE_KEY.equals(params[i].getType())) { + setNegate(Project.toBoolean(params[i].getValue())); + } else if (CS_KEY.equals(params[i].getType())) { + setCaseSensitive(Project.toBoolean(params[i].getValue())); + } + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/PrefixLines.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/PrefixLines.java new file mode 100644 index 00000000..324397e8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/PrefixLines.java @@ -0,0 +1,164 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; + +/** + * Attaches a prefix to every line. + * + * Example: + *
    <prefixlines prefix="Foo"/>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.PrefixLines">
    + *  <param name="prefix" value="Foo"/>
    + * </filterreader>
    + * + */ +public final class PrefixLines + extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the prefix. */ + private static final String PREFIX_KEY = "prefix"; + + /** The prefix to be used. */ + private String prefix = null; + + /** Data that must be read from, if not null. */ + private String queuedData = null; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public PrefixLines() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public PrefixLines(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream. One line is read + * from the original input, and the prefix added. The resulting + * line is then used until it ends, at which point the next original line + * is read, etc. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (queuedData != null && queuedData.length() == 0) { + queuedData = null; + } + + if (queuedData != null) { + ch = queuedData.charAt(0); + queuedData = queuedData.substring(1); + if (queuedData.length() == 0) { + queuedData = null; + } + } else { + queuedData = readLine(); + if (queuedData == null) { + ch = -1; + } else { + if (prefix != null) { + queuedData = prefix + queuedData; + } + return read(); + } + } + return ch; + } + + /** + * Sets the prefix to add at the start of each input line. + * + * @param prefix The prefix to add at the start of each input line. + * May be null, in which case no prefix + * is added. + */ + public void setPrefix(final String prefix) { + this.prefix = prefix; + } + + /** + * Returns the prefix which will be added at the start of each input line. + * + * @return the prefix which will be added at the start of each input line + */ + private String getPrefix() { + return prefix; + } + + /** + * Creates a new PrefixLines filter using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + PrefixLines newFilter = new PrefixLines(rdr); + newFilter.setPrefix(getPrefix()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Initializes the prefix if it is available from the parameters. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (PREFIX_KEY.equals(params[i].getName())) { + prefix = params[i].getValue(); + break; + } + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ReplaceTokens.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ReplaceTokens.java new file mode 100644 index 00000000..21ca3bc9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/ReplaceTokens.java @@ -0,0 +1,379 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; +import java.util.SortedMap; +import java.util.TreeMap; + +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.util.FileUtils; + +/** + * Replaces tokens in the original input with user-supplied values. + * + * Example: + * + *
    <replacetokens begintoken="#" endtoken="#">
    + *   <token key="DATE" value="${TODAY}"/>
    + * </replacetokens>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.ReplaceTokens">
    + *   <param type="tokenchar" name="begintoken" value="#"/>
    + *   <param type="tokenchar" name="endtoken" value="#"/>
    + *   <param type="token" name="DATE" value="${TODAY}"/>
    + * </filterreader>
    + * + */ +public final class ReplaceTokens + extends BaseParamFilterReader + implements ChainableReader { + /** Default "begin token" character. */ + private static final String DEFAULT_BEGIN_TOKEN = "@"; + + /** Default "end token" character. */ + private static final String DEFAULT_END_TOKEN = "@"; + + /** Hashtable to holds the original replacee-replacer pairs (String to String). */ + private Hashtable hash = new Hashtable(); + + /** This map holds the "resolved" tokens (begin- and end-tokens are added to make searching simpler) */ + private final TreeMap resolvedTokens = new TreeMap(); + private boolean resolvedTokensBuilt = false; + /** Used for comparisons and lookup into the resolvedTokens map. */ + private String readBuffer = ""; + + /** replacement test from a token */ + private String replaceData = null; + + /** Index into replacement data */ + private int replaceIndex = -1; + + /** Character marking the beginning of a token. */ + private String beginToken = DEFAULT_BEGIN_TOKEN; + + /** Character marking the end of a token. */ + private String endToken = DEFAULT_END_TOKEN; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public ReplaceTokens() {} + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public ReplaceTokens(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, replacing tokens + * from the original stream. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + if (!resolvedTokensBuilt) { + // build the resolved tokens tree map. + for (String key : hash.keySet()) { + resolvedTokens.put(beginToken + key + endToken, hash.get(key)); + } + resolvedTokensBuilt = true; + } + + // are we currently serving replace data? + if (replaceData != null) { + if (replaceIndex < replaceData.length()) { + return replaceData.charAt(replaceIndex++); + } else { + replaceData = null; + } + } + + // is the read buffer empty? + if (readBuffer.length() == 0) { + int next = in.read(); + if (next == -1) { + return next; // end of stream. all buffers empty. + } + readBuffer += (char)next; + } + + for (;;) { + // get the closest tokens + SortedMap possibleTokens = resolvedTokens.tailMap(readBuffer); + if (possibleTokens.isEmpty() || !possibleTokens.firstKey().startsWith(readBuffer)) { // if there is none, then deliver the first char from the buffer. + return getFirstCharacterFromReadBuffer(); + } else if (readBuffer.equals(possibleTokens.firstKey())) { // there exists a nearest token - is it an exact match? + // we have found a token. prepare the replaceData buffer. + replaceData = resolvedTokens.get(readBuffer); + replaceIndex = 0; + readBuffer = ""; // destroy the readBuffer - it's contents are being replaced entirely. + // get the first character via recursive call. + return read(); + } else { // nearest token is not matching exactly - read one character more. + int next = in.read(); + if (next != -1) { + readBuffer += (char)next; + } else { + return getFirstCharacterFromReadBuffer(); // end of stream. deliver remaining characters from buffer. + } + } + } + } + + /** + * @return the first character from the read buffer or -1 if read buffer is empty. + */ + private int getFirstCharacterFromReadBuffer() { + if (readBuffer.length() > 0) { + int chr = readBuffer.charAt(0); + readBuffer = readBuffer.substring(1); + return chr; + } else { + return -1; + } + } + + /** + * Sets the "begin token" character. + * + * @param beginToken the character used to denote the beginning of a token + */ + public void setBeginToken(final String beginToken) { + this.beginToken = beginToken; + } + + /** + * Returns the "begin token" character. + * + * @return the character used to denote the beginning of a token + */ + private String getBeginToken() { + return beginToken; + } + + /** + * Sets the "end token" character. + * + * @param endToken the character used to denote the end of a token + */ + public void setEndToken(final String endToken) { + this.endToken = endToken; + } + + /** + * Returns the "end token" character. + * + * @return the character used to denote the end of a token + */ + private String getEndToken() { + return endToken; + } + + /** + * A resource containing properties, each of which is interpreted + * as a token/value pair. + * + * @since Ant 1.8.0 + */ + public void setPropertiesResource(Resource r) { + makeTokensFromProperties(r); + } + + /** + * Adds a token element to the map of tokens to replace. + * + * @param token The token to add to the map of replacements. + * Must not be null. + */ + public void addConfiguredToken(final Token token) { + hash.put(token.getKey(), token.getValue()); + resolvedTokensBuilt = false; // invalidate to build them again if they have been built already. + } + + /** + * Returns properties from a specified properties file. + * + * @param resource The resource to load properties from. + */ + private Properties getProperties(Resource resource) { + InputStream in = null; + Properties props = new Properties(); + try { + in = resource.getInputStream(); + props.load(in); + } catch (IOException ioe) { + ioe.printStackTrace(); + } finally { + FileUtils.close(in); + } + + return props; + } + + /** + * Sets the map of tokens to replace. + * + * @param hash A map (String->String) of token keys to replacement + * values. Must not be null. + */ + private void setTokens(final Hashtable hash) { + this.hash = hash; + } + + /** + * Returns the map of tokens which will be replaced. + * + * @return a map (String->String) of token keys to replacement + * values + */ + private Hashtable getTokens() { + return hash; + } + + /** + * Creates a new ReplaceTokens using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + ReplaceTokens newFilter = new ReplaceTokens(rdr); + newFilter.setBeginToken(getBeginToken()); + newFilter.setEndToken(getEndToken()); + newFilter.setTokens(getTokens()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Initializes tokens and loads the replacee-replacer hashtable. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (Parameter param : params) { + if (param != null) { + final String type = param.getType(); + if ("tokenchar".equals(type)) { + final String name = param.getName(); + if ("begintoken".equals(name)) { + beginToken = param.getValue(); + } else if ("endtoken".equals(name)) { + endToken = param.getValue(); + } + } else if ("token".equals(type)) { + final String name = param.getName(); + final String value = param.getValue(); + hash.put(name, value); + } else if ("propertiesfile".equals(type)) { + makeTokensFromProperties( + new FileResource(new File(param.getValue()))); + } + } + } + } + } + + private void makeTokensFromProperties(Resource r) { + Properties props = getProperties(r); + for (Enumeration e = props.keys(); e.hasMoreElements();) { + String key = (String) e.nextElement(); + String value = props.getProperty(key); + hash.put(key, value); + } + } + + /** + * Holds a token + */ + public static class Token { + + /** Token key */ + private String key; + + /** Token value */ + private String value; + + /** + * Sets the token key + * + * @param key The key for this token. Must not be null. + */ + public final void setKey(String key) { + this.key = key; + } + + /** + * Sets the token value + * + * @param value The value for this token. Must not be null. + */ + public final void setValue(String value) { + this.value = value; + } + + /** + * Returns the key for this token. + * + * @return the key for this token + */ + public final String getKey() { + return key; + } + + /** + * Returns the value for this token. + * + * @return the value for this token + */ + public final String getValue() { + return value; + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SortFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SortFilter.java new file mode 100644 index 00000000..471660c3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SortFilter.java @@ -0,0 +1,375 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.types.Parameter; + +/** + *

    + * Sort a file before and/or after the file. + *

    + * + *

    + * Examples: + *

    + * + *
    + *   <copy todir="build">
    + *       <fileset dir="input" includes="*.txt"/>
    + *       <filterchain>
    + *           <sortfilter/>
    + *       </filterchain>
    + *   </copy>
    + * 
    + * + *

    + * Sort all files *.txt from src location and copy + * them into build location. The lines of each file are sorted + * in ascendant order comparing the lines via the + * String.compareTo(Object o) method. + *

    + * + *
    + *   <copy todir="build">
    + *       <fileset dir="input" includes="*.txt"/>
    + *       <filterchain>
    + *           <sortfilter reverse="true"/>
    + *       </filterchain>
    + *   </copy>
    + * 
    + * + *

    + * Sort all files *.txt from src location into reverse + * order and copy them into build location. If reverse parameter has + * value true (default value), then the output line of the files + * will be in ascendant order. + *

    + * + *
    + *   <copy todir="build">
    + *       <fileset dir="input" includes="*.txt"/>
    + *       <filterchain>
    + *           <filterreader classname="org.apache.tools.ant.filters.SortFilter">
    + *             <param name="comparator" value="org.apache.tools.ant.filters.EvenFirstCmp"/>
    + *           </filterreader>
    + *       </filterchain>
    + *   </copy>
    + * 
    + * + *

    + * Sort all files *.txt from src location using as + * sorting criterium EvenFirstCmp class, that sorts the file + * lines putting even lines first then odd lines for example. The modified files + * are copied into build location. The EvenFirstCmp, + * has to an instanciable class via Class.newInstance(), + * therefore in case of inner class has to be static. It also has to + * implement java.util.Comparator interface, for example: + *

    + * + *
    + *         package org.apache.tools.ant.filters;
    + *         ...(omitted)
    + *           public final class EvenFirstCmp implements <b>Comparator</b> {
    + *             public int compare(Object o1, Object o2) {
    + *             ...(omitted)
    + *             }
    + *           }
    + * 
    + * + *

    The example above is equivalent to:

    + * + *
    + *   <componentdef name="evenfirst"
    + *                 classname="org.apache.tools.ant.filters.EvenFirstCmp"/>
    + *   <copy todir="build">
    + *       <fileset dir="input" includes="*.txt"/>
    + *       <filterchain>
    + *           <sortfilter>
    + *               <evenfirst/>
    + *           </sortfilter>
    + *       </filterchain>
    + *   </copy>
    + * 
    + * + *

    If parameter comparator is present, then + * reverse parameter will not be taken into account.

    + * + * @since Ant 1.8.0 + */ +public final class SortFilter extends BaseParamFilterReader + implements ChainableReader { + + /** Parameter name for reverse order. */ + private static final String REVERSE_KEY = "reverse"; + + /** + * Parameter name for specifying the comparator criteria via class that + * implement java.util.Comparator interface. + */ + private static final String COMPARATOR_KEY = "comparator"; + + /** + * Instance of comparator class to be used for sorting. + */ + private Comparator comparator = null; + + /** + * Controls if the sorting process will be in ascendant/descendant order. If + * If has value true, then the line of the file will be + * sorted on descendant order. Default value: false. It will + * be considered only if comparator is null. + */ + private boolean reverse; + + /** + * Stores the lines to be sorted. + */ + private List lines; + + /** + * Remaining line to be read from this filter, or null if the + * next call to read() should read the original stream to + * find the next matching line. + */ + private String line = null; + + private Iterator iterator = null; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public SortFilter() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in + * A Reader object providing the underlying stream. Must not be + * null. + */ + public SortFilter(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream. If the desired number + * of lines have already been read, the resulting stream is effectively at + * an end. Otherwise, the next character from the underlying stream is read + * and returned. + * + * @return the next character in the resulting stream, or -1 if the end of + * the resulting stream has been reached + * + * @exception IOException + * if the underlying stream throws an IOException during + * reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + if (line != null) { + /* + * We are on the state: "reading the current line", lines are + * already sorted + */ + ch = line.charAt(0); + if (line.length() == 1) { + line = null; + } else { + line = line.substring(1); + } + } else { + if (lines == null) { + // We read all lines and sort them + lines = new ArrayList(); + for (line = readLine(); line != null; line = readLine()) { + lines.add(line); + } + sort(); + iterator = lines.iterator(); + } + + if (iterator.hasNext()) { + line = (String) iterator.next(); + } else { + line = null; + lines = null; + iterator = null; + } + if (line != null) { + return read(); + } + } + return ch; + } + + /** + * Creates a new SortReader using the passed in Reader for instantiation. + * + * @param rdr + * A Reader object providing the underlying stream. Must not be + * null. + * + * @return a new filter based on this configuration, but filtering the + * specified reader + */ + public Reader chain(final Reader rdr) { + SortFilter newFilter = new SortFilter(rdr); + newFilter.setReverse(isReverse()); + newFilter.setComparator(getComparator()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Returns true if the sorting process will be in reverse + * order, otherwise the sorting process will be in ascendant order. + * + * @return true if the sorting process will be in reverse + * order, otherwise the sorting process will be in ascendant order. + */ + public boolean isReverse() { + return reverse; + } + + /** + * Sets the sorting process will be in ascendant (reverse=false) + * or to descendant (reverse=true). + * + * @param reverse + * Boolean representing reverse ordering process. + */ + public void setReverse(boolean reverse) { + this.reverse = reverse; + } + + /** + * Returns the comparator to be used for sorting. + * + * @return the comparator + */ + public Comparator getComparator() { + return comparator; + } + + /** + * Set the comparator to be used as sorting criterium. + * + * @param comparator + * the comparator to set + */ + public void setComparator(Comparator comparator) { + this.comparator = comparator; + } + + /** + * Set the comparator to be used as sorting criterion as nested element. + * + * @param comparator + * the comparator to set + */ + public void add(Comparator comparator) { + if (this.comparator != null && comparator != null) { + throw new BuildException("can't have more than one comparator"); + } + setComparator(comparator); + } + + /** + * Scans the parameters list + */ + private void initialize() throws IOException { + // get parameters + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + final String paramName = params[i].getName(); + if (REVERSE_KEY.equals(paramName)) { + setReverse(Boolean.valueOf(params[i].getValue()) + .booleanValue()); + continue; + } + if (COMPARATOR_KEY.equals(paramName)) { + try { + String className = (String) params[i].getValue(); + @SuppressWarnings("unchecked") + final Comparator comparatorInstance = (Comparator) (Class + .forName(className).newInstance()); + setComparator(comparatorInstance); + continue; + } catch (InstantiationException e) { + throw new BuildException(e); + } catch (IllegalAccessException e) { + /* + * Probably a inner non-static class, this this case is + * not considered + */ + throw new BuildException(e); + } catch (ClassNotFoundException e) { + throw new BuildException(e); + } catch (ClassCastException e) { + throw new BuildException("Value of comparator attribute" + + " should implement" + + " java.util.Comparator" + + " interface"); + } catch (Exception e) { + throw new BuildException(e); + } + } + } + } + } + + /** + * Sorts the read lines (lines) according to the sorting + * criteria defined by the user. + * + */ + private void sort() { + if (comparator == null) { + if (reverse) { + Collections.sort(lines, new Comparator() { + public int compare(String s1, String s2) { + return (-s1.compareTo(s2)); + } + }); + } else { + Collections.sort(lines); + } + } else { + Collections.sort(lines, comparator); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StringInputStream.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StringInputStream.java new file mode 100644 index 00000000..e150e965 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StringInputStream.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.StringReader; + +import org.apache.tools.ant.util.ReaderInputStream; + +/** + * Wraps a String as an InputStream. + * + */ +public class StringInputStream extends ReaderInputStream { + + /** + * Composes a stream from a String + * + * @param source The string to read from. Must not be null. + */ + public StringInputStream(String source) { + super(new StringReader(source)); + } + + /** + * Composes a stream from a String with the specified encoding + * + * @param source The string to read from. Must not be null. + * @param encoding The encoding scheme. Also must not be null. + */ + public StringInputStream(String source, String encoding) { + super(new StringReader(source), encoding); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripJavaComments.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripJavaComments.java new file mode 100644 index 00000000..65bccd70 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripJavaComments.java @@ -0,0 +1,145 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +/** + * This is a Java comment and string stripper reader that filters + * those lexical tokens out for purposes of simple Java parsing. + * (if you have more complex Java parsing needs, use a real lexer). + * Since this class heavily relies on the single char read function, + * you are recommended to make it work on top of a buffered reader. + * + */ +public final class StripJavaComments + extends BaseFilterReader + implements ChainableReader { + + /** + * The read-ahead character, used for effectively pushing a single + * character back. A value of -1 indicates that no character is in the + * buffer. + */ + private int readAheadCh = -1; + + /** + * Whether or not the parser is currently in the middle of a string + * literal. + */ + private boolean inString = false; + + /** + * Whether or not the last char has been a backslash. + */ + private boolean quoted = false; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public StripJavaComments() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public StripJavaComments(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, not including + * Java comments. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + int ch = -1; + if (readAheadCh != -1) { + ch = readAheadCh; + readAheadCh = -1; + } else { + ch = in.read(); + if (ch == '"' && !quoted) { + inString = !inString; + quoted = false; + } else if (ch == '\\') { + quoted = !quoted; + } else { + quoted = false; + if (!inString) { + if (ch == '/') { + ch = in.read(); + if (ch == '/') { + while (ch != '\n' && ch != -1 && ch != '\r') { + ch = in.read(); + } + } else if (ch == '*') { + while (ch != -1) { + ch = in.read(); + if (ch == '*') { + ch = in.read(); + while (ch == '*') { + ch = in.read(); + } + + if (ch == '/') { + ch = read(); + break; + } + } + } + } else { + readAheadCh = ch; + ch = '/'; + } + } + } + } + } + + return ch; + } + + /** + * Creates a new StripJavaComments using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + + public Reader chain(final Reader rdr) { + StripJavaComments newFilter = new StripJavaComments(rdr); + return newFilter; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineBreaks.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineBreaks.java new file mode 100644 index 00000000..9a97940a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineBreaks.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; + +/** + * Filter to flatten the stream to a single line. + * + * Example: + * + *
    <striplinebreaks/>
    + * + * Or: + * + *
    <filterreader
    + *   classname="org.apache.tools.ant.filters.StripLineBreaks"/>
    + * + */ +public final class StripLineBreaks + extends BaseParamFilterReader + implements ChainableReader { + /** + * Line-breaking characters. + * What should we do on funny IBM mainframes with odd line endings? + */ + private static final String DEFAULT_LINE_BREAKS = "\r\n"; + + /** Parameter name for the line-breaking characters parameter. */ + private static final String LINE_BREAKS_KEY = "linebreaks"; + + /** The characters that are recognized as line breaks. */ + private String lineBreaks = DEFAULT_LINE_BREAKS; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public StripLineBreaks() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public StripLineBreaks(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, only including + * characters not in the set of line-breaking characters. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = in.read(); + while (ch != -1) { + if (lineBreaks.indexOf(ch) == -1) { + break; + } else { + ch = in.read(); + } + } + return ch; + } + + /** + * Sets the line-breaking characters. + * + * @param lineBreaks A String containing all the characters to be + * considered as line-breaking. + */ + public void setLineBreaks(final String lineBreaks) { + this.lineBreaks = lineBreaks; + } + + /** + * Returns the line-breaking characters as a String. + * + * @return a String containing all the characters considered as + * line-breaking + */ + private String getLineBreaks() { + return lineBreaks; + } + + /** + * Creates a new StripLineBreaks using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + StripLineBreaks newFilter = new StripLineBreaks(rdr); + newFilter.setLineBreaks(getLineBreaks()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Parses the parameters to set the line-breaking characters. + */ + private void initialize() { + String userDefinedLineBreaks = null; + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (LINE_BREAKS_KEY.equals(params[i].getName())) { + userDefinedLineBreaks = params[i].getValue(); + break; + } + } + } + if (userDefinedLineBreaks != null) { + lineBreaks = userDefinedLineBreaks; + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineComments.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineComments.java new file mode 100644 index 00000000..e3d240ba --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/StripLineComments.java @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.Vector; + +import org.apache.tools.ant.types.Parameter; + +/** + * This filter strips line comments. + * + * Example: + * + *
    <striplinecomments>
    + *   <comment value="#"/>
    + *   <comment value="--"/>
    + *   <comment value="REM "/>
    + *   <comment value="rem "/>
    + *   <comment value="//"/>
    + * </striplinecomments>
    + * + * Or: + * + *
    <filterreader
    + *      classname="org.apache.tools.ant.filters.StripLineComments">
    + *   <param type="comment" value="#"/>
    + *   <param type="comment" value="--"/>
    + *   <param type="comment" value="REM "/>
    + *   <param type="comment" value="rem "/>
    + *   <param type="comment" value="//"/>
    + * </filterreader>
    + * + */ +public final class StripLineComments + extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the comment prefix. */ + private static final String COMMENTS_KEY = "comment"; + + /** Vector that holds the comment prefixes. */ + private Vector comments = new Vector(); + + /** The line that has been read ahead. */ + private String line = null; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public StripLineComments() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public StripLineComments(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, only including + * lines from the original stream which don't start with any of the + * specified comment prefixes. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (line != null) { + ch = line.charAt(0); + if (line.length() == 1) { + line = null; + } else { + line = line.substring(1); + } + } else { + line = readLine(); + final int commentsSize = comments.size(); + + while (line != null) { + for (int i = 0; i < commentsSize; i++) { + String comment = comments.elementAt(i); + if (line.startsWith(comment)) { + line = null; + break; + } + } + + if (line == null) { + // line started with comment + line = readLine(); + } else { + break; + } + } + + if (line != null) { + return read(); + } + } + + return ch; + } + + /** + * Adds a comment element to the list of prefixes. + * + * @param comment The comment element to add to the + * list of comment prefixes to strip. Must not be null. + */ + public void addConfiguredComment(final Comment comment) { + comments.addElement(comment.getValue()); + } + + /** + * Sets the list of comment prefixes to strip. + * + * @param comments A list of strings, each of which is a prefix + * for a comment line. Must not be null. + */ + private void setComments(final Vector comments) { + this.comments = comments; + } + + /** + * Returns the list of comment prefixes to strip. + * + * @return the list of comment prefixes to strip. + */ + private Vector getComments() { + return comments; + } + + /** + * Creates a new StripLineComments using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + StripLineComments newFilter = new StripLineComments(rdr); + newFilter.setComments(getComments()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Parses the parameters to set the comment prefixes. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (COMMENTS_KEY.equals(params[i].getType())) { + comments.addElement(params[i].getValue()); + } + } + } + } + + /** + * The class that holds a comment representation. + */ + public static class Comment { + + /** The prefix for a line comment. */ + private String value; + + /** + * Sets the prefix for this type of line comment. + * + * @param comment The prefix for a line comment of this type. + * Must not be null. + */ + public final void setValue(String comment) { + if (value != null) { + throw new IllegalStateException("Comment value already set."); + } + value = comment; + } + + /** + * Returns the prefix for this type of line comment. + * + * @return the prefix for this type of line comment. + */ + public final String getValue() { + return value; + } + + /** + * Alt. syntax to set the prefix for this type of line comment. + * + * @param comment The prefix for a line comment of this type. + * Must not be null. + */ + public void addText(String comment) { + setValue(comment); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SuffixLines.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SuffixLines.java new file mode 100644 index 00000000..23d9b534 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/SuffixLines.java @@ -0,0 +1,174 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; + +/** + * Attaches a suffix to every line. + * + * Example: + *
    <suffixlines suffix="Foo"/>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.SuffixLines">
    + *  <param name="suffix" value="Foo"/>
    + * </filterreader>
    + * + * @since Ant 1.8.0 + */ +public final class SuffixLines + extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the prefix. */ + private static final String SUFFIX_KEY = "suffix"; + + /** The suffix to be used. */ + private String suffix = null; + + /** Data that must be read from, if not null. */ + private String queuedData = null; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public SuffixLines() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public SuffixLines(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream. One line is read + * from the original input, and the suffix added. The resulting + * line is then used until it ends, at which point the next original line + * is read, etc. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (queuedData != null && queuedData.length() == 0) { + queuedData = null; + } + + if (queuedData != null) { + ch = queuedData.charAt(0); + queuedData = queuedData.substring(1); + if (queuedData.length() == 0) { + queuedData = null; + } + } else { + queuedData = readLine(); + if (queuedData == null) { + ch = -1; + } else { + if (suffix != null) { + String lf = ""; + if (queuedData.endsWith("\r\n")) { + lf = "\r\n"; + } else if (queuedData.endsWith("\n")) { + lf = "\n"; + } + queuedData = + queuedData.substring(0, + queuedData.length() - lf.length()) + + suffix + lf; + } + return read(); + } + } + return ch; + } + + /** + * Sets the suffix to add at the end of each input line. + * + * @param suffix The suffix to add at the end of each input line. + * May be null, in which case no suffix + * is added. + */ + public void setSuffix(final String suffix) { + this.suffix = suffix; + } + + /** + * Returns the suffix which will be added at the end of each input line. + * + * @return the suffix which will be added at the end of each input line + */ + private String getSuffix() { + return suffix; + } + + /** + * Creates a new SuffixLines filter using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + SuffixLines newFilter = new SuffixLines(rdr); + newFilter.setSuffix(getSuffix()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Initializes the suffix if it is available from the parameters. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (SUFFIX_KEY.equals(params[i].getName())) { + suffix = params[i].getValue(); + break; + } + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TabsToSpaces.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TabsToSpaces.java new file mode 100644 index 00000000..adaaa7af --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TabsToSpaces.java @@ -0,0 +1,155 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; + +import org.apache.tools.ant.types.Parameter; + +/** + * Converts tabs to spaces. + * + * Example: + * + *
    <tabstospaces tablength="8"/>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.TabsToSpaces">
    + *   <param name="tablength" value="8"/>
    + * </filterreader>
    + * + */ +public final class TabsToSpaces + extends BaseParamFilterReader + implements ChainableReader { + /** The default tab length. */ + private static final int DEFAULT_TAB_LENGTH = 8; + + /** Parameter name for the length of a tab. */ + private static final String TAB_LENGTH_KEY = "tablength"; + + /** Tab length in this filter. */ + private int tabLength = DEFAULT_TAB_LENGTH; + + /** The number of spaces still to be read to represent the last-read tab. */ + private int spacesRemaining = 0; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public TabsToSpaces() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public TabsToSpaces(final Reader in) { + super(in); + } + + /** + * Returns the next character in the filtered stream, converting tabs + * to the specified number of spaces. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + int ch = -1; + + if (spacesRemaining > 0) { + spacesRemaining--; + ch = ' '; + } else { + ch = in.read(); + if (ch == '\t') { + spacesRemaining = tabLength - 1; + ch = ' '; + } + } + return ch; + } + + /** + * Sets the tab length. + * + * @param tabLength the number of spaces to be used when converting a tab. + */ + public void setTablength(final int tabLength) { + this.tabLength = tabLength; + } + + /** + * Returns the tab length. + * + * @return the number of spaces used when converting a tab + */ + private int getTablength() { + return tabLength; + } + + /** + * Creates a new TabsToSpaces using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + TabsToSpaces newFilter = new TabsToSpaces(rdr); + newFilter.setTablength(getTablength()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Parses the parameters to set the tab length. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (params[i] != null) { + if (TAB_LENGTH_KEY.equals(params[i].getName())) { + tabLength = Integer.parseInt(params[i].getValue()); + break; + } + } + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TailFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TailFilter.java new file mode 100644 index 00000000..fcc84d16 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TailFilter.java @@ -0,0 +1,243 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.LinkedList; + +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.util.LineTokenizer; + +/** + * Reads the last n lines of a stream. (Default is last10 lines.) + * + * Example: + * + *
    <tailfilter lines="3"/>
    + * + * Or: + * + *
    <filterreader classname="org.apache.tools.ant.filters.TailFilter">
    + *   <param name="lines" value="3"/>
    + * </filterreader>
    + * + */ +public final class TailFilter extends BaseParamFilterReader + implements ChainableReader { + /** Parameter name for the number of lines to be returned. */ + private static final String LINES_KEY = "lines"; + + /** Parameter name for the number of lines to be skipped. */ + private static final String SKIP_KEY = "skip"; + + /** Default number of lines to show */ + private static final int DEFAULT_NUM_LINES = 10; + + /** Number of lines to be returned in the filtered stream. */ + private long lines = DEFAULT_NUM_LINES; + + /** Number of lines to be skipped. */ + private long skip = 0; + + /** Whether or not read-ahead been completed. */ + private boolean completedReadAhead = false; + + /** A line tokenizer */ + private LineTokenizer lineTokenizer = null; + + /** the current line from the input stream */ + private String line = null; + /** the position in the current line */ + private int linePos = 0; + + private LinkedList lineList = new LinkedList(); + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public TailFilter() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public TailFilter(final Reader in) { + super(in); + lineTokenizer = new LineTokenizer(); + lineTokenizer.setIncludeDelims(true); + } + + /** + * Returns the next character in the filtered stream. If the read-ahead + * has been completed, the next character in the buffer is returned. + * Otherwise, the stream is read to the end and buffered (with the buffer + * growing as necessary), then the appropriate position in the buffer is + * set to read from. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + public int read() throws IOException { + if (!getInitialized()) { + initialize(); + setInitialized(true); + } + + while (line == null || line.length() == 0) { + line = lineTokenizer.getToken(in); + line = tailFilter(line); + if (line == null) { + return -1; + } + linePos = 0; + } + + int ch = line.charAt(linePos); + linePos++; + if (linePos == line.length()) { + line = null; + } + return ch; + } + + /** + * Sets the number of lines to be returned in the filtered stream. + * + * @param lines the number of lines to be returned in the filtered stream + */ + public void setLines(final long lines) { + this.lines = lines; + } + + /** + * Returns the number of lines to be returned in the filtered stream. + * + * @return the number of lines to be returned in the filtered stream + */ + private long getLines() { + return lines; + } + + /** + * Sets the number of lines to be skipped in the filtered stream. + * + * @param skip the number of lines to be skipped in the filtered stream + */ + public void setSkip(final long skip) { + this.skip = skip; + } + + /** + * Returns the number of lines to be skipped in the filtered stream. + * + * @return the number of lines to be skipped in the filtered stream + */ + private long getSkip() { + return skip; + } + + /** + * Creates a new TailFilter using the passed in + * Reader for instantiation. + * + * @param rdr A Reader object providing the underlying stream. + * Must not be null. + * + * @return a new filter based on this configuration, but filtering + * the specified reader + */ + public Reader chain(final Reader rdr) { + TailFilter newFilter = new TailFilter(rdr); + newFilter.setLines(getLines()); + newFilter.setSkip(getSkip()); + newFilter.setInitialized(true); + return newFilter; + } + + /** + * Scans the parameters list for the "lines" parameter and uses + * it to set the number of lines to be returned in the filtered stream. + * also scan for "skip" parameter. + */ + private void initialize() { + Parameter[] params = getParameters(); + if (params != null) { + for (int i = 0; i < params.length; i++) { + if (LINES_KEY.equals(params[i].getName())) { + setLines(Long.parseLong(params[i].getValue())); + continue; + } + if (SKIP_KEY.equals(params[i].getName())) { + skip = Long.parseLong(params[i].getValue()); + continue; + } + } + } + } + + /** + * implement a tail filter on a stream of lines. + * line = null is the end of the stream. + * @return "" while reading in the lines, + * line while outputting the lines + * null at the end of outputting the lines + */ + private String tailFilter(String line) { + if (!completedReadAhead) { + if (line != null) { + lineList.add(line); + if (lines == -1) { + if (lineList.size() > skip) { + return lineList.removeFirst(); + } + } else { + long linesToKeep = lines + (skip > 0 ? skip : 0); + if (linesToKeep < lineList.size()) { + lineList.removeFirst(); + } + } + return ""; + } + completedReadAhead = true; + if (skip > 0) { + for (int i = 0; i < skip; ++i) { + lineList.removeLast(); + } + } + if (lines > -1) { + while (lineList.size() > lines) { + lineList.removeFirst(); + } + } + } + if (lineList.size() > 0) { + return lineList.removeFirst(); + } + return null; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TokenFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TokenFilter.java new file mode 100644 index 00000000..ebad7602 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/TokenFilter.java @@ -0,0 +1,712 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +import java.io.IOException; +import java.io.Reader; +import java.util.Enumeration; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.types.RegularExpression; +import org.apache.tools.ant.types.Substitution; +import org.apache.tools.ant.util.LineTokenizer; +import org.apache.tools.ant.util.StringUtils; +import org.apache.tools.ant.util.Tokenizer; +import org.apache.tools.ant.util.regexp.Regexp; +import org.apache.tools.ant.util.regexp.RegexpUtil; + +/** + * This splits up input into tokens and passes + * the tokens to a sequence of filters. + * + * @since Ant 1.6 + * @see BaseFilterReader + * @see ChainableReader + * @see org.apache.tools.ant.DynamicConfigurator + */ +public class TokenFilter extends BaseFilterReader + implements ChainableReader { + /** + * string filters implement this interface + */ + public interface Filter { + /** + * filter and/of modify a string + * + * @param string the string to filter + * @return the modified string or null if the + * string did not pass the filter + */ + String filter(String string); + } + + + /** string filters */ + private Vector filters = new Vector(); + /** the tokenizer to use on the input stream */ + private Tokenizer tokenizer = null; + /** the output token termination */ + private String delimOutput = null; + /** the current string token from the input stream */ + private String line = null; + /** the position in the current string token */ + private int linePos = 0; + + /** + * Constructor for "dummy" instances. + * + * @see BaseFilterReader#BaseFilterReader() + */ + public TokenFilter() { + super(); + } + + /** + * Creates a new filtered reader. + * + * @param in A Reader object providing the underlying stream. + * Must not be null. + */ + public TokenFilter(final Reader in) { + super(in); + } + + + /** + * Returns the next character in the filtered stream, only including + * lines from the original stream which match all of the specified + * regular expressions. + * + * @return the next character in the resulting stream, or -1 + * if the end of the resulting stream has been reached + * + * @exception IOException if the underlying stream throws an IOException + * during reading + */ + + public int read() throws IOException { + if (tokenizer == null) { + tokenizer = new LineTokenizer(); + } + while (line == null || line.length() == 0) { + line = tokenizer.getToken(in); + if (line == null) { + return -1; + } + for (Enumeration e = filters.elements(); e.hasMoreElements();) { + Filter filter = e.nextElement(); + line = filter.filter(line); + if (line == null) { + break; + } + } + linePos = 0; + if (line != null) { + if (tokenizer.getPostToken().length() != 0) { + if (delimOutput != null) { + line = line + delimOutput; + } else { + line = line + tokenizer.getPostToken(); + } + } + } + } + int ch = line.charAt(linePos); + linePos++; + if (linePos == line.length()) { + line = null; + } + return ch; + } + + /** + * Creates a new TokenFilter using the passed in + * Reader for instantiation. + * + * @param reader A Reader object providing the underlying stream. + * + * @return a new filter based on this configuration + */ + + public final Reader chain(final Reader reader) { + TokenFilter newFilter = new TokenFilter(reader); + newFilter.filters = filters; + newFilter.tokenizer = tokenizer; + newFilter.delimOutput = delimOutput; + newFilter.setProject(getProject()); + return newFilter; + } + + /** + * set the output delimiter. + * @param delimOutput replaces the delim string returned by the + * tokenizer, if present. + */ + + public void setDelimOutput(String delimOutput) { + this.delimOutput = resolveBackSlash(delimOutput); + } + + // ----------------------------------------- + // Predefined tokenizers + // ----------------------------------------- + + /** + * add a line tokenizer - this is the default. + * @param tokenizer the line tokenizer + */ + + public void addLineTokenizer(LineTokenizer tokenizer) { + add(tokenizer); + } + + /** + * add a string tokenizer + * @param tokenizer the string tokenizer + */ + + public void addStringTokenizer(StringTokenizer tokenizer) { + add(tokenizer); + } + + /** + * add a file tokenizer + * @param tokenizer the file tokenizer + */ + public void addFileTokenizer(FileTokenizer tokenizer) { + add(tokenizer); + } + + /** + * add an arbitrary tokenizer + * @param tokenizer the tokenizer to all, only one allowed + */ + + public void add(Tokenizer tokenizer) { + if (this.tokenizer != null) { + throw new BuildException("Only one tokenizer allowed"); + } + this.tokenizer = tokenizer; + } + + // ----------------------------------------- + // Predefined filters + // ----------------------------------------- + + /** + * replace string filter + * @param filter the replace string filter + */ + public void addReplaceString(ReplaceString filter) { + filters.addElement(filter); + } + + /** + * contains string filter + * @param filter the contains string filter + */ + public void addContainsString(ContainsString filter) { + filters.addElement(filter); + } + + /** + * replace regex filter + * @param filter the replace regex filter + */ + public void addReplaceRegex(ReplaceRegex filter) { + filters.addElement(filter); + } + + /** + * contains regex filter + * @param filter the contains regex filter + */ + public void addContainsRegex(ContainsRegex filter) { + filters.addElement(filter); + } + + /** + * trim filter + * @param filter the trim filter + */ + public void addTrim(Trim filter) { + filters.addElement(filter); + } + + /** + * ignore blank filter + * @param filter the ignore blank filter + */ + public void addIgnoreBlank(IgnoreBlank filter) { + filters.addElement(filter); + } + + /** + * delete chars + * @param filter the delete characters filter + */ + public void addDeleteCharacters(DeleteCharacters filter) { + filters.addElement(filter); + } + + /** + * Add an arbitrary filter + * @param filter the filter to add + */ + public void add(Filter filter) { + filters.addElement(filter); + } + + + // -------------------------------------------- + // + // Tokenizer Classes (impls moved to oata.util) + // + // -------------------------------------------- + + /** + * class to read the complete input into a string + */ + public static class FileTokenizer + extends org.apache.tools.ant.util.FileTokenizer { + } + + /** + * class to tokenize the input as areas separated + * by white space, or by a specified list of + * delim characters. Behaves like java.util.StringTokenizer. + * if the stream starts with delim characters, the first + * token will be an empty string (unless the treat delims + * as tokens flag is set). + */ + public static class StringTokenizer + extends org.apache.tools.ant.util.StringTokenizer { + } + + // -------------------------------------------- + // + // Filter classes + // + // -------------------------------------------- + + /** + * Abstract class that converts derived filter classes into + * ChainableReaderFilter's + */ + public abstract static class ChainableReaderFilter extends ProjectComponent + implements ChainableReader, Filter { + private boolean byLine = true; + + /** + * set whether to use filetokenizer or line tokenizer + * @param byLine if true use a linetokenizer (default) otherwise + * use a filetokenizer + */ + public void setByLine(boolean byLine) { + this.byLine = byLine; + } + + /** + * Chain a tokenfilter reader to a reader, + * + * @param reader the input reader object + * @return the chained reader object + */ + public Reader chain(Reader reader) { + TokenFilter tokenFilter = new TokenFilter(reader); + if (!byLine) { + tokenFilter.add(new FileTokenizer()); + } + tokenFilter.add(this); + return tokenFilter; + } + } + + /** + * Simple replace string filter. + */ + public static class ReplaceString extends ChainableReaderFilter { + private String from; + private String to; + + /** + * the from attribute + * + * @param from the string to replace + */ + public void setFrom(String from) { + this.from = from; + } + + /** + * the to attribute + * + * @param to the string to replace 'from' with + */ + public void setTo(String to) { + this.to = to; + } + + /** + * Filter a string 'line' replacing from with to + * (Copy&Paste from the Replace task) + * @param line the string to be filtered + * @return the filtered line + */ + public String filter(String line) { + if (from == null) { + throw new BuildException("Missing from in stringreplace"); + } + StringBuffer ret = new StringBuffer(); + int start = 0; + int found = line.indexOf(from); + while (found >= 0) { + // write everything up to the from + if (found > start) { + ret.append(line.substring(start, found)); + } + + // write the replacement to + if (to != null) { + ret.append(to); + } + + // search again + start = found + from.length(); + found = line.indexOf(from, start); + } + + // write the remaining characters + if (line.length() > start) { + ret.append(line.substring(start, line.length())); + } + + return ret.toString(); + } + } + + /** + * Simple filter to filter lines contains strings + */ + public static class ContainsString extends ProjectComponent + implements Filter { + private String contains; + + /** + * the contains attribute + * @param contains the string that the token should contain + */ + public void setContains(String contains) { + this.contains = contains; + } + + /** + * Filter strings that contain the contains attribute + * + * @param string the string to be filtered + * @return null if the string does not contain "contains", + * string otherwise + */ + public String filter(String string) { + if (contains == null) { + throw new BuildException("Missing contains in containsstring"); + } + if (string.indexOf(contains) > -1) { + return string; + } + return null; + } + } + + /** + * filter to replace regex. + */ + public static class ReplaceRegex extends ChainableReaderFilter { + private String from; + private String to; + private RegularExpression regularExpression; + private Substitution substitution; + private boolean initialized = false; + private String flags = ""; + private int options; + private Regexp regexp; + + /** + * the from attribute + * @param from the regex string + */ + public void setPattern(String from) { + this.from = from; + } + /** + * the to attribute + * @param to the replacement string + */ + public void setReplace(String to) { + this.to = to; + } + + /** + * @param flags the regex flags + */ + public void setFlags(String flags) { + this.flags = flags; + } + + private void initialize() { + if (initialized) { + return; + } + options = convertRegexOptions(flags); + if (from == null) { + throw new BuildException("Missing pattern in replaceregex"); + } + regularExpression = new RegularExpression(); + regularExpression.setPattern(from); + regexp = regularExpression.getRegexp(getProject()); + if (to == null) { + to = ""; + } + substitution = new Substitution(); + substitution.setExpression(to); + } + + /** + * @param line the string to modify + * @return the modified string + */ + public String filter(String line) { + initialize(); + + if (!regexp.matches(line, options)) { + return line; + } + return regexp.substitute( + line, substitution.getExpression(getProject()), options); + } + } + + /** + * filter to filter tokens matching regular expressions. + */ + public static class ContainsRegex extends ChainableReaderFilter { + private String from; + private String to; + private RegularExpression regularExpression; + private Substitution substitution; + private boolean initialized = false; + private String flags = ""; + private int options; + private Regexp regexp; + + + /** + * @param from the regex pattern + */ + public void setPattern(String from) { + this.from = from; + } + + /** + * @param to the replacement string + */ + public void setReplace(String to) { + this.to = to; + } + + /** + * @param flags the regex flags + */ + public void setFlags(String flags) { + this.flags = flags; + } + + private void initialize() { + if (initialized) { + return; + } + options = convertRegexOptions(flags); + if (from == null) { + throw new BuildException("Missing from in containsregex"); + } + regularExpression = new RegularExpression(); + regularExpression.setPattern(from); + regexp = regularExpression.getRegexp(getProject()); + if (to == null) { + return; + } + substitution = new Substitution(); + substitution.setExpression(to); + } + + /** + * apply regex and substitution on a string + * @param string the string to apply filter on + * @return the filtered string + */ + public String filter(String string) { + initialize(); + if (!regexp.matches(string, options)) { + return null; + } + if (substitution == null) { + return string; + } + return regexp.substitute( + string, substitution.getExpression(getProject()), options); + } + } + + /** Filter to trim white space */ + public static class Trim extends ChainableReaderFilter { + /** + * @param line the string to be trimmed + * @return the trimmed string + */ + public String filter(String line) { + return line.trim(); + } + } + + + + /** Filter remove empty tokens */ + public static class IgnoreBlank extends ChainableReaderFilter { + /** + * @param line the line to modify + * @return the trimmed line + */ + public String filter(String line) { + if (line.trim().length() == 0) { + return null; + } + return line; + } + } + + /** + * Filter to delete characters + */ + public static class DeleteCharacters extends ProjectComponent + implements Filter, ChainableReader { + // Attributes + /** the list of characters to remove from the input */ + private String deleteChars = ""; + + /** + * Set the list of characters to delete + * @param deleteChars the list of characters + */ + public void setChars(String deleteChars) { + this.deleteChars = resolveBackSlash(deleteChars); + } + + /** + * remove characters from a string + * @param string the string to remove the characters from + * @return the converted string + */ + public String filter(String string) { + StringBuffer output = new StringBuffer(string.length()); + for (int i = 0; i < string.length(); ++i) { + char ch = string.charAt(i); + if (!(isDeleteCharacter(ch))) { + output.append(ch); + } + } + return output.toString(); + } + + /** + * factory method to provide a reader that removes + * the characters from a reader as part of a filter + * chain + * @param reader the reader object + * @return the chained reader object + */ + public Reader chain(Reader reader) { + return new BaseFilterReader(reader) { + /** + * @return the next non delete character + */ + public int read() + throws IOException { + while (true) { + int c = in.read(); + if (c == -1) { + return c; + } + if (!(isDeleteCharacter((char) c))) { + return c; + } + } + } + }; + } + + /** + * check if the character c is to be deleted + * + * @param c char to test + * @return true if the supplied char is in the list to be stripped. + */ + private boolean isDeleteCharacter(char c) { + for (int d = 0; d < deleteChars.length(); ++d) { + if (deleteChars.charAt(d) == c) { + return true; + } + } + return false; + } + } + + // -------------------------------------------------------- + // static utility methods - could be placed somewhere else + // -------------------------------------------------------- + + /** + * xml does not do "c" like interpretation of strings. + * i.e. \n\r\t etc. + * this method processes \n, \r, \t, \f, \\ + * also subs \s with " \n\r\t\f" + * a trailing '\' will be ignored + * + * @param input raw string with possible embedded '\'s + * @return converted string + */ + public static String resolveBackSlash(String input) { + return StringUtils.resolveBackSlash(input); + } + + /** + * convert regex option flag characters to regex options + *
      + *
    • g - Regexp.REPLACE_ALL
    • + *
    • i - Regexp.MATCH_CASE_INSENSITIVE
    • + *
    • m - Regexp.MATCH_MULTILINE
    • + *
    • s - Regexp.MATCH_SINGLELINE
    • + *
    + * @param flags the string containing the flags + * @return the Regexp option bits + */ + public static int convertRegexOptions(String flags) { + return RegexpUtil.asOptions(flags); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/UniqFilter.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/UniqFilter.java new file mode 100644 index 00000000..e72d5f58 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/UniqFilter.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters; + +/** + * Like the Unix uniq(1) command, only returns tokens that are + * different from their ancestor token. + * + *

    This filter is probably most useful if used together with a + * sortfilter.

    + * + * @since Ant 1.8.0 + */ +public class UniqFilter extends TokenFilter.ChainableReaderFilter { + + private String lastLine = null; + + public String filter(String string) { + return lastLine == null || !lastLine.equals(string) + ? (lastLine = string) : null; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java new file mode 100644 index 00000000..f176c331 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java @@ -0,0 +1,288 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.filters.util; + +import java.io.FilterReader; +import java.io.IOException; +import java.io.Reader; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import org.apache.tools.ant.AntClassLoader; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.filters.BaseFilterReader; +import org.apache.tools.ant.filters.ChainableReader; +import org.apache.tools.ant.types.AntFilterReader; +import org.apache.tools.ant.types.FilterChain; +import org.apache.tools.ant.types.Parameter; +import org.apache.tools.ant.types.Parameterizable; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.util.FileUtils; + +/** + * Process a FilterReader chain. + * + */ +public final class ChainReaderHelper { + + // default buffer size + private static final int DEFAULT_BUFFER_SIZE = 8192; + // CheckStyle:VisibilityModifier OFF - bc + /** + * The primary reader to which the reader chain is to be attached. + */ + public Reader primaryReader; + + /** + * The size of the buffer to be used. + */ + public int bufferSize = DEFAULT_BUFFER_SIZE; + + /** + * Chain of filters + */ + public Vector filterChains = new Vector(); + + /** The Ant project */ + private Project project = null; + + // CheckStyle:VisibilityModifier ON + + /** + * Sets the primary reader + * @param rdr the reader object + */ + public void setPrimaryReader(Reader rdr) { + primaryReader = rdr; + } + + /** + * Set the project to work with + * @param project the current project + */ + public void setProject(final Project project) { + this.project = project; + } + + /** + * Get the project + * + * @return the current project + */ + public Project getProject() { + return project; + } + + /** + * Sets the buffer size to be used. Defaults to 8192, + * if this method is not invoked. + * @param size the buffer size to use + */ + public void setBufferSize(int size) { + bufferSize = size; + } + + /** + * Sets the collection of filter reader sets + * + * @param fchain the filter chains collection + */ + public void setFilterChains(Vector fchain) { + filterChains = fchain; + } + + /** + * Assemble the reader + * @return the assembled reader + * @exception BuildException if an error occurs + */ + public Reader getAssembledReader() throws BuildException { + if (primaryReader == null) { + throw new BuildException("primaryReader must not be null."); + } + + Reader instream = primaryReader; + final int filterReadersCount = filterChains.size(); + final Vector finalFilters = new Vector(); + final ArrayList classLoadersToCleanUp = + new ArrayList(); + + for (int i = 0; i < filterReadersCount; i++) { + final FilterChain filterchain = + filterChains.elementAt(i); + final Vector filterReaders = filterchain.getFilterReaders(); + final int readerCount = filterReaders.size(); + for (int j = 0; j < readerCount; j++) { + finalFilters.addElement(filterReaders.elementAt(j)); + } + } + + final int filtersCount = finalFilters.size(); + + if (filtersCount > 0) { + boolean success = false; + try { + for (int i = 0; i < filtersCount; i++) { + Object o = finalFilters.elementAt(i); + + if (o instanceof AntFilterReader) { + instream = + expandReader((AntFilterReader) finalFilters.elementAt(i), + instream, classLoadersToCleanUp); + } else if (o instanceof ChainableReader) { + setProjectOnObject(o); + instream = ((ChainableReader) o).chain(instream); + setProjectOnObject(instream); + } + } + success = true; + } finally { + if (!success && classLoadersToCleanUp.size() > 0) { + cleanUpClassLoaders(classLoadersToCleanUp); + } + } + } + final Reader finalReader = instream; + return classLoadersToCleanUp.size() == 0 ? finalReader + : new FilterReader(finalReader) { + public void close() throws IOException { + FileUtils.close(in); + cleanUpClassLoaders(classLoadersToCleanUp); + } + protected void finalize() throws Throwable { + try { + close(); + } finally { + super.finalize(); + } + } + }; + } + + /** + * helper method to set the project on an object. + * the reflection setProject does not work for anonymous/protected/private + * classes, even if they have public methods. + */ + private void setProjectOnObject(Object obj) { + if (project == null) { + return; + } + if (obj instanceof BaseFilterReader) { + ((BaseFilterReader) obj).setProject(project); + return; + } + project.setProjectReference(obj); + } + + /** + * Deregisters Classloaders from the project so GC can remove them later. + */ + private static void cleanUpClassLoaders(List loaders) { + for (Iterator it = loaders.iterator(); it.hasNext();) { + it.next().cleanup(); + } + } + + /** + * Read data from the reader and return the + * contents as a string. + * @param rdr the reader object + * @return the contents of the file as a string + * @exception IOException if an error occurs + */ + public String readFully(Reader rdr) + throws IOException { + return FileUtils.readFully(rdr, bufferSize); + } + + /** + * 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 classLoadersToCleanUp) { + final String className = filter.getClassName(); + final Path classpath = filter.getClasspath(); + final Project pro = filter.getProject(); + if (className != null) { + try { + Class clazz = null; + if (classpath == null) { + clazz = Class.forName(className); + } else { + AntClassLoader al = pro.createClassLoader(classpath); + classLoadersToCleanUp.add(al); + clazz = Class.forName(className, true, al); + } + if (clazz != null) { + if (!FilterReader.class.isAssignableFrom(clazz)) { + throw new BuildException(className + " does not extend" + + " java.io.FilterReader"); + } + final Constructor[] constructors = clazz.getConstructors(); + int j = 0; + boolean consPresent = false; + for (; j < constructors.length; j++) { + Class[] types = constructors[j].getParameterTypes(); + if (types.length == 1 + && types[0].isAssignableFrom(Reader.class)) { + consPresent = true; + break; + } + } + if (!consPresent) { + throw new BuildException(className + " does not define" + + " a public constructor" + + " that takes in a Reader" + + " as its single argument."); + } + final Reader[] rdr = {ancestor}; + Reader instream = + (Reader) constructors[j].newInstance((Object[]) rdr); + setProjectOnObject(instream); + if (Parameterizable.class.isAssignableFrom(clazz)) { + final Parameter[] params = filter.getParams(); + ((Parameterizable) instream).setParameters(params); + } + return instream; + } + } catch (final ClassNotFoundException cnfe) { + throw new BuildException(cnfe); + } catch (final InstantiationException ie) { + throw new BuildException(ie); + } catch (final IllegalAccessException iae) { + throw new BuildException(iae); + } catch (final InvocationTargetException ite) { + throw new BuildException(ite); + } + } + // Ant 1.7.1 and earlier ignore without a + // classname attribute, not sure this is a good idea - + // backwards compatibility makes it hard to change, though. + return ancestor; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java new file mode 100644 index 00000000..b0c67ce2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/filters/util/JavaClassHelper.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +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; + +// CheckStyle:HideUtilityClassConstructorCheck OFF - bc +/** + * Helper class that filters constants from a Java Class + * + */ +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 + * + * @param bytes the class as a array of bytes + * @return a StringBuffer contains the name=value pairs + * @exception IOException if an error occurs + */ + public static StringBuffer getConstants(final 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/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/AntXMLContext.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/AntXMLContext.java new file mode 100644 index 00000000..99e3d1a1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/AntXMLContext.java @@ -0,0 +1,417 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.helper; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Location; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.RuntimeConfigurable; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.util.FileUtils; +import org.xml.sax.Attributes; +import org.xml.sax.Locator; + +/** + * Context information for the ant processing. + * + */ +public class AntXMLContext { + /** The project to configure. */ + private Project project; + + /** The configuration file to parse. */ + private File buildFile; + + /** The configuration file to parse. */ + private URL buildFileURL; + + /** Vector with all the targets, in the order they are + * defined. Project maintains a Hashtable, which is not ordered. + * This will allow description to know the original order. + */ + private Vector targetVector = new Vector(); + + /** + * Parent directory of the build file. Used for resolving entities + * and setting the project's base directory. + */ + private File buildFileParent; + + /** + * Parent directory of the build file. Used for resolving entities + * and setting the project's base directory. + */ + private URL buildFileParentURL; + + /** Name of the current project */ + private String currentProjectName; + + /** + * Locator for the configuration file parser. + * Used for giving locations of errors etc. + */ + private Locator locator; + + /** + * Target that all other targets will depend upon implicitly. + * + *

    This holds all tasks and data type definitions that have + * been placed outside of targets.

    + */ + private Target implicitTarget = new Target(); + + /** Current target ( no need for a stack as the processing model + allows only one level of target ) */ + private Target currentTarget = null; + + /** The stack of RuntimeConfigurable2 wrapping the + objects. + */ + private Vector wStack = new Vector(); + + /** + * Indicates whether the project tag attributes are to be ignored + * when processing a particular build file. + */ + private boolean ignoreProjectTag = false; + + /** Keeps track of prefix -> uri mapping during parsing */ + private Map> prefixMapping = new HashMap>(); + + + /** Keeps track of targets in files */ + private Map currentTargets = null; + + /** + * constructor + * @param project the project to which this antxml context belongs to + */ + public AntXMLContext(Project project) { + this.project = project; + implicitTarget.setProject(project); + implicitTarget.setName(""); + targetVector.addElement(implicitTarget); + } + + /** + * sets the build file to which the XML context belongs + * @param buildFile ant build file + */ + public void setBuildFile(File buildFile) { + this.buildFile = buildFile; + if (buildFile != null) { + this.buildFileParent = new File(buildFile.getParent()); + implicitTarget.setLocation(new Location(buildFile.getAbsolutePath())); + try { + setBuildFile(FileUtils.getFileUtils().getFileURL(buildFile)); + } catch (MalformedURLException ex) { + throw new BuildException(ex); + } + } else { + this.buildFileParent = null; + } + } + + /** + * sets the build file to which the XML context belongs + * @param buildFile ant build file + * @since Ant 1.8.0 + */ + public void setBuildFile(URL buildFile) throws MalformedURLException { + this.buildFileURL = buildFile; + this.buildFileParentURL = new URL(buildFile, "."); + if (implicitTarget.getLocation() == null) { + implicitTarget.setLocation(new Location(buildFile.toString())); + } + } + + /** + * find out the build file + * @return the build file to which the xml context belongs + */ + public File getBuildFile() { + return buildFile; + } + + /** + * find out the parent build file of this build file + * @return the parent build file of this build file + */ + public File getBuildFileParent() { + return buildFileParent; + } + + /** + * find out the build file + * @return the build file to which the xml context belongs + * @since Ant 1.8.0 + */ + public URL getBuildFileURL() { + return buildFileURL; + } + + /** + * find out the parent build file of this build file + * @return the parent build file of this build file + * @since Ant 1.8.0 + */ + public URL getBuildFileParentURL() { + return buildFileParentURL; + } + + /** + * find out the project to which this antxml context belongs + * @return project + */ + public Project getProject() { + return project; + } + + /** + * find out the current project name + * @return current project name + */ + public String getCurrentProjectName() { + return currentProjectName; + } + + /** + * set the name of the current project + * @param name name of the current project + */ + public void setCurrentProjectName(String name) { + this.currentProjectName = name; + } + + /** + * get the current runtime configurable wrapper + * can return null + * @return runtime configurable wrapper + */ + public RuntimeConfigurable currentWrapper() { + if (wStack.size() < 1) { + return null; + } + return (RuntimeConfigurable) wStack.elementAt(wStack.size() - 1); + } + + /** + * get the runtime configurable wrapper of the parent project + * can return null + * @return runtime configurable wrapper of the parent project + */ + public RuntimeConfigurable parentWrapper() { + if (wStack.size() < 2) { + return null; + } + return (RuntimeConfigurable) wStack.elementAt(wStack.size() - 2); + } + + /** + * add a runtime configurable wrapper to the internal stack + * @param wrapper runtime configurable wrapper + */ + public void pushWrapper(RuntimeConfigurable wrapper) { + wStack.addElement(wrapper); + } + + /** + * remove a runtime configurable wrapper from the stack + */ + public void popWrapper() { + if (wStack.size() > 0) { + wStack.removeElementAt(wStack.size() - 1); + } + } + + /** + * access the stack of wrappers + * @return the stack of wrappers + */ + public Vector getWrapperStack() { + return wStack; + } + + /** + * add a new target + * @param target target to add + */ + public void addTarget(Target target) { + targetVector.addElement(target); + currentTarget = target; + } + + /** + * get the current target + * @return current target + */ + public Target getCurrentTarget() { + return currentTarget; + } + + /** + * get the implicit target + * @return implicit target + */ + public Target getImplicitTarget() { + return implicitTarget; + } + + /** + * sets the current target + * @param target current target + */ + public void setCurrentTarget(Target target) { + this.currentTarget = target; + } + + /** + * sets the implicit target + * @param target the implicit target + */ + public void setImplicitTarget(Target target) { + this.implicitTarget = target; + } + + /** + * access the vector of targets + * @return vector of targets + */ + public Vector getTargets() { + return targetVector; + } + + /** + * Scans an attribute list for the id attribute and + * stores a reference to the target object in the project if an + * id is found. + *

    + * This method was moved out of the configure method to allow + * it to be executed at parse time. + * @param element the current element + * @param attr attributes of the current element + */ + public void configureId(Object element, Attributes attr) { + String id = attr.getValue("id"); + if (id != null) { + project.addIdReference(id, element); + } + } + + /** + * access the locator + * @return locator + */ + public Locator getLocator() { + return locator; + } + + /** + * sets the locator + * @param locator locator + */ + public void setLocator(Locator locator) { + this.locator = locator; + } + + /** + * tells whether the project tag is being ignored + * @return whether the project tag is being ignored + */ + public boolean isIgnoringProjectTag() { + return ignoreProjectTag; + } + + /** + * sets the flag to ignore the project tag + * @param flag to ignore the project tag + */ + public void setIgnoreProjectTag(boolean flag) { + this.ignoreProjectTag = flag; + } + + /** + * Called during parsing, stores the prefix to uri mapping. + * + * @param prefix a namespace prefix + * @param uri a namespace uri + */ + public void startPrefixMapping(String prefix, String uri) { + List list = prefixMapping.get(prefix); + if (list == null) { + list = new ArrayList(); + prefixMapping.put(prefix, list); + } + list.add(uri); + } + + /** + * End of prefix to uri mapping. + * + * @param prefix the namespace prefix + */ + public void endPrefixMapping(String prefix) { + List list = prefixMapping.get(prefix); + if (list == null || list.size() == 0) { + return; // Should not happen + } + list.remove(list.size() - 1); + } + + /** + * prefix to namespace uri mapping + * + * @param prefix the prefix to map + * @return the uri for this prefix, null if not present + */ + public String getPrefixMapping(String prefix) { + List list = prefixMapping.get(prefix); + if (list == null || list.size() == 0) { + return null; + } + return (String) list.get(list.size() - 1); + } + + /** + * Get the targets in the current source file. + * @return the current targets. + */ + public Map getCurrentTargets() { + return currentTargets; + } + + /** + * Set the map of the targets in the current source file. + * @param currentTargets a map of targets. + */ + public void setCurrentTargets(Map currentTargets) { + this.currentTargets = currentTargets; + } + +} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/DefaultExecutor.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/DefaultExecutor.java new file mode 100644 index 00000000..cdbc587c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/DefaultExecutor.java @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.helper; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; + +/** + * Default Target executor implementation. Runs each target individually + * (including all of its dependencies). If an error occurs, behavior is + * determined by the Project's "keep-going" mode. + * @since Ant 1.6.3 + */ +public class DefaultExecutor implements Executor { + + private static final SingleCheckExecutor SUB_EXECUTOR = new SingleCheckExecutor(); + + /** {@inheritDoc}. */ + public void executeTargets(Project project, String[] targetNames) + throws BuildException { + BuildException thrownException = null; + for (int i = 0; i < targetNames.length; i++) { + try { + project.executeTarget(targetNames[i]); + } catch (BuildException ex) { + if (project.isKeepGoingMode()) { + thrownException = ex; + } else { + throw ex; + } + } + } + if (thrownException != null) { + throw thrownException; + } + } + + /** {@inheritDoc}. */ + public Executor getSubProjectExecutor() { + return SUB_EXECUTOR; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java new file mode 100644 index 00000000..da85dba7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/IgnoreDependenciesExecutor.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.helper; + +import java.util.Hashtable; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Target; + +/** + * Target executor implementation that ignores dependencies. Runs each + * target by calling target.performTasks() directly. If an + * error occurs, behavior is determined by the Project's "keep-going" mode. + * To be used when you know what you're doing. + * + * @since Ant 1.7.1 + */ +public class IgnoreDependenciesExecutor implements Executor { + + private static final SingleCheckExecutor SUB_EXECUTOR = new SingleCheckExecutor(); + + /** {@inheritDoc}. */ + public void executeTargets(Project project, String[] targetNames) + throws BuildException { + Hashtable targets = project.getTargets(); + BuildException thrownException = null; + for (int i = 0; i < targetNames.length; i++) { + try { + Target t = targets.get(targetNames[i]); + if (t == null) { + throw new BuildException("Unknown target " + targetNames[i]); + } + t.performTasks(); + } catch (BuildException ex) { + if (project.isKeepGoingMode()) { + thrownException = ex; + } else { + throw ex; + } + } + } + if (thrownException != null) { + throw thrownException; + } + } + + /** {@inheritDoc}. */ + public Executor getSubProjectExecutor() { + return SUB_EXECUTOR; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelper2.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelper2.java new file mode 100644 index 00000000..67e1decb --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelper2.java @@ -0,0 +1,1238 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.helper; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLConnection; +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Map; +import java.util.Stack; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ExtensionPoint; +import org.apache.tools.ant.Location; +import org.apache.tools.ant.MagicNames; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.RuntimeConfigurable; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.UnknownElement; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileProvider; +import org.apache.tools.ant.types.resources.URLProvider; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JAXPUtils; +import org.apache.tools.zip.ZipFile; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; + +/** + * Sax2 based project reader + * + */ +public class ProjectHelper2 extends ProjectHelper { + + /** Reference holding the (ordered) target Vector */ + public static final String REFID_TARGETS = "ant.targets"; + + /* Stateless */ + + // singletons - since all state is in the context + private static AntHandler elementHandler = new ElementHandler(); + private static AntHandler targetHandler = new TargetHandler(); + private static AntHandler mainHandler = new MainHandler(); + private static AntHandler projectHandler = new ProjectHandler(); + + /** Specific to ProjectHelper2 so not a true Ant "magic name:" */ + private static final String REFID_CONTEXT = "ant.parsing.context"; + + /** + * helper for path -> URI and URI -> path conversions. + */ + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** + * Whether this instance of ProjectHelper can parse an Antlib + * descriptor given by the URL and return its content as an + * UnknownElement ready to be turned into an Antlib task. + * + *

    This implementation returns true.

    + * + * @since Ant 1.8.0 + */ + public boolean canParseAntlibDescriptor(Resource resource) { + return true; + } + + /** + * Parse the given URL as an antlib descriptor and return the + * content as something that can be turned into an Antlib task. + * + *

    simply delegates to {@link #parseUnknownElement + * parseUnknownElement} if the resource provides an URL and throws + * an exception otherwise.

    + * + * @since Ant 1.8.0 + */ + public UnknownElement parseAntlibDescriptor(Project containingProject, + Resource resource) { + URLProvider up = resource.as(URLProvider.class); + if (up == null) { + throw new BuildException("Unsupported resource type: " + resource); + } + return parseUnknownElement(containingProject, up.getURL()); + } + + /** + * Parse an unknown element from a url + * + * @param project the current project + * @param source the url containing the task + * @return a configured task + * @exception BuildException if an error occurs + */ + public UnknownElement parseUnknownElement(Project project, URL source) + throws BuildException { + Target dummyTarget = new Target(); + dummyTarget.setProject(project); + + AntXMLContext context = new AntXMLContext(project); + context.addTarget(dummyTarget); + context.setImplicitTarget(dummyTarget); + + parse(context.getProject(), source, new RootHandler(context, elementHandler)); + Task[] tasks = dummyTarget.getTasks(); + if (tasks.length != 1) { + throw new BuildException("No tasks defined"); + } + return (UnknownElement) tasks[0]; + } + + /** + * Parse a source xml input. + * + * @param project the current project + * @param source the xml source + * @exception BuildException if an error occurs + */ + public void parse(Project project, Object source) throws BuildException { + getImportStack().addElement(source); + AntXMLContext context = null; + context = (AntXMLContext) project.getReference(REFID_CONTEXT); + if (context == null) { + context = new AntXMLContext(project); + project.addReference(REFID_CONTEXT, context); + project.addReference(REFID_TARGETS, context.getTargets()); + } + if (getImportStack().size() > 1) { + // we are in an imported file. + context.setIgnoreProjectTag(true); + Target currentTarget = context.getCurrentTarget(); + Target currentImplicit = context.getImplicitTarget(); + Map currentTargets = context.getCurrentTargets(); + try { + Target newCurrent = new Target(); + newCurrent.setProject(project); + newCurrent.setName(""); + context.setCurrentTarget(newCurrent); + context.setCurrentTargets(new HashMap()); + context.setImplicitTarget(newCurrent); + parse(project, source, new RootHandler(context, mainHandler)); + newCurrent.execute(); + } finally { + context.setCurrentTarget(currentTarget); + context.setImplicitTarget(currentImplicit); + context.setCurrentTargets(currentTargets); + } + } else { + // top level file + context.setCurrentTargets(new HashMap()); + parse(project, source, new RootHandler(context, mainHandler)); + // Execute the top-level target + context.getImplicitTarget().execute(); + + // resolve extensionOf attributes + resolveExtensionOfAttributes(project); + } + } + + /** + * Parses the project file, configuring the project as it goes. + * + * @param project the current project + * @param source the xml source + * @param handler the root handler to use (contains the current context) + * @exception BuildException if the configuration is invalid or cannot + * be read + */ + public void parse(Project project, Object source, RootHandler handler) throws BuildException { + + AntXMLContext context = handler.context; + + File buildFile = null; + URL url = null; + String buildFileName = null; + + if (source instanceof File) { + buildFile = (File) source; + } else if (source instanceof URL) { + url = (URL) source; + } else if (source instanceof Resource) { + FileProvider fp = + ((Resource) source).as(FileProvider.class); + if (fp != null) { + buildFile = fp.getFile(); + } else { + URLProvider up = + ((Resource) source).as(URLProvider.class); + if (up != null) { + url = up.getURL(); + } + } + } + if (buildFile != null) { + buildFile = FILE_UTILS.normalize(buildFile.getAbsolutePath()); + context.setBuildFile(buildFile); + buildFileName = buildFile.toString(); + } else if (url != null) { + try { + context.setBuildFile((File) null); + context.setBuildFile(url); + } catch (java.net.MalformedURLException ex) { + throw new BuildException(ex); + } + buildFileName = url.toString(); + } else { + throw new BuildException("Source " + source.getClass().getName() + + " not supported by this plugin"); + } + InputStream inputStream = null; + InputSource inputSource = null; + ZipFile zf = null; + + try { + /** + * SAX 2 style parser used to parse the given file. + */ + XMLReader parser = JAXPUtils.getNamespaceXMLReader(); + + String uri = null; + if (buildFile != null) { + uri = FILE_UTILS.toURI(buildFile.getAbsolutePath()); + inputStream = new FileInputStream(buildFile); + } else { + uri = url.toString(); + int pling = -1; + if (uri.startsWith("jar:file") + && (pling = uri.indexOf("!/")) > -1) { + zf = new ZipFile(org.apache.tools.ant.launch.Locator + .fromJarURI(uri), "UTF-8"); + inputStream = + zf.getInputStream(zf.getEntry(uri.substring(pling + 1))); + } else { + URLConnection conn = url.openConnection(); + conn.setUseCaches(false); + inputStream = conn.getInputStream(); + } + } + + inputSource = new InputSource(inputStream); + if (uri != null) { + inputSource.setSystemId(uri); + } + project.log("parsing buildfile " + buildFileName + " with URI = " + + uri + (zf != null ? " from a zip file" : ""), + Project.MSG_VERBOSE); + + DefaultHandler hb = handler; + + parser.setContentHandler(hb); + parser.setEntityResolver(hb); + parser.setErrorHandler(hb); + parser.setDTDHandler(hb); + parser.parse(inputSource); + } catch (SAXParseException exc) { + Location location = new Location(exc.getSystemId(), exc.getLineNumber(), exc + .getColumnNumber()); + + Throwable t = exc.getException(); + if (t instanceof BuildException) { + BuildException be = (BuildException) t; + if (be.getLocation() == Location.UNKNOWN_LOCATION) { + be.setLocation(location); + } + throw be; + } + throw new BuildException(exc.getMessage(), t == null ? exc : t, location); + } catch (SAXException exc) { + Throwable t = exc.getException(); + if (t instanceof BuildException) { + throw (BuildException) t; + } + throw new BuildException(exc.getMessage(), t == null ? exc : t); + } catch (FileNotFoundException exc) { + throw new BuildException(exc); + } catch (UnsupportedEncodingException exc) { + throw new BuildException("Encoding of project file " + buildFileName + " is invalid.", + exc); + } catch (IOException exc) { + throw new BuildException("Error reading project file " + buildFileName + ": " + + exc.getMessage(), exc); + } finally { + FileUtils.close(inputStream); + ZipFile.closeQuietly(zf); + } + } + + /** + * Returns main handler + * @return main handler + */ + protected static AntHandler getMainHandler() { + return mainHandler; + } + + /** + * Sets main handler + * @param handler new main handler + */ + protected static void setMainHandler(AntHandler handler) { + mainHandler = handler; + } + + /** + * Returns project handler + * @return project handler + */ + protected static AntHandler getProjectHandler() { + return projectHandler; + } + + /** + * Sets project handler + * @param handler new project handler + */ + protected static void setProjectHandler(AntHandler handler) { + projectHandler = handler; + } + + /** + * Returns target handler + * @return target handler + */ + protected static AntHandler getTargetHandler() { + return targetHandler; + } + + /** + * Sets target handler + * @param handler new target handler + */ + protected static void setTargetHandler(AntHandler handler) { + targetHandler = handler; + } + + /** + * Returns element handler + * @return element handler + */ + protected static AntHandler getElementHandler() { + return elementHandler; + } + + /** + * Sets element handler + * @param handler new element handler + */ + protected static void setElementHandler(AntHandler handler) { + elementHandler = handler; + } + + /** + * The common superclass for all SAX event handlers used to parse + * the configuration file. + * + * The context will hold all state information. At each time + * there is one active handler for the current element. It can + * use onStartChild() to set an alternate handler for the child. + */ + public static class AntHandler { + /** + * Handles the start of an element. This base implementation does + * nothing. + * + * @param uri the namespace URI for the tag + * @param tag The name of the element being started. + * Will not be null. + * @param qname The qualified name of the element. + * @param attrs Attributes of the element being started. + * Will not be null. + * @param context The context that this element is in. + * + * @exception SAXParseException if this method is not overridden, or in + * case of error in an overridden version + */ + public void onStartElement(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + } + + /** + * Handles the start of an element. This base implementation just + * throws an exception - you must override this method if you expect + * child elements. + * + * @param uri The namespace uri for this element. + * @param tag The name of the element being started. + * Will not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element being started. + * Will not be null. + * @param context The current context. + * @return a handler (in the derived classes) + * + * @exception SAXParseException if this method is not overridden, or in + * case of error in an overridden version + */ + public AntHandler onStartChild(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + throw new SAXParseException("Unexpected element \"" + qname + " \"", context + .getLocator()); + } + + /** + * Handle the end of a element. + * + * @param uri the namespace uri of the element + * @param tag the tag of the element + * @param qname the qualified name of the element + * @param context the current context + * @exception SAXParseException if an error occurs + */ + public void onEndChild(String uri, String tag, String qname, AntXMLContext context) + throws SAXParseException { + } + + /** + * This method is called when this element and all elements nested into it have been + * handled. I.e., this happens at the </end_tag_of_the_element>. + * @param uri the namespace uri for this element + * @param tag the element name + * @param context the current context + */ + public void onEndElement(String uri, String tag, AntXMLContext context) { + } + + /** + * Handles text within an element. This base implementation just + * throws an exception, you must override it if you expect content. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * @param context The current context. + * + * @exception SAXParseException if this method is not overridden, or in + * case of error in an overridden version + */ + public void characters(char[] buf, int start, int count, AntXMLContext context) + throws SAXParseException { + String s = new String(buf, start, count).trim(); + + if (s.length() > 0) { + throw new SAXParseException("Unexpected text \"" + s + "\"", context.getLocator()); + } + } + + /** + * Will be called every time a namespace is reached. + * It'll verify if the ns was processed, and if not load the task definitions. + * @param uri The namespace uri. + */ + protected void checkNamespace(String uri) { + } + } + + /** + * Handler for ant processing. Uses a stack of AntHandlers to + * implement each element ( the original parser used a recursive behavior, + * with the implicit execution stack ) + */ + public static class RootHandler extends DefaultHandler { + private Stack antHandlers = new Stack(); + private AntHandler currentHandler = null; + private AntXMLContext context; + + /** + * Creates a new RootHandler instance. + * + * @param context The context for the handler. + * @param rootHandler The handler for the root element. + */ + public RootHandler(AntXMLContext context, AntHandler rootHandler) { + currentHandler = rootHandler; + antHandlers.push(currentHandler); + this.context = context; + } + + /** + * Returns the current ant handler object. + * @return the current ant handler. + */ + public AntHandler getCurrentAntHandler() { + return currentHandler; + } + + /** + * Resolves file: URIs relative to the build file. + * + * @param publicId The public identifier, or null + * if none is available. Ignored in this + * implementation. + * @param systemId The system identifier provided in the XML + * document. Will not be null. + * @return an inputsource for this identifier + */ + public InputSource resolveEntity(String publicId, String systemId) { + + context.getProject().log("resolving systemId: " + systemId, Project.MSG_VERBOSE); + + if (systemId.startsWith("file:")) { + String path = FILE_UTILS.fromURI(systemId); + + File file = new File(path); + if (!file.isAbsolute()) { + file = FILE_UTILS.resolveFile(context.getBuildFileParent(), path); + context.getProject().log( + "Warning: '" + systemId + "' in " + context.getBuildFile() + + " should be expressed simply as '" + path.replace('\\', '/') + + "' for compliance with other XML tools", Project.MSG_WARN); + } + context.getProject().log("file=" + file, Project.MSG_DEBUG); + try { + InputSource inputSource = new InputSource(new FileInputStream(file)); + inputSource.setSystemId(FILE_UTILS.toURI(file.getAbsolutePath())); + return inputSource; + } catch (FileNotFoundException fne) { + context.getProject().log(file.getAbsolutePath() + " could not be found", + Project.MSG_WARN); + } + + } + // use default if not file or file not found + context.getProject().log("could not resolve systemId", Project.MSG_DEBUG); + return null; + } + + /** + * Handles the start of a project element. A project handler is created + * and initialised with the element name and attributes. + * + * @param uri The namespace uri for this element. + * @param tag The name of the element being started. + * Will not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception org.xml.sax.SAXParseException if the tag given is not + * "project" + */ + public void startElement(String uri, String tag, String qname, Attributes attrs) + throws SAXParseException { + AntHandler next = currentHandler.onStartChild(uri, tag, qname, attrs, context); + antHandlers.push(currentHandler); + currentHandler = next; + currentHandler.onStartElement(uri, tag, qname, attrs, context); + } + + /** + * Sets the locator in the project helper for future reference. + * + * @param locator The locator used by the parser. + * Will not be null. + */ + public void setDocumentLocator(Locator locator) { + context.setLocator(locator); + } + + /** + * Handles the end of an element. Any required clean-up is performed + * by the onEndElement() method and then the original handler is restored to the parser. + * + * @param uri The namespace URI for this element. + * @param name The name of the element which is ending. + * Will not be null. + * @param qName The qualified name for this element. + * + * @exception SAXException in case of error (not thrown in this implementation) + */ + public void endElement(String uri, String name, String qName) throws SAXException { + currentHandler.onEndElement(uri, name, context); + AntHandler prev = (AntHandler) antHandlers.pop(); + currentHandler = prev; + if (currentHandler != null) { + currentHandler.onEndChild(uri, name, qName, context); + } + } + + /** + * Handle text within an element, calls currentHandler.characters. + * + * @param buf A character array of the test. + * @param start The start offset in the array. + * @param count The number of characters to read. + * @exception SAXParseException if an error occurs + */ + public void characters(char[] buf, int start, int count) throws SAXParseException { + currentHandler.characters(buf, start, count, context); + } + + /** + * Start a namespace prefix to uri mapping + * + * @param prefix the namespace prefix + * @param uri the namespace uri + */ + public void startPrefixMapping(String prefix, String uri) { + context.startPrefixMapping(prefix, uri); + } + + /** + * End a namespace prefix to uri mapping + * + * @param prefix the prefix that is not mapped anymore + */ + public void endPrefixMapping(String prefix) { + context.endPrefixMapping(prefix); + } + } + + /** + * The main handler - it handles the <project> tag. + * + * @see org.apache.tools.ant.helper.ProjectHelper2.AntHandler + */ + public static class MainHandler extends AntHandler { + + /** + * Handle the project tag + * + * @param uri The namespace uri. + * @param name The element tag. + * @param qname The element qualified name. + * @param attrs The attributes of the element. + * @param context The current context. + * @return The project handler that handles subelements of project + * @exception SAXParseException if the qualified name is not "project". + */ + public AntHandler onStartChild(String uri, String name, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + if (name.equals("project") + && (uri.equals("") || uri.equals(ANT_CORE_URI))) { + return ProjectHelper2.projectHandler; + } + if (name.equals(qname)) { + throw new SAXParseException("Unexpected element \"{" + uri + + "}" + name + "\" {" + ANT_CORE_URI + "}" + name, context.getLocator()); + } + throw new SAXParseException("Unexpected element \"" + qname + + "\" " + name, context.getLocator()); + } + } + + /** + * Handler for the top level "project" element. + */ + public static class ProjectHandler extends AntHandler { + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. The attributes which + * this handler can deal with are: "default", + * "name", "id" and "basedir". + * + * @param uri The namespace URI for this element. + * @param tag Name of the element which caused this handler + * to be created. Should not be null. + * Ignored in this implementation. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * @param context The current context. + * + * @exception SAXParseException if an unexpected attribute is + * encountered or if the "default" attribute + * is missing. + */ + public void onStartElement(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + String baseDir = null; + boolean nameAttributeSet = false; + + Project project = context.getProject(); + // Set the location of the implicit target associated with the project tag + context.getImplicitTarget().setLocation(new Location(context.getLocator())); + + /** TODO I really don't like this - the XML processor is still + * too 'involved' in the processing. A better solution (IMO) + * would be to create UE for Project and Target too, and + * then process the tree and have Project/Target deal with + * its attributes ( similar with Description ). + * + * If we eventually switch to ( or add support for ) DOM, + * things will work smoothly - UE can be avoided almost completely + * ( it could still be created on demand, for backward compatibility ) + */ + + for (int i = 0; i < attrs.getLength(); i++) { + String attrUri = attrs.getURI(i); + if (attrUri != null && !attrUri.equals("") && !attrUri.equals(uri)) { + continue; // Ignore attributes from unknown uris + } + String key = attrs.getLocalName(i); + String value = attrs.getValue(i); + + if (key.equals("default")) { + if (value != null && !value.equals("")) { + if (!context.isIgnoringProjectTag()) { + project.setDefault(value); + } + } + } else if (key.equals("name")) { + if (value != null) { + context.setCurrentProjectName(value); + nameAttributeSet = true; + if (!context.isIgnoringProjectTag()) { + project.setName(value); + project.addReference(value, project); + } else if (isInIncludeMode()) { + if (!"".equals(value) && getCurrentTargetPrefix()!= null && getCurrentTargetPrefix().endsWith(ProjectHelper.USE_PROJECT_NAME_AS_TARGET_PREFIX)) { + String newTargetPrefix = getCurrentTargetPrefix().replace(ProjectHelper.USE_PROJECT_NAME_AS_TARGET_PREFIX, value); + // help nested include tasks + setCurrentTargetPrefix(newTargetPrefix); + } + } + } + } else if (key.equals("id")) { + if (value != null) { + // What's the difference between id and name ? + if (!context.isIgnoringProjectTag()) { + project.addReference(value, project); + } + } + } else if (key.equals("basedir")) { + if (!context.isIgnoringProjectTag()) { + baseDir = value; + } + } else { + // TODO ignore attributes in a different NS ( maybe store them ? ) + throw new SAXParseException("Unexpected attribute \"" + attrs.getQName(i) + + "\"", context.getLocator()); + } + } + + // TODO Move to Project ( so it is shared by all helpers ) + String antFileProp = + MagicNames.ANT_FILE + "." + context.getCurrentProjectName(); + String dup = project.getProperty(antFileProp); + String typeProp = + MagicNames.ANT_FILE_TYPE + "." + context.getCurrentProjectName(); + String dupType = project.getProperty(typeProp); + if (dup != null && nameAttributeSet) { + Object dupFile = null; + Object contextFile = null; + if (MagicNames.ANT_FILE_TYPE_URL.equals(dupType)) { + try { + dupFile = new URL(dup); + } catch (java.net.MalformedURLException mue) { + throw new BuildException("failed to parse " + + dup + " as URL while looking" + + " at a duplicate project" + + " name.", mue); + } + contextFile = context.getBuildFileURL(); + } else { + dupFile = new File(dup); + contextFile = context.getBuildFile(); + } + + if (context.isIgnoringProjectTag() && !dupFile.equals(contextFile)) { + project.log("Duplicated project name in import. Project " + + context.getCurrentProjectName() + " defined first in " + dup + + " and again in " + contextFile, Project.MSG_WARN); + } + } + if (nameAttributeSet) { + if (context.getBuildFile() != null) { + project.setUserProperty(antFileProp, + context.getBuildFile().toString()); + project.setUserProperty(typeProp, + MagicNames.ANT_FILE_TYPE_FILE); + } else if (context.getBuildFileURL() != null) { + project.setUserProperty(antFileProp, + context.getBuildFileURL().toString()); + project.setUserProperty(typeProp, + MagicNames.ANT_FILE_TYPE_URL); + } + } + if (context.isIgnoringProjectTag()) { + // no further processing + return; + } + // set explicitly before starting ? + if (project.getProperty("basedir") != null) { + project.setBasedir(project.getProperty("basedir")); + } else { + // Default for baseDir is the location of the build file. + if (baseDir == null) { + project.setBasedir(context.getBuildFileParent().getAbsolutePath()); + } else { + // check whether the user has specified an absolute path + if ((new File(baseDir)).isAbsolute()) { + project.setBasedir(baseDir); + } else { + project.setBaseDir(FILE_UTILS.resolveFile(context.getBuildFileParent(), + baseDir)); + } + } + } + project.addTarget("", context.getImplicitTarget()); + context.setCurrentTarget(context.getImplicitTarget()); + } + + /** + * Handles the start of a top-level element within the project. An + * appropriate handler is created and initialised with the details + * of the element. + * + * @param uri The namespace URI for this element. + * @param name The name of the element being started. + * Will not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element being started. + * Will not be null. + * @param context The context for this element. + * @return a target or an element handler. + * + * @exception org.xml.sax.SAXParseException if the tag given is not + * "taskdef", "typedef", + * "property", "target", + * "extension-point" + * or a data type definition + */ + public AntHandler onStartChild(String uri, String name, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + return (name.equals("target") || name.equals("extension-point")) + && (uri.equals("") || uri.equals(ANT_CORE_URI)) + ? ProjectHelper2.targetHandler : ProjectHelper2.elementHandler; + } + } + + /** + * Handler for "target" and "extension-point" elements. + */ + public static class TargetHandler extends AntHandler { + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. The attributes which + * this handler can deal with are: "name", + * "depends", "if", + * "unless", "id" and + * "description". + * + * @param uri The namespace URI for this element. + * @param tag Name of the element which caused this handler + * to be created. Should not be null. + * Ignored in this implementation. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * @param context The current context. + * + * @exception SAXParseException if an unexpected attribute is encountered + * or if the "name" attribute is missing. + */ + public void onStartElement(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + String name = null; + String depends = ""; + String extensionPoint = null; + OnMissingExtensionPoint extensionPointMissing = null; + + Project project = context.getProject(); + Target target = "target".equals(tag) + ? new Target() : new ExtensionPoint(); + target.setProject(project); + target.setLocation(new Location(context.getLocator())); + context.addTarget(target); + + for (int i = 0; i < attrs.getLength(); i++) { + String attrUri = attrs.getURI(i); + if (attrUri != null && !attrUri.equals("") && !attrUri.equals(uri)) { + continue; // Ignore attributes from unknown uris + } + String key = attrs.getLocalName(i); + String value = attrs.getValue(i); + + if (key.equals("name")) { + name = value; + if ("".equals(name)) { + throw new BuildException("name attribute must " + "not be empty"); + } + } else if (key.equals("depends")) { + depends = value; + } else if (key.equals("if")) { + target.setIf(value); + } else if (key.equals("unless")) { + target.setUnless(value); + } else if (key.equals("id")) { + if (value != null && !value.equals("")) { + context.getProject().addReference(value, target); + } + } else if (key.equals("description")) { + target.setDescription(value); + } else if (key.equals("extensionOf")) { + extensionPoint = value; + } else if (key.equals("onMissingExtensionPoint")) { + try { + extensionPointMissing = OnMissingExtensionPoint.valueOf(value); + } catch (IllegalArgumentException e) { + throw new BuildException("Invalid onMissingExtensionPoint " + value); + } + } else { + throw new SAXParseException("Unexpected attribute \"" + key + "\"", context + .getLocator()); + } + } + + if (name == null) { + throw new SAXParseException("target element appears without a name attribute", + context.getLocator()); + } + + String prefix = null; + boolean isInIncludeMode = + context.isIgnoringProjectTag() && isInIncludeMode(); + String sep = getCurrentPrefixSeparator(); + + if (isInIncludeMode) { + prefix = getTargetPrefix(context); + if (prefix == null) { + throw new BuildException("can't include build file " + + context.getBuildFileURL() + + ", no as attribute has been given" + + " and the project tag doesn't" + + " specify a name attribute"); + } + name = prefix + sep + name; + } + + // Check if this target is in the current build file + if (context.getCurrentTargets().get(name) != null) { + throw new BuildException("Duplicate target '" + name + "'", + target.getLocation()); + } + Hashtable projectTargets = project.getTargets(); + boolean usedTarget = false; + // If the name has not already been defined define it + if (projectTargets.containsKey(name)) { + project.log("Already defined in main or a previous import, ignore " + name, + Project.MSG_VERBOSE); + } else { + target.setName(name); + context.getCurrentTargets().put(name, target); + project.addOrReplaceTarget(name, target); + usedTarget = true; + } + + if (depends.length() > 0) { + if (!isInIncludeMode) { + target.setDepends(depends); + } else { + for (String string : Target.parseDepends(depends, name, "depends")) { + target.addDependency(prefix + sep + string); + } + } + } + if (!isInIncludeMode && context.isIgnoringProjectTag() + && (prefix = getTargetPrefix(context)) != null) { + // In an imported file (and not completely + // ignoring the project tag or having a preconfigured prefix) + String newName = prefix + sep + name; + Target newTarget = target; + if (usedTarget) { + newTarget = "target".equals(tag) + ? new Target(target) : new ExtensionPoint(target); + } + newTarget.setName(newName); + context.getCurrentTargets().put(newName, newTarget); + project.addOrReplaceTarget(newName, newTarget); + } + if (extensionPointMissing != null && extensionPoint == null) { + throw new BuildException("onMissingExtensionPoint attribute cannot " + + "be specified unless extensionOf is specified", + target.getLocation()); + + } + if (extensionPoint != null) { + ProjectHelper helper = + (ProjectHelper) context.getProject(). + getReference(ProjectHelper.PROJECTHELPER_REFERENCE); + for (String extPointName : Target.parseDepends(extensionPoint, name, "extensionOf")) { + if (extensionPointMissing == null) { + extensionPointMissing = OnMissingExtensionPoint.FAIL; + } + // defer extensionpoint resolution until the full + // import stack has been processed + if (isInIncludeMode()) { + // if in include mode, provide prefix we're including by + // so that we can try and resolve extension point from + // the local file first + helper.getExtensionStack().add( + new String[] {extPointName, target.getName(), + extensionPointMissing.name(), prefix + sep}); + } else { + helper.getExtensionStack().add( + new String[] {extPointName, target.getName(), + extensionPointMissing.name()}); + } + } + } + } + + private String getTargetPrefix(AntXMLContext context) { + String configuredValue = getCurrentTargetPrefix(); + if (configuredValue != null && configuredValue.length() == 0) { + configuredValue = null; + } + if (configuredValue != null) { + return configuredValue; + } + + String projectName = context.getCurrentProjectName(); + if ("".equals(projectName)) { + projectName = null; + } + + return projectName; + } + + /** + * Handles the start of an element within a target. + * + * @param uri The namespace URI for this element. + * @param name The name of the element being started. + * Will not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element being started. + * Will not be null. + * @param context The current context. + * @return an element handler. + * + * @exception SAXParseException if an error occurs when initialising + * the appropriate child handler + */ + public AntHandler onStartChild(String uri, String name, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + return ProjectHelper2.elementHandler; + } + + /** + * Handle the end of the project, sets the current target of the + * context to be the implicit target. + * + * @param uri The namespace URI of the element. + * @param tag The name of the element. + * @param context The current context. + */ + public void onEndElement(String uri, String tag, AntXMLContext context) { + context.setCurrentTarget(context.getImplicitTarget()); + } + } + + /** + * Handler for all project elements ( tasks, data types ) + */ + public static class ElementHandler extends AntHandler { + + /** + * Constructor. + */ + public ElementHandler() { + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. This configures + * the element with its attributes and sets it up with + * its parent container (if any). Nested elements are then + * added later as the parser encounters them. + * + * @param uri The namespace URI for this element. + * @param tag Name of the element which caused this handler + * to be created. Must not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * @param context The current context. + * + * @exception SAXParseException in case of error (not thrown in + * this implementation) + */ + public void onStartElement(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + RuntimeConfigurable parentWrapper = context.currentWrapper(); + Object parent = null; + + if (parentWrapper != null) { + parent = parentWrapper.getProxy(); + } + + /* UnknownElement is used for tasks and data types - with + delayed eval */ + UnknownElement task = new UnknownElement(tag); + task.setProject(context.getProject()); + task.setNamespace(uri); + task.setQName(qname); + task.setTaskType(ProjectHelper.genComponentName(task.getNamespace(), tag)); + task.setTaskName(qname); + + Location location = new Location(context.getLocator().getSystemId(), context + .getLocator().getLineNumber(), context.getLocator().getColumnNumber()); + task.setLocation(location); + task.setOwningTarget(context.getCurrentTarget()); + + if (parent != null) { + // Nested element + ((UnknownElement) parent).addChild(task); + } else { + // Task included in a target ( including the default one ). + context.getCurrentTarget().addTask(task); + } + + context.configureId(task, attrs); + + // container.addTask(task); + // This is a nop in UE: task.init(); + + RuntimeConfigurable wrapper = new RuntimeConfigurable(task, task.getTaskName()); + + for (int i = 0; i < attrs.getLength(); i++) { + String name = attrs.getLocalName(i); + String attrUri = attrs.getURI(i); + if (attrUri != null && !attrUri.equals("") && !attrUri.equals(uri)) { + name = attrUri + ":" + attrs.getQName(i); + } + String value = attrs.getValue(i); + // PR: Hack for ant-type value + // an ant-type is a component name which can + // be namespaced, need to extract the name + // and convert from qualified name to uri/name + if (ANT_TYPE.equals(name) + || (ANT_CORE_URI.equals(attrUri) + && ANT_TYPE.equals(attrs.getLocalName(i)))) { + name = ANT_TYPE; + int index = value.indexOf(":"); + if (index >= 0) { + String prefix = value.substring(0, index); + String mappedUri = context.getPrefixMapping(prefix); + if (mappedUri == null) { + throw new BuildException("Unable to find XML NS prefix \"" + prefix + + "\""); + } + value = ProjectHelper.genComponentName(mappedUri, value + .substring(index + 1)); + } + } + wrapper.setAttribute(name, value); + } + if (parentWrapper != null) { + parentWrapper.addChild(wrapper); + } + context.pushWrapper(wrapper); + } + + /** + * Adds text to the task, using the wrapper + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * @param context The current context. + * + * @exception SAXParseException if the element doesn't support text + * + * @see ProjectHelper#addText(Project,java.lang.Object,char[],int,int) + */ + public void characters(char[] buf, int start, int count, + AntXMLContext context) throws SAXParseException { + RuntimeConfigurable wrapper = context.currentWrapper(); + wrapper.addText(buf, start, count); + } + + /** + * Handles the start of an element within a target. Task containers + * will always use another task handler, and all other tasks + * will always use a nested element handler. + * + * @param uri The namespace URI for this element. + * @param tag The name of the element being started. + * Will not be null. + * @param qname The qualified name for this element. + * @param attrs Attributes of the element being started. + * Will not be null. + * @param context The current context. + * @return The handler for elements. + * + * @exception SAXParseException if an error occurs when initialising + * the appropriate child handler + */ + public AntHandler onStartChild(String uri, String tag, String qname, Attributes attrs, + AntXMLContext context) throws SAXParseException { + return ProjectHelper2.elementHandler; + } + + /** + * Handles the end of the element. This pops the wrapper from + * the context. + * + * @param uri The namespace URI for the element. + * @param tag The name of the element. + * @param context The current context. + */ + public void onEndElement(String uri, String tag, AntXMLContext context) { + context.popWrapper(); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java new file mode 100644 index 00000000..f828d292 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java @@ -0,0 +1,1026 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.helper; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Locale; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.IntrospectionHelper; +import org.apache.tools.ant.Location; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.RuntimeConfigurable; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.TaskContainer; +import org.apache.tools.ant.TypeAdapter; +import org.apache.tools.ant.UnknownElement; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.JAXPUtils; +import org.xml.sax.AttributeList; +import org.xml.sax.DocumentHandler; +import org.xml.sax.HandlerBase; +import org.xml.sax.InputSource; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.helpers.XMLReaderAdapter; + +/** + * Original helper. + * + */ +public class ProjectHelperImpl extends ProjectHelper { + + /** + * helper for path -> URI and URI -> path conversions. + */ + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** + * SAX 1 style parser used to parse the given file. This may + * in fact be a SAX 2 XMLReader wrapped in an XMLReaderAdapter. + */ + private org.xml.sax.Parser parser; + + /** The project to configure. */ + private Project project; + + /** The configuration file to parse. */ + private File buildFile; + + /** + * Parent directory of the build file. Used for resolving entities + * and setting the project's base directory. + */ + private File buildFileParent; + + /** + * Locator for the configuration file parser. + * Used for giving locations of errors etc. + */ + private Locator locator; + + /** + * Target that all other targets will depend upon implicitly. + * + *

    This holds all tasks and data type definitions that have + * been placed outside of targets.

    + */ + private Target implicitTarget = new Target(); + + /** + * default constructor + */ + public ProjectHelperImpl() { + implicitTarget.setName(""); + } + + /** + * Parses the project file, configuring the project as it goes. + * + * @param project project instance to be configured. + * @param source the source from which the project is read. + * @exception BuildException if the configuration is invalid or cannot + * be read. + */ + public void parse(Project project, Object source) throws BuildException { + if (!(source instanceof File)) { + throw new BuildException("Only File source supported by " + + "default plugin"); + } + File bFile = (File) source; + FileInputStream inputStream = null; + InputSource inputSource = null; + + this.project = project; + this.buildFile = new File(bFile.getAbsolutePath()); + buildFileParent = new File(this.buildFile.getParent()); + + try { + try { + parser = JAXPUtils.getParser(); + } catch (BuildException e) { + parser = new XMLReaderAdapter(JAXPUtils.getXMLReader()); + } + String uri = FILE_UTILS.toURI(bFile.getAbsolutePath()); + inputStream = new FileInputStream(bFile); + inputSource = new InputSource(inputStream); + inputSource.setSystemId(uri); + project.log("parsing buildfile " + bFile + " with URI = " + uri, Project.MSG_VERBOSE); + HandlerBase hb = new RootHandler(this); + parser.setDocumentHandler(hb); + parser.setEntityResolver(hb); + parser.setErrorHandler(hb); + parser.setDTDHandler(hb); + parser.parse(inputSource); + } catch (SAXParseException exc) { + Location location = new Location(exc.getSystemId(), exc.getLineNumber(), exc + .getColumnNumber()); + + Throwable t = exc.getException(); + if (t instanceof BuildException) { + BuildException be = (BuildException) t; + if (be.getLocation() == Location.UNKNOWN_LOCATION) { + be.setLocation(location); + } + throw be; + } + throw new BuildException(exc.getMessage(), t, location); + } catch (SAXException exc) { + Throwable t = exc.getException(); + if (t instanceof BuildException) { + throw (BuildException) t; + } + throw new BuildException(exc.getMessage(), t); + } catch (FileNotFoundException exc) { + throw new BuildException(exc); + } catch (UnsupportedEncodingException exc) { + throw new BuildException("Encoding of project file is invalid.", exc); + } catch (IOException exc) { + throw new BuildException("Error reading project file: " + exc.getMessage(), exc); + } finally { + FileUtils.close(inputStream); + } + } + + /** + * The common superclass for all SAX event handlers used to parse + * the configuration file. Each method just throws an exception, + * so subclasses should override what they can handle. + * + * Each type of XML element (task, target, etc.) in Ant has + * a specific subclass. + * + * In the constructor, this class takes over the handling of SAX + * events from the parent handler and returns + * control back to the parent in the endElement method. + */ + static class AbstractHandler extends HandlerBase { + // CheckStyle:VisibilityModifier OFF - bc + + /** + * Previous handler for the document. + * When the next element is finished, control returns + * to this handler. + */ + protected DocumentHandler parentHandler; + + /** Helper impl. With non-static internal classes, the compiler will generate + this automatically - but this will fail with some compilers ( reporting + "Expecting to find object/array on stack" ). If we pass it + explicitly it'll work with more compilers. + */ + ProjectHelperImpl helperImpl; + // CheckStyle:VisibilityModifier ON + + /** + * Creates a handler and sets the parser to use it + * for the current element. + * + * @param helperImpl the ProjectHelperImpl instance associated + * with this handler. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + */ + public AbstractHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) { + this.parentHandler = parentHandler; + this.helperImpl = helperImpl; + + // Start handling SAX events + helperImpl.parser.setDocumentHandler(this); + } + + /** + * Handles the start of an element. This base implementation just + * throws an exception. + * + * @param tag The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if this method is not overridden, or in + * case of error in an overridden version + */ + public void startElement(String tag, AttributeList attrs) throws SAXParseException { + throw new SAXParseException("Unexpected element \"" + tag + "\"", helperImpl.locator); + } + + /** + * Handles text within an element. This base implementation just + * throws an exception. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * + * @exception SAXParseException if this method is not overridden, or in + * case of error in an overridden version + */ + public void characters(char[] buf, int start, int count) throws SAXParseException { + String s = new String(buf, start, count).trim(); + + if (s.length() > 0) { + throw new SAXParseException("Unexpected text \"" + s + "\"", helperImpl.locator); + } + } + + /** + * Handles the end of an element. Any required clean-up is performed + * by the finished() method and then the original handler is restored to + * the parser. + * + * @param name The name of the element which is ending. + * Will not be null. + * + * @exception SAXException in case of error (not thrown in + * this implementation) + */ + public void endElement(String name) throws SAXException { + // Let parent resume handling SAX events + helperImpl.parser.setDocumentHandler(parentHandler); + } + } + + /** + * Handler for the root element. Its only child must be the "project" element. + */ + static class RootHandler extends HandlerBase { + // CheckStyle:VisibilityModifier OFF - bc + ProjectHelperImpl helperImpl; + // CheckStyle:VisibilityModifier ON + + public RootHandler(ProjectHelperImpl helperImpl) { + this.helperImpl = helperImpl; + } + + /** + * Resolves file: URIs relative to the build file. + * + * @param publicId The public identifier, or null + * if none is available. Ignored in this + * implementation. + * @param systemId The system identifier provided in the XML + * document. Will not be null. + */ + public InputSource resolveEntity(String publicId, String systemId) { + + helperImpl.project.log("resolving systemId: " + systemId, Project.MSG_VERBOSE); + + if (systemId.startsWith("file:")) { + String path = FILE_UTILS.fromURI(systemId); + + File file = new File(path); + if (!file.isAbsolute()) { + file = FILE_UTILS.resolveFile(helperImpl.buildFileParent, path); + helperImpl.project.log("Warning: '" + systemId + "' in " + helperImpl.buildFile + + " should be expressed simply as '" + path.replace('\\', '/') + + "' for compliance with other XML tools", Project.MSG_WARN); + } + try { + InputSource inputSource = new InputSource(new FileInputStream(file)); + inputSource.setSystemId(FILE_UTILS.toURI(file.getAbsolutePath())); + return inputSource; + } catch (FileNotFoundException fne) { + helperImpl.project.log(file.getAbsolutePath() + " could not be found", + Project.MSG_WARN); + } + } + // use default if not file or file not found + return null; + } + + /** + * Handles the start of a project element. A project handler is created + * and initialised with the element name and attributes. + * + * @param tag The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if the tag given is not + * "project" + */ + public void startElement(String tag, AttributeList attrs) throws SAXParseException { + if (tag.equals("project")) { + new ProjectHandler(helperImpl, this).init(tag, attrs); + } else { + throw new SAXParseException("Config file is not of expected " + "XML type", + helperImpl.locator); + } + } + + /** + * Sets the locator in the project helper for future reference. + * + * @param locator The locator used by the parser. + * Will not be null. + */ + public void setDocumentLocator(Locator locator) { + helperImpl.locator = locator; + } + } + + /** + * Handler for the top level "project" element. + */ + static class ProjectHandler extends AbstractHandler { + + /** + * Constructor which just delegates to the superconstructor. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + */ + public ProjectHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) { + super(helperImpl, parentHandler); + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. The attributes which + * this handler can deal with are: "default", + * "name", "id" and "basedir". + * + * @param tag Name of the element which caused this handler + * to be created. Should not be null. + * Ignored in this implementation. + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * + * @exception SAXParseException if an unexpected attribute is + * encountered or if the "default" attribute + * is missing. + */ + public void init(String tag, AttributeList attrs) throws SAXParseException { + String def = null; + String name = null; + String id = null; + String baseDir = null; + + for (int i = 0; i < attrs.getLength(); i++) { + String key = attrs.getName(i); + String value = attrs.getValue(i); + + if (key.equals("default")) { + def = value; + } else if (key.equals("name")) { + name = value; + } else if (key.equals("id")) { + id = value; + } else if (key.equals("basedir")) { + baseDir = value; + } else { + throw new SAXParseException( + "Unexpected attribute \"" + attrs.getName(i) + + "\"", helperImpl.locator); + } + } + + if (def != null && !def.equals("")) { + helperImpl.project.setDefault(def); + } else { + throw new BuildException("The default attribute is required"); + } + + if (name != null) { + helperImpl.project.setName(name); + helperImpl.project.addReference(name, helperImpl.project); + } + + if (id != null) { + helperImpl.project.addReference(id, helperImpl.project); + } + + if (helperImpl.project.getProperty("basedir") != null) { + helperImpl.project.setBasedir(helperImpl.project.getProperty("basedir")); + } else { + if (baseDir == null) { + helperImpl.project.setBasedir(helperImpl.buildFileParent.getAbsolutePath()); + } else { + // check whether the user has specified an absolute path + if ((new File(baseDir)).isAbsolute()) { + helperImpl.project.setBasedir(baseDir); + } else { + File resolvedBaseDir = FILE_UTILS.resolveFile(helperImpl.buildFileParent, + baseDir); + helperImpl.project.setBaseDir(resolvedBaseDir); + } + } + } + + helperImpl.project.addTarget("", helperImpl.implicitTarget); + } + + /** + * Handles the start of a top-level element within the project. An + * appropriate handler is created and initialised with the details + * of the element. + * + * @param name The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if the tag given is not + * "taskdef", "typedef", + * "property", "target" + * or a data type definition + */ + public void startElement(String name, AttributeList attrs) throws SAXParseException { + if (name.equals("target")) { + handleTarget(name, attrs); + } else { + handleElement(helperImpl, this, helperImpl.implicitTarget, name, attrs); + } + } + + /** + * Handles a target definition element by creating a target handler + * and initialising is with the details of the element. + * + * @param tag The name of the element to be handled. + * Will not be null. + * @param attrs Attributes of the element to be handled. + * Will not be null. + * + * @exception SAXParseException if an error occurs initialising + * the handler + */ + private void handleTarget(String tag, AttributeList attrs) throws SAXParseException { + new TargetHandler(helperImpl, this).init(tag, attrs); + } + } + + /** + * Handler for "target" elements. + */ + static class TargetHandler extends AbstractHandler { + private Target target; + + /** + * Constructor which just delegates to the superconstructor. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + */ + public TargetHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler) { + super(helperImpl, parentHandler); + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. The attributes which + * this handler can deal with are: "name", + * "depends", "if", + * "unless", "id" and + * "description". + * + * @param tag Name of the element which caused this handler + * to be created. Should not be null. + * Ignored in this implementation. + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * + * @exception SAXParseException if an unexpected attribute is encountered + * or if the "name" attribute is missing. + */ + public void init(String tag, AttributeList attrs) throws SAXParseException { + String name = null; + String depends = ""; + String ifCond = null; + String unlessCond = null; + String id = null; + String description = null; + + for (int i = 0; i < attrs.getLength(); i++) { + String key = attrs.getName(i); + String value = attrs.getValue(i); + + if (key.equals("name")) { + name = value; + if (name.equals("")) { + throw new BuildException("name attribute must not" + " be empty", + new Location(helperImpl.locator)); + } + } else if (key.equals("depends")) { + depends = value; + } else if (key.equals("if")) { + ifCond = value; + } else if (key.equals("unless")) { + unlessCond = value; + } else if (key.equals("id")) { + id = value; + } else if (key.equals("description")) { + description = value; + } else { + throw new SAXParseException("Unexpected attribute \"" + key + "\"", + helperImpl.locator); + } + } + + if (name == null) { + throw new SAXParseException("target element appears without a name attribute", + helperImpl.locator); + } + + target = new Target(); + + // implicit target must be first on dependency list + target.addDependency(""); + + target.setName(name); + target.setIf(ifCond); + target.setUnless(unlessCond); + target.setDescription(description); + helperImpl.project.addTarget(name, target); + + if (id != null && !id.equals("")) { + helperImpl.project.addReference(id, target); + } + + // take care of dependencies + + if (depends.length() > 0) { + target.setDepends(depends); + } + } + + /** + * Handles the start of an element within a target. + * + * @param name The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if an error occurs when initialising + * the appropriate child handler + */ + public void startElement(String name, AttributeList attrs) throws SAXParseException { + handleElement(helperImpl, this, target, name, attrs); + } + } + + /** + * Start a new DataTypeHandler if element is known to be a + * data-type and a TaskHandler otherwise. + * + *

    Factored out of TargetHandler.

    + * + * @since Ant 1.6 + */ + private static void handleElement(ProjectHelperImpl helperImpl, DocumentHandler parent, + Target target, String elementName, AttributeList attrs) throws SAXParseException { + if (elementName.equals("description")) { + new DescriptionHandler(helperImpl, parent); + } else if (helperImpl.project.getDataTypeDefinitions().get(elementName) != null) { + new DataTypeHandler(helperImpl, parent, target).init(elementName, attrs); + } else { + new TaskHandler(helperImpl, parent, target, null, target).init(elementName, attrs); + } + } + + /** + * Handler for "description" elements. + */ + static class DescriptionHandler extends AbstractHandler { + + /** + * Constructor which just delegates to the superconstructor. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + */ + public DescriptionHandler(ProjectHelperImpl helperImpl, + DocumentHandler parentHandler) { + super(helperImpl, parentHandler); + } + + /** + * Adds the text as description to the project. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + */ + public void characters(char[] buf, int start, int count) { + String text = new String(buf, start, count); + String currentDescription = helperImpl.project.getDescription(); + if (currentDescription == null) { + helperImpl.project.setDescription(text); + } else { + helperImpl.project.setDescription(currentDescription + text); + } + } + + } + + /** + * Handler for all task elements. + */ + static class TaskHandler extends AbstractHandler { + /** Containing target, if any. */ + private Target target; + + /** + * Container for the task, if any. If target is + * non-null, this must be too. + */ + private TaskContainer container; + + /** + * Task created by this handler. + */ + private Task task; + + /** + * Wrapper for the parent element, if any. The wrapper for this + * element will be added to this wrapper as a child. + */ + private RuntimeConfigurable parentWrapper; + + /** + * Wrapper for this element which takes care of actually configuring + * the element, if this element is contained within a target. + * Otherwise the configuration is performed with the configure method. + * @see ProjectHelper#configure(Object,AttributeList,Project) + */ + private RuntimeConfigurable wrapper = null; + + /** + * Constructor. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + * + * @param container Container for the element. + * Must not be null. + * + * @param parentWrapper Wrapper for the parent element, if any. + * May be null. + * + * @param target Target this element is part of. + * Must not be null. + */ + public TaskHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler, + TaskContainer container, + RuntimeConfigurable parentWrapper, Target target) { + super(helperImpl, parentHandler); + this.container = container; + this.parentWrapper = parentWrapper; + this.target = target; + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. This configures + * the element with its attributes and sets it up with + * its parent container (if any). Nested elements are then + * added later as the parser encounters them. + * + * @param tag Name of the element which caused this handler + * to be created. Must not be null. + * + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * + * @exception SAXParseException in case of error (not thrown in + * this implementation) + */ + public void init(String tag, AttributeList attrs) throws SAXParseException { + try { + task = helperImpl.project.createTask(tag); + } catch (BuildException e) { + // swallow here, will be thrown again in + // UnknownElement.maybeConfigure if the problem persists. + } + if (task == null) { + task = new UnknownElement(tag); + task.setProject(helperImpl.project); + //TODO task.setTaskType(tag); + task.setTaskName(tag); + } + task.setLocation(new Location(helperImpl.locator)); + helperImpl.configureId(task, attrs); + + task.setOwningTarget(target); + container.addTask(task); + task.init(); + wrapper = task.getRuntimeConfigurableWrapper(); + wrapper.setAttributes(attrs); + if (parentWrapper != null) { + parentWrapper.addChild(wrapper); + } + } + + /** + * Adds text to the task, using the wrapper. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + */ + public void characters(char[] buf, int start, int count) { + wrapper.addText(buf, start, count); + } + + /** + * Handles the start of an element within a target. Task containers + * will always use another task handler, and all other tasks + * will always use a nested element handler. + * + * @param name The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if an error occurs when initialising + * the appropriate child handler + */ + public void startElement(String name, AttributeList attrs) throws SAXParseException { + if (task instanceof TaskContainer) { + // task can contain other tasks - no other nested elements possible + new TaskHandler(helperImpl, this, (TaskContainer) task, wrapper, target).init(name, + attrs); + } else { + new NestedElementHandler(helperImpl, this, task, wrapper, target).init(name, attrs); + } + } + } + + /** + * Handler for all nested properties. + */ + static class NestedElementHandler extends AbstractHandler { + /** Parent object (task/data type/etc). */ + private Object parent; + + /** The nested element itself. */ + private Object child; + + /** + * Wrapper for the parent element, if any. The wrapper for this + * element will be added to this wrapper as a child. + */ + private RuntimeConfigurable parentWrapper; + + /** + * Wrapper for this element which takes care of actually configuring + * the element, if a parent wrapper is provided. + * Otherwise the configuration is performed with the configure method. + * @see ProjectHelper#configure(Object,AttributeList,Project) + */ + private RuntimeConfigurable childWrapper = null; + + /** Target this element is part of, if any. */ + private Target target; + + /** + * Constructor. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + * + * @param parent Parent of this element (task/data type/etc). + * Must not be null. + * + * @param parentWrapper Wrapper for the parent element, if any. + * Must not be null. + * + * @param target Target this element is part of. + * Must not be null. + */ + public NestedElementHandler(ProjectHelperImpl helperImpl, + DocumentHandler parentHandler, + Object parent, + RuntimeConfigurable parentWrapper, + Target target) { + super(helperImpl, parentHandler); + + if (parent instanceof TypeAdapter) { + this.parent = ((TypeAdapter) parent).getProxy(); + } else { + this.parent = parent; + } + this.parentWrapper = parentWrapper; + this.target = target; + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. This configures + * the element with its attributes and sets it up with + * its parent container (if any). Nested elements are then + * added later as the parser encounters them. + * + * @param propType Name of the element which caused this handler + * to be created. Must not be null. + * + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * + * @exception SAXParseException in case of error, such as a + * BuildException being thrown during configuration. + */ + public void init(String propType, AttributeList attrs) throws SAXParseException { + Class parentClass = parent.getClass(); + IntrospectionHelper ih = IntrospectionHelper.getHelper(helperImpl.project, parentClass); + + try { + String elementName = propType.toLowerCase(Locale.ENGLISH); + if (parent instanceof UnknownElement) { + UnknownElement uc = new UnknownElement(elementName); + uc.setProject(helperImpl.project); + ((UnknownElement) parent).addChild(uc); + child = uc; + } else { + child = ih.createElement(helperImpl.project, parent, elementName); + } + helperImpl.configureId(child, attrs); + + childWrapper = new RuntimeConfigurable(child, propType); + childWrapper.setAttributes(attrs); + parentWrapper.addChild(childWrapper); + } catch (BuildException exc) { + throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc); + } + } + + /** + * Adds text to the element, using the wrapper. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + */ + public void characters(char[] buf, int start, int count) { + childWrapper.addText(buf, start, count); + } + + /** + * Handles the start of an element within this one. Task containers + * will always use a task handler, and all other elements + * will always use another nested element handler. + * + * @param name The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if an error occurs when initialising + * the appropriate child handler + */ + public void startElement(String name, AttributeList attrs) throws SAXParseException { + if (child instanceof TaskContainer) { + // taskcontainer nested element can contain other tasks - no other + // nested elements possible + new TaskHandler(helperImpl, this, (TaskContainer) child, childWrapper, target) + .init(name, attrs); + } else { + new NestedElementHandler(helperImpl, this, child, childWrapper, target).init(name, + attrs); + } + } + } + + /** + * Handler for all data types directly subordinate to project or target. + */ + static class DataTypeHandler extends AbstractHandler { + /** Parent target, if any. */ + private Target target; + + /** The element being configured. */ + private Object element; + + /** Wrapper for this element, if it's part of a target. */ + private RuntimeConfigurable wrapper = null; + + /** + * Constructor with a target specified. + * + * @param parentHandler The handler which should be restored to the + * parser at the end of the element. + * Must not be null. + * + * @param target The parent target of this element. + * Must not be null. + */ + public DataTypeHandler(ProjectHelperImpl helperImpl, DocumentHandler parentHandler, + Target target) { + super(helperImpl, parentHandler); + this.target = target; + } + + /** + * Initialisation routine called after handler creation + * with the element name and attributes. This configures + * the element with its attributes and sets it up with + * its parent container (if any). Nested elements are then + * added later as the parser encounters them. + * + * @param propType Name of the element which caused this handler + * to be created. Must not be null. + * + * @param attrs Attributes of the element which caused this + * handler to be created. Must not be null. + * + * @exception SAXParseException in case of error, such as a + * BuildException being thrown during configuration. + */ + public void init(String propType, AttributeList attrs) throws SAXParseException { + try { + element = helperImpl.project.createDataType(propType); + if (element == null) { + throw new BuildException("Unknown data type " + propType); + } + wrapper = new RuntimeConfigurable(element, propType); + wrapper.setAttributes(attrs); + target.addDataType(wrapper); + } catch (BuildException exc) { + throw new SAXParseException(exc.getMessage(), helperImpl.locator, exc); + } + } + + /** + * Adds text to the using the wrapper. + * + * @param buf A character array of the text within the element. + * Will not be null. + * @param start The start element in the array. + * @param count The number of characters to read from the array. + * + * @see ProjectHelper#addText(Project,Object,char[],int,int) + */ + public void characters(char[] buf, int start, int count) { + wrapper.addText(buf, start, count); + } + + /** + * Handles the start of an element within this one. + * This will always use a nested element handler. + * + * @param name The name of the element being started. + * Will not be null. + * @param attrs Attributes of the element being started. + * Will not be null. + * + * @exception SAXParseException if an error occurs when initialising + * the child handler + */ + public void startElement(String name, AttributeList attrs) throws SAXParseException { + new NestedElementHandler(helperImpl, this, element, wrapper, target).init(name, attrs); + } + } + + /** + * Scans an attribute list for the id attribute and + * stores a reference to the target object in the project if an + * id is found. + *

    + * This method was moved out of the configure method to allow + * it to be executed at parse time. + * + * @see #configure(Object,AttributeList,Project) + */ + private void configureId(Object target, AttributeList attr) { + String id = attr.getValue("id"); + if (id != null) { + project.addReference(id, target); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/SingleCheckExecutor.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/SingleCheckExecutor.java new file mode 100644 index 00000000..1960ed03 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/helper/SingleCheckExecutor.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.helper; + + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; + + +/** + * "Single-check" Target executor implementation. + * Differs from {@link DefaultExecutor} in that the dependencies for all + * targets are computed together, so that shared dependencies are run just once. + * @since Ant 1.6.3 + */ +public class SingleCheckExecutor implements Executor { + + /** {@inheritDoc}. */ + public void executeTargets(Project project, String[] targetNames) + throws BuildException { + project.executeSortedTargets( + project.topoSort(targetNames, project.getTargets(), false)); + } + + /** {@inheritDoc}. */ + public Executor getSubProjectExecutor() { + return this; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/DefaultInputHandler.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/DefaultInputHandler.java new file mode 100644 index 00000000..8268d5e7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/DefaultInputHandler.java @@ -0,0 +1,120 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.KeepAliveInputStream; + +/** + * Prompts on System.err, reads input from System.in + * + * @since Ant 1.5 + */ +public class DefaultInputHandler implements InputHandler { + + /** + * Empty no-arg constructor + */ + public DefaultInputHandler() { + } + + /** + * Prompts and requests input. May loop until a valid input has + * been entered. + * @param request the request to handle + * @throws BuildException if not possible to read from console + */ + public void handleInput(InputRequest request) throws BuildException { + String prompt = getPrompt(request); + BufferedReader r = null; + try { + r = new BufferedReader(new InputStreamReader(getInputStream())); + do { + System.err.println(prompt); + System.err.flush(); + try { + String input = r.readLine(); + request.setInput(input); + } catch (IOException e) { + throw new BuildException("Failed to read input from" + + " Console.", e); + } + } while (!request.isInputValid()); + } finally { + if (r != null) { + try { + r.close(); + } catch (IOException e) { + throw new BuildException("Failed to close input.", e); + } + } + } + } + + /** + * Constructs user prompt from a request. + * + *

    This implementation adds (choice1,choice2,choice3,...) to the + * prompt for MultipleChoiceInputRequests.

    + * + * @param request the request to construct the prompt for. + * Must not be null. + * @return the prompt to ask the user + */ + protected String getPrompt(InputRequest request) { + String prompt = request.getPrompt(); + String def = request.getDefaultValue(); + if (request instanceof MultipleChoiceInputRequest) { + StringBuilder sb = new StringBuilder(prompt).append(" ("); + boolean first = true; + for (String next : ((MultipleChoiceInputRequest) request).getChoices()) { + if (!first) { + sb.append(", "); + } + if (next.equals(def)) { + sb.append('['); + } + sb.append(next); + if (next.equals(def)) { + sb.append(']'); + } + first = false; + } + sb.append(")"); + return sb.toString(); + } else if (def != null) { + return prompt + " [" + def + "]"; + } else { + return prompt; + } + } + + /** + * Returns the input stream from which the user input should be read. + * @return the input stream from which the user input should be read. + */ + protected InputStream getInputStream() { + return KeepAliveInputStream.wrapSystemIn(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/GreedyInputHandler.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/GreedyInputHandler.java new file mode 100644 index 00000000..cb52f4f0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/GreedyInputHandler.java @@ -0,0 +1,80 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.taskdefs.StreamPumper; +import org.apache.tools.ant.util.FileUtils; + +/** + * Prompts on System.err, reads input from System.in until EOF + * + * @since Ant 1.7 + */ +public class GreedyInputHandler extends DefaultInputHandler { + + /** + * Empty no-arg constructor + */ + public GreedyInputHandler() { + } + + /** + * Prompts and requests input. + * @param request the request to handle + * @throws BuildException if not possible to read from console, + * or if input is invalid. + */ + public void handleInput(InputRequest request) throws BuildException { + String prompt = getPrompt(request); + InputStream in = null; + try { + in = getInputStream(); + System.err.println(prompt); + System.err.flush(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + StreamPumper p = new StreamPumper(in, baos); + Thread t = new Thread(p); + t.start(); + try { + t.join(); + } catch (InterruptedException e) { + try { + t.join(); + } catch (InterruptedException e2) { + // Ignore + } + } + request.setInput(new String(baos.toByteArray())); + if (!(request.isInputValid())) { + throw new BuildException( + "Received invalid console input"); + } + if (p.getException() != null) { + throw new BuildException( + "Failed to read input from console", p.getException()); + } + } finally { + FileUtils.close(in); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputHandler.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputHandler.java new file mode 100644 index 00000000..aea60fcc --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputHandler.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +/** + * Plugin to Ant to handle requests for user input. + * + * @since Ant 1.5 + */ +public interface InputHandler { + + /** + * Handle the request encapsulated in the argument. + * + *

    Precondition: the request.getPrompt will return a non-null + * value.

    + * + *

    Postcondition: request.getInput will return a non-null + * value, request.isInputValid will return true.

    + * @param request the request to be processed + * @throws org.apache.tools.ant.BuildException if the input cannot be read from the console + */ + void handleInput(InputRequest request) + throws org.apache.tools.ant.BuildException; +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputRequest.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputRequest.java new file mode 100644 index 00000000..57a77da2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/InputRequest.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +/** + * Encapsulates an input request. + * + * @since Ant 1.5 + */ +public class InputRequest { + private final String prompt; + private String input; + private String defaultValue; + + /** + * Construct an InputRequest. + * @param prompt The prompt to show to the user. Must not be null. + */ + public InputRequest(String prompt) { + if (prompt == null) { + throw new IllegalArgumentException("prompt must not be null"); + } + + this.prompt = prompt; + } + + /** + * Retrieves the prompt text. + * @return the prompt. + */ + public String getPrompt() { + return prompt; + } + + /** + * Sets the user provided input. + * @param input the string to be used for input. + */ + public void setInput(String input) { + this.input = input; + } + + /** + * Is the user input valid? + * @return true if it is. + */ + public boolean isInputValid() { + return true; + } + + /** + * Retrieves the user input. + * @return the user input. + */ + public String getInput() { + return input; + } + + /** + * Gets a configured default value. + * @return the default value. + * @since Ant 1.7.0 + */ + public String getDefaultValue() { + return defaultValue; + } + + /** + * Configures a default value. + * @param d the value to set. + * @since Ant 1.7.0 + */ + public void setDefaultValue(String d) { + defaultValue = d; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java new file mode 100644 index 00000000..4baab8f5 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/MultipleChoiceInputRequest.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +import java.util.LinkedHashSet; +import java.util.Vector; + +/** + * Encapsulates an input request. + * + * @since Ant 1.5 + */ +public class MultipleChoiceInputRequest extends InputRequest { + private final LinkedHashSet choices; + + /** + * @param prompt The prompt to show to the user. Must not be null. + * @param choices holds all input values that are allowed. + * Must not be null. + */ + public MultipleChoiceInputRequest(String prompt, Vector choices) { + super(prompt); + if (choices == null) { + throw new IllegalArgumentException("choices must not be null"); + } + this.choices = new LinkedHashSet(choices); + } + + /** + * @return The possible values. + */ + public Vector getChoices() { + return new Vector(choices); + } + + /** + * @return true if the input is one of the allowed values. + */ + public boolean isInputValid() { + return choices.contains(getInput()) || ("".equals(getInput()) && getDefaultValue() != null); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java new file mode 100644 index 00000000..e1e3cf11 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/PropertyFileInputHandler.java @@ -0,0 +1,92 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.input; + +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Properties; + +import org.apache.tools.ant.BuildException; + +/** + * Reads input from a property file, the file name is read from the + * system property ant.input.properties, the prompt is the key for input. + * + * @since Ant 1.5 + */ +public class PropertyFileInputHandler implements InputHandler { + private Properties props = null; + + /** + * Name of the system property we expect to hold the file name. + */ + public static final String FILE_NAME_KEY = "ant.input.properties"; + + /** + * Empty no-arg constructor. + */ + public PropertyFileInputHandler() { + } + + /** + * Picks up the input from a property, using the prompt as the + * name of the property. + * @param request an input request. + * + * @exception BuildException if no property of that name can be found. + */ + public void handleInput(InputRequest request) throws BuildException { + readProps(); + + Object o = props.get(request.getPrompt()); + if (o == null) { + throw new BuildException("Unable to find input for \'" + + request.getPrompt() + "\'"); + } + request.setInput(o.toString()); + if (!request.isInputValid()) { + throw new BuildException("Found invalid input " + o + + " for \'" + request.getPrompt() + "\'"); + } + } + + /** + * Reads the properties file if it hasn't already been read. + */ + private synchronized void readProps() throws BuildException { + if (props == null) { + String propsFile = System.getProperty(FILE_NAME_KEY); + if (propsFile == null) { + throw new BuildException("System property " + + FILE_NAME_KEY + + " for PropertyFileInputHandler not" + + " set"); + } + + props = new Properties(); + + try { + props.load(new FileInputStream(propsFile)); + } catch (IOException e) { + throw new BuildException("Couldn't load " + propsFile, e); + } + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/SecureInputHandler.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/SecureInputHandler.java new file mode 100644 index 00000000..d5aecff7 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/input/SecureInputHandler.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.input; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.ReflectUtil; + +/** + * Prompts and requests input. May loop until a valid input has + * been entered. Doesn't echo input (requires Java6). If Java6 is not + * available, falls back to the DefaultHandler (insecure). + * @since Ant 1.7.1 + */ +public class SecureInputHandler extends DefaultInputHandler { + + /** + * Default no-args constructor + */ + public SecureInputHandler() { + } + + /** + * Handle the input + * @param request the request to handle + * @throws BuildException if not possible to read from console + */ + public void handleInput(InputRequest request) throws BuildException { + String prompt = getPrompt(request); + try { + Object console = ReflectUtil.invokeStatic(System.class, "console"); + do { + char[] input = (char[]) ReflectUtil.invoke( + console, "readPassword", String.class, prompt, + Object[].class, (Object[]) null); + request.setInput(new String(input)); + /* for security zero char array after retrieving value */ + java.util.Arrays.fill(input, ' '); + } while (!request.isInputValid()); + } catch (Exception e) { + /* Java6 not present use default handler */ + super.handleInput(request); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/AntMain.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/AntMain.java new file mode 100644 index 00000000..4703eaa6 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/AntMain.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.launch; + +import java.util.Properties; + +/** + * Interface used to bridge to the actual Main class without any + * messy reflection + * + * @since Ant 1.6 + */ +public interface AntMain { + /** + * Start Ant. + * + * @param args command line args + * @param additionalUserProperties properties to set beyond those that + * may be specified on the args list + * @param coreLoader - not used + * + * @since Ant 1.6 + */ + void startAnt(String[] args, Properties additionalUserProperties, + ClassLoader coreLoader); +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/LaunchException.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/LaunchException.java new file mode 100644 index 00000000..1bb37f8f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/LaunchException.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.launch; + +/** + * Signals an error condition during launching + * + * @since Ant 1.6 + */ +public class LaunchException extends Exception { + private static final long serialVersionUID = 1L; + + /** + * Constructs an exception with the given descriptive message. + * + * @param message A description of or information about the exception. + * Should not be null. + */ + public LaunchException(String message) { + super(message); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Launcher.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Launcher.java new file mode 100644 index 00000000..bf881db8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Launcher.java @@ -0,0 +1,412 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.launch; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + + + + +/** + * This is a launcher for Ant. + * + * @since Ant 1.6 + */ +public class Launcher { + + private Launcher() { + } + + /** + * The Ant Home (installation) Directory property. + * {@value} + */ + public static final String ANTHOME_PROPERTY = "ant.home"; + + /** + * The Ant Library Directory property. + * {@value} + */ + public static final String ANTLIBDIR_PROPERTY = "ant.library.dir"; + + /** + * The directory name of the per-user ant directory. + * {@value} + */ + public static final String ANT_PRIVATEDIR = ".ant"; + + /** + * The name of a per-user library directory. + * {@value} + */ + public static final String ANT_PRIVATELIB = "lib"; + + /** + * launch diagnostics flag; for debugging trouble at launch time. + */ + public static boolean launchDiag = false; + + /** + * The location of a per-user library directory. + *

    + * It's value is the concatenation of {@link #ANT_PRIVATEDIR} + * with {@link #ANT_PRIVATELIB}, with an appropriate file separator + * in between. For example, on Unix, it's .ant/lib. + */ + public static final String USER_LIBDIR = + ANT_PRIVATEDIR + File.separatorChar + ANT_PRIVATELIB; + + /** + * The startup class that is to be run. + * {@value} + */ + public static final String MAIN_CLASS = "org.apache.tools.ant.Main"; + + /** + * System property with user home directory. + * {@value} + */ + public static final String USER_HOMEDIR = "user.home"; + + /** + * System property with application classpath. + * {@value} + */ + private static final String JAVA_CLASS_PATH = "java.class.path"; + + /** + * Exit code on trouble + */ + protected static final int EXIT_CODE_ERROR = 2; + + /** + * Entry point for starting command line Ant. + * + * @param args commandline arguments + */ + public static void main(final String[] args) { + int exitCode; + try { + final Launcher launcher = new Launcher(); + exitCode = launcher.run(args); + } catch (final LaunchException e) { + exitCode = EXIT_CODE_ERROR; + System.err.println(e.getMessage()); + } catch (final Throwable t) { + exitCode = EXIT_CODE_ERROR; + t.printStackTrace(System.err); + } + if (exitCode != 0) { + if (launchDiag) { + System.out.println("Exit code: "+exitCode); + } + System.exit(exitCode); + } + } + + + /** + * Add a CLASSPATH or -lib to lib path urls. + * Only filesystem resources are supported. + * + * @param path the classpath or lib path to add to the libPathULRLs + * @param getJars if true and a path is a directory, add the jars in + * the directory to the path urls + * @param libPathURLs the list of paths to add to + * @throws MalformedURLException if we can't create a URL + */ + private void addPath(final String path, final boolean getJars, final List libPathURLs) + throws MalformedURLException { + final StringTokenizer tokenizer = new StringTokenizer(path, File.pathSeparator); + while (tokenizer.hasMoreElements()) { + final String elementName = tokenizer.nextToken(); + final File element = new File(elementName); + if (elementName.indexOf('%') != -1 && !element.exists()) { + continue; + } + if (getJars && element.isDirectory()) { + // add any jars in the directory + final URL[] dirURLs = Locator.getLocationURLs(element); + for (int j = 0; j < dirURLs.length; ++j) { + if (launchDiag) { System.out.println("adding library JAR: " + dirURLs[j]);} + libPathURLs.add(dirURLs[j]); + } + } + + final URL url = Locator.fileToURL(element); + if (launchDiag) { + System.out.println("adding library URL: " + url); + } + libPathURLs.add(url); + } + } + + /** + * Run the launcher to launch Ant. + * + * @param args the command line arguments + * @return an exit code. As the normal ant main calls exit when it ends, + * this is for handling failures at bind-time + * @throws MalformedURLException if the URLs required for the classloader + * cannot be created. + * @throws LaunchException for launching problems + */ + private int run(final String[] args) + throws LaunchException, MalformedURLException { + final String antHomeProperty = System.getProperty(ANTHOME_PROPERTY); + File antHome = null; + + final File sourceJar = Locator.getClassSource(getClass()); + final File jarDir = sourceJar.getParentFile(); + String mainClassname = MAIN_CLASS; + + if (antHomeProperty != null) { + antHome = new File(antHomeProperty); + } + + if (antHome == null || !antHome.exists()) { + antHome = jarDir.getParentFile(); + setProperty(ANTHOME_PROPERTY, antHome.getAbsolutePath()); + } + + if (!antHome.exists()) { + throw new LaunchException("Ant home is set incorrectly or " + + "ant could not be located (estimated value="+antHome.getAbsolutePath()+")"); + } + + final List libPaths = new ArrayList(); + String cpString = null; + final List argList = new ArrayList(); + String[] newArgs; + boolean noUserLib = false; + boolean noClassPath = false; + + for (int i = 0; i < args.length; ++i) { + if (args[i].equals("-lib")) { + if (i == args.length - 1) { + throw new LaunchException("The -lib argument must " + + "be followed by a library location"); + } + libPaths.add(args[++i]); + } else if (args[i].equals("-cp")) { + if (i == args.length - 1) { + throw new LaunchException("The -cp argument must " + + "be followed by a classpath expression"); + } + if (cpString != null) { + throw new LaunchException("The -cp argument must " + + "not be repeated"); + } + cpString = args[++i]; + } else if (args[i].equals("--nouserlib") || args[i].equals("-nouserlib")) { + noUserLib = true; + } else if (args[i].equals("--launchdiag")) { + launchDiag = true; + } else if (args[i].equals("--noclasspath") || args[i].equals("-noclasspath")) { + noClassPath = true; + } else if (args[i].equals("-main")) { + if (i == args.length - 1) { + throw new LaunchException("The -main argument must " + + "be followed by a library location"); + } + mainClassname = args[++i]; + } else { + argList.add(args[i]); + } + } + + logPath("Launcher JAR",sourceJar); + logPath("Launcher JAR directory", sourceJar.getParentFile()); + logPath("java.home", new File(System.getProperty("java.home"))); + + //decide whether to copy the existing arg set, or + //build a new one from the list of all args excluding the special + //operations that only we handle + if (argList.size() == args.length) { + newArgs = args; + } else { + newArgs = argList.toArray(new String[argList.size()]); + } + + final URL[] libURLs = getLibPathURLs( + noClassPath ? null : cpString, libPaths); + final URL[] systemURLs = getSystemURLs(jarDir); + final URL[] userURLs = noUserLib ? new URL[0] : getUserURLs(); + + final File toolsJAR = Locator.getToolsJar(); + logPath("tools.jar",toolsJAR); + final URL[] jars = getJarArray( + libURLs, userURLs, systemURLs, toolsJAR); + + // now update the class.path property + final StringBuffer baseClassPath + = new StringBuffer(System.getProperty(JAVA_CLASS_PATH)); + if (baseClassPath.charAt(baseClassPath.length() - 1) + == File.pathSeparatorChar) { + baseClassPath.setLength(baseClassPath.length() - 1); + } + + for (int i = 0; i < jars.length; ++i) { + baseClassPath.append(File.pathSeparatorChar); + baseClassPath.append(Locator.fromURI(jars[i].toString())); + } + + setProperty(JAVA_CLASS_PATH, baseClassPath.toString()); + + final URLClassLoader loader = new URLClassLoader(jars, Launcher.class.getClassLoader()); + Thread.currentThread().setContextClassLoader(loader); + Class mainClass = null; + int exitCode = 0; + Throwable thrown=null; + try { + mainClass = loader.loadClass(mainClassname); + final AntMain main = (AntMain) mainClass.newInstance(); + main.startAnt(newArgs, null, null); + } catch (final InstantiationException ex) { + System.err.println( + "Incompatible version of " + mainClassname + " detected"); + final File mainJar = Locator.getClassSource(mainClass); + System.err.println( + "Location of this class " + mainJar); + thrown = ex; + } catch (final ClassNotFoundException cnfe) { + System.err.println( + "Failed to locate" + mainClassname); + thrown = cnfe; + } catch (final Throwable t) { + t.printStackTrace(System.err); + thrown=t; + } + if(thrown!=null) { + System.err.println(ANTHOME_PROPERTY+": "+antHome.getAbsolutePath()); + System.err.println("Classpath: " + baseClassPath.toString()); + System.err.println("Launcher JAR: " + sourceJar.getAbsolutePath()); + System.err.println("Launcher Directory: " + jarDir.getAbsolutePath()); + exitCode = EXIT_CODE_ERROR; + } + return exitCode; + } + + /** + * Get the list of -lib entries and -cp entry into + * a URL array. + * @param cpString the classpath string + * @param libPaths the list of -lib entries. + * @return an array of URLs. + * @throws MalformedURLException if the URLs cannot be created. + */ + private URL[] getLibPathURLs(final String cpString, final List libPaths) + throws MalformedURLException { + final List libPathURLs = new ArrayList(); + + if (cpString != null) { + addPath(cpString, false, libPathURLs); + } + + for (final String libPath : libPaths) { + addPath(libPath, true, libPathURLs); + } + + return libPathURLs.toArray(new URL[libPathURLs.size()]); + } + + /** + * Get the jar files in ANT_HOME/lib. + * determine ant library directory for system jars: use property + * or default using location of ant-launcher.jar + * @param antLauncherDir the dir that ant-launcher ran from + * @return the URLs + * @throws MalformedURLException if the URLs cannot be created. + */ + private URL[] getSystemURLs(final File antLauncherDir) throws MalformedURLException { + File antLibDir = null; + final String antLibDirProperty = System.getProperty(ANTLIBDIR_PROPERTY); + if (antLibDirProperty != null) { + antLibDir = new File(antLibDirProperty); + } + if ((antLibDir == null) || !antLibDir.exists()) { + antLibDir = antLauncherDir; + setProperty(ANTLIBDIR_PROPERTY, antLibDir.getAbsolutePath()); + } + return Locator.getLocationURLs(antLibDir); + } + + /** + * Get the jar files in user.home/.ant/lib + * @return the URLS from the user's lib dir + * @throws MalformedURLException if the URLs cannot be created. + */ + private URL[] getUserURLs() throws MalformedURLException { + final File userLibDir + = new File(System.getProperty(USER_HOMEDIR), USER_LIBDIR); + + return Locator.getLocationURLs(userLibDir); + } + + /** + * Combine the various jar sources into a single array of jars. + * @param libJars the jars specified in -lib command line options + * @param userJars the jars in ~/.ant/lib + * @param systemJars the jars in $ANT_HOME/lib + * @param toolsJar the tools.jar file + * @return a combined array + * @throws MalformedURLException if there is a problem. + */ + private URL[] getJarArray ( + final URL[] libJars, final URL[] userJars, final URL[] systemJars, final File toolsJar) + throws MalformedURLException { + int numJars = libJars.length + userJars.length + systemJars.length; + if (toolsJar != null) { + numJars++; + } + final URL[] jars = new URL[numJars]; + System.arraycopy(libJars, 0, jars, 0, libJars.length); + System.arraycopy(userJars, 0, jars, libJars.length, userJars.length); + System.arraycopy(systemJars, 0, jars, userJars.length + libJars.length, + systemJars.length); + + if (toolsJar != null) { + jars[jars.length - 1] = Locator.fileToURL(toolsJar); + } + return jars; + } + + /** + * set a system property, optionally log what is going on + * @param name property name + * @param value value + */ + private void setProperty(final String name, final String value) { + if (launchDiag) { + System.out.println("Setting \"" + name + "\" to \"" + value + "\""); + } + System.setProperty(name, value); + } + + private void logPath(final String name,final File path) { + if(launchDiag) { + System.out.println(name+"= \""+path+"\""); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Locator.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Locator.java new file mode 100644 index 00000000..4640e700 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/launch/Locator.java @@ -0,0 +1,528 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.launch; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FilenameFilter; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.CharacterIterator; +import java.text.StringCharacterIterator; +import java.util.Locale; + +// CheckStyle:LineLengthCheck OFF - urls are long! +/** + * The Locator is a utility class which is used to find certain items + * in the environment. + *

    + * It is used at boot time in the launcher, and cannot make use of any of Ant's other classes. + *

    + * This is a surprisingly brittle piece of code, and has had lots of bugs filed against it: + * running ant off a network share can cause Ant to fail, + * use File.toURI().toURL().toExternalForm(), + * Locator implementation not encoding URI strings properly: spaces in paths. + * It also breaks Eclipse 3.3 Betas: + * Exception if installation path has spaces. + *

    + * Be very careful when making changes to this class, as a break will upset a lot of people. + * @since Ant 1.6 + */ +// CheckStyle:LineLengthCheck ON - urls are long! +public final class Locator { + + private static final int NIBBLE = 4; + private static final int NIBBLE_MASK = 0xF; + + private static final int ASCII_SIZE = 128; + + private static final int BYTE_SIZE = 256; + + private static final int WORD = 16; + + private static final int SPACE = 0x20; + private static final int DEL = 0x7F; + + /** + * encoding used to represent URIs + */ + public static final String URI_ENCODING = "UTF-8"; + // stolen from org.apache.xerces.impl.XMLEntityManager#getUserDir() + // of the Xerces-J team + // which ASCII characters need to be escaped + private static boolean[] gNeedEscaping = new boolean[ASCII_SIZE]; + // the first hex character if a character needs to be escaped + private static char[] gAfterEscaping1 = new char[ASCII_SIZE]; + // the second hex character if a character needs to be escaped + private static char[] gAfterEscaping2 = new char[ASCII_SIZE]; + private static char[] gHexChs = {'0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + /** Error string used when an invalid uri is seen */ + public static final String ERROR_NOT_FILE_URI + = "Can only handle valid file: URIs, not "; + + // initialize the above 3 arrays + static { + for (int i = 0; i < SPACE; i++) { + gNeedEscaping[i] = true; + gAfterEscaping1[i] = gHexChs[i >> NIBBLE]; + gAfterEscaping2[i] = gHexChs[i & NIBBLE_MASK]; + } + gNeedEscaping[DEL] = true; + gAfterEscaping1[DEL] = '7'; + gAfterEscaping2[DEL] = 'F'; + char[] escChs = {' ', '<', '>', '#', '%', '"', '{', '}', + '|', '\\', '^', '~', '[', ']', '`'}; + int len = escChs.length; + char ch; + for (int i = 0; i < len; i++) { + ch = escChs[i]; + gNeedEscaping[ch] = true; + gAfterEscaping1[ch] = gHexChs[ch >> NIBBLE]; + gAfterEscaping2[ch] = gHexChs[ch & NIBBLE_MASK]; + } + } + /** + * Not instantiable + */ + private Locator() { + } + + /** + * Find the directory or jar file the class has been loaded from. + * + * @param c the class whose location is required. + * @return the file or jar with the class or null if we cannot + * determine the location. + * + * @since Ant 1.6 + */ + public static File getClassSource(Class c) { + String classResource = c.getName().replace('.', '/') + ".class"; + return getResourceSource(c.getClassLoader(), classResource); + } + + /** + * Find the directory or jar a given resource has been loaded from. + * + * @param c the classloader to be consulted for the source. + * @param resource the resource whose location is required. + * + * @return the file with the resource source or null if + * we cannot determine the location. + * + * @since Ant 1.6 + */ + public static File getResourceSource(ClassLoader c, String resource) { + if (c == null) { + c = Locator.class.getClassLoader(); + } + URL url = null; + if (c == null) { + url = ClassLoader.getSystemResource(resource); + } else { + url = c.getResource(resource); + } + if (url != null) { + String u = url.toString(); + try { + if (u.startsWith("jar:file:")) { + return new File(fromJarURI(u)); + } else if (u.startsWith("file:")) { + int tail = u.indexOf(resource); + String dirName = u.substring(0, tail); + return new File(fromURI(dirName)); + } + } catch (IllegalArgumentException e) { + //unable to determine the URI for reasons unknown. + return null; + } + } + return null; + } + + + + /** + * Constructs a file path from a file: URI. + * + *

    Will be an absolute path if the given URI is absolute.

    + * + *

    Prior to Java 1.4, + * swallows '%' that are not followed by two characters.

    + * + * See dt-sysid + * which makes some mention of how + * characters not supported by URI Reference syntax should be escaped. + * + * @param uri the URI designating a file in the local filesystem. + * @return the local file system path for the file. + * @throws IllegalArgumentException if the URI is malformed or not a legal file: URL + * @since Ant 1.6 + */ + public static String fromURI(String uri) { + return fromURIJava13(uri); + // #buzilla8031: first try Java 1.4. + // TODO should use java.net.URI now that we can rely on 1.4... + // but check for UNC-related regressions, e.g. #42275 + // (and remember that \\server\share\file -> file:////server/share/file + // rather than -> file://server/share/file as it should; + // fixed only in JDK 7's java.nio.file.Path.toUri) + // return fromUriJava14(uri); + } + + /** + * Java1.4+ code to extract the path from the URI. + * @param uri + * @return null if a conversion was not possible + */ + /* currently unused: + private static String fromUriJava14(String uri) { + // Also check for properly formed URIs. Ant formerly recommended using + // nonsense URIs such as "file:./foo.xml" in XML includes. You shouldn't + // do that (just "foo.xml" is correct) but for compatibility we special-case + // things when the path is not absolute, and fall back to the old parsing behavior. + if (uri.startsWith("file:/")) { + try { + File f = new File(URI.create(encodeURI(uri))); + //bug #42227 forgot to decode before returning + return decodeUri(f.getAbsolutePath()); + } catch (IllegalArgumentException e) { + // Bad URI, pass this on. + // no, this is downgraded to a warning after various + // JRE bugs surfaced. Hand off + // to our built in code on a failure + //throw new IllegalArgumentException( + // "Bad URI " + uri + ":" + e.getMessage(), e); + e.printStackTrace(); + } catch (Exception e) { + // Unexpected exception? Should not happen. + e.printStackTrace(); + } + } + return null; + } + */ + + /** + * @param uri uri to expand + * @return the decoded URI + * @since Ant1.7.1 + */ + private static String fromURIJava13(String uri) { + // Fallback method for Java 1.3 or earlier. + + URL url = null; + try { + url = new URL(uri); + } catch (MalformedURLException emYouEarlEx) { + // Ignore malformed exception + } + if (url == null || !("file".equals(url.getProtocol()))) { + throw new IllegalArgumentException(ERROR_NOT_FILE_URI + uri); + } + StringBuffer buf = new StringBuffer(url.getHost()); + if (buf.length() > 0) { + buf.insert(0, File.separatorChar).insert(0, File.separatorChar); + } + String file = url.getFile(); + int queryPos = file.indexOf('?'); + buf.append((queryPos < 0) ? file : file.substring(0, queryPos)); + + uri = buf.toString().replace('/', File.separatorChar); + + if (File.pathSeparatorChar == ';' && uri.startsWith("\\") && uri.length() > 2 + && Character.isLetter(uri.charAt(1)) && uri.lastIndexOf(':') > -1) { + uri = uri.substring(1); + } + String path = null; + try { + path = decodeUri(uri); + //consider adding the current directory. This is not done when + //the path is a UNC name + String cwd = System.getProperty("user.dir"); + int posi = cwd.indexOf(':'); + boolean pathStartsWithFileSeparator = path.startsWith(File.separator); + boolean pathStartsWithUNC = path.startsWith("" + File.separator + File.separator); + if ((posi > 0) && pathStartsWithFileSeparator && !pathStartsWithUNC) { + path = cwd.substring(0, posi + 1) + path; + } + } catch (UnsupportedEncodingException exc) { + // not sure whether this is clean, but this method is + // declared not to throw exceptions. + throw new IllegalStateException( + "Could not convert URI " + uri + " to path: " + + exc.getMessage()); + } + return path; + } + + /** + * Crack a JAR URI. + * This method is public for testing; we may delete it without any warning -it is not part of Ant's stable API. + * @param uri uri to expand; contains jar: somewhere in it + * @return the decoded URI + * @since Ant1.7.1 + */ + public static String fromJarURI(String uri) { + int pling = uri.indexOf("!/"); + String jarName = uri.substring("jar:".length(), pling); + return fromURI(jarName); + } + + /** + * Decodes an Uri with % characters. + * The URI is escaped + * @param uri String with the uri possibly containing % characters. + * @return The decoded Uri + * @throws UnsupportedEncodingException if UTF-8 is not available + * @since Ant 1.7 + */ + public static String decodeUri(String uri) throws UnsupportedEncodingException { + if (uri.indexOf('%') == -1) { + return uri; + } + ByteArrayOutputStream sb = new ByteArrayOutputStream(uri.length()); + CharacterIterator iter = new StringCharacterIterator(uri); + for (char c = iter.first(); c != CharacterIterator.DONE; + c = iter.next()) { + if (c == '%') { + char c1 = iter.next(); + if (c1 != CharacterIterator.DONE) { + int i1 = Character.digit(c1, WORD); + char c2 = iter.next(); + if (c2 != CharacterIterator.DONE) { + int i2 = Character.digit(c2, WORD); + sb.write((char) ((i1 << NIBBLE) + i2)); + } + } + } else if (c >= 0x0000 && c < 0x0080) { + sb.write(c); + } else { // #50543 + byte[] bytes = String.valueOf(c).getBytes(URI_ENCODING); + sb.write(bytes, 0, bytes.length); + } + } + return sb.toString(URI_ENCODING); + } + + /** + * Encodes an Uri with % characters. + * The URI is escaped + * @param path String to encode. + * @return The encoded string, according to URI norms + * @throws UnsupportedEncodingException if UTF-8 is not available + * @since Ant 1.7 + */ + public static String encodeURI(String path) throws UnsupportedEncodingException { + int i = 0; + int len = path.length(); + int ch = 0; + StringBuffer sb = null; + for (; i < len; i++) { + ch = path.charAt(i); + // if it's not an ASCII character, break here, and use UTF-8 encoding + if (ch >= ASCII_SIZE) { + break; + } + if (gNeedEscaping[ch]) { + if (sb == null) { + sb = new StringBuffer(path.substring(0, i)); + } + sb.append('%'); + sb.append(gAfterEscaping1[ch]); + sb.append(gAfterEscaping2[ch]); + // record the fact that it's escaped + } else if (sb != null) { + sb.append((char) ch); + } + } + + // we saw some non-ascii character + if (i < len) { + if (sb == null) { + sb = new StringBuffer(path.substring(0, i)); + } + // get UTF-8 bytes for the remaining sub-string + byte[] bytes = null; + byte b; + bytes = path.substring(i).getBytes(URI_ENCODING); + len = bytes.length; + + // for each byte + for (i = 0; i < len; i++) { + b = bytes[i]; + // for non-ascii character: make it positive, then escape + if (b < 0) { + ch = b + BYTE_SIZE; + sb.append('%'); + sb.append(gHexChs[ch >> NIBBLE]); + sb.append(gHexChs[ch & NIBBLE_MASK]); + } else if (gNeedEscaping[b]) { + sb.append('%'); + sb.append(gAfterEscaping1[b]); + sb.append(gAfterEscaping2[b]); + } else { + sb.append((char) b); + } + } + } + return sb == null ? path : sb.toString(); + } + + /** + * Convert a File to a URL. + * File.toURL() does not encode characters like #. + * File.toURI() has been introduced in java 1.4, so + * Ant cannot use it (except by reflection) + * FileUtils.toURI() cannot be used by Locator.java + * Implemented this way. + * File.toURL() adds file: and changes '\' to '/' for dos OSes + * encodeURI converts characters like ' ' and '#' to %DD + * @param file the file to convert + * @return URL the converted File + * @throws MalformedURLException on error + * @deprecated since 1.9, use {@link FileUtils#getFileURL(File)} + */ + @Deprecated + public static URL fileToURL(File file) + throws MalformedURLException { + return new URL(file.toURI().toASCIIString()); + } + + /** + * Get the File necessary to load the Sun compiler tools. If the classes + * are available to this class, then no additional URL is required and + * null is returned. This may be because the classes are explicitly in the + * class path or provided by the JVM directly. + * + * @return the tools jar as a File if required, null otherwise. + */ + public static File getToolsJar() { + // firstly check if the tools jar is already in the classpath + boolean toolsJarAvailable = false; + try { + // just check whether this throws an exception + Class.forName("com.sun.tools.javac.Main"); + toolsJarAvailable = true; + } catch (Exception e) { + try { + Class.forName("sun.tools.javac.Main"); + toolsJarAvailable = true; + } catch (Exception e2) { + // ignore + } + } + if (toolsJarAvailable) { + return null; + } + // couldn't find compiler - try to find tools.jar + // based on java.home setting + String libToolsJar + = File.separator + "lib" + File.separator + "tools.jar"; + String javaHome = System.getProperty("java.home"); + File toolsJar = new File(javaHome + libToolsJar); + if (toolsJar.exists()) { + // Found in java.home as given + return toolsJar; + } + if (javaHome.toLowerCase(Locale.ENGLISH).endsWith(File.separator + "jre")) { + javaHome = javaHome.substring( + 0, javaHome.length() - "/jre".length()); + toolsJar = new File(javaHome + libToolsJar); + } + if (!toolsJar.exists()) { + System.out.println("Unable to locate tools.jar. " + + "Expected to find it in " + toolsJar.getPath()); + return null; + } + return toolsJar; + } + + /** + * Get an array of URLs representing all of the jar files in the + * given location. If the location is a file, it is returned as the only + * element of the array. If the location is a directory, it is scanned for + * jar files. + * + * @param location the location to scan for Jars. + * + * @return an array of URLs for all jars in the given location. + * + * @exception MalformedURLException if the URLs for the jars cannot be + * formed. + */ + public static URL[] getLocationURLs(File location) + throws MalformedURLException { + return getLocationURLs(location, new String[]{".jar"}); + } + + /** + * Get an array of URLs representing all of the files of a given set of + * extensions in the given location. If the location is a file, it is + * returned as the only element of the array. If the location is a + * directory, it is scanned for matching files. + * + * @param location the location to scan for files. + * @param extensions an array of extension that are to match in the + * directory search. + * + * @return an array of URLs of matching files. + * @exception MalformedURLException if the URLs for the files cannot be + * formed. + */ + public static URL[] getLocationURLs(File location, + final String[] extensions) + throws MalformedURLException { + URL[] urls = new URL[0]; + + if (!location.exists()) { + return urls; + } + if (!location.isDirectory()) { + urls = new URL[1]; + String path = location.getPath(); + String littlePath = path.toLowerCase(Locale.ENGLISH); + for (int i = 0; i < extensions.length; ++i) { + if (littlePath.endsWith(extensions[i])) { + urls[0] = fileToURL(location); + break; + } + } + return urls; + } + File[] matches = location.listFiles( + new FilenameFilter() { + public boolean accept(File dir, String name) { + String littleName = name.toLowerCase(Locale.ENGLISH); + for (int i = 0; i < extensions.length; ++i) { + if (littleName.endsWith(extensions[i])) { + return true; + } + } + return false; + } + }); + urls = new URL[matches.length]; + for (int i = 0; i < matches.length; ++i) { + urls[i] = fileToURL(matches[i]); + } + return urls; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java new file mode 100644 index 00000000..2e695005 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/AnsiColorLogger.java @@ -0,0 +1,249 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Properties; + +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.Project; + +/** + * Uses ANSI Color Code Sequences to colorize messages + * sent to the console. + * + *

    If used with the -logfile option, the output file + * will contain all the necessary escape codes to + * display the text in colorized mode when displayed + * in the console using applications like cat, more, + * etc.

    + * + *

    This is designed to work on terminals that support ANSI + * color codes. It works on XTerm, ETerm, Mindterm, etc. + * It also works on Win9x (with ANSI.SYS loaded.)

    + * + *

    NOTE: + * It doesn't work on WinNT's COMMAND.COM even with + * ANSI.SYS loaded.

    + * + *

    The default colors used for differentiating + * the message levels can be changed by editing the + * /org/apache/tools/ant/listener/defaults.properties + * file. + * This file contains 5 key/value pairs:

    + *
    + * AnsiColorLogger.ERROR_COLOR=2;31
    + * AnsiColorLogger.WARNING_COLOR=2;35
    + * AnsiColorLogger.INFO_COLOR=2;36
    + * AnsiColorLogger.VERBOSE_COLOR=2;32
    + * AnsiColorLogger.DEBUG_COLOR=2;34
    + * 
    + * + *

    Another option is to pass a system variable named + * ant.logger.defaults, with value set to the path of + * the file that contains user defined Ansi Color + * Codes, to the java command using -D option.

    + * + * To change these colors use the following chart: + * + *

    ANSI COLOR LOGGER CONFIGURATION

    + * + * Format for AnsiColorLogger.*= + * Attribute;Foreground;Background + * + * Attribute is one of the following:
    + *  0 -> Reset All Attributes (return to normal mode)
    + *  1 -> Bright (Usually turns on BOLD)
    + *  2 -> Dim
    + *  3 -> Underline
    + *  5 -> link
    + *  7 -> Reverse
    + *  8 -> Hidden
    + *  
    + * + * Foreground is one of the following:
    + *  30 -> Black
    + *  31 -> Red
    + *  32 -> Green
    + *  33 -> Yellow
    + *  34 -> Blue
    + *  35 -> Magenta
    + *  36 -> Cyan
    + *  37 -> White
    + *  
    + * + * Background is one of the following:
    + *  40 -> Black
    + *  41 -> Red
    + *  42 -> Green
    + *  43 -> Yellow
    + *  44 -> Blue
    + *  45 -> Magenta
    + *  46 -> Cyan
    + *  47 -> White
    + *  
    + */ +public class AnsiColorLogger extends DefaultLogger { + // private static final int ATTR_NORMAL = 0; + // private static final int ATTR_BRIGHT = 1; + private static final int ATTR_DIM = 2; + // private static final int ATTR_UNDERLINE = 3; + // private static final int ATTR_BLINK = 5; + // private static final int ATTR_REVERSE = 7; + // private static final int ATTR_HIDDEN = 8; + + // private static final int FG_BLACK = 30; + private static final int FG_RED = 31; + private static final int FG_GREEN = 32; + // private static final int FG_YELLOW = 33; + private static final int FG_BLUE = 34; + private static final int FG_MAGENTA = 35; + private static final int FG_CYAN = 36; + // private static final int FG_WHITE = 37; + + // private static final int BG_BLACK = 40; + // private static final int BG_RED = 41; + // private static final int BG_GREEN = 42; + // private static final int BG_YELLOW = 44; + // private static final int BG_BLUE = 44; + // private static final int BG_MAGENTA = 45; + // private static final int BG_CYAN = 46; + // private static final int BG_WHITE = 47; + + private static final String PREFIX = "\u001b["; + private static final String SUFFIX = "m"; + private static final char SEPARATOR = ';'; + private static final String END_COLOR = PREFIX + SUFFIX; + + private String errColor + = PREFIX + ATTR_DIM + SEPARATOR + FG_RED + SUFFIX; + private String warnColor + = PREFIX + ATTR_DIM + SEPARATOR + FG_MAGENTA + SUFFIX; + private String infoColor + = PREFIX + ATTR_DIM + SEPARATOR + FG_CYAN + SUFFIX; + private String verboseColor + = PREFIX + ATTR_DIM + SEPARATOR + FG_GREEN + SUFFIX; + private String debugColor + = PREFIX + ATTR_DIM + SEPARATOR + FG_BLUE + SUFFIX; + + private boolean colorsSet = false; + + /** + * Set the colors to use from a property file specified by the + * special ant property ant.logger.defaults + */ + private void setColors() { + String userColorFile = System.getProperty("ant.logger.defaults"); + String systemColorFile = + "/org/apache/tools/ant/listener/defaults.properties"; + + InputStream in = null; + + try { + Properties prop = new Properties(); + + if (userColorFile != null) { + in = new FileInputStream(userColorFile); + } else { + in = getClass().getResourceAsStream(systemColorFile); + } + + if (in != null) { + prop.load(in); + } + + String errC = prop.getProperty("AnsiColorLogger.ERROR_COLOR"); + String warn = prop.getProperty("AnsiColorLogger.WARNING_COLOR"); + String info = prop.getProperty("AnsiColorLogger.INFO_COLOR"); + String verbose = prop.getProperty("AnsiColorLogger.VERBOSE_COLOR"); + String debug = prop.getProperty("AnsiColorLogger.DEBUG_COLOR"); + if (errC != null) { + errColor = PREFIX + errC + SUFFIX; + } + if (warn != null) { + warnColor = PREFIX + warn + SUFFIX; + } + if (info != null) { + infoColor = PREFIX + info + SUFFIX; + } + if (verbose != null) { + verboseColor = PREFIX + verbose + SUFFIX; + } + if (debug != null) { + debugColor = PREFIX + debug + SUFFIX; + } + } catch (IOException ioe) { + //Ignore - we will use the defaults. + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + //Ignore - We do not want this to stop the build. + } + } + } + } + + /** + * @see DefaultLogger#printMessage + */ + /** {@inheritDoc}. */ + @Override + protected void printMessage(final String message, + final PrintStream stream, + final int priority) { + if (message != null && stream != null) { + if (!colorsSet) { + setColors(); + colorsSet = true; + } + + final StringBuffer msg = new StringBuffer(message); + switch (priority) { + case Project.MSG_ERR: + msg.insert(0, errColor); + msg.append(END_COLOR); + break; + case Project.MSG_WARN: + msg.insert(0, warnColor); + msg.append(END_COLOR); + break; + case Project.MSG_INFO: + msg.insert(0, infoColor); + msg.append(END_COLOR); + break; + case Project.MSG_VERBOSE: + msg.insert(0, verboseColor); + msg.append(END_COLOR); + break; + case Project.MSG_DEBUG: + // Fall through + default: + msg.insert(0, debugColor); + msg.append(END_COLOR); + break; + } + final String strmessage = msg.toString(); + stream.println(strmessage); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/BigProjectLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/BigProjectLogger.java new file mode 100644 index 00000000..865127d2 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/BigProjectLogger.java @@ -0,0 +1,194 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import java.io.File; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.SubBuildListener; +import org.apache.tools.ant.util.StringUtils; + +/** + * This is a special logger that is designed to make it easier to work + * with big projects, those that use imports and + * subant to build complex systems. + * + * @since Ant1.7.1 + */ + +public class BigProjectLogger extends SimpleBigProjectLogger + implements SubBuildListener { + + private volatile boolean subBuildStartedRaised = false; + private final Object subBuildLock = new Object(); + + /** + * Header string for the log. + * {@value} + */ + public static final String HEADER + = "======================================================================"; + /** + * Footer string for the log. + * {@value} + */ + public static final String FOOTER = HEADER; + + /** + * This is an override point: the message that indicates whether + * a build failed. Subclasses can change/enhance the + * message. + * + * @return The classic "BUILD FAILED" plus a timestamp + */ + protected String getBuildFailedMessage() { + return super.getBuildFailedMessage() + TimestampedLogger.SPACER + getTimestamp(); + } + + /** + * This is an override point: the message that indicates that + * a build succeeded. Subclasses can change/enhance the + * message. + * + * @return The classic "BUILD SUCCESSFUL" plus a timestamp + */ + protected String getBuildSuccessfulMessage() { + return super.getBuildSuccessfulMessage() + TimestampedLogger.SPACER + getTimestamp(); + } + + /** + * {@inheritDoc} + * + * @param event + */ + public void targetStarted(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.targetStarted(event); + } + + /** + * {@inheritDoc} + * + * @param event + */ + public void taskStarted(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.taskStarted(event); + } + + /** + * {@inheritDoc} + * + * @param event + */ + public void buildFinished(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + subBuildFinished(event); + super.buildFinished(event); + } + + /** + * {@inheritDoc} + * + * @param event + */ + public void messageLogged(BuildEvent event) { + maybeRaiseSubBuildStarted(event); + super.messageLogged(event); + } + + + /** + * {@inheritDoc} + * + * @param event An event with any relevant extra information. Must not be null. + */ + public void subBuildStarted(BuildEvent event) { + String name = extractNameOrDefault(event); + Project project = event.getProject(); + + File base = project == null ? null : project.getBaseDir(); + String path = + (base == null) + ? "With no base directory" + : "In " + base.getAbsolutePath(); + printMessage(StringUtils.LINE_SEP + getHeader() + + StringUtils.LINE_SEP + "Entering project " + name + + StringUtils.LINE_SEP + path + + StringUtils.LINE_SEP + getFooter(), + out, + event.getPriority()); + } + + /** + * Get the name of an event + * + * @param event the event name + * @return the name or a default string + */ + protected String extractNameOrDefault(BuildEvent event) { + String name = extractProjectName(event); + if (name == null) { + name = ""; + } else { + name = '"' + name + '"'; + } + return name; + } + + /** {@inheritDoc} */ + public void subBuildFinished(BuildEvent event) { + String name = extractNameOrDefault(event); + String failed = event.getException() != null ? "failing " : ""; + printMessage(StringUtils.LINE_SEP + getHeader() + + StringUtils.LINE_SEP + "Exiting " + failed + "project " + + name + + StringUtils.LINE_SEP + getFooter(), + out, + event.getPriority()); + } + + /** + * Override point: return the header string for the entry/exit message + * @return the header string + */ + protected String getHeader() { + return HEADER; + } + + /** + * Override point: return the footer string for the entry/exit message + * @return the footer string + */ + protected String getFooter() { + return FOOTER; + } + + private void maybeRaiseSubBuildStarted(BuildEvent event) { + // double checked locking should be OK since the flag is write-once + if (!subBuildStartedRaised) { + synchronized (subBuildLock) { + if (!subBuildStartedRaised) { + subBuildStartedRaised = true; + subBuildStarted(event); + } + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java new file mode 100644 index 00000000..32474eea --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/CommonsLoggingListener.java @@ -0,0 +1,332 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.listener; + +import java.io.PrintStream; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogConfigurationException; +import org.apache.commons.logging.LogFactory; +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildListener; +import org.apache.tools.ant.BuildLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.UnknownElement; + + +/** + * Jakarta Commons Logging listener. + * Note: do not use the SimpleLog as your logger implementation as it + * causes an infinite loop since it writes to System.err, which Ant traps + * and reroutes to the logger/listener layer. + * + * The following names are used for the log: + * org.apache.tools.ant.Project.PROJECT_NAME - for project events + * org.apache.tools.ant.Target.TARGET_NAME - for target events + * TASK_CLASS_NAME.TARGET_NAME - for events in individual targets. + * + * In all target and project names we replace "." and " " with "-". + * + * TODO: we should use the advanced context logging features (and expose them + * in c-l first :-) + * TODO: this is _very_ inefficient. Switching the out and tracking the logs + * can be optimized a lot - but may require few more changes to the core. + * + * @since Ant 1.5 + */ +public class CommonsLoggingListener implements BuildListener, BuildLogger { + + /** Indicates if the listener was initialized. */ + private boolean initialized = false; + + private LogFactory logFactory; + + /** + * name of the category under which target events are logged + */ + public static final String TARGET_LOG = "org.apache.tools.ant.Target"; + /** + * name of the category under which project events are logged + */ + public static final String PROJECT_LOG = "org.apache.tools.ant.Project"; + + /** + * Construct the listener and make sure that a LogFactory + * can be obtained. + */ + public CommonsLoggingListener() { + } + + private Log getLog(String cat, String suffix) { + if (suffix != null) { + suffix = suffix.replace('.', '-'); + suffix = suffix.replace(' ', '-'); + cat = cat + "." + suffix; + } + final PrintStream tmpOut = System.out; + final PrintStream tmpErr = System.err; + System.setOut(out); + System.setErr(err); + + if (!initialized) { + try { + logFactory = LogFactory.getFactory(); + } catch (final LogConfigurationException e) { + e.printStackTrace(System.err); + return null; + } + } + + initialized = true; + final Log log = logFactory.getInstance(cat); + System.setOut(tmpOut); + System.setErr(tmpErr); + return log; + } + + /** {@inheritDoc}. */ + public void buildStarted(final BuildEvent event) { + final String categoryString = PROJECT_LOG; + final Log log = getLog(categoryString, null); + + if (initialized) { + realLog(log, "Build started.", Project.MSG_INFO, null); + } + } + + /** {@inheritDoc}. */ + public void buildFinished(final BuildEvent event) { + if (initialized) { + final String categoryString = PROJECT_LOG; + final Log log = getLog(categoryString, event.getProject().getName()); + + if (event.getException() == null) { + realLog(log, "Build finished.", Project.MSG_INFO, null); + } else { + realLog(log, "Build finished with error.", Project.MSG_ERR, + event.getException()); + } + } + } + + /** + * @see BuildListener#targetStarted + */ + /** {@inheritDoc}. */ + public void targetStarted(final BuildEvent event) { + if (initialized) { + final Log log = getLog(TARGET_LOG, + event.getTarget().getName()); + // Since task log category includes target, we don't really + // need this message + realLog(log, "Start: " + event.getTarget().getName(), + Project.MSG_VERBOSE, null); + } + } + + /** + * @see BuildListener#targetFinished + */ + /** {@inheritDoc}. */ + public void targetFinished(final BuildEvent event) { + if (initialized) { + final String targetName = event.getTarget().getName(); + final Log log = getLog(TARGET_LOG, + event.getTarget().getName()); + if (event.getException() == null) { + realLog(log, "Target end: " + targetName, Project.MSG_DEBUG, null); + } else { + realLog(log, "Target \"" + targetName + + "\" finished with error.", Project.MSG_ERR, + event.getException()); + } + } + } + + /** + * @see BuildListener#taskStarted + */ + /** {@inheritDoc}. */ + public void taskStarted(final BuildEvent event) { + if (initialized) { + final Task task = event.getTask(); + Object real = task; + if (task instanceof UnknownElement) { + final Object realObj = ((UnknownElement) task).getTask(); + if (realObj != null) { + real = realObj; + } + } + final Log log = getLog(real.getClass().getName(), null); + if (log.isTraceEnabled()) { + realLog(log, "Task \"" + task.getTaskName() + "\" started ", + Project.MSG_VERBOSE, null); + } + } + } + + /** + * @see BuildListener#taskFinished + */ + /** {@inheritDoc}. */ + public void taskFinished(final BuildEvent event) { + if (initialized) { + final Task task = event.getTask(); + Object real = task; + if (task instanceof UnknownElement) { + final Object realObj = ((UnknownElement) task).getTask(); + if (realObj != null) { + real = realObj; + } + } + final Log log = getLog(real.getClass().getName(), null); + if (event.getException() == null) { + if (log.isTraceEnabled()) { + realLog(log, "Task \"" + task.getTaskName() + "\" finished.", + Project.MSG_VERBOSE, null); + } + } else { + realLog(log, "Task \"" + task.getTaskName() + + "\" finished with error.", Project.MSG_ERR, + event.getException()); + } + } + } + + + /** + * @see BuildListener#messageLogged + */ + /** {@inheritDoc}. */ + public void messageLogged(final BuildEvent event) { + if (initialized) { + Object categoryObject = event.getTask(); + String categoryString = null; + String categoryDetail = null; + + if (categoryObject == null) { + categoryObject = event.getTarget(); + if (categoryObject == null) { + categoryObject = event.getProject(); + categoryString = PROJECT_LOG; + categoryDetail = event.getProject().getName(); + } else { + categoryString = TARGET_LOG; + categoryDetail = event.getTarget().getName(); + } + } else { + // It's a task - append the target + if (event.getTarget() != null) { + categoryString = categoryObject.getClass().getName(); + categoryDetail = event.getTarget().getName(); + } else { + categoryString = categoryObject.getClass().getName(); + } + + } + + final Log log = getLog(categoryString, categoryDetail); + final int priority = event.getPriority(); + final String message = event.getMessage(); + realLog(log, message, priority , null); + } + } + + private void realLog(final Log log, final String message, final int priority, final Throwable t) { + final PrintStream tmpOut = System.out; + final PrintStream tmpErr = System.err; + System.setOut(out); + System.setErr(err); + switch (priority) { + case Project.MSG_ERR: + if (t == null) { + log.error(message); + } else { + log.error(message, t); + } + break; + case Project.MSG_WARN: + if (t == null) { + log.warn(message); + } else { + log.warn(message, t); + } + break; + case Project.MSG_INFO: + if (t == null) { + log.info(message); + } else { + log.info(message, t); + } + break; + case Project.MSG_VERBOSE: + log.debug(message); + break; + case Project.MSG_DEBUG: + log.debug(message); + break; + default: + log.error(message); + break; + } + System.setOut(tmpOut); + System.setErr(tmpErr); + } + + // CheckStyle:VisibilityModifier OFF - bc + PrintStream out = System.out; + PrintStream err = System.err; + // CheckStyle:VisibilityModifier ON + + /** + * Set the the output level. + * This is not used, the logger config is used instead. + * @param level ignored + */ + public void setMessageOutputLevel(final int level) { + // Use the logger config + } + + /** + * Set the output print stream. + * @param output the output stream + */ + public void setOutputPrintStream(final PrintStream output) { + this.out = output; + } + + /** + * Set emacs mode. + * This is ignored. + * @param emacsMode ignored + */ + public void setEmacsMode(final boolean emacsMode) { + // Doesn't make sense for c-l. Use the logger config + } + + /** + * Set the error print stream. + * @param err the error stream + */ + public void setErrorPrintStream(final PrintStream err) { + this.err = err; + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/Log4jListener.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/Log4jListener.java new file mode 100644 index 00000000..829f1183 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/Log4jListener.java @@ -0,0 +1,177 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.listener; + +import org.apache.log4j.Logger; +import org.apache.log4j.helpers.NullEnumeration; +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildListener; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.Task; + + +/** + * Listener which sends events to Log4j logging system + * + */ +public class Log4jListener implements BuildListener { + + /** Indicates if the listener was initialized. */ + private final boolean initialized; + + /** + * log category we log into + */ + public static final String LOG_ANT = "org.apache.tools.ant"; + + /** + * Construct the listener and make sure there is a valid appender. + */ + public Log4jListener() { + final Logger log = Logger.getLogger(LOG_ANT); + final Logger rootLog = Logger.getRootLogger(); + initialized = !(rootLog.getAllAppenders() instanceof NullEnumeration); + if (!initialized) { + log.error("No log4j.properties in build area"); + } + } + + /** + * @see BuildListener#buildStarted + */ + /** {@inheritDoc}. */ + public void buildStarted(final BuildEvent event) { + if (initialized) { + final Logger log = Logger.getLogger(Project.class.getName()); + log.info("Build started."); + } + } + + /** + * @see BuildListener#buildFinished + */ + /** {@inheritDoc}. */ + public void buildFinished(final BuildEvent event) { + if (initialized) { + final Logger log = Logger.getLogger(Project.class.getName()); + if (event.getException() == null) { + log.info("Build finished."); + } else { + log.error("Build finished with error.", event.getException()); + } + } + } + + /** + * @see BuildListener#targetStarted + */ + /** {@inheritDoc}. */ + public void targetStarted(final BuildEvent event) { + if (initialized) { + final Logger log = Logger.getLogger(Target.class.getName()); + log.info("Target \"" + event.getTarget().getName() + "\" started."); + } + } + + /** + * @see BuildListener#targetFinished + */ + /** {@inheritDoc}. */ + public void targetFinished(final BuildEvent event) { + if (initialized) { + final String targetName = event.getTarget().getName(); + final Logger cat = Logger.getLogger(Target.class.getName()); + if (event.getException() == null) { + cat.info("Target \"" + targetName + "\" finished."); + } else { + cat.error("Target \"" + targetName + + "\" finished with error.", event.getException()); + } + } + } + + /** + * @see BuildListener#taskStarted + */ + /** {@inheritDoc}. */ + public void taskStarted(final BuildEvent event) { + if (initialized) { + final Task task = event.getTask(); + final Logger log = Logger.getLogger(task.getClass().getName()); + log.info("Task \"" + task.getTaskName() + "\" started."); + } + } + + /** + * @see BuildListener#taskFinished + */ + /** {@inheritDoc}. */ + public void taskFinished(final BuildEvent event) { + if (initialized) { + final Task task = event.getTask(); + final Logger log = Logger.getLogger(task.getClass().getName()); + if (event.getException() == null) { + log.info("Task \"" + task.getTaskName() + "\" finished."); + } else { + log.error("Task \"" + task.getTaskName() + + "\" finished with error.", event.getException()); + } + } + } + + /** + * @see BuildListener#messageLogged + */ + /** {@inheritDoc}. */ + public void messageLogged(final BuildEvent event) { + if (initialized) { + Object categoryObject = event.getTask(); + if (categoryObject == null) { + categoryObject = event.getTarget(); + if (categoryObject == null) { + categoryObject = event.getProject(); + } + } + + final Logger log + = Logger.getLogger(categoryObject.getClass().getName()); + switch (event.getPriority()) { + case Project.MSG_ERR: + log.error(event.getMessage()); + break; + case Project.MSG_WARN: + log.warn(event.getMessage()); + break; + case Project.MSG_INFO: + log.info(event.getMessage()); + break; + case Project.MSG_VERBOSE: + log.debug(event.getMessage()); + break; + case Project.MSG_DEBUG: + log.debug(event.getMessage()); + break; + default: + log.error(event.getMessage()); + break; + } + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/MailLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/MailLogger.java new file mode 100644 index 00000000..4b50547f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/MailLogger.java @@ -0,0 +1,440 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; +import java.util.StringTokenizer; +import java.util.Vector; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.email.EmailAddress; +import org.apache.tools.ant.taskdefs.email.Header; +import org.apache.tools.ant.taskdefs.email.Mailer; +import org.apache.tools.ant.taskdefs.email.Message; +import org.apache.tools.ant.util.ClasspathUtils; +import org.apache.tools.ant.util.DateUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.StringUtils; +import org.apache.tools.mail.MailMessage; + +/** + * Buffers log messages from DefaultLogger, and sends an e-mail with the + * results. The following Project properties are used to send the mail. + *
      + *
    • MailLogger.mailhost [default: localhost] - Mail server to use
    • + *
    • MailLogger.port [default: 25] - Default port for SMTP
    • + *
    • Maillogger.user [no default] - user name for SMTP auth + * (requires JavaMail)
    • + *
    • Maillogger.password [no default] - password for SMTP auth + * (requires JavaMail)
    • + *
    • Maillogger.ssl [default: false] - on or true if ssl is + * needed (requires JavaMail)
    • + *
    • MailLogger.from [required] - Mail "from" address
    • + *
    • MailLogger.from [no default] - Mail "replyto" address(es), + * comma-separated
    • + *
    • MailLogger.failure.notify [default: true] - Send build failure + * e-mails?
    • + *
    • MailLogger.success.notify [default: true] - Send build success + * e-mails?
    • + *
    • MailLogger.failure.to [required if failure mail to be sent] - Address + * to send failure messages to
    • + *
    • MailLogger.success.to [required if success mail to be sent] - Address + * to send success messages to
    • + *
    • MailLogger.failure.cc [no default] - Address + * to send failure messages to carbon copy (cc)
    • + *
    • MailLogger.success.to [no default] - Address + * to send success messages to carbon copy (cc)
    • + *
    • MailLogger.failure.bcc [no default] - Address + * to send failure messages to blind carbon copy (bcc)
    • + *
    • MailLogger.success.bcc [no default] - Address + * to send success messages to blind carbon copy (bcc)
    • + *
    • MailLogger.failure.subject [default: "Build Failure"] - Subject of + * failed build
    • + *
    • MailLogger.success.subject [default: "Build Success"] - Subject of + * successful build
    • + *
    • MailLogger.failure.body [default: none] - fixed text of + * mail body for a failed build, default is to send the logfile
    • + *
    • MailLogger.success.body [default: none] - fixed text of + * mail body for a successful build, default is to send the logfile
    • + *
    • MailLogger.mimeType [default: text/plain] - MIME-Type of email
    • + *
    • MailLogger.charset [no default] - character set of email
    • + *
    • Maillogger.starttls.enable [default: false] - on or true if + * STARTTLS should be supported (requires JavaMail)
    • + *
    • MailLogger.properties.file [no default] - Filename of + * properties file that will override other values.
    • + *
    + * These properties are set using standard Ant property setting mechanisms + * (<property>, command-line -D, etc). Ant properties can be overridden + * by specifying the filename of a properties file in the + * MailLogger.properties.file property . Any properties defined in that + * file will override Ant properties. + * + */ +public class MailLogger extends DefaultLogger { + /** Buffer in which the message is constructed prior to sending */ + private StringBuffer buffer = new StringBuffer(); + + private static final String DEFAULT_MIME_TYPE = "text/plain"; + + /** + * Sends an e-mail with the log results. + * + * @param event the build finished event + */ + public void buildFinished(BuildEvent event) { + super.buildFinished(event); + + Project project = event.getProject(); + Hashtable properties = project.getProperties(); + + // overlay specified properties file (if any), which overrides project + // settings + Properties fileProperties = new Properties(); + String filename = (String) properties.get("MailLogger.properties.file"); + if (filename != null) { + InputStream is = null; + try { + is = new FileInputStream(filename); + fileProperties.load(is); + } catch (IOException ioe) { + // ignore because properties file is not required + } finally { + FileUtils.close(is); + } + } + + for (Enumeration e = fileProperties.keys(); e.hasMoreElements();) { + String key = (String) e.nextElement(); + String value = fileProperties.getProperty(key); + properties.put(key, project.replaceProperties(value)); + } + + boolean success = (event.getException() == null); + String prefix = success ? "success" : "failure"; + + try { + boolean notify = Project.toBoolean(getValue(properties, + prefix + ".notify", "on")); + + if (!notify) { + return; + } + Values values = new Values() + .mailhost(getValue(properties, "mailhost", "localhost")) + .port(Integer.parseInt( + getValue( + properties, "port", + String.valueOf(MailMessage.DEFAULT_PORT)))) + .user(getValue(properties, "user", "")) + .password(getValue(properties, "password", "")) + .ssl(Project.toBoolean(getValue(properties, + "ssl", "off"))) + .starttls(Project.toBoolean(getValue(properties, + "starttls.enable", "off"))) + .from(getValue(properties, "from", null)) + .replytoList(getValue(properties, "replyto", "")) + .toList(getValue(properties, prefix + ".to", null)) + .toCcList(getValue(properties, prefix + ".cc", "")) + .toBccList(getValue(properties, prefix + ".bcc", "")) + .mimeType(getValue(properties, "mimeType", DEFAULT_MIME_TYPE)) + .charset(getValue(properties, "charset", "")) + .body(getValue(properties, prefix + ".body", "")) + .subject(getValue( + properties, prefix + ".subject", + (success) ? "Build Success" : "Build Failure")); + if (values.user().equals("") + && values.password().equals("") + && !values.ssl() && !values.starttls()) { + sendMail(values, buffer.substring(0)); + } else { + sendMimeMail( + event.getProject(), values, buffer.substring(0)); + } + } catch (Exception e) { + System.out.println("MailLogger failed to send e-mail!"); + e.printStackTrace(System.err); + } + } + + private static class Values { + private String mailhost; + public String mailhost() { + return mailhost; + } + public Values mailhost(String mailhost) { + this.mailhost = mailhost; + return this; + } + private int port; + public int port() { + return port; + } + public Values port(int port) { + this.port = port; + return this; + } + private String user; + public String user() { + return user; + } + public Values user(String user) { + this.user = user; + return this; + } + private String password; + public String password() { + return password; + } + public Values password(String password) { + this.password = password; + return this; + } + private boolean ssl; + public boolean ssl() { + return ssl; + } + public Values ssl(boolean ssl) { + this.ssl = ssl; + return this; + } + private String from; + public String from() { + return from; + } + public Values from(String from) { + this.from = from; + return this; + } + private String replytoList; + public String replytoList() { + return replytoList; + } + public Values replytoList(String replytoList) { + this.replytoList = replytoList; + return this; + } + private String toList; + public String toList() { + return toList; + } + public Values toList(String toList) { + this.toList = toList; + return this; + } + private String toCcList; + public String toCcList() { + return toCcList; + } + public Values toCcList(String toCcList) { + this.toCcList = toCcList; + return this; + } + private String toBccList; + public String toBccList() { + return toBccList; + } + public Values toBccList(String toBccList) { + this.toBccList = toBccList; + return this; + } + private String subject; + public String subject() { + return subject; + } + public Values subject(String subject) { + this.subject = subject; + return this; + } + private String charset; + public String charset() { + return charset; + } + public Values charset(String charset) { + this.charset = charset; + return this; + } + private String mimeType; + public String mimeType() { + return mimeType; + } + public Values mimeType(String mimeType) { + this.mimeType = mimeType; + return this; + } + private String body; + public String body() { + return body; + } + public Values body(String body) { + this.body = body; + return this; + } + private boolean starttls; + public boolean starttls() { + return starttls; + } + public Values starttls(boolean starttls) { + this.starttls = starttls; + return this; + } + } + + /** + * Receives and buffers log messages. + * + * @param message the message being logger + */ + protected void log(String message) { + buffer.append(message).append(StringUtils.LINE_SEP); + } + + + /** + * Gets the value of a property. + * + * @param properties Properties to obtain value from + * @param name suffix of property name. "MailLogger." will be + * prepended internally. + * @param defaultValue value returned if not present in the properties. + * Set to null to make required. + * @return The value of the property, or default value. + * @exception Exception thrown if no default value is specified and the + * property is not present in properties. + */ + private String getValue(Hashtable properties, String name, + String defaultValue) throws Exception { + String propertyName = "MailLogger." + name; + String value = (String) properties.get(propertyName); + + if (value == null) { + value = defaultValue; + } + + if (value == null) { + throw new Exception("Missing required parameter: " + propertyName); + } + + return value; + } + + + /** + * Send the mail + * @param values the various values. + * @param message mail body + * @exception IOException thrown if sending message fails + */ + private void sendMail(Values values, String message) throws IOException { + MailMessage mailMessage = new MailMessage( + values.mailhost(), values.port()); + mailMessage.setHeader("Date", DateUtils.getDateForHeader()); + + mailMessage.from(values.from()); + if (!values.replytoList().equals("")) { + StringTokenizer t = new StringTokenizer( + values.replytoList(), ", ", false); + while (t.hasMoreTokens()) { + mailMessage.replyto(t.nextToken()); + } + } + StringTokenizer t = new StringTokenizer(values.toList(), ", ", false); + while (t.hasMoreTokens()) { + mailMessage.to(t.nextToken()); + } + + mailMessage.setSubject(values.subject()); + + if (values.charset().length() > 0) { + mailMessage.setHeader("Content-Type", values.mimeType() + + "; charset=\"" + values.charset() + "\""); + } else { + mailMessage.setHeader("Content-Type", values.mimeType()); + } + + PrintStream ps = mailMessage.getPrintStream(); + ps.println(values.body().length() > 0 ? values.body() : message); + + mailMessage.sendAndClose(); + } + /** + * Send the mail (MimeMail) + * @param project current ant project + * @param values various values + * @param message mail body + */ + private void sendMimeMail(Project project, Values values, String message) { + Mailer mailer = null; + try { + mailer = (Mailer) ClasspathUtils.newInstance( + "org.apache.tools.ant.taskdefs.email.MimeMailer", + MailLogger.class.getClassLoader(), Mailer.class); + } catch (BuildException e) { + Throwable t = e.getCause() == null ? e : e.getCause(); + log("Failed to initialise MIME mail: " + t.getMessage()); + return; + } + // convert the replyTo string into a vector of emailaddresses + Vector replyToList = vectorizeEmailAddresses(values.replytoList()); + mailer.setHost(values.mailhost()); + mailer.setPort(values.port()); + mailer.setUser(values.user()); + mailer.setPassword(values.password()); + mailer.setSSL(values.ssl()); + mailer.setEnableStartTLS(values.starttls()); + Message mymessage = + new Message(values.body().length() > 0 ? values.body() : message); + mymessage.setProject(project); + mymessage.setMimeType(values.mimeType()); + if (values.charset().length() > 0) { + mymessage.setCharset(values.charset()); + } + mailer.setMessage(mymessage); + mailer.setFrom(new EmailAddress(values.from())); + mailer.setReplyToList(replyToList); + Vector toList = vectorizeEmailAddresses(values.toList()); + mailer.setToList(toList); + Vector toCcList = vectorizeEmailAddresses(values.toCcList()); + mailer.setCcList(toCcList); + Vector toBccList = vectorizeEmailAddresses(values.toBccList()); + mailer.setBccList(toBccList); + mailer.setFiles(new Vector()); + mailer.setSubject(values.subject()); + mailer.setHeaders(new Vector
    ()); + mailer.send(); + } + private Vector vectorizeEmailAddresses(String listString) { + Vector emailList = new Vector(); + StringTokenizer tokens = new StringTokenizer(listString, ","); + while (tokens.hasMoreTokens()) { + emailList.addElement(new EmailAddress(tokens.nextToken())); + } + return emailList; + } +} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/ProfileLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/ProfileLogger.java new file mode 100644 index 00000000..bbf5bb4f --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/ProfileLogger.java @@ -0,0 +1,112 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.util.StringUtils; + +/** + * This is a special logger that is designed to profile builds. + * + * @since Ant1.8 + */ +public class ProfileLogger extends DefaultLogger { + + private Map profileData = new ConcurrentHashMap(); + + /** + * Logs a message to say that the target has started. + * + * @param event + * An event with any relevant extra information. Must not be + * null. + */ + public void targetStarted(BuildEvent event) { + Date now = new Date(); + String name = "Target " + event.getTarget().getName(); + logStart(event, now, name); + profileData.put(event.getTarget(), now); + } + + /** + * Logs a message to say that the target has finished. + * + * @param event + * An event with any relevant extra information. Must not be + * null. + */ + public void targetFinished(BuildEvent event) { + Date start = (Date) profileData.remove(event.getTarget()); + String name = "Target " + event.getTarget().getName(); + logFinish(event, start, name); + } + + /** + * Logs a message to say that the task has started. + * + * @param event + * An event with any relevant extra information. Must not be + * null. + */ + public void taskStarted(BuildEvent event) { + String name = event.getTask().getTaskName(); + Date now = new Date(); + logStart(event, now, name); + profileData.put(event.getTask(), now); + } + + /** + * Logs a message to say that the task has finished. + * + * @param event + * An event with any relevant extra information. Must not be + * null. + */ + public void taskFinished(BuildEvent event) { + Date start = (Date) profileData.remove(event.getTask()); + String name = event.getTask().getTaskName(); + logFinish(event, start, name); + } + + private void logFinish(BuildEvent event, Date start, String name) { + Date now = new Date(); + String msg = null; + if (start != null) { + long diff = now.getTime() - start.getTime(); + msg = StringUtils.LINE_SEP + name + ": finished " + now + " (" + + diff + "ms)"; + } else { + msg = StringUtils.LINE_SEP + name + ": finished " + now + + " (unknown duration, start not detected)"; + } + printMessage(msg, out, event.getPriority()); + log(msg); + } + + private void logStart(BuildEvent event, Date start, String name) { + String msg = StringUtils.LINE_SEP + name + ": started " + start; + printMessage(msg, out, event.getPriority()); + log(msg); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SilentLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SilentLogger.java new file mode 100644 index 00000000..6ddfd7f9 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SilentLogger.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.DefaultLogger; + +/** + * A logger which logs nothing but build failure and what task might output + * + * @since 1.9.0 + */ +public class SilentLogger extends DefaultLogger { + + @Override + public void buildStarted(BuildEvent event) { + // log nothing + } + + @Override + public void buildFinished(BuildEvent event) { + if (event.getException() != null) { + super.buildFinished(event); + } + } + + @Override + public void targetStarted(BuildEvent event) { + // log nothing + } + + @Override + public void targetFinished(BuildEvent event) { + // log nothing + } + + @Override + public void taskStarted(BuildEvent event) { + // log nothing + } + + @Override + public void taskFinished(BuildEvent event) { + // log nothing + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SimpleBigProjectLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SimpleBigProjectLogger.java new file mode 100644 index 00000000..18f8dc68 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/SimpleBigProjectLogger.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.listener; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.NoBannerLogger; + +/** + * Displays subproject names like {@link BigProjectLogger} + * but is otherwise as quiet as {@link NoBannerLogger}. + * @since Ant1.8.1 + */ +public class SimpleBigProjectLogger extends NoBannerLogger { + + /** + * Override point, extract the target name + * + * @param event the event to work on + * @return the target name -including the owning project name (if non-null) + */ + protected String extractTargetName(BuildEvent event) { + String targetName = super.extractTargetName(event); + String projectName = extractProjectName(event); + if (projectName != null && targetName != null) { + return projectName + '.' + targetName; + } else { + return targetName; + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/TimestampedLogger.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/TimestampedLogger.java new file mode 100644 index 00000000..91296e32 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/TimestampedLogger.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.listener; + +import org.apache.tools.ant.DefaultLogger; + +/** + * Like a normal logger, except with timed outputs + */ +public class TimestampedLogger extends DefaultLogger { + + /** + * what appears between the old message and the new + */ + public static final String SPACER = " - at "; + + + /** + * This is an override point: the message that indicates whether a build failed. + * Subclasses can change/enhance the message. + * + * @return The classic "BUILD FAILED" plus a timestamp + */ + protected String getBuildFailedMessage() { + return super.getBuildFailedMessage() + SPACER + getTimestamp(); + } + + /** + * This is an override point: the message that indicates that a build succeeded. + * Subclasses can change/enhance the message. + * + * @return The classic "BUILD SUCCESSFUL" plus a timestamp + */ + protected String getBuildSuccessfulMessage() { + return super.getBuildSuccessfulMessage() + SPACER + getTimestamp(); + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/defaults.properties b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/defaults.properties new file mode 100644 index 00000000..2994382e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/listener/defaults.properties @@ -0,0 +1,58 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#################################################### +# +# ANSI COLOR LOGGER CONFIGURATION +# +# Format for AnsiColorLogger.*= +# Attribute;Foreground;Background +# +# Attribute is one of the following: +# 0 -> Reset All Attributes (return to normal mode) +# 1 -> Bright (Usually turns on BOLD) +# 2 -> Dim +# 3 -> Underline +# 5 -> link +# 7 -> Reverse +# 8 -> Hidden +# +# Foreground is one of the following: +# 30 -> Black +# 31 -> Red +# 32 -> Green +# 33 -> Yellow +# 34 -> Blue +# 35 -> Magenta +# 36 -> Cyan +# 37 -> White +# +# Background is one of the following: +# 40 -> Black +# 41 -> Red +# 42 -> Green +# 43 -> Yellow +# 44 -> Blue +# 45 -> Magenta +# 46 -> Cyan +# 47 -> White +# +#################################################### + +AnsiColorLogger.ERROR_COLOR=2;31 +AnsiColorLogger.WARNING_COLOR=2;35 +AnsiColorLogger.INFO_COLOR=2;36 +AnsiColorLogger.VERBOSE_COLOR=2;32 +AnsiColorLogger.DEBUG_COLOR=2;34 diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader2.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader2.java new file mode 100644 index 00000000..1a4cac62 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader2.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.loader; + +import org.apache.tools.ant.AntClassLoader; + +/** + * @deprecated since 1.7 + * Just use {@link AntClassLoader} itself. + */ +public class AntClassLoader2 extends AntClassLoader { + /** No args constructor. */ + public AntClassLoader2() { + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader5.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader5.java new file mode 100644 index 00000000..a91ed41e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/loader/AntClassLoader5.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.loader; + +import java.io.Closeable; +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; + +import org.apache.tools.ant.AntClassLoader; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; + +/** + * Overrides getResources which became non-final in Java5 and + * implements Closeable + */ +public class AntClassLoader5 extends AntClassLoader implements Closeable { + /** + * Creates a classloader for the given project using the classpath given. + * + * @param parent The parent classloader to which unsatisfied loading + * attempts are delegated. May be null, + * in which case the classloader which loaded this + * class is used as the parent. + * @param project The project to which this classloader is to belong. + * Must not be null. + * @param classpath the classpath to use to load the classes. + * May be null, in which case no path + * elements are set up to start with. + * @param parentFirst If true, indicates that the parent + * classloader should be consulted before trying to + * load the a class through this loader. + */ + public AntClassLoader5(ClassLoader parent, Project project, + Path classpath, boolean parentFirst) { + super(parent, project, classpath, parentFirst); + } + + /** {@inheritDoc} */ + public Enumeration getResources(String name) throws IOException { + return getNamedResources(name); + } + + /** {@inheritDoc} */ + public void close() { + cleanup(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/GetProperty.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/GetProperty.java new file mode 100644 index 00000000..c08808aa --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/GetProperty.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +/** + * Interface to a class (normally PropertyHelper) to get a property. + * @since Ant 1.8.0 + */ +public interface GetProperty { + /** + * Returns the value of a property if it is set. + * @param name name of the property. + * @return the property value, or null for no match or for name being null. + */ + Object getProperty(String name); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalProperties.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalProperties.java new file mode 100644 index 00000000..c9ce3af0 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalProperties.java @@ -0,0 +1,152 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import org.apache.tools.ant.MagicNames; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.PropertyHelper; + +/** + * Thread local class containing local properties. + * @since Ant 1.8.0 + */ +public class LocalProperties + extends InheritableThreadLocal + implements PropertyHelper.PropertyEvaluator, + PropertyHelper.PropertySetter { + + /** + * Get a localproperties for the given project. + * @param project the project to retrieve the localproperties for. + * @return the localproperties. + */ + public static synchronized LocalProperties get(Project project) { + LocalProperties l = (LocalProperties) project.getReference( + MagicNames.REFID_LOCAL_PROPERTIES); + if (l == null) { + l = new LocalProperties(); + project.addReference(MagicNames.REFID_LOCAL_PROPERTIES, l); + PropertyHelper.getPropertyHelper(project).add(l); + } + return l; + } + + // -------------------------------------------------- + // + // Thread stuff + // + // -------------------------------------------------- + + /** + * Construct a new LocalProperties object. + */ + private LocalProperties() { + } + + /** + * Get the initial value. + * @return a new localproperties stack. + */ + protected synchronized LocalPropertyStack initialValue() { + return new LocalPropertyStack(); + } + + private LocalPropertyStack current() { + return (LocalPropertyStack) get(); + } + + // -------------------------------------------------- + // + // Local property adding and scoping + // + // -------------------------------------------------- + + /** + * Add a local property to the current scope. + * @param property the property name to add. + */ + public void addLocal(String property) { + current().addLocal(property); + } + + /** enter the scope */ + public void enterScope() { + current().enterScope(); + } + + /** exit the scope */ + public void exitScope() { + current().exitScope(); + } + + // -------------------------------------------------- + // + // Copy - used in parallel to make a new stack + // + // -------------------------------------------------- + + /** + * Copy the stack for a parallel thread. + * To be called from the parallel thread itself. + */ + public void copy() { + set(current().copy()); + } + + // -------------------------------------------------- + // + // PropertyHelper delegate methods + // + // -------------------------------------------------- + + /** + * Evaluate a property. + * @param property the property's String "identifier". + * @param helper the invoking PropertyHelper. + * @return Object value. + */ + public Object evaluate(String property, PropertyHelper helper) { + return current().evaluate(property, helper); + } + + /** + * Set a *new" property. + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + public boolean setNew( + String property, Object value, PropertyHelper propertyHelper) { + return current().setNew(property, value, propertyHelper); + } + + /** + * Set a property. + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + public boolean set( + String property, Object value, PropertyHelper propertyHelper) { + return current().set(property, value, propertyHelper); + } +} + + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalPropertyStack.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalPropertyStack.java new file mode 100644 index 00000000..482f28cd --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/LocalPropertyStack.java @@ -0,0 +1,161 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import java.util.LinkedList; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.tools.ant.PropertyHelper; + +/** + * A stack of local property maps. + * There is a map for each scope (target, sequential, macro). + * @since Ant 1.8.0 + */ +public class LocalPropertyStack { + private final LinkedList> stack = new LinkedList>(); + private final Object LOCK = new Object(); + + // -------------------------------------------------- + // + // Local property adding and scoping + // + // -------------------------------------------------- + + /** + * Add a local property. + * @param property the name of the local property. + */ + public void addLocal(String property) { + synchronized (LOCK) { + Map map = stack.peek(); + if (map != null) { + map.put(property, NullReturn.NULL); + } + } + } + + /** + * Enter the local scope. + */ + public void enterScope() { + synchronized (LOCK) { + stack.addFirst(new ConcurrentHashMap()); + } + } + + /** + * Exit the local scope. + */ + public void exitScope() { + synchronized (LOCK) { + stack.removeFirst().clear(); + } + } + + // -------------------------------------------------- + // + // Copy - used in parallel to make a new stack + // + // -------------------------------------------------- + + /** + * Copy the stack for a parallel thread. + * @return a copy. + */ + public LocalPropertyStack copy() { + synchronized (LOCK) { + LocalPropertyStack ret = new LocalPropertyStack(); + ret.stack.addAll(stack); + return ret; + } + } + + // -------------------------------------------------- + // + // PropertyHelper delegate methods + // + // -------------------------------------------------- + + /** + * Evaluate a property. + * @param property the property's String "identifier". + * @param helper the invoking PropertyHelper. + * @return Object value. + */ + public Object evaluate(String property, PropertyHelper helper) { + synchronized (LOCK) { + for (Map map : stack) { + Object ret = map.get(property); + if (ret != null) { + return ret; + } + } + } + return null; + } + + /** + * Set a *new" property. + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + public boolean setNew( + String property, Object value, PropertyHelper propertyHelper) { + Map map = getMapForProperty(property); + if (map == null) { + return false; + } + Object currValue = map.get(property); + if (currValue == NullReturn.NULL) { + map.put(property, value); + } + return true; + } + + /** + * Set a property. + * @param property the property's String "identifier". + * @param value the value to set. + * @param propertyHelper the invoking PropertyHelper. + * @return true if this entity 'owns' the property. + */ + public boolean set(String property, Object value, PropertyHelper propertyHelper) { + Map map = getMapForProperty(property); + if (map == null) { + return false; + } + map.put(property, value); + return true; + } + + private Map getMapForProperty(String property) { + synchronized (LOCK) { + for (Map map : stack) { + if (map.get(property) != null) { + return map; + } + } + } + return null; + } +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/NullReturn.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/NullReturn.java new file mode 100644 index 00000000..067aa9f1 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/NullReturn.java @@ -0,0 +1,38 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +/** + * Class to represent a null and to stop the chain of lookups. + * @since Ant 1.8.0 + */ +public final class NullReturn { + /** a value to use in a property helper to stop looking properties */ + public static final NullReturn NULL = new NullReturn(); + + /** Private constructor */ + private NullReturn() { + } + + /** + * {@inheritDoc} + */ + public String toString() { + return "null"; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseNextProperty.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseNextProperty.java new file mode 100644 index 00000000..5e5dfc07 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseNextProperty.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import java.text.ParsePosition; + +import org.apache.tools.ant.Project; + +/** + * Helper for {@link PropertyExpander PropertyExpander} that can be + * used to expand property references to values. + * @since Ant 1.8.0 + */ +public interface ParseNextProperty { + /** + * Get the current project. + * @return the current ant project. + */ + Project getProject(); + + /** + * Return any property that can be parsed from the specified position + * in the specified String. + * @param value String to parse + * @param pos ParsePosition + * @return Object or null if no property is at the current location. + */ + Object parseNextProperty(String value, ParsePosition pos); +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseProperties.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseProperties.java new file mode 100644 index 00000000..f03f966e --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ParseProperties.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import java.text.ParsePosition; +import java.util.Collection; + +import org.apache.tools.ant.Project; + +/** + * Parse properties using a collection of expanders. + * + * @since Ant 1.8.0 + */ +public class ParseProperties implements ParseNextProperty { + + private final Project project; + private final GetProperty getProperty; + private final Collection expanders; + + /** + * Constructor with a getProperty. + * @param project the current Ant project. + * @param expanders a sequence of expanders + * @param getProperty property resolver. + */ + public ParseProperties(Project project, Collection expanders, GetProperty getProperty) { + this.project = project; + this.expanders = expanders; + this.getProperty = getProperty; + } + + /** + * Get the project. + * @return the current Ant project. + */ + public Project getProject() { + return project; + } + + /** + * Decode properties from a String representation. + * + *
      + * + *
    • This implementation starts parsing the value + * parameter (unsurprisingly) at the beginning and asks each + * {@link PropertyExpander PropertyExpander} whether there is a + * property reference at that point. PropertyExpanders return + * the name of a property they may find and may advance the parse + * position.
    • + * + *
    • If the PropertyExpander returns null the + * method continues with the next PropertyExpander, otherwise it + * tries to look up the property's value using the configured + * {@link GetProperty GetProperty} instance.
    • + * + *
    • Once all PropertyExpanders have been consulted, the parse + * position is advanced by one character and the process repeated + * until value is exhausted.
    • + * + *
    + * + *

    If the entire contents of value resolves to a + * single property, the looked up property value is returned. + * Otherwise a String is returned that concatenates the + * non-property parts of value and the expanded + * values of the properties that have been found.

    + * + * @param value The string to be scanned for property references. + * May be null, in which case this + * method returns immediately with no effect. + * + * @return the original string with the properties replaced, or + * null if the original string is null. + */ + public Object parseProperties(String value) { + if (value == null || "".equals(value)) { + return value; + } + final int len = value.length(); + ParsePosition pos = new ParsePosition(0); + Object o = parseNextProperty(value, pos); + if (o != null && pos.getIndex() >= len) { + return o; + } + StringBuffer sb = new StringBuffer(len * 2); + if (o == null) { + sb.append(value.charAt(pos.getIndex())); + pos.setIndex(pos.getIndex() + 1); + } else { + sb.append(o); + } + while (pos.getIndex() < len) { + o = parseNextProperty(value, pos); + if (o == null) { + sb.append(value.charAt(pos.getIndex())); + pos.setIndex(pos.getIndex() + 1); + } else { + sb.append(o); + } + } + return sb.toString(); + } + + /** + * Learn whether a String contains replaceable properties. + * + *

    Uses the configured {@link PropertyExpander + * PropertyExpanders} and scans through the string. Returns true + * as soon as any expander finds a property.

    + * + * @param value the String to check. + * @return true if value contains property notation. + */ + public boolean containsProperties(String value) { + if (value == null) { + return false; + } + final int len = value.length(); + for (ParsePosition pos = new ParsePosition(0); pos.getIndex() < len;) { + if (parsePropertyName(value, pos) != null) { + return true; + } + pos.setIndex(pos.getIndex() + 1); + } + return false; + } + + /** + * Return any property that can be parsed from the specified position + * in the specified String. + * + *

    Uses the configured {@link PropertyExpander + * PropertyExpanders} and {@link GetProperty GetProperty} + * instance .

    + * + * @param value String to parse + * @param pos ParsePosition + * @return Object or null if no property is at the current + * location. If a property reference has been found but the + * property doesn't expand to a value, the property's name is + * returned. + */ + public Object parseNextProperty(String value, ParsePosition pos) { + final int start = pos.getIndex(); + + if (start > value.length()) { + // early exit, can't find any property here, no need to + // consult all the delegates. + return null; + } + + String propertyName = parsePropertyName(value, pos); + if (propertyName != null) { + Object result = getProperty(propertyName); + if (result != null) { + return result; + } + if (project != null) { + project.log( + "Property \"" + propertyName + + "\" has not been set", Project.MSG_VERBOSE); + } + return value.substring(start, pos.getIndex()); + } + return null; + } + + private String parsePropertyName(String value, ParsePosition pos) { + for (PropertyExpander propertyExpander : expanders) { + String propertyName = propertyExpander.parsePropertyName(value, pos, this); + if (propertyName == null) { + continue; + } + return propertyName; + } + return null; + } + + private Object getProperty(String propertyName) { + return getProperty.getProperty(propertyName); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/PropertyExpander.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/PropertyExpander.java new file mode 100644 index 00000000..a2b4d633 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/PropertyExpander.java @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import java.text.ParsePosition; + +import org.apache.tools.ant.PropertyHelper; + +/** + * Responsible for locating a property reference inside a String. + * @since Ant 1.8.0 + */ +public interface PropertyExpander extends PropertyHelper.Delegate { + + /** + * Determine whether there is a property reference at the current + * ParsePosition and return its name (or null if there is none). + * + *

    Implementations should advance the ParsePosition to the last + * character that makes up the property reference. E.g. the + * default implementation would return "foo" for + * ${foo} and advance the ParsePosition to the + * } character.

    + * + * @param s the String to parse. + * @param pos the ParsePosition in use, the location is expected + * to be modified if a property reference has been found (and may + * even be modified if no reference has been found). + * @param parseNextProperty provides access to the Project and may + * be used to look up property values. + * @return property name if any, else null. + */ + String parsePropertyName(String s, ParsePosition pos, + ParseNextProperty parseNextProperty); +} + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java new file mode 100644 index 00000000..5bdd3545 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/ResolvePropertyMap.java @@ -0,0 +1,151 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.property; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; + +/** + * Class to resolve properties in a map. This class is explicitly not threadsafe. + * @since Ant 1.8.0 + */ +public class ResolvePropertyMap implements GetProperty { + private final Set seen = new HashSet(); + private final ParseProperties parseProperties; + private final GetProperty master; + private Map map; + private String prefix; + // whether properties of the value side of the map should be + // expanded + private boolean prefixValues = false; + // whether the current getProperty call is expanding the key side + // of the map + private boolean expandingLHS = true; + + /** + * Constructor with a master getproperty and a collection of expanders. + * @param project the current ant project. + * @param master the master property holder (usually PropertyHelper) + * @param expanders a collection of expanders (usually from PropertyHelper). + */ + public ResolvePropertyMap(Project project, GetProperty master, Collection expanders) { + this.master = master; + this.parseProperties = new ParseProperties(project, expanders, this); + } + + /** + * Returns the value of a property if it is set. + * @param name name of the property. + * @return the property value, or null for no match or for name being null. + */ + public Object getProperty(String name) { + if (seen.contains(name)) { + throw new BuildException( + "Property " + name + " was circularly " + "defined."); + } + + try { + + // If the property we are looking up is a key in the map + // (first call into this method from resolveAllProperties) + // or we've been asked to prefix the value side (later + // recursive calls via the GetProperty interface) the + // prefix must be prepended when looking up the property + // outside of the map. + String fullKey = name; + if (prefix != null && (expandingLHS || prefixValues)) { + fullKey = prefix + name; + } + + Object masterValue = master.getProperty(fullKey); + if (masterValue != null) { + // If the property already has a value outside of the + // map, use that value to enforce property + // immutability. + + return masterValue; + } + + seen.add(name); + + String recursiveCallKey = name; + if (prefix != null && !expandingLHS && !prefixValues) { + // only look up unprefixed properties inside the map + // if prefixValues is true or we are expanding the key + // itself + recursiveCallKey = prefix + name; + } + + expandingLHS = false; + // will recurse into this method for each property + // reference found in the map's value + return parseProperties.parseProperties((String) map.get(recursiveCallKey)); + } finally { + seen.remove(name); + } + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @deprecated since Ant 1.8.2, use the three-arg method instead. + */ + public void resolveAllProperties(Map map) { + resolveAllProperties(map, null, false); + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @param prefix the prefix the properties defined inside the map + * will finally receive - may be null. + * @deprecated since Ant 1.8.2, use the three-arg method instead. + */ + public void resolveAllProperties(Map map, String prefix) { + resolveAllProperties(map, null, false); + } + + /** + * The action method - resolves all the properties in a map. + * @param map the map to resolve properties in. + * @param prefix the prefix the properties defined inside the map + * will finally receive - may be null. + * @param prefixValues - whether the prefix will be applied + * to properties on the value side of the map as well. + */ + public void resolveAllProperties(Map map, String prefix, + boolean prefixValues) { + // The map, prefix and prefixValues flag get used in the + // getProperty callback + this.map = map; + this.prefix = prefix; + this.prefixValues = prefixValues; + + for (String key : map.keySet()) { + expandingLHS = true; + Object result = getProperty(key); + String value = result == null ? "" : result.toString(); + map.put(key, value); + } + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/package.html b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/package.html new file mode 100644 index 00000000..7a497ecf --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/property/package.html @@ -0,0 +1,19 @@ + + + Contains helper classes for ant properties. + diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java new file mode 100644 index 00000000..1ce81166 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractCvsTask.java @@ -0,0 +1,873 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.types.Environment; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.StringUtils; + +/** + * original Cvs.java 1.20 + * + * NOTE: This implementation has been moved here from Cvs.java with + * the addition of some accessors for extensibility. Another task + * can extend this with some customized output processing. + * + * @since Ant 1.5 + */ +public abstract class AbstractCvsTask extends Task { + /** + * Default compression level to use, if compression is enabled via + * setCompression( true ). + */ + public static final int DEFAULT_COMPRESSION_LEVEL = 3; + private static final int MAXIMUM_COMRESSION_LEVEL = 9; + + private Commandline cmd = new Commandline(); + + private ArrayList modules = new ArrayList(); + + /** list of Commandline children */ + private Vector vecCommandlines = new Vector(); + + /** + * the CVSROOT variable. + */ + private String cvsRoot; + + /** + * the CVS_RSH variable. + */ + private String cvsRsh; + + /** + * the package/module to check out. + */ + private String cvsPackage; + /** + * the tag + */ + private String tag; + /** + * the default command. + */ + private static final String DEFAULT_COMMAND = "checkout"; + /** + * the CVS command to execute. + */ + private String command = null; + + /** + * suppress information messages. + */ + private boolean quiet = false; + + /** + * suppress all messages. + */ + private boolean reallyquiet = false; + + /** + * compression level to use. + */ + private int compression = 0; + + /** + * report only, don't change any files. + */ + private boolean noexec = false; + + /** + * CVS port + */ + private int port = 0; + + /** + * CVS password file + */ + private File passFile = null; + + /** + * the directory where the checked out files should be placed. + */ + private File dest; + + /** whether or not to append stdout/stderr to existing files */ + private boolean append = false; + + /** + * the file to direct standard output from the command. + */ + private File output; + + /** + * the file to direct standard error from the command. + */ + private File error; + + /** + * If true it will stop the build if cvs exits with error. + * Default is false. (Iulian) + */ + private boolean failOnError = false; + + /** + * Create accessors for the following, to allow different handling of + * the output. + */ + private ExecuteStreamHandler executeStreamHandler; + private OutputStream outputStream; + private OutputStream errorStream; + + /** empty no-arg constructor*/ + public AbstractCvsTask() { + super(); + } + + /** + * sets the handler + * @param handler a handler able of processing the output and error streams from the cvs exe + */ + public void setExecuteStreamHandler(ExecuteStreamHandler handler) { + this.executeStreamHandler = handler; + } + + /** + * find the handler and instantiate it if it does not exist yet + * @return handler for output and error streams + */ + protected ExecuteStreamHandler getExecuteStreamHandler() { + + if (this.executeStreamHandler == null) { + setExecuteStreamHandler(new PumpStreamHandler(getOutputStream(), + getErrorStream())); + } + + return this.executeStreamHandler; + } + + /** + * sets a stream to which the output from the cvs executable should be sent + * @param outputStream stream to which the stdout from cvs should go + */ + protected void setOutputStream(OutputStream outputStream) { + + this.outputStream = outputStream; + } + + /** + * access the stream to which the stdout from cvs should go + * if this stream has already been set, it will be returned + * if the stream has not yet been set, if the attribute output + * has been set, the output stream will go to the output file + * otherwise the output will go to ant's logging system + * @return output stream to which cvs' stdout should go to + */ + protected OutputStream getOutputStream() { + + if (this.outputStream == null) { + + if (output != null) { + try { + setOutputStream(new PrintStream( + new BufferedOutputStream( + new FileOutputStream(output + .getPath(), + append)))); + } catch (IOException e) { + throw new BuildException(e, getLocation()); + } + } else { + setOutputStream(new LogOutputStream(this, Project.MSG_INFO)); + } + } + + return this.outputStream; + } + + /** + * sets a stream to which the stderr from the cvs exe should go + * @param errorStream an output stream willing to process stderr + */ + protected void setErrorStream(OutputStream errorStream) { + + this.errorStream = errorStream; + } + + /** + * access the stream to which the stderr from cvs should go + * if this stream has already been set, it will be returned + * if the stream has not yet been set, if the attribute error + * has been set, the output stream will go to the file denoted by the error attribute + * otherwise the stderr output will go to ant's logging system + * @return output stream to which cvs' stderr should go to + */ + protected OutputStream getErrorStream() { + + if (this.errorStream == null) { + + if (error != null) { + + try { + setErrorStream(new PrintStream( + new BufferedOutputStream( + new FileOutputStream(error.getPath(), + append)))); + } catch (IOException e) { + throw new BuildException(e, getLocation()); + } + } else { + setErrorStream(new LogOutputStream(this, Project.MSG_WARN)); + } + } + + return this.errorStream; + } + + /** + * Sets up the environment for toExecute and then runs it. + * @param toExecute the command line to execute + * @throws BuildException if failonError is set to true and the cvs command fails + */ + protected void runCommand(Commandline toExecute) throws BuildException { + // TODO: we should use JCVS (www.ice.com/JCVS) instead of + // command line execution so that we don't rely on having + // native CVS stuff around (SM) + + // We can't do it ourselves as jCVS is GPLed, a third party task + // outside of Apache repositories would be possible though (SB). + + Environment env = new Environment(); + + if (port > 0) { + Environment.Variable var = new Environment.Variable(); + var.setKey("CVS_CLIENT_PORT"); + var.setValue(String.valueOf(port)); + env.addVariable(var); + + // non-standard environment variable used by CVSNT, WinCVS + // and others + var = new Environment.Variable(); + var.setKey("CVS_PSERVER_PORT"); + var.setValue(String.valueOf(port)); + env.addVariable(var); + } + + /** + * Need a better cross platform integration with , so + * use the same filename. + */ + if (passFile == null) { + + File defaultPassFile = new File( + System.getProperty("cygwin.user.home", + System.getProperty("user.home")) + + File.separatorChar + ".cvspass"); + + if (defaultPassFile.exists()) { + this.setPassfile(defaultPassFile); + } + } + + if (passFile != null) { + if (passFile.isFile() && passFile.canRead()) { + Environment.Variable var = new Environment.Variable(); + var.setKey("CVS_PASSFILE"); + var.setValue(String.valueOf(passFile)); + env.addVariable(var); + log("Using cvs passfile: " + String.valueOf(passFile), + Project.MSG_VERBOSE); + } else if (!passFile.canRead()) { + log("cvs passfile: " + String.valueOf(passFile) + + " ignored as it is not readable", + Project.MSG_WARN); + } else { + log("cvs passfile: " + String.valueOf(passFile) + + " ignored as it is not a file", + Project.MSG_WARN); + } + } + + if (cvsRsh != null) { + Environment.Variable var = new Environment.Variable(); + var.setKey("CVS_RSH"); + var.setValue(String.valueOf(cvsRsh)); + env.addVariable(var); + } + + // + // Just call the getExecuteStreamHandler() and let it handle + // the semantics of instantiation or retrieval. + // + Execute exe = new Execute(getExecuteStreamHandler(), null); + + exe.setAntRun(getProject()); + if (dest == null) { + dest = getProject().getBaseDir(); + } + + if (!dest.exists()) { + dest.mkdirs(); + } + + exe.setWorkingDirectory(dest); + exe.setCommandline(toExecute.getCommandline()); + exe.setEnvironment(env.getVariables()); + + try { + String actualCommandLine = executeToString(exe); + + log(actualCommandLine, Project.MSG_VERBOSE); + int retCode = exe.execute(); + log("retCode=" + retCode, Project.MSG_DEBUG); + + if (failOnError && Execute.isFailure(retCode)) { + throw new BuildException("cvs exited with error code " + + retCode + + StringUtils.LINE_SEP + + "Command line was [" + + actualCommandLine + "]", + getLocation()); + } + } catch (IOException e) { + if (failOnError) { + throw new BuildException(e, getLocation()); + } + log("Caught exception: " + e.getMessage(), Project.MSG_WARN); + } catch (BuildException e) { + if (failOnError) { + throw(e); + } + Throwable t = e.getCause(); + if (t == null) { + t = e; + } + log("Caught exception: " + t.getMessage(), Project.MSG_WARN); + } catch (Exception e) { + if (failOnError) { + throw new BuildException(e, getLocation()); + } + log("Caught exception: " + e.getMessage(), Project.MSG_WARN); + } + } + + /** + * do the work + * @throws BuildException if failonerror is set to true and the + * cvs command fails. + */ + public void execute() throws BuildException { + + String savedCommand = getCommand(); + + if (this.getCommand() == null && vecCommandlines.size() == 0) { + // re-implement legacy behaviour: + this.setCommand(AbstractCvsTask.DEFAULT_COMMAND); + } + + String c = this.getCommand(); + Commandline cloned = null; + if (c != null) { + cloned = (Commandline) cmd.clone(); + cloned.createArgument(true).setLine(c); + this.addConfiguredCommandline(cloned, true); + } + + try { + final int size = vecCommandlines.size(); + for (int i = 0; i < size; i++) { + this.runCommand((Commandline) vecCommandlines.elementAt(i)); + } + } finally { + if (cloned != null) { + removeCommandline(cloned); + } + setCommand(savedCommand); + FileUtils.close(outputStream); + FileUtils.close(errorStream); + } + } + + private String executeToString(Execute execute) { + + String cmdLine = Commandline.describeCommand(execute + .getCommandline()); + StringBuffer stringBuffer = removeCvsPassword(cmdLine); + + String newLine = StringUtils.LINE_SEP; + String[] variableArray = execute.getEnvironment(); + + if (variableArray != null) { + stringBuffer.append(newLine); + stringBuffer.append(newLine); + stringBuffer.append("environment:"); + stringBuffer.append(newLine); + for (int z = 0; z < variableArray.length; z++) { + stringBuffer.append(newLine); + stringBuffer.append("\t"); + stringBuffer.append(variableArray[z]); + } + } + + return stringBuffer.toString(); + } + + /** + * Removes the cvs password from the command line, if given on the command + * line. This password can be given on the command line in the cvsRoot + * -d:pserver:user:password@server:path + * It has to be noted that the password may be omitted altogether. + * @param cmdLine the CVS command line + * @return a StringBuffer where the password has been removed (if available) + */ + private StringBuffer removeCvsPassword(String cmdLine) { + StringBuffer stringBuffer = new StringBuffer(cmdLine); + + int start = cmdLine.indexOf("-d:"); + + if (start >= 0) { + int stop = cmdLine.indexOf("@", start); + int startproto = cmdLine.indexOf(":", start); + int startuser = cmdLine.indexOf(":", startproto + 1); + int startpass = cmdLine.indexOf(":", startuser + 1); + stop = cmdLine.indexOf("@", start); + if (stop >= 0 && startpass > startproto && startpass < stop) { + for (int i = startpass + 1; i < stop; i++) { + stringBuffer.replace(i, i + 1, "*"); + } + } + } + return stringBuffer; + } + + /** + * The CVSROOT variable. + * + * @param root + * the CVSROOT variable + */ + public void setCvsRoot(String root) { + + // Check if not real cvsroot => set it to null + if (root != null) { + if (root.trim().equals("")) { + root = null; + } + } + + this.cvsRoot = root; + } + + /** + * access the CVSROOT variable + * @return CVSROOT + */ + public String getCvsRoot() { + + return this.cvsRoot; + } + + /** + * The CVS_RSH variable. + * + * @param rsh the CVS_RSH variable + */ + public void setCvsRsh(String rsh) { + // Check if not real cvsrsh => set it to null + if (rsh != null) { + if (rsh.trim().equals("")) { + rsh = null; + } + } + + this.cvsRsh = rsh; + } + + /** + * access the CVS_RSH variable + * @return the CVS_RSH variable + */ + public String getCvsRsh() { + + return this.cvsRsh; + } + + /** + * Port used by CVS to communicate with the server. + * + * @param port port of CVS + */ + public void setPort(int port) { + this.port = port; + } + + /** + * access the port of CVS + * @return the port of CVS + */ + public int getPort() { + + return this.port; + } + + /** + * Password file to read passwords from. + * + * @param passFile password file to read passwords from + */ + public void setPassfile(File passFile) { + this.passFile = passFile; + } + + /** + * find the password file + * @return password file + */ + public File getPassFile() { + + return this.passFile; + } + + /** + * The directory where the checked out files should be placed. + * + *

    Note that this is different from CVS's -d command line + * switch as Ant will never shorten pathnames to avoid empty + * directories.

    + * + * @param dest directory where the checked out files should be placed + */ + public void setDest(File dest) { + this.dest = dest; + } + + /** + * get the file where the checked out files should be placed + * + * @return directory where the checked out files should be placed + */ + public File getDest() { + + return this.dest; + } + + /** + * The package/module to operate upon. + * + * @param p package or module to operate upon + */ + public void setPackage(String p) { + this.cvsPackage = p; + } + + /** + * access the package or module to operate upon + * + * @return package/module + */ + public String getPackage() { + + return this.cvsPackage; + } + /** + * tag or branch + * @return tag or branch + * @since ant 1.6.1 + */ + public String getTag() { + return tag; + } + + /** + * The tag of the package/module to operate upon. + * @param p tag + */ + public void setTag(String p) { + // Check if not real tag => set it to null + if (p != null && p.trim().length() > 0) { + tag = p; + addCommandArgument("-r" + p); + } + } + + /** + * This needs to be public to allow configuration + * of commands externally. + * @param arg command argument + */ + public void addCommandArgument(String arg) { + this.addCommandArgument(cmd, arg); + } + + /** + * This method adds a command line argument to an external command. + * + * I do not understand what this method does in this class ??? + * particularly not why it is public ???? + * AntoineLL July 23d 2003 + * + * @param c command line to which one argument should be added + * @param arg argument to add + */ + public void addCommandArgument(Commandline c, String arg) { + c.createArgument().setValue(arg); + } + + + /** + * Use the most recent revision no later than the given date. + * @param p a date as string in a format that the CVS executable + * can understand see man cvs + */ + public void setDate(String p) { + if (p != null && p.trim().length() > 0) { + addCommandArgument("-D"); + addCommandArgument(p); + } + } + + /** + * The CVS command to execute. + * + * This should be deprecated, it is better to use the Commandline class ? + * AntoineLL July 23d 2003 + * + * @param c a command as string + */ + public void setCommand(String c) { + this.command = c; + } + /** + * accessor to a command line as string + * + * This should be deprecated + * AntoineLL July 23d 2003 + * + * @return command line as string + */ + public String getCommand() { + return this.command; + } + + /** + * If true, suppress informational messages. + * @param q if true, suppress informational messages + */ + public void setQuiet(boolean q) { + quiet = q; + } + + /** + * If true, suppress all messages. + * @param q if true, suppress all messages + * @since Ant 1.6 + */ + public void setReallyquiet(boolean q) { + reallyquiet = q; + } + + + /** + * If true, report only and don't change any files. + * + * @param ne if true, report only and do not change any files. + */ + public void setNoexec(boolean ne) { + noexec = ne; + } + + /** + * The file to direct standard output from the command. + * @param output a file to which stdout should go + */ + public void setOutput(File output) { + this.output = output; + } + + /** + * The file to direct standard error from the command. + * + * @param error a file to which stderr should go + */ + public void setError(File error) { + this.error = error; + } + + /** + * Whether to append output/error when redirecting to a file. + * @param value true indicated you want to append + */ + public void setAppend(boolean value) { + this.append = value; + } + + /** + * Stop the build process if the command exits with + * a return code other than 0. + * Defaults to false. + * @param failOnError stop the build process if the command exits with + * a return code other than 0 + */ + public void setFailOnError(boolean failOnError) { + this.failOnError = failOnError; + } + + /** + * Configure a commandline element for things like cvsRoot, quiet, etc. + * @param c the command line which will be configured + * if the commandline is initially null, the function is a noop + * otherwise the function append to the commandline arguments concerning + *
      + *
    • + * cvs package + *
    • + *
    • + * compression + *
    • + *
    • + * quiet or reallyquiet + *
    • + *
    • cvsroot
    • + *
    • noexec
    • + *
    + */ + protected void configureCommandline(Commandline c) { + if (c == null) { + return; + } + c.setExecutable("cvs"); + if (cvsPackage != null) { + c.createArgument().setLine(cvsPackage); + } + for (Module m : modules) { + c.createArgument().setValue(m.getName()); + } + if (this.compression > 0 + && this.compression <= MAXIMUM_COMRESSION_LEVEL) { + c.createArgument(true).setValue("-z" + this.compression); + } + if (quiet && !reallyquiet) { + c.createArgument(true).setValue("-q"); + } + if (reallyquiet) { + c.createArgument(true).setValue("-Q"); + } + if (noexec) { + c.createArgument(true).setValue("-n"); + } + if (cvsRoot != null) { + c.createArgument(true).setLine("-d" + cvsRoot); + } + } + + /** + * remove a particular command from a vector of command lines + * @param c command line which should be removed + */ + protected void removeCommandline(Commandline c) { + vecCommandlines.removeElement(c); + } + + /** + * Adds direct command-line to execute. + * @param c command line to execute + */ + public void addConfiguredCommandline(Commandline c) { + this.addConfiguredCommandline(c, false); + } + + /** + * Configures and adds the given Commandline. + * @param c commandline to insert + * @param insertAtStart If true, c is + * inserted at the beginning of the vector of command lines + */ + public void addConfiguredCommandline(Commandline c, + boolean insertAtStart) { + if (c == null) { + return; + } + this.configureCommandline(c); + if (insertAtStart) { + vecCommandlines.insertElementAt(c, 0); + } else { + vecCommandlines.addElement(c); + } + } + + /** + * If set to a value 1-9 it adds -zN to the cvs command line, else + * it disables compression. + * @param level compression level 1 to 9 + */ + public void setCompressionLevel(int level) { + this.compression = level; + } + + /** + * If true, this is the same as compressionlevel="3". + * + * @param usecomp If true, turns on compression using default + * level, AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL. + */ + public void setCompression(boolean usecomp) { + setCompressionLevel(usecomp + ? AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL : 0); + } + + /** + * add a named module/package. + * + * @since Ant 1.8.0 + */ + public void addModule(Module m) { + modules.add(m); + } + + protected List getModules() { + @SuppressWarnings("unchecked") + final List clone = (List) modules.clone(); + return clone; + } + + public static final class Module { + private String name; + public void setName(String s) { + name = s; + } + public String getName() { + return name; + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractJarSignerTask.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractJarSignerTask.java new file mode 100644 index 00000000..bc8c0319 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AbstractJarSignerTask.java @@ -0,0 +1,423 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.File; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.filters.LineContainsRegExp; +import org.apache.tools.ant.types.Environment; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.RedirectorElement; +import org.apache.tools.ant.types.RegularExpression; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * This is factored out from {@link SignJar}; a base class that can be used + * for both signing and verifying JAR files using jarsigner + */ + +public abstract class AbstractJarSignerTask extends Task { + // CheckStyle:VisibilityModifier OFF - bc + /** + * The name of the jar file. + */ + protected File jar; + /** + * The alias of signer. + */ + protected String alias; + /** + * The url or path of keystore file. + */ + protected String keystore; + /** + * password for the store + */ + protected String storepass; + /** + * type of store,-storetype param + */ + protected String storetype; + /** + * password for the key in the store + */ + protected String keypass; + /** + * verbose output + */ + protected boolean verbose; + /** + * strict checking + * @since Ant 1.9.1 + */ + protected boolean strict = false; + /** + * The maximum amount of memory to use for Jar signer + */ + protected String maxMemory; + /** + * the filesets of the jars to sign + */ + protected Vector filesets = new Vector(); + /** + * name of JDK program we are looking for + */ + protected static final String JARSIGNER_COMMAND = "jarsigner"; + + // CheckStyle:VisibilityModifier ON + + /** + * redirector used to talk to the jarsigner program + */ + private RedirectorElement redirector; + + /** + * Java declarations -J-Dname=value + */ + private Environment sysProperties = new Environment(); + + /** + * error string for unit test verification: {@value} + */ + public static final String ERROR_NO_SOURCE = "jar must be set through jar attribute " + + "or nested filesets"; + + /** + * Path holding all non-filesets of filesystem resources we want to sign. + * + * @since Ant 1.7 + */ + private Path path = null; + + /** + * The executable to use instead of jarsigner. + * + * @since Ant 1.8.0 + */ + private String executable; + + /** + * Set the maximum memory to be used by the jarsigner process + * + * @param max a string indicating the maximum memory according to the JVM + * conventions (e.g. 128m is 128 Megabytes) + */ + public void setMaxmemory(String max) { + maxMemory = max; + } + + /** + * the jar file to sign; required + * + * @param jar the jar file to sign + */ + public void setJar(final File jar) { + this.jar = jar; + } + + /** + * the alias to sign under; required + * + * @param alias the alias to sign under + */ + public void setAlias(final String alias) { + this.alias = alias; + } + + /** + * keystore location; required + * + * @param keystore the keystore location + */ + public void setKeystore(final String keystore) { + this.keystore = keystore; + } + + /** + * password for keystore integrity; required + * + * @param storepass the password for the keystore + */ + public void setStorepass(final String storepass) { + this.storepass = storepass; + } + + /** + * keystore type; optional + * + * @param storetype the keystore type + */ + public void setStoretype(final String storetype) { + this.storetype = storetype; + } + + /** + * password for private key (if different); optional + * + * @param keypass the password for the key (if different) + */ + public void setKeypass(final String keypass) { + this.keypass = keypass; + } + + /** + * Enable verbose output when signing ; optional: default false + * + * @param verbose if true enable verbose output + */ + public void setVerbose(final boolean verbose) { + this.verbose = verbose; + } + + /** + * do strict checking + * @since Ant 1.9.1 + * @param strict + */ + public void setStrict(boolean strict) { + this.strict = strict; + } + + /** + * Adds a set of files to sign + * + * @param set a set of files to sign + * @since Ant 1.4 + */ + public void addFileset(final FileSet set) { + filesets.addElement(set); + } + + /** + * Add a system property. + * + * @param sysp system property. + */ + public void addSysproperty(Environment.Variable sysp) { + sysProperties.addVariable(sysp); + } + + /** + * Adds a path of files to sign. + * + * @return a path of files to sign. + * @since Ant 1.7 + */ + public Path createPath() { + if (path == null) { + path = new Path(getProject()); + } + return path.createPath(); + } + + /** + * init processing logic; this is retained through our execution(s) + */ + protected void beginExecution() { + + redirector = createRedirector(); + } + + /** + * any cleanup logic + */ + protected void endExecution() { + redirector = null; + } + + /** + * Create the redirector to use, if any. + * + * @return a configured RedirectorElement. + */ + private RedirectorElement createRedirector() { + RedirectorElement result = new RedirectorElement(); + if (storepass != null) { + StringBuffer input = new StringBuffer(storepass).append('\n'); + if (keypass != null) { + input.append(keypass).append('\n'); + } + result.setInputString(input.toString()); + result.setLogInputString(false); + // Try to avoid showing password prompts on log output, as they would be confusing. + LineContainsRegExp filter = new LineContainsRegExp(); + RegularExpression rx = new RegularExpression(); + // TODO only handles English locale, not ja or zh_CN + rx.setPattern("^(Enter Passphrase for keystore: |Enter key password for .+: )$"); + filter.addConfiguredRegexp(rx); + filter.setNegate(true); + result.createErrorFilterChain().addLineContainsRegExp(filter); + } + return result; + } + + /** + * get the redirector. Non-null between invocations of + * {@link #beginExecution()} and {@link #endExecution()} + * @return a redirector or null + */ + public RedirectorElement getRedirector() { + return redirector; + } + + /** + * Sets the actual executable command to invoke, instead of the binary + * jarsigner found in Ant's JDK. + * @param executable the command to invoke. + * @since Ant 1.8.0 + */ + public void setExecutable(String executable) { + this.executable = executable; + } + + /** + * these are options common to signing and verifying + * @param cmd command to configure + */ + protected void setCommonOptions(final ExecTask cmd) { + if (maxMemory != null) { + addValue(cmd, "-J-Xmx" + maxMemory); + } + + if (verbose) { + addValue(cmd, "-verbose"); + } + + if (strict) { + addValue(cmd, "-strict"); + } + + //now patch in all system properties + for (Environment.Variable variable : sysProperties.getVariablesVector()) { + declareSysProperty(cmd, variable); + } + } + + /** + * + * @param cmd command to configure + * @param property property to set + * @throws BuildException if the property is not correctly defined. + */ + protected void declareSysProperty( + ExecTask cmd, Environment.Variable property) throws BuildException { + addValue(cmd, "-J-D" + property.getContent()); + } + + + /** + * bind to a keystore if the attributes are there + * @param cmd command to configure + */ + protected void bindToKeystore(final ExecTask cmd) { + if (null != keystore) { + // is the keystore a file + addValue(cmd, "-keystore"); + String loc; + File keystoreFile = getProject().resolveFile(keystore); + if (keystoreFile.exists()) { + loc = keystoreFile.getPath(); + } else { + // must be a URL - just pass as is + loc = keystore; + } + addValue(cmd, loc); + } + if (null != storetype) { + addValue(cmd, "-storetype"); + addValue(cmd, storetype); + } + } + + /** + * create the jarsigner executable task + * @return a task set up with the executable of jarsigner, failonerror=true + * and bound to our redirector + */ + protected ExecTask createJarSigner() { + final ExecTask cmd = new ExecTask(this); + if (executable == null) { + cmd.setExecutable(JavaEnvUtils.getJdkExecutable(JARSIGNER_COMMAND)); + } else { + cmd.setExecutable(executable); + } + cmd.setTaskType(JARSIGNER_COMMAND); + cmd.setFailonerror(true); + cmd.addConfiguredRedirector(redirector); + return cmd; + } + + /** + * clone our filesets vector, and patch in the jar attribute as a new + * fileset, if is defined + * @return a vector of FileSet instances + */ + protected Vector createUnifiedSources() { + @SuppressWarnings("unchecked") + Vector sources = (Vector) filesets.clone(); + if (jar != null) { + //we create a fileset with the source file. + //this lets us combine our logic for handling output directories, + //mapping etc. + FileSet sourceJar = new FileSet(); + sourceJar.setProject(getProject()); + sourceJar.setFile(jar); + sourceJar.setDir(jar.getParentFile()); + sources.add(sourceJar); + } + return sources; + } + + /** + * clone our path and add all explicitly specified FileSets as + * well, patch in the jar attribute as a new fileset if it is + * defined. + * @return a path that contains all files to sign + * @since Ant 1.7 + */ + protected Path createUnifiedSourcePath() { + Path p = path == null ? new Path(getProject()) : (Path) path.clone(); + for (FileSet fileSet : createUnifiedSources()) { + p.add(fileSet); + } + return p; + } + + /** + * Has either a path or a fileset been specified? + * @return true if a path or fileset has been specified. + * @since Ant 1.7 + */ + protected boolean hasResources() { + return path != null || filesets.size() > 0; + } + + /** + * add a value argument to a command + * @param cmd command to manipulate + * @param value value to add + */ + protected void addValue(final ExecTask cmd, String value) { + cmd.createArg().setValue(value); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ant.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ant.java new file mode 100644 index 00000000..eba4731a --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Ant.java @@ -0,0 +1,836 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.lang.reflect.Method; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Set; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.BuildListener; +import org.apache.tools.ant.DefaultLogger; +import org.apache.tools.ant.MagicNames; +import org.apache.tools.ant.Main; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.Target; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.PropertySet; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.VectorSet; + +/** + * Build a sub-project. + * + *
    + *  <target name="foo" depends="init">
    + *    <ant antfile="build.xml" target="bar" >
    + *      <property name="property1" value="aaaaa" />
    + *      <property name="foo" value="baz" />
    + *    </ant>
    + *  </target>
    + *
    + *  <target name="bar" depends="init">
    + *    <echo message="prop is ${property1} ${foo}" />
    + *  </target>
    + * 
    + * + * + * @since Ant 1.1 + * + * @ant.task category="control" + */ +public class Ant extends Task { + + private static final FileUtils FILE_UTILS = FileUtils.getFileUtils(); + + /** the basedir where is executed the build file */ + private File dir = null; + + /** + * the build.xml file (can be absolute) in this case dir will be + * ignored + */ + private String antFile = null; + + /** the output */ + private String output = null; + + /** should we inherit properties from the parent ? */ + private boolean inheritAll = true; + + /** should we inherit references from the parent ? */ + private boolean inheritRefs = false; + + /** the properties to pass to the new project */ + private Vector properties = new Vector(); + + /** the references to pass to the new project */ + private Vector references = new Vector(); + + /** the temporary project created to run the build file */ + private Project newProject; + + /** The stream to which output is to be written. */ + private PrintStream out = null; + + /** the sets of properties to pass to the new project */ + private Vector propertySets = new Vector(); + + /** the targets to call on the new project */ + private Vector targets = new Vector(); + + /** whether the target attribute was specified **/ + private boolean targetAttributeSet = false; + + /** + * Whether the basedir of the new project should be the same one + * as it would be when running the build file directly - + * independent of dir and/or inheritAll settings. + * + * @since Ant 1.8.0 + */ + private boolean useNativeBasedir = false; + + /** + * simple constructor + */ + public Ant() { + //default + } + + /** + * create a task bound to its creator + * @param owner owning task + */ + public Ant(Task owner) { + bindToOwner(owner); + } + + /** + * Whether the basedir of the new project should be the same one + * as it would be when running the build file directly - + * independent of dir and/or inheritAll settings. + * + * @since Ant 1.8.0 + */ + public void setUseNativeBasedir(boolean b) { + useNativeBasedir = b; + } + + /** + * If true, pass all properties to the new Ant project. + * Defaults to true. + * @param value if true pass all properties to the new Ant project. + */ + public void setInheritAll(boolean value) { + inheritAll = value; + } + + /** + * If true, pass all references to the new Ant project. + * Defaults to false. + * @param value if true, pass all references to the new Ant project + */ + public void setInheritRefs(boolean value) { + inheritRefs = value; + } + + /** + * Creates a Project instance for the project to call. + */ + public void init() { + newProject = getProject().createSubProject(); + newProject.setJavaVersionProperty(); + } + + /** + * Called in execute or createProperty (via getNewProject()) + * if newProject is null. + * + *

    This can happen if the same instance of this task is run + * twice as newProject is set to null at the end of execute (to + * save memory and help the GC).

    + *

    calls init() again

    + * + */ + private void reinit() { + init(); + } + + /** + * Attaches the build listeners of the current project to the new + * project, configures a possible logfile, transfers task and + * data-type definitions, transfers properties (either all or just + * the ones specified as user properties to the current project, + * depending on inheritall), transfers the input handler. + */ + private void initializeProject() { + newProject.setInputHandler(getProject().getInputHandler()); + + Iterator iter = getBuildListeners(); + while (iter.hasNext()) { + newProject.addBuildListener((BuildListener) iter.next()); + } + + if (output != null) { + File outfile = null; + if (dir != null) { + outfile = FILE_UTILS.resolveFile(dir, output); + } else { + outfile = getProject().resolveFile(output); + } + try { + out = new PrintStream(new FileOutputStream(outfile)); + DefaultLogger logger = new DefaultLogger(); + logger.setMessageOutputLevel(Project.MSG_INFO); + logger.setOutputPrintStream(out); + logger.setErrorPrintStream(out); + newProject.addBuildListener(logger); + } catch (IOException ex) { + log("Ant: Can't set output to " + output); + } + } + // set user-defined properties + if (useNativeBasedir) { + addAlmostAll(getProject().getUserProperties(), PropertyType.USER); + } else { + getProject().copyUserProperties(newProject); + } + + if (!inheritAll) { + // set Ant's built-in properties separately, + // because they are not being inherited. + newProject.initProperties(); + + } else { + // set all properties from calling project + addAlmostAll(getProject().getProperties(), PropertyType.PLAIN); + } + + for (PropertySet ps : propertySets) { + addAlmostAll(ps.getProperties(), PropertyType.PLAIN); + } + } + + /** + * Handles output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param outputToHandle The string output to output. + * @see Task#handleOutput(String) + * @since Ant 1.5 + */ + public void handleOutput(String outputToHandle) { + if (newProject != null) { + newProject.demuxOutput(outputToHandle, false); + } else { + super.handleOutput(outputToHandle); + } + } + + /** + * Handles input. + * Delegate to the created project, if present, otherwise + * call the super class. + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @see Task#handleInput(byte[], int, int) + * @since Ant 1.6 + */ + public int handleInput(byte[] buffer, int offset, int length) + throws IOException { + if (newProject != null) { + return newProject.demuxInput(buffer, offset, length); + } + return super.handleInput(buffer, offset, length); + } + + /** + * Handles output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param toFlush The string to output. + * @see Task#handleFlush(String) + * @since Ant 1.5.2 + */ + public void handleFlush(String toFlush) { + if (newProject != null) { + newProject.demuxFlush(toFlush, false); + } else { + super.handleFlush(toFlush); + } + } + + /** + * Handle error output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param errorOutputToHandle The string to output. + * + * @see Task#handleErrorOutput(String) + * @since Ant 1.5 + */ + public void handleErrorOutput(String errorOutputToHandle) { + if (newProject != null) { + newProject.demuxOutput(errorOutputToHandle, true); + } else { + super.handleErrorOutput(errorOutputToHandle); + } + } + + /** + * Handle error output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param errorOutputToFlush The string to output. + * @see Task#handleErrorFlush(String) + * @since Ant 1.5.2 + */ + public void handleErrorFlush(String errorOutputToFlush) { + if (newProject != null) { + newProject.demuxFlush(errorOutputToFlush, true); + } else { + super.handleErrorFlush(errorOutputToFlush); + } + } + + /** + * Do the execution. + * @throws BuildException if a target tries to call itself; + * probably also if a BuildException is thrown by the new project. + */ + public void execute() throws BuildException { + File savedDir = dir; + String savedAntFile = antFile; + Vector locals = new VectorSet(targets); + try { + getNewProject(); + + if (dir == null && inheritAll) { + dir = getProject().getBaseDir(); + } + + initializeProject(); + + if (dir != null) { + if (!useNativeBasedir) { + newProject.setBaseDir(dir); + if (savedDir != null) { + // has been set explicitly + newProject.setInheritedProperty(MagicNames.PROJECT_BASEDIR, + dir.getAbsolutePath()); + } + } + } else { + dir = getProject().getBaseDir(); + } + + overrideProperties(); + + if (antFile == null) { + antFile = getDefaultBuildFile(); + } + + File file = FILE_UTILS.resolveFile(dir, antFile); + antFile = file.getAbsolutePath(); + + log("calling target(s) " + + ((locals.size() > 0) ? locals.toString() : "[default]") + + " in build file " + antFile, Project.MSG_VERBOSE); + newProject.setUserProperty(MagicNames.ANT_FILE , antFile); + + String thisAntFile = getProject().getProperty(MagicNames.ANT_FILE); + // Are we trying to call the target in which we are defined (or + // the build file if this is a top level task)? + if (thisAntFile != null + && file.equals(getProject().resolveFile(thisAntFile)) + && getOwningTarget() != null) { + + if (getOwningTarget().getName().equals("")) { + if (getTaskName().equals("antcall")) { + throw new BuildException("antcall must not be used at" + + " the top level."); + } + throw new BuildException(getTaskName() + " task at the" + + " top level must not invoke" + + " its own build file."); + } + } + + try { + ProjectHelper.configureProject(newProject, file); + } catch (BuildException ex) { + throw ProjectHelper.addLocationToBuildException( + ex, getLocation()); + } + + if (locals.size() == 0) { + String defaultTarget = newProject.getDefaultTarget(); + if (defaultTarget != null) { + locals.add(defaultTarget); + } + } + + if (newProject.getProperty(MagicNames.ANT_FILE) + .equals(getProject().getProperty(MagicNames.ANT_FILE)) + && getOwningTarget() != null) { + + String owningTargetName = getOwningTarget().getName(); + + if (locals.contains(owningTargetName)) { + throw new BuildException(getTaskName() + " task calling " + + "its own parent target."); + } + boolean circular = false; + for (Iterator it = locals.iterator(); + !circular && it.hasNext();) { + Target other = + getProject().getTargets().get(it.next()); + circular |= (other != null + && other.dependsOn(owningTargetName)); + } + if (circular) { + throw new BuildException(getTaskName() + + " task calling a target" + + " that depends on" + + " its parent target \'" + + owningTargetName + + "\'."); + } + } + + addReferences(); + + if (locals.size() > 0 && !(locals.size() == 1 + && "".equals(locals.get(0)))) { + BuildException be = null; + try { + log("Entering " + antFile + "...", Project.MSG_VERBOSE); + newProject.fireSubBuildStarted(); + newProject.executeTargets(locals); + } catch (BuildException ex) { + be = ProjectHelper + .addLocationToBuildException(ex, getLocation()); + throw be; + } finally { + log("Exiting " + antFile + ".", Project.MSG_VERBOSE); + newProject.fireSubBuildFinished(be); + } + } + } finally { + // help the gc + newProject = null; + for (Property p : properties) { + p.setProject(null); + } + + if (output != null && out != null) { + try { + out.close(); + } catch (final Exception ex) { + //ignore + } + } + dir = savedDir; + antFile = savedAntFile; + } + } + + /** + * Get the default build file name to use when launching the task. + *

    + * This function may be overrided by providers of custom ProjectHelper so they can implement easily their sub + * launcher. + * + * @return the name of the default file + * @since Ant 1.8.0 + */ + protected String getDefaultBuildFile() { + return Main.DEFAULT_BUILD_FILENAME; + } + + /** + * Override the properties in the new project with the one + * explicitly defined as nested elements here. + * @throws BuildException under unknown circumstances. + */ + private void overrideProperties() throws BuildException { + // remove duplicate properties - last property wins + // Needed for backward compatibility + Set set = new HashSet(); + for (int i = properties.size() - 1; i >= 0; --i) { + Property p = properties.get(i); + if (p.getName() != null && !p.getName().equals("")) { + if (set.contains(p.getName())) { + properties.remove(i); + } else { + set.add(p.getName()); + } + } + } + Enumeration e = properties.elements(); + while (e.hasMoreElements()) { + Property p = e.nextElement(); + p.setProject(newProject); + p.execute(); + } + if (useNativeBasedir) { + addAlmostAll(getProject().getInheritedProperties(), + PropertyType.INHERITED); + } else { + getProject().copyInheritedProperties(newProject); + } + } + + /** + * Add the references explicitly defined as nested elements to the + * new project. Also copy over all references that don't override + * existing references in the new project if inheritrefs has been + * requested. + * @throws BuildException if a reference does not have a refid. + */ + private void addReferences() throws BuildException { + @SuppressWarnings("unchecked") + Hashtable thisReferences + = (Hashtable) getProject().getReferences().clone(); + for (Reference ref : references) { + String refid = ref.getRefId(); + if (refid == null) { + throw new BuildException("the refid attribute is required" + + " for reference elements"); + } + if (!thisReferences.containsKey(refid)) { + log("Parent project doesn't contain any reference '" + + refid + "'", + Project.MSG_WARN); + continue; + } + + thisReferences.remove(refid); + String toRefid = ref.getToRefid(); + if (toRefid == null) { + toRefid = refid; + } + copyReference(refid, toRefid); + } + + // Now add all references that are not defined in the + // subproject, if inheritRefs is true + if (inheritRefs) { + Hashtable newReferences = newProject.getReferences(); + for (String key : thisReferences.keySet()) { + if (newReferences.containsKey(key)) { + continue; + } + copyReference(key, key); + newProject.inheritIDReferences(getProject()); + } + } + } + + /** + * Try to clone and reconfigure the object referenced by oldkey in + * the parent project and add it to the new project with the key newkey. + * + *

    If we cannot clone it, copy the referenced object itself and + * keep our fingers crossed.

    + * @param oldKey the reference id in the current project. + * @param newKey the reference id in the new project. + */ + private void copyReference(String oldKey, String newKey) { + Object orig = getProject().getReference(oldKey); + if (orig == null) { + log("No object referenced by " + oldKey + ". Can't copy to " + + newKey, + Project.MSG_WARN); + return; + } + + Class c = orig.getClass(); + Object copy = orig; + try { + Method cloneM = c.getMethod("clone", new Class[0]); + if (cloneM != null) { + copy = cloneM.invoke(orig, new Object[0]); + log("Adding clone of reference " + oldKey, Project.MSG_DEBUG); + } + } catch (Exception e) { + // not Clonable + } + + + if (copy instanceof ProjectComponent) { + ((ProjectComponent) copy).setProject(newProject); + } else { + try { + Method setProjectM = + c.getMethod("setProject", new Class[] {Project.class}); + if (setProjectM != null) { + setProjectM.invoke(copy, new Object[] {newProject}); + } + } catch (NoSuchMethodException e) { + // ignore this if the class being referenced does not have + // a set project method. + } catch (Exception e2) { + String msg = "Error setting new project instance for " + + "reference with id " + oldKey; + throw new BuildException(msg, e2, getLocation()); + } + } + newProject.addReference(newKey, copy); + } + + /** + * Copies all properties from the given table to the new project - + * omitting those that have already been set in the new project as + * well as properties named basedir or ant.file. + * @param props properties Hashtable to copy to the + * new project. + * @param the type of property to set (a plain Ant property, a + * user property or an inherited property). + * @since Ant 1.8.0 + */ + private void addAlmostAll(Hashtable props, PropertyType type) { + Enumeration e = props.keys(); + while (e.hasMoreElements()) { + String key = e.nextElement().toString(); + if (MagicNames.PROJECT_BASEDIR.equals(key) + || MagicNames.ANT_FILE.equals(key)) { + // basedir and ant.file get special treatment in execute() + continue; + } + + String value = props.get(key).toString(); + if (type == PropertyType.PLAIN) { + // don't re-set user properties, avoid the warning message + if (newProject.getProperty(key) == null) { + // no user property + newProject.setNewProperty(key, value); + } + } else if (type == PropertyType.USER) { + newProject.setUserProperty(key, value); + } else if (type == PropertyType.INHERITED) { + newProject.setInheritedProperty(key, value); + } + } + } + + /** + * The directory to use as a base directory for the new Ant project. + * Defaults to the current project's basedir, unless inheritall + * has been set to false, in which case it doesn't have a default + * value. This will override the basedir setting of the called project. + * @param dir new directory as File. + */ + public void setDir(File dir) { + this.dir = dir; + } + + /** + * The build file to use. Defaults to "build.xml". This file is expected + * to be a filename relative to the dir attribute given. + * @param antFile the String build file name. + */ + public void setAntfile(String antFile) { + // @note: it is a string and not a file to handle relative/absolute + // otherwise a relative file will be resolved based on the current + // basedir. + this.antFile = antFile; + } + + /** + * The target of the new Ant project to execute. + * Defaults to the new project's default target. + * @param targetToAdd the name of the target to invoke. + */ + public void setTarget(String targetToAdd) { + if (targetToAdd.equals("")) { + throw new BuildException("target attribute must not be empty"); + } + targets.add(targetToAdd); + targetAttributeSet = true; + } + + /** + * Set the filename to write the output to. This is relative to the value + * of the dir attribute if it has been set or to the base directory of the + * current project otherwise. + * @param outputFile the name of the file to which the output should go. + */ + public void setOutput(String outputFile) { + this.output = outputFile; + } + + /** + * Property to pass to the new project. + * The property is passed as a 'user property'. + * @return the created Property object. + */ + public Property createProperty() { + Property p = new Property(true, getProject()); + p.setProject(getNewProject()); + p.setTaskName("property"); + properties.addElement(p); + return p; + } + + /** + * Add a Reference element identifying a data type to carry + * over to the new project. + * @param ref Reference to add. + */ + public void addReference(Reference ref) { + references.addElement(ref); + } + + /** + * Add a target to this Ant invocation. + * @param t the TargetElement to add. + * @since Ant 1.6.3 + */ + public void addConfiguredTarget(TargetElement t) { + if (targetAttributeSet) { + throw new BuildException( + "nested target is incompatible with the target attribute"); + } + String name = t.getName(); + if (name.equals("")) { + throw new BuildException("target name must not be empty"); + } + targets.add(name); + } + + /** + * Add a set of properties to pass to the new project. + * + * @param ps PropertySet to add. + * @since Ant 1.6 + */ + public void addPropertyset(PropertySet ps) { + propertySets.addElement(ps); + } + + /** + * Get the (sub)-Project instance currently in use. + * @return Project + * @since Ant 1.7 + */ + protected Project getNewProject() { + if (newProject == null) { + reinit(); + } + return newProject; + } + + /** + * @since Ant 1.6.2 + */ + private Iterator getBuildListeners() { + return getProject().getBuildListeners().iterator(); + } + + /** + * Helper class that implements the nested <reference> + * element of <ant> and <antcall>. + */ + public static class Reference + extends org.apache.tools.ant.types.Reference { + + /** Creates a reference to be configured by Ant. */ + public Reference() { + super(); + } + + private String targetid = null; + + /** + * Set the id that this reference to be stored under in the + * new project. + * + * @param targetid the id under which this reference will be passed to + * the new project. */ + public void setToRefid(String targetid) { + this.targetid = targetid; + } + + /** + * Get the id under which this reference will be stored in the new + * project. + * + * @return the id of the reference in the new project. + */ + public String getToRefid() { + return targetid; + } + } + + /** + * Helper class that implements the nested <target> + * element of <ant> and <antcall>. + * @since Ant 1.6.3 + */ + public static class TargetElement { + private String name; + + /** + * Default constructor. + */ + public TargetElement() { + //default + } + + /** + * Set the name of this TargetElement. + * @param name the String target name. + */ + public void setName(String name) { + this.name = name; + } + + /** + * Get the name of this TargetElement. + * @return String. + */ + public String getName() { + return name; + } + } + + private static final class PropertyType { + private PropertyType() {} + private static final PropertyType PLAIN = new PropertyType(); + private static final PropertyType INHERITED = new PropertyType(); + private static final PropertyType USER = new PropertyType(); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntStructure.java new file mode 100644 index 00000000..20f811a8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -0,0 +1,485 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.UnsupportedEncodingException; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.IntrospectionHelper; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.TaskContainer; +import org.apache.tools.ant.types.EnumeratedAttribute; +import org.apache.tools.ant.types.Reference; + +/** + * Creates a partial DTD for Ant from the currently known tasks. + * + * + * @since Ant 1.1 + * + * @ant.task category="xml" + */ +public class AntStructure extends Task { + + private static final String LINE_SEP + = System.getProperty("line.separator"); + + private File output; + private StructurePrinter printer = new DTDPrinter(); + + /** + * The output file. + * @param output the output file + */ + public void setOutput(final File output) { + this.output = output; + } + + /** + * The StructurePrinter to use. + * @param p the printer to use. + * @since Ant 1.7 + */ + public void add(final StructurePrinter p) { + printer = p; + } + + /** + * Build the antstructure DTD. + * + * @exception BuildException if the DTD cannot be written. + */ + @Override + public void execute() throws BuildException { + + if (output == null) { + throw new BuildException("output attribute is required", getLocation()); + } + + PrintWriter out = null; + try { + try { + out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF8")); + } catch (final UnsupportedEncodingException ue) { + /* + * Plain impossible with UTF8, see + * http://java.sun.com/j2se/1.5.0/docs/guide/intl/encoding.doc.html + * + * fallback to platform specific anyway. + */ + out = new PrintWriter(new FileWriter(output)); + } + + printer.printHead(out, getProject(), + new Hashtable>(getProject().getTaskDefinitions()), + new Hashtable>(getProject().getDataTypeDefinitions())); + + printer.printTargetDecl(out); + + for (final String typeName : getProject().getCopyOfDataTypeDefinitions() + .keySet()) { + printer.printElementDecl( + out, getProject(), typeName, + getProject().getDataTypeDefinitions().get(typeName)); + } + + for (final String tName : getProject().getCopyOfTaskDefinitions().keySet()) { + printer.printElementDecl(out, getProject(), tName, + getProject().getTaskDefinitions().get(tName)); + } + + printer.printTail(out); + + if (out.checkError()) { + throw new IOException("Encountered an error writing Ant" + + " structure"); + } + } catch (final IOException ioe) { + throw new BuildException("Error writing " + + output.getAbsolutePath(), ioe, getLocation()); + } finally { + if (out != null) { + out.close(); + } + } + } + + /** + * Writes the actual structure information. + * + *

    {@link #printHead}, {@link #printTargetDecl} and {@link #printTail} + * are called exactly once, {@link #printElementDecl} once for + * each declared task and type.

    + */ + public interface StructurePrinter { + /** + * Prints the header of the generated output. + * + * @param out PrintWriter to write to. + * @param p Project instance for the current task + * @param tasks map (name to implementing class) + * @param types map (name to implementing class) + * data types. + */ + void printHead(PrintWriter out, Project p, Hashtable> tasks, + Hashtable> types); + + /** + * Prints the definition for the target element. + * @param out PrintWriter to write to. + */ + void printTargetDecl(PrintWriter out); + + /** + * Print the definition for a given element. + * + * @param out PrintWriter to write to. + * @param p Project instance for the current task + * @param name element name. + * @param element class of the defined element. + */ + void printElementDecl(PrintWriter out, Project p, String name, + Class element); + + /** + * Prints the trailer. + * @param out PrintWriter to write to. + */ + void printTail(PrintWriter out); + } + + private static class DTDPrinter implements StructurePrinter { + + private static final String BOOLEAN = "%boolean;"; + private static final String TASKS = "%tasks;"; + private static final String TYPES = "%types;"; + + private final Hashtable visited = new Hashtable(); + + public void printTail(final PrintWriter out) { + visited.clear(); + } + + public void printHead(final PrintWriter out, final Project p, final Hashtable> tasks, + final Hashtable> types) { + printHead(out, tasks.keys(), types.keys()); + } + + + /** + * Prints the header of the generated output. + * + *

    Basically this prints the XML declaration, defines some + * entities and the project element.

    + */ + private void printHead(final PrintWriter out, final Enumeration tasks, + final Enumeration types) { + out.println(""); + out.println(""); + out.print(""); + out.print(""); + + out.println(""); + + out.print(""); + out.println(""); + out.println(""); + } + + /** + * Prints the definition for the target element. + */ + public void printTargetDecl(final PrintWriter out) { + out.print(""); + out.println(""); + printTargetAttrs(out, "target"); + out.println(""); + out.println(""); + printTargetAttrs(out, "extension-point"); + } + + /** + * Prints the definition for the target element. + */ + private void printTargetAttrs(final PrintWriter out, final String tag) { + out.print(""); + out.println(""); + } + + /** + * Print the definition for a given element. + */ + public void printElementDecl(final PrintWriter out, final Project p, + final String name, final Class element) { + + if (visited.containsKey(name)) { + return; + } + visited.put(name, ""); + + IntrospectionHelper ih = null; + try { + ih = IntrospectionHelper.getHelper(p, element); + } catch (final Throwable t) { + /* + * TODO - failed to load the class properly. + * + * should we print a warning here? + */ + return; + } + + StringBuffer sb = new StringBuffer("").append(LINE_SEP); + sb.append("").append(LINE_SEP); + out.println(sb); + return; + } + + final Vector v = new Vector(); + if (ih.supportsCharacters()) { + v.addElement("#PCDATA"); + } + + if (TaskContainer.class.isAssignableFrom(element)) { + v.addElement(TASKS); + } + + Enumeration e = ih.getNestedElements(); + while (e.hasMoreElements()) { + v.addElement(e.nextElement()); + } + + if (v.isEmpty()) { + sb.append("EMPTY"); + } else { + sb.append("("); + final int count = v.size(); + for (int i = 0; i < count; i++) { + if (i != 0) { + sb.append(" | "); + } + sb.append(v.elementAt(i)); + } + sb.append(")"); + if (count > 1 || !v.elementAt(0).equals("#PCDATA")) { + sb.append("*"); + } + } + sb.append(">"); + out.println(sb); + + sb = new StringBuffer(" type = ih.getAttributeType(attrName); + if (type.equals(java.lang.Boolean.class) + || type.equals(java.lang.Boolean.TYPE)) { + sb.append(BOOLEAN).append(" "); + } else if (Reference.class.isAssignableFrom(type)) { + sb.append("IDREF "); + } else if (EnumeratedAttribute.class.isAssignableFrom(type)) { + try { + final EnumeratedAttribute ea = + (EnumeratedAttribute) type.newInstance(); + final String[] values = ea.getValues(); + if (values == null + || values.length == 0 + || !areNmtokens(values)) { + sb.append("CDATA "); + } else { + sb.append("("); + for (int i = 0; i < values.length; i++) { + if (i != 0) { + sb.append(" | "); + } + sb.append(values[i]); + } + sb.append(") "); + } + } catch (final InstantiationException ie) { + sb.append("CDATA "); + } catch (final IllegalAccessException ie) { + sb.append("CDATA "); + } + } else if (type.getSuperclass() != null + && type.getSuperclass().getName().equals("java.lang.Enum")) { + try { + final Object[] values = (Object[]) type.getMethod("values", (Class[]) null) + .invoke(null, (Object[]) null); + if (values.length == 0) { + sb.append("CDATA "); + } else { + sb.append('('); + for (int i = 0; i < values.length; i++) { + if (i != 0) { + sb.append(" | "); + } + sb.append(type.getMethod("name", (Class[]) null) + .invoke(values[i], (Object[]) null)); + } + sb.append(") "); + } + } catch (final Exception x) { + sb.append("CDATA "); + } + } else { + sb.append("CDATA "); + } + sb.append("#IMPLIED"); + } + sb.append(">").append(LINE_SEP); + out.println(sb); + + final int count = v.size(); + for (int i = 0; i < count; i++) { + final String nestedName = v.elementAt(i); + if (!"#PCDATA".equals(nestedName) + && !TASKS.equals(nestedName) + && !TYPES.equals(nestedName)) { + printElementDecl(out, p, nestedName, ih.getElementType(nestedName)); + } + } + } + + /** + * Does this String match the XML-NMTOKEN production? + * @param s the string to test + * @return true if the string matches the XML-NMTOKEN + */ + public static final boolean isNmtoken(final String s) { + final int length = s.length(); + for (int i = 0; i < length; i++) { + final char c = s.charAt(i); + // TODO - we are committing CombiningChar and Extender here + if (!Character.isLetterOrDigit(c) + && c != '.' && c != '-' && c != '_' && c != ':') { + return false; + } + } + return true; + } + + /** + * Do the Strings all match the XML-NMTOKEN production? + * + *

    Otherwise they are not suitable as an enumerated attribute, + * for example.

    + * @param s the array of string to test + * @return true if all the strings in the array math XML-NMTOKEN + */ + public static final boolean areNmtokens(final String[] s) { + for (int i = 0; i < s.length; i++) { + if (!isNmtoken(s[i])) { + return false; + } + } + return true; + } + } + + /** + * Does this String match the XML-NMTOKEN production? + * @param s the string to test + * @return true if the string matches the XML-NMTOKEN + */ + protected boolean isNmtoken(final String s) { + return DTDPrinter.isNmtoken(s); + } + + /** + * Do the Strings all match the XML-NMTOKEN production? + * + *

    Otherwise they are not suitable as an enumerated attribute, + * for example.

    + * @param s the array of string to test + * @return true if all the strings in the array math XML-NMTOKEN + */ + protected boolean areNmtokens(final String[] s) { + return DTDPrinter.areNmtokens(s); + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Antlib.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Antlib.java new file mode 100644 index 00000000..8ff836a3 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Antlib.java @@ -0,0 +1,184 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.IOException; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ComponentHelper; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.ProjectHelperRepository; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.TaskContainer; +import org.apache.tools.ant.UnknownElement; +import org.apache.tools.ant.types.resources.URLResource; + + +/** + * Antlib task. It does not + * occur in an ant build file. It is the root element + * an antlib xml file. + * + * @since Ant 1.6 + */ +public class Antlib extends Task implements TaskContainer { + // + // Static + // + + /** The name of this task */ + public static final String TAG = "antlib"; + + /** + * Static method to read an ant lib definition from + * a url. + * + * @param project the current project + * @param antlibUrl the url to read the definitions from + * @param uri the uri that the antlib is to be placed in + * @return the ant lib task + */ + public static Antlib createAntlib(Project project, URL antlibUrl, + String uri) { + // Check if we can contact the URL + try { + URLConnection conn = antlibUrl.openConnection(); + conn.setUseCaches(false); + conn.connect(); + } catch (IOException ex) { + throw new BuildException( + "Unable to find " + antlibUrl, ex); + } + ComponentHelper helper = + ComponentHelper.getComponentHelper(project); + helper.enterAntLib(uri); + URLResource antlibResource = new URLResource(antlibUrl); + try { + // Should be safe to parse + ProjectHelper parser = null; + Object p = + project.getReference(ProjectHelper.PROJECTHELPER_REFERENCE); + if (p instanceof ProjectHelper) { + parser = (ProjectHelper) p; + if (!parser.canParseAntlibDescriptor(antlibResource)) { + parser = null; + } + } + if (parser == null) { + ProjectHelperRepository helperRepository = + ProjectHelperRepository.getInstance(); + parser = helperRepository.getProjectHelperForAntlib(antlibResource); + } + UnknownElement ue = + parser.parseAntlibDescriptor(project, antlibResource); + // Check name is "antlib" + if (!(ue.getTag().equals(TAG))) { + throw new BuildException( + "Unexpected tag " + ue.getTag() + " expecting " + + TAG, ue.getLocation()); + } + Antlib antlib = new Antlib(); + antlib.setProject(project); + antlib.setLocation(ue.getLocation()); + antlib.setTaskName("antlib"); + antlib.init(); + ue.configure(antlib); + return antlib; + } finally { + helper.exitAntLib(); + } + } + + // + // Instance + // + private ClassLoader classLoader; + private String uri = ""; + private List tasks = new ArrayList(); + + /** + * Set the class loader for this antlib. + * This class loader is used for any tasks that + * derive from Definer. + * + * @param classLoader the class loader + */ + protected void setClassLoader(ClassLoader classLoader) { + this.classLoader = classLoader; + } + + /** + * Set the URI for this antlib. + * @param uri the namespace uri + */ + protected void setURI(String uri) { + this.uri = uri; + } + + private ClassLoader getClassLoader() { + if (classLoader == null) { + classLoader = Antlib.class.getClassLoader(); + } + return classLoader; + } + + /** + * add a task to the list of tasks + * + * @param nestedTask Nested task to execute in antlib + */ + public void addTask(Task nestedTask) { + tasks.add(nestedTask); + } + + /** + * Execute the nested tasks, setting the classloader for + * any tasks that derive from Definer. + */ + public void execute() { + //TODO handle tasks added via #addTask() + for (Iterator i = tasks.iterator(); i.hasNext();) { + UnknownElement ue = (UnknownElement) i.next(); + setLocation(ue.getLocation()); + ue.maybeConfigure(); + Object configuredObject = ue.getRealThing(); + if (configuredObject == null) { + continue; + } + if (!(configuredObject instanceof AntlibDefinition)) { + throw new BuildException( + "Invalid task in antlib " + ue.getTag() + + " " + configuredObject.getClass() + " does not " + + "extend org.apache.tools.ant.taskdefs.AntlibDefinition"); + } + AntlibDefinition def = (AntlibDefinition) configuredObject; + def.setURI(uri); + def.setAntlibClassLoader(getClassLoader()); + def.init(); + def.execute(); + } + } + +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntlibDefinition.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntlibDefinition.java new file mode 100644 index 00000000..eef33345 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/AntlibDefinition.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ProjectHelper; +import org.apache.tools.ant.Task; + +/** + * Base class for tasks that that can be used in antlibs. + * For handling uri and class loading. + * + * @since Ant 1.6 + */ +public class AntlibDefinition extends Task { + + private String uri = ""; + private ClassLoader antlibClassLoader; + + /** + * The URI for this definition. + * If the URI is "antlib:org.apache.tools.ant", + * (this is the default uri) + * the uri will be set to "". + * URIs that start with "ant:" are reserved + * and are not allowed in this context. + * @param uri the namespace URI + * @throws BuildException if a reserved URI is used + */ + public void setURI(String uri) throws BuildException { + if (uri.equals(ProjectHelper.ANT_CORE_URI)) { + uri = ""; + } + if (uri.startsWith("ant:")) { + throw new BuildException("Attempt to use a reserved URI " + uri); + } + this.uri = uri; + } + + /** + * The URI for this definition. + * @return The URI for this definition. + */ + public String getURI() { + return uri; + } + + /** + * Set the class loader of the loading object + * + * @param classLoader a ClassLoader value + */ + public void setAntlibClassLoader(ClassLoader classLoader) { + this.antlibClassLoader = classLoader; + } + + /** + * The current antlib classloader + * @return the antlib classloader for the definition, this + * is null if the definition is not used in an antlib. + */ + public ClassLoader getAntlibClassLoader() { + return antlibClassLoader; + } +} diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Apt.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Apt.java new file mode 100644 index 00000000..52154a8c --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/Apt.java @@ -0,0 +1,270 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package org.apache.tools.ant.taskdefs; + +import java.io.File; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.taskdefs.compilers.AptExternalCompilerAdapter; +import org.apache.tools.ant.types.Path; +import org.apache.tools.ant.types.Reference; +import org.apache.tools.ant.util.JavaEnvUtils; + +/** + * Apt Task for running the Annotation processing tool for JDK 1.5. It derives + * from the existing Javac task, and forces the compiler based on whether we're + * executing internally, or externally. + * + * @since Ant 1.7 + */ + + +public class Apt + extends Javac { + private boolean compile = true; + private String factory; + private Path factoryPath; + private Vector