aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java')
-rw-r--r--framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java1042
1 files changed, 0 insertions, 1042 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
deleted file mode 100644
index 5ba2a760..00000000
--- a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java
+++ /dev/null
@@ -1,1042 +0,0 @@
-/*
- * 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.optional;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import netrexx.lang.Rexx;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.DirectoryScanner;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.taskdefs.MatchingTask;
-import org.apache.tools.ant.types.EnumeratedAttribute;
-import org.apache.tools.ant.util.FileUtils;
-
-// CheckStyle:InnerAssignmentCheck OFF - used too much in the file to be removed
-/**
- * Compiles NetRexx source files.
- * This task can take the following
- * arguments:
- * <ul>
- * <li>binary</li>
- * <li>classpath</li>
- * <li>comments</li>
- * <li>compile</li>
- * <li>console</li>
- * <li>crossref</li>
- * <li>decimal</li>
- * <li>destdir</li>
- * <li>diag</li>
- * <li>explicit</li>
- * <li>format</li>
- * <li>keep</li>
- * <li>logo</li>
- * <li>replace</li>
- * <li>savelog</li>
- * <li>srcdir</li>
- * <li>sourcedir</li>
- * <li>strictargs</li>
- * <li>strictassign</li>
- * <li>strictcase</li>
- * <li>strictimport</li>
- * <li>symbols</li>
- * <li>time</li>
- * <li>trace</li>
- * <li>utf8</li>
- * <li>verbose</li>
- * <li>suppressMethodArgumentNotUsed</li>
- * <li>suppressPrivatePropertyNotUsed</li>
- * <li>suppressVariableNotUsed</li>
- * <li>suppressExceptionNotSignalled</li>
- * <li>suppressDeprecation</li>
- * <li>removeKeepExtension</li>
- * </ul>
- * Of these arguments, the <b>srcdir</b> argument is required.
- *
- * <p>When this task executes, it will recursively scan the srcdir
- * looking for NetRexx source files to compile. This task makes its
- * compile decision based on timestamp.
- * <p>Before files are compiled they and any other file in the
- * srcdir will be copied to the destdir allowing support files to be
- * located properly in the classpath. The reason for copying the source files
- * before the compile is that NetRexxC has only two destinations for classfiles:
- * <ol>
- * <li>The current directory, and,</li>
- * <li>The directory the source is in (see sourcedir option)
- * </ol>
- *
- */
-public class NetRexxC extends MatchingTask {
-
- // variables to hold arguments
- private boolean binary;
- private String classpath;
- private boolean comments;
- private boolean compact = true; // should be the default, as it integrates better in ant.
- private boolean compile = true;
- private boolean console;
- private boolean crossref;
- private boolean decimal = true;
- private File destDir;
- private boolean diag;
- private boolean explicit;
- private boolean format;
- private boolean keep;
- private boolean logo = true;
- private boolean replace;
- private boolean savelog;
- private File srcDir;
- private boolean sourcedir = true; // ?? Should this be the default for ant?
- private boolean strictargs;
- private boolean strictassign;
- private boolean strictcase;
- private boolean strictimport;
- private boolean strictprops;
- private boolean strictsignal;
- private boolean symbols;
- private boolean time;
- private String trace = "trace2";
- private boolean utf8;
- private String verbose = "verbose3";
- private boolean suppressMethodArgumentNotUsed = false;
- private boolean suppressPrivatePropertyNotUsed = false;
- private boolean suppressVariableNotUsed = false;
- private boolean suppressExceptionNotSignalled = false;
- private boolean suppressDeprecation = false;
- private boolean removeKeepExtension = false;
-
- // constants for the messages to suppress by flags and their corresponding properties
- static final String MSG_METHOD_ARGUMENT_NOT_USED
- = "Warning: Method argument is not used";
- static final String MSG_PRIVATE_PROPERTY_NOT_USED
- = "Warning: Private property is defined but not used";
- static final String MSG_VARIABLE_NOT_USED
- = "Warning: Variable is set but not used";
- static final String MSG_EXCEPTION_NOT_SIGNALLED
- = "is in SIGNALS list but is not signalled within the method";
- static final String MSG_DEPRECATION = "has been deprecated";
-
- // other implementation variables
- private Vector compileList = new Vector();
- private Hashtable filecopyList = new Hashtable();
-
- /**
- * Set whether literals are treated as binary, rather than NetRexx types.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default is false.
- * @param binary a <code>boolean</code> value.
- */
- public void setBinary(boolean binary) {
- this.binary = binary;
- }
-
-
- /**
- * Set the classpath used for NetRexx compilation.
- * @param classpath the classpath to use.
- */
- public void setClasspath(String classpath) {
- this.classpath = classpath;
- }
-
-
- /**
- * Set whether comments are passed through to the generated java source.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param comments a <code>boolean</code> value.
- */
- public void setComments(boolean comments) {
- this.comments = comments;
- }
-
-
- /**
- * Set whether error messages come out in compact or verbose format.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is true.
- * @param compact a <code>boolean</code> value.
- */
- public void setCompact(boolean compact) {
- this.compact = compact;
- }
-
-
- /**
- * Set whether the NetRexx compiler should compile the generated java code.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is true.
- * Setting this flag to false, will automatically set the keep flag to true.
- * @param compile a <code>boolean</code> value.
- */
- public void setCompile(boolean compile) {
- this.compile = compile;
- if (!this.compile && !this.keep) {
- this.keep = true;
- }
- }
-
-
- /**
- * Set whether or not compiler messages should be displayed on the 'console'.
- * Note that this task will rely on the default value for filtering compile messages.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param console a <code>boolean</code> value.
- */
- public void setConsole(boolean console) {
- this.console = console;
- }
-
-
- /**
- * Whether variable cross references are generated.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param crossref a <code>boolean</code> value.
- */
- public void setCrossref(boolean crossref) {
- this.crossref = crossref;
- }
-
-
- /**
- * Set whether decimal arithmetic should be used for the netrexx code.
- * Setting this to off will report decimal arithmetic as an error, for
- * performance critical applications.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is true.
- * @param decimal a <code>boolean</code> value.
- */
- public void setDecimal(boolean decimal) {
- this.decimal = decimal;
- }
-
-
- /**
- * Set the destination directory into which the NetRexx source files
- * should be copied and then compiled.
- * @param destDirName the destination directory.
- */
- public void setDestDir(File destDirName) {
- destDir = destDirName;
- }
-
-
- /**
- * Whether diagnostic information about the compile is generated
- * @param diag a <code>boolean</code> value.
- */
- public void setDiag(boolean diag) {
- this.diag = diag;
- }
-
-
- /**
- * Sets whether variables must be declared explicitly before use.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param explicit a <code>boolean</code> value.
- */
- public void setExplicit(boolean explicit) {
- this.explicit = explicit;
- }
-
-
- /**
- * Whether the generated java code is formatted nicely or left to match
- * NetRexx line numbers for call stack debugging.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value false.
- * @param format a <code>boolean</code> value.
- */
- public void setFormat(boolean format) {
- this.format = format;
- }
-
-
- /**
- * Whether the generated java code is produced.
- * This is not implemented yet.
- * @param java a <code>boolean</code> value.
- */
- public void setJava(boolean java) {
- log("The attribute java is currently unused.", Project.MSG_WARN);
- }
-
-
- /**
- * Sets whether the generated java source file should be kept after
- * compilation. The generated files will have an extension of .java.keep,
- * <b>not</b> .java. See setRemoveKeepExtension
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param keep a <code>boolean</code> value.
- * @see #setRemoveKeepExtension(boolean)
- */
- public void setKeep(boolean keep) {
- this.keep = keep;
- }
-
-
- /**
- * Whether the compiler text logo is displayed when compiling.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param logo a <code>boolean</code> value.
- */
- public void setLogo(boolean logo) {
- this.logo = logo;
- }
-
-
- /**
- * Whether the generated .java file should be replaced when compiling.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param replace a <code>boolean</code> value.
- */
- public void setReplace(boolean replace) {
- this.replace = replace;
- }
-
-
- /**
- * Sets whether the compiler messages will be written to NetRexxC.log as
- * well as to the console.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param savelog a <code>boolean</code> value.
- */
- public void setSavelog(boolean savelog) {
- this.savelog = savelog;
- }
-
-
- /**
- * Tells the NetRexx compiler to store the class files in the same
- * directory as the source files. The alternative is the working directory.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is true.
- * @param sourcedir a <code>boolean</code> value.
- */
- public void setSourcedir(boolean sourcedir) {
- this.sourcedir = sourcedir;
- }
-
-
- /**
- * Set the source dir to find the source Java files.
- * @param srcDirName the source directory.
- */
- public void setSrcDir(File srcDirName) {
- srcDir = srcDirName;
- }
-
-
- /**
- * Tells the NetRexx compiler that method calls always need parentheses,
- * even if no arguments are needed, e.g. <code>aStringVar.getBytes</code>
- * vs. <code>aStringVar.getBytes()</code>.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param strictargs a <code>boolean</code> value.
- */
- public void setStrictargs(boolean strictargs) {
- this.strictargs = strictargs;
- }
-
-
- /**
- * Tells the NetRexx compile that assignments must match exactly on type.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param strictassign a <code>boolean</code> value.
- */
- public void setStrictassign(boolean strictassign) {
- this.strictassign = strictassign;
- }
-
-
- /**
- * Specifies whether the NetRexx compiler should be case sensitive or not.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param strictcase a <code>boolean</code> value.
- */
- public void setStrictcase(boolean strictcase) {
- this.strictcase = strictcase;
- }
-
-
- /**
- * Sets whether classes need to be imported explicitly using an <code>import</code>
- * statement. By default the NetRexx compiler will import certain packages
- * automatically.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param strictimport a <code>boolean</code> value.
- */
- public void setStrictimport(boolean strictimport) {
- this.strictimport = strictimport;
- }
-
-
- /**
- * Sets whether local properties need to be qualified explicitly using
- * <code>this</code>.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param strictprops a <code>boolean</code> value.
- */
- public void setStrictprops(boolean strictprops) {
- this.strictprops = strictprops;
- }
-
-
- /**
- * Whether the compiler should force catching of exceptions by explicitly
- * named types.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false
- * @param strictsignal a <code>boolean</code> value.
- */
- public void setStrictsignal(boolean strictsignal) {
- this.strictsignal = strictsignal;
- }
-
-
- /**
- * Sets whether debug symbols should be generated into the class file.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param symbols a <code>boolean</code> value.
- */
- public void setSymbols(boolean symbols) {
- this.symbols = symbols;
- }
-
-
- /**
- * Asks the NetRexx compiler to print compilation times to the console
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param time a <code>boolean</code> value.
- */
- public void setTime(boolean time) {
- this.time = time;
- }
-
- /**
- * Turns on or off tracing and directs the resultant trace output Valid
- * values are: "trace", "trace1", "trace2" and "notrace". "trace" and
- * "trace2".
- * @param trace the value to set.
- */
- public void setTrace(TraceAttr trace) {
- this.trace = trace.getValue();
- }
-
- /**
- * Turns on or off tracing and directs the resultant trace output Valid
- * values are: "trace", "trace1", "trace2" and "notrace". "trace" and
- * "trace2".
- * @param trace the value to set.
- */
- public void setTrace(String trace) {
- TraceAttr t = new TraceAttr();
-
- t.setValue(trace);
- setTrace(t);
- }
-
-
- /**
- * Tells the NetRexx compiler that the source is in UTF8.
- * Valid true values are "yes", "on" or "true". Anything else sets the flag to false.
- * The default value is false.
- * @param utf8 a <code>boolean</code> value.
- */
- public void setUtf8(boolean utf8) {
- this.utf8 = utf8;
- }
-
-
- /**
- * Whether lots of warnings and error messages should be generated
- * @param verbose the value to set - verbose&lt;level&gt; or noverbose.
- */
- public void setVerbose(VerboseAttr verbose) {
- this.verbose = verbose.getValue();
- }
-
-
- /**
- * Whether lots of warnings and error messages should be generated
- * @param verbose the value to set - verbose&lt;level&gt; or noverbose.
- */
- public void setVerbose(String verbose) {
- VerboseAttr v = new VerboseAttr();
-
- v.setValue(verbose);
- setVerbose(v);
- }
-
- /**
- * Whether the task should suppress the "Method argument is not used" in
- * strictargs-Mode, which can not be suppressed by the compiler itself.
- * The warning is logged as verbose message, though.
- * @param suppressMethodArgumentNotUsed a <code>boolean</code> value.
- */
- public void setSuppressMethodArgumentNotUsed(boolean suppressMethodArgumentNotUsed) {
- this.suppressMethodArgumentNotUsed = suppressMethodArgumentNotUsed;
- }
-
-
- /**
- * Whether the task should suppress the "Private property is defined but
- * not used" in strictargs-Mode, which can be quite annoying while
- * developing. The warning is logged as verbose message, though.
- * @param suppressPrivatePropertyNotUsed a <code>boolean</code> value.
- */
- public void setSuppressPrivatePropertyNotUsed(boolean suppressPrivatePropertyNotUsed) {
- this.suppressPrivatePropertyNotUsed = suppressPrivatePropertyNotUsed;
- }
-
-
- /**
- * Whether the task should suppress the "Variable is set but not used" in
- * strictargs-Mode. Be careful with this one! The warning is logged as
- * verbose message, though.
- * @param suppressVariableNotUsed a <code>boolean</code> value.
- */
- public void setSuppressVariableNotUsed(boolean suppressVariableNotUsed) {
- this.suppressVariableNotUsed = suppressVariableNotUsed;
- }
-
-
- /**
- * Whether the task should suppress the "FooException is in SIGNALS list
- * but is not signalled within the method", which is sometimes rather
- * useless. The warning is logged as verbose message, though.
- * @param suppressExceptionNotSignalled a <code>boolean</code> value.
- */
- public void setSuppressExceptionNotSignalled(boolean suppressExceptionNotSignalled) {
- this.suppressExceptionNotSignalled = suppressExceptionNotSignalled;
- }
-
-
- /**
- * Tells whether we should filter out any deprecation-messages
- * of the compiler out.
- * @param suppressDeprecation a <code>boolean</code> value.
- */
- public void setSuppressDeprecation(boolean suppressDeprecation) {
- this.suppressDeprecation = suppressDeprecation;
- }
-
-
- /**
- * Tells whether the trailing .keep in nocompile-mode should be removed
- * so that the resulting java source really ends on .java.
- * This facilitates the use of the javadoc tool lateron.
- */
- public void setRemoveKeepExtension(boolean removeKeepExtension) {
- this.removeKeepExtension = removeKeepExtension;
- }
-
-
- /**
- * init-Method sets defaults from Properties. That way, when ant is called
- * with arguments like -Dant.netrexxc.verbose=verbose5 one can easily take
- * control of all netrexxc-tasks.
- */
- public void init() {
- String p;
-
- if ((p = getProject().getProperty("ant.netrexxc.binary")) != null) {
- this.binary = Project.toBoolean(p);
- }
- // classpath makes no sense
- if ((p = getProject().getProperty("ant.netrexxc.comments")) != null) {
- this.comments = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.compact")) != null) {
- this.compact = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.compile")) != null) {
- this.compile = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.console")) != null) {
- this.console = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.crossref")) != null) {
- this.crossref = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.decimal")) != null) {
- this.decimal = Project.toBoolean(p);
- // destDir
- }
- if ((p = getProject().getProperty("ant.netrexxc.diag")) != null) {
- this.diag = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.explicit")) != null) {
- this.explicit = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.format")) != null) {
- this.format = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.keep")) != null) {
- this.keep = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.logo")) != null) {
- this.logo = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.replace")) != null) {
- this.replace = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.savelog")) != null) {
- this.savelog = Project.toBoolean(p);
- // srcDir
- }
- if ((p = getProject().getProperty("ant.netrexxc.sourcedir")) != null) {
- this.sourcedir = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictargs")) != null) {
- this.strictargs = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictassign")) != null) {
- this.strictassign = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictcase")) != null) {
- this.strictcase = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictimport")) != null) {
- this.strictimport = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictprops")) != null) {
- this.strictprops = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.strictsignal")) != null) {
- this.strictsignal = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.symbols")) != null) {
- this.symbols = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.time")) != null) {
- this.time = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.trace")) != null) {
- setTrace(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.utf8")) != null) {
- this.utf8 = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.verbose")) != null) {
- setVerbose(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.suppressMethodArgumentNotUsed")) != null) {
- this.suppressMethodArgumentNotUsed = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.suppressPrivatePropertyNotUsed")) != null) {
- this.suppressPrivatePropertyNotUsed = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.suppressVariableNotUsed")) != null) {
- this.suppressVariableNotUsed = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.suppressExceptionNotSignalled")) != null) {
- this.suppressExceptionNotSignalled = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.suppressDeprecation")) != null) {
- this.suppressDeprecation = Project.toBoolean(p);
- }
- if ((p = getProject().getProperty("ant.netrexxc.removeKeepExtension")) != null) {
- this.removeKeepExtension = Project.toBoolean(p);
- }
- }
-
-
- /**
- * Executes the task - performs the actual compiler call.
- * @throws BuildException on error.
- */
- public void execute() throws BuildException {
-
- // first off, make sure that we've got a srcdir and destdir
- if (srcDir == null || destDir == null) {
- throw new BuildException("srcDir and destDir attributes must be set!");
- }
-
- // scan source and dest dirs to build up both copy lists and
- // compile lists
- // scanDir(srcDir, destDir);
- DirectoryScanner ds = getDirectoryScanner(srcDir);
-
- String[] files = ds.getIncludedFiles();
-
- scanDir(srcDir, destDir, files);
-
- // copy the source and support files
- copyFilesToDestination();
-
- // compile the source files
- if (compileList.size() > 0) {
- log("Compiling " + compileList.size() + " source file"
- + (compileList.size() == 1 ? "" : "s")
- + " to " + destDir);
- doNetRexxCompile();
- if (removeKeepExtension && (!compile || keep)) {
- removeKeepExtensions();
- }
- }
- }
-
-
- /**
- * Scans the directory looking for source files to be compiled and support
- * files to be copied.
- */
- private void scanDir(File srcDir, File destDir, String[] files) {
- for (int i = 0; i < files.length; i++) {
- File srcFile = new File(srcDir, files[i]);
- File destFile = new File(destDir, files[i]);
- String filename = files[i];
- // if it's a non source file, copy it if a later date than the
- // dest
- // if it's a source file, see if the destination class file
- // needs to be recreated via compilation
- if (filename.toLowerCase().endsWith(".nrx")) {
- File classFile =
- new File(destDir,
- filename.substring(0, filename.lastIndexOf('.')) + ".class");
- File javaFile =
- new File(destDir,
- filename.substring(0, filename.lastIndexOf('.'))
- + (removeKeepExtension ? ".java" : ".java.keep"));
-
- // nocompile case tests against .java[.keep] file
- if (!compile && srcFile.lastModified() > javaFile.lastModified()) {
- filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
- compileList.addElement(destFile.getAbsolutePath());
- } else if (compile && srcFile.lastModified() > classFile.lastModified()) {
- // compile case tests against .class file
- filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
- compileList.addElement(destFile.getAbsolutePath());
- }
- } else {
- if (srcFile.lastModified() > destFile.lastModified()) {
- filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
- }
- }
- }
- }
-
-
- /** Copy eligible files from the srcDir to destDir */
- private void copyFilesToDestination() {
- if (filecopyList.size() > 0) {
- log("Copying " + filecopyList.size() + " file"
- + (filecopyList.size() == 1 ? "" : "s")
- + " to " + destDir.getAbsolutePath());
-
- Enumeration e = filecopyList.keys();
-
- while (e.hasMoreElements()) {
- String fromFile = (String) e.nextElement();
- String toFile = (String) filecopyList.get(fromFile);
-
- try {
- FileUtils.getFileUtils().copyFile(fromFile, toFile);
- } catch (IOException ioe) {
- String msg = "Failed to copy " + fromFile + " to " + toFile
- + " due to " + ioe.getMessage();
-
- throw new BuildException(msg, ioe);
- }
- }
- }
- }
-
-
- /**
- * Rename .java.keep files (back) to .java. The netrexxc renames all
- * .java files to .java.keep if either -keep or -nocompile option is set.
- */
- private void removeKeepExtensions() {
- if (compileList.size() > 0) {
- log("Removing .keep extension on " + compileList.size() + " file"
- + (compileList.size() == 1 ? "" : "s"));
- Enumeration e = compileList.elements();
- while (e.hasMoreElements()) {
- String nrxName = (String) e.nextElement();
- String baseName = nrxName.substring(0, nrxName.lastIndexOf('.'));
- File fromFile = new File(baseName + ".java.keep");
- File toFile = new File(baseName + ".java");
- if (fromFile.renameTo(toFile)) {
- log("Successfully renamed " + fromFile + " to " + toFile, Project.MSG_VERBOSE);
- } else {
- log("Failed to rename " + fromFile + " to " + toFile);
- }
- }
- }
- }
-
-
- /** Performs a compile using the NetRexx 1.1.x compiler */
- private void doNetRexxCompile() throws BuildException {
- log("Using NetRexx compiler", Project.MSG_VERBOSE);
-
- String classpath = getCompileClasspath();
- StringBuffer compileOptions = new StringBuffer();
-
- // create an array of strings for input to the compiler: one array
- // comes from the compile options, the other from the compileList
- String[] compileOptionsArray = getCompileOptionsAsArray();
- String[] fileListArray = new String[compileList.size()];
- Enumeration e = compileList.elements();
- int j = 0;
-
- while (e.hasMoreElements()) {
- fileListArray[j] = (String) e.nextElement();
- j++;
- }
- // create a single array of arguments for the compiler
- String[] compileArgs = new String[compileOptionsArray.length + fileListArray.length];
-
- for (int i = 0; i < compileOptionsArray.length; i++) {
- compileArgs[i] = compileOptionsArray[i];
- }
- for (int i = 0; i < fileListArray.length; i++) {
- compileArgs[i + compileOptionsArray.length] = fileListArray[i];
- }
-
- // print nice output about what we are doing for the log
- compileOptions.append("Compilation args: ");
- for (int i = 0; i < compileOptionsArray.length; i++) {
- compileOptions.append(compileOptionsArray[i]);
- compileOptions.append(" ");
- }
- log(compileOptions.toString(), Project.MSG_VERBOSE);
-
- String eol = System.getProperty("line.separator");
- StringBuffer niceSourceList = new StringBuffer("Files to be compiled:" + eol);
-
- final int size = compileList.size();
- for (int i = 0; i < size; i++) {
- niceSourceList.append(" ");
- niceSourceList.append(compileList.elementAt(i).toString());
- niceSourceList.append(eol);
- }
-
- log(niceSourceList.toString(), Project.MSG_VERBOSE);
-
- // need to set java.class.path property and restore it later
- // since the NetRexx compiler has no option for the classpath
- String currentClassPath = System.getProperty("java.class.path");
- Properties currentProperties = System.getProperties();
-
- currentProperties.put("java.class.path", classpath);
-
- try {
- StringWriter out = new StringWriter();
- PrintWriter w = null;
- int rc =
- COM.ibm.netrexx.process.NetRexxC.main(new Rexx(compileArgs),
- w = new PrintWriter(out));
- String sdir = srcDir.getAbsolutePath();
- String ddir = destDir.getAbsolutePath();
- boolean doReplace = !(sdir.equals(ddir));
- int dlen = ddir.length();
- String l;
- BufferedReader in = new BufferedReader(new StringReader(out.toString()));
-
- log("replacing destdir '" + ddir + "' through sourcedir '"
- + sdir + "'", Project.MSG_VERBOSE);
- while ((l = in.readLine()) != null) {
- int idx;
-
- while (doReplace && ((idx = l.indexOf(ddir)) != -1)) {
- // path is mentioned in the message
- l = (new StringBuffer(l)).replace(idx, idx + dlen, sdir).toString();
- }
- // verbose level logging for suppressed messages
- if (suppressMethodArgumentNotUsed
- && l.indexOf(MSG_METHOD_ARGUMENT_NOT_USED) != -1) {
- log(l, Project.MSG_VERBOSE);
- } else if (suppressPrivatePropertyNotUsed
- && l.indexOf(MSG_PRIVATE_PROPERTY_NOT_USED) != -1) {
- log(l, Project.MSG_VERBOSE);
- } else if (suppressVariableNotUsed
- && l.indexOf(MSG_VARIABLE_NOT_USED) != -1) {
- log(l, Project.MSG_VERBOSE);
- } else if (suppressExceptionNotSignalled
- && l.indexOf(MSG_EXCEPTION_NOT_SIGNALLED) != -1) {
- log(l, Project.MSG_VERBOSE);
- } else if (suppressDeprecation
- && l.indexOf(MSG_DEPRECATION) != -1) {
- log(l, Project.MSG_VERBOSE);
- } else if (l.indexOf("Error:") != -1) {
- // error level logging for compiler errors
- log(l, Project.MSG_ERR);
- } else if (l.indexOf("Warning:") != -1) {
- // warning for all warning messages
- log(l, Project.MSG_WARN);
- } else {
- log(l, Project.MSG_INFO); // info level for the rest.
- }
- }
- if (rc > 1) {
- throw new BuildException("Compile failed, messages should "
- + "have been provided.");
- }
- if (w.checkError()) {
- throw new IOException("Encountered an error");
- }
- } catch (IOException ioe) {
- throw new BuildException("Unexpected IOException while "
- + "playing with Strings", ioe);
- } finally {
- // need to reset java.class.path property
- // since the NetRexx compiler has no option for the classpath
- currentProperties = System.getProperties();
- currentProperties.put("java.class.path", currentClassPath);
- }
-
- }
-
-
- /** Builds the compilation classpath. */
- private String getCompileClasspath() {
- StringBuffer classpath = new StringBuffer();
-
- // add dest dir to classpath so that previously compiled and
- // untouched classes are on classpath
- classpath.append(destDir.getAbsolutePath());
-
- // add our classpath to the mix
- if (this.classpath != null) {
- addExistingToClasspath(classpath, this.classpath);
- }
-
- // add the system classpath
- // addExistingToClasspath(classpath,System.getProperty("java.class.path"));
- return classpath.toString();
- }
-
-
- /** This */
- private String[] getCompileOptionsAsArray() {
- Vector options = new Vector();
-
- options.addElement(binary ? "-binary" : "-nobinary");
- options.addElement(comments ? "-comments" : "-nocomments");
- options.addElement(compile ? "-compile" : "-nocompile");
- options.addElement(compact ? "-compact" : "-nocompact");
- options.addElement(console ? "-console" : "-noconsole");
- options.addElement(crossref ? "-crossref" : "-nocrossref");
- options.addElement(decimal ? "-decimal" : "-nodecimal");
- options.addElement(diag ? "-diag" : "-nodiag");
- options.addElement(explicit ? "-explicit" : "-noexplicit");
- options.addElement(format ? "-format" : "-noformat");
- options.addElement(keep ? "-keep" : "-nokeep");
- options.addElement(logo ? "-logo" : "-nologo");
- options.addElement(replace ? "-replace" : "-noreplace");
- options.addElement(savelog ? "-savelog" : "-nosavelog");
- options.addElement(sourcedir ? "-sourcedir" : "-nosourcedir");
- options.addElement(strictargs ? "-strictargs" : "-nostrictargs");
- options.addElement(strictassign ? "-strictassign" : "-nostrictassign");
- options.addElement(strictcase ? "-strictcase" : "-nostrictcase");
- options.addElement(strictimport ? "-strictimport" : "-nostrictimport");
- options.addElement(strictprops ? "-strictprops" : "-nostrictprops");
- options.addElement(strictsignal ? "-strictsignal" : "-nostrictsignal");
- options.addElement(symbols ? "-symbols" : "-nosymbols");
- options.addElement(time ? "-time" : "-notime");
- options.addElement("-" + trace);
- options.addElement(utf8 ? "-utf8" : "-noutf8");
- options.addElement("-" + verbose);
-
- String[] results = new String[options.size()];
-
- options.copyInto(results);
- return results;
- }
-
-
- /**
- * Takes a classpath-like string, and adds each element of this string to
- * a new classpath, if the components exist. Components that don't exist,
- * aren't added. We do this, because jikes issues warnings for
- * non-existent files/dirs in his classpath, and these warnings are pretty
- * annoying.
- *
- * @param target - target classpath
- * @param source - source classpath to get file objects.
- */
- private void addExistingToClasspath(StringBuffer target, String source) {
- StringTokenizer tok = new StringTokenizer(source,
- System.getProperty("path.separator"), false);
-
- while (tok.hasMoreTokens()) {
- File f = getProject().resolveFile(tok.nextToken());
-
- if (f.exists()) {
- target.append(File.pathSeparator);
- target.append(f.getAbsolutePath());
- } else {
- log("Dropping from classpath: "
- + f.getAbsolutePath(), Project.MSG_VERBOSE);
- }
- }
-
- }
-
-
- /**
- * Enumerated class corresponding to the trace attribute.
- */
- public static class TraceAttr extends EnumeratedAttribute {
- /** {@inheritDoc}. */
- public String[] getValues() {
- return new String[]{"trace", "trace1", "trace2", "notrace"};
- }
- }
-
- /**
- * Enumerated class corresponding to the verbose attribute.
- */
- public static class VerboseAttr extends EnumeratedAttribute {
- /** {@inheritDoc}. */
- public String[] getValues() {
- return new String[]{"verbose", "verbose0", "verbose1",
- "verbose2", "verbose3", "verbose4",
- "verbose5", "noverbose"};
- }
- }
-}
-