Author: kylem
Date: Mon Aug 30 08:27:06 2004
New Revision: 37209
Modified:
incubator/beehive/trunk/controls/drt/build.xml
incubator/beehive/trunk/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java
Log:
Added now 'compileByExtension' option to the <apt> task that will run apt
processing/compilation
sequentially on each of the input source extensions (the srcExtensions option
value). This is
useful in scenarios where building one type of component might depend upon the
output of others.
A common example of this is trying to compile a control implementation that
references control
JavaBean types that are the result of processing other control types in the
same project.
Updated the control DRT composition tests to exercise this option.
Modified: incubator/beehive/trunk/controls/drt/build.xml
==============================================================================
--- incubator/beehive/trunk/controls/drt/build.xml (original)
+++ incubator/beehive/trunk/controls/drt/build.xml Mon Aug 30 08:27:06 2004
@@ -88,7 +88,7 @@
<include name="**/checker/*.java"/>
</apt>
<apt srcdir="${controls.src}" destdir="${build.beans}"
gendir="${build.beansrc}"
- classpathref="drt.classpath"
+ classpathref="drt.classpath" compileByExtension="true"
srcExtensions="*.java,*.jcx,*.jcs" >
</apt>
<!-- Do control assembly. -->
Modified:
incubator/beehive/trunk/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs
==============================================================================
---
incubator/beehive/trunk/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs
(original)
+++
incubator/beehive/trunk/controls/drt/controls/org/apache/beehive/controls/test/composition/ComposerImpl.jcs
Mon Aug 30 08:27:06 2004
@@ -12,7 +12,9 @@
import org.apache.beehive.controls.api.properties.PropertySet;
import org.apache.beehive.controls.test.properties.Props;
+import org.apache.beehive.controls.test.properties.PropsBean;
import org.apache.beehive.controls.test.properties.PropsExtension;
+import org.apache.beehive.controls.test.properties.PropsExtensionBean;
@ControlImplementation
public class ComposerImpl implements Composer
@@ -21,23 +23,23 @@
@Control
@Props.SimpleProps(simpleString="A field annotation value")
- Props propControl;
+ PropsBean propControl;
@Control
@PropsExtension.SimpleProps(simpleString="A different field annotation
value")
- private PropsExtension propExtControl;
+ private PropsExtensionBean propExtControl;
@Nested.Index(1)
- private @Control Nested nested1;
+ private @Control NestedBean nested1;
@Nested.Index(2)
- /* package */@Control Nested nested2;
+ /* package */@Control NestedBean nested2;
@Nested.Index(3)
- protected @Control Nested nested3;
+ protected @Control NestedBean nested3;
@Nested.Index(4)
- public @Control Nested nested4;
+ public @Control NestedBean nested4;
/**
* Provides a simple test API to externally query the PropertySet values
on a
Modified:
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java
==============================================================================
---
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java
(original)
+++
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/generator/AptTask.java
Mon Aug 30 08:27:06 2004
@@ -83,10 +83,20 @@
}
/**
+ * The compileByExtension attribute causes each input source extension to
be compiled
+ * independently (and sequentially). This is useful when one type of
extensio can
+ * possibly depend upon the generation output from another. The default
value 'false'.
+ */
+ public void setCompileByExtension(boolean compileByExt)
+ {
+ _compileByExt = compileByExt;
+ }
+
+ /**
* Override the implementation of scanDir, to look for additional files
based upon any
* specified source extensions
*/
- protected void scanDir(File srcDir, File destDir, String[] files)
+ protected void scanDir(File srcDir, File destDir, String[] files, String
ext)
{
// If no source path was specified, we effectively created one by
adding the generation
// path. Because of this, we need to be sure and add all source dirs
to the path too.
@@ -97,63 +107,51 @@
setSourcepath(srcPath);
}
- if (_srcExts.size() == 0)
+ GlobPatternMapper m = new GlobPatternMapper();
+ m.setFrom(ext);
+ m.setTo("*.class");
+ SourceFileScanner sfs = new SourceFileScanner(this);
+ if (ext.equals("*.java"))
{
- super.scanDir(srcDir, destDir, files);
- return;
- }
-
- //for (String ext : _srcExts)
- //{
- for (int i = 0; i < _srcExts.size(); i++)
- {
- String ext = (String)_srcExts.get(i);
- GlobPatternMapper m = new GlobPatternMapper();
- m.setFrom(ext);
- m.setTo("*.class");
- SourceFileScanner sfs = new SourceFileScanner(this);
- if (ext.equals("*.java"))
+ File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
+ if (newFiles.length > 0)
{
- File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir,
m);
- if (newFiles.length > 0)
- {
- File[] newCompileList = new File[compileList.length +
newFiles.length];
- System.arraycopy(compileList, 0, newCompileList, 0,
compileList.length);
- System.arraycopy(newFiles, 0, newCompileList,
compileList.length,
- newFiles.length);
- compileList = newCompileList;
- }
+ File[] newCompileList = new File[compileList.length +
newFiles.length];
+ System.arraycopy(compileList, 0, newCompileList, 0,
compileList.length);
+ System.arraycopy(newFiles, 0, newCompileList,
compileList.length,
+ newFiles.length);
+ compileList = newCompileList;
}
- else
+ }
+ else
+ {
+ String [] newSources = sfs.restrict(files, srcDir, destDir, m);
+ int extLen = ext.length() - 1; // strip wildcard
+ if (newSources.length > 0)
{
- String [] newSources = sfs.restrict(files, srcDir, destDir, m);
- int extLen = ext.length() - 1; // strip wildcard
- if (newSources.length > 0)
+ File[] newCompileList = new File[compileList.length +
newSources.length];
+ System.arraycopy(compileList, 0, newCompileList, 0,
compileList.length);
+ try
{
- File[] newCompileList = new File[compileList.length +
newSources.length];
- System.arraycopy(compileList, 0, newCompileList, 0,
compileList.length);
- try
- {
- FileUtils fileUtils = FileUtils.newFileUtils();
- for (int j = 0; j < newSources.length; j++)
- {
- String toName =
- newSources[j].substring(0,
newSources[j].length() - extLen) +
- ".java";
-
- File srcFile = new File(srcDir, newSources[j]);
- File dstFile = new File(_genDir, toName);
- fileUtils.copyFile(srcFile, dstFile, null, true,
true);
- newCompileList[compileList.length + j] = dstFile;
- }
- }
- catch (IOException ioe)
+ FileUtils fileUtils = FileUtils.newFileUtils();
+ for (int j = 0; j < newSources.length; j++)
{
- throw new BuildException("Unable to copy " + ext + "
file", ioe,
- getLocation());
+ String toName =
+ newSources[j].substring(0, newSources[j].length()
- extLen) +
+ ".java";
+
+ File srcFile = new File(srcDir, newSources[j]);
+ File dstFile = new File(_genDir, toName);
+ fileUtils.copyFile(srcFile, dstFile, null, true, true);
+ newCompileList[compileList.length + j] = dstFile;
}
- compileList = newCompileList;
}
+ catch (IOException ioe)
+ {
+ throw new BuildException("Unable to copy " + ext + "
file", ioe,
+ getLocation());
+ }
+ compileList = newCompileList;
}
}
}
@@ -165,6 +163,10 @@
throw new BuildException("Missing genDir attribute: must be set to
codegen output directory", getLocation());
+ // If no source extension specified, then just process .java files
+ if (_srcExts.size() == 0)
+ _srcExts.add("*.java");
+
// Save whether a user sourcepath was provided
_hasSourcepath = getSourcepath() != null;
@@ -190,36 +192,44 @@
checkParameters();
resetFileLists();
- // scan source directories and dest directory to build up
- // compile lists
- String[] list = getSrcdir().list();
- File destDir = getDestdir();
- for (int i = 0; i < list.length; i++)
+ // Iterate through the list of input extensions, matching/dependency
checking based
+ // upon the input list.
+ for (int j = 0; j < _srcExts.size(); j++)
{
- File srcDir = getProject().resolveFile(list[i]);
- if (!srcDir.exists()) {
- throw new BuildException("srcdir \""
- + srcDir.getPath()
- + "\" does not exist!",
getLocation());
- }
-
- //
- // The base <javac> algorithm is tweaked here, to allow <src>
elements
- // to contain a list of files _or_ a list of directories to scan.
- //
+ String ext = (String)_srcExts.get(j);
Vector<File> inputFiles = new Vector<File>();
- if (srcDir.isDirectory())
- {
- DirectoryScanner ds = this.getDirectoryScanner(srcDir);
- String[] files = ds.getIncludedFiles();
- scanDir(srcDir, destDir != null ? destDir : srcDir, files);
- }
- else
+
+ // scan source directories and dest directory to build up
+ // compile lists
+ String[] list = getSrcdir().list();
+ File destDir = getDestdir();
+ for (int i = 0; i < list.length; i++)
{
+ File srcFile = getProject().resolveFile(list[i]);
+ if (!srcFile.exists()) {
+ throw new BuildException("srcdir \""
+ + srcFile.getPath()
+ + "\" does not exist!",
getLocation());
+ }
+
//
- // BUGBUG: Because these bypass scanning, they also bypass
dependency chks :(
+ // The base <javac> algorithm is tweaked here, to allow <src>
elements
+ // to contain a list of files _or_ a list of directories to
scan.
//
- inputFiles.add(srcDir);
+ if (srcFile.isDirectory())
+ {
+ DirectoryScanner ds = this.getDirectoryScanner(srcFile);
+ String[] files = ds.getIncludedFiles();
+ scanDir(srcFile, destDir != null ? destDir : srcFile,
files, ext);
+ }
+ else
+ {
+ //
+ // BUGBUG: Because these bypass scanning, they also bypass
dependency chks :(
+ //
+ if (srcFile.getPath().endsWith(ext.substring(1)))
+ inputFiles.add(srcFile);
+ }
}
if (inputFiles.size() != 0)
@@ -227,14 +237,30 @@
File[] newCompileList = new File[compileList.length +
inputFiles.size()];
inputFiles.toArray(newCompileList);
System.arraycopy(compileList, 0, newCompileList,
inputFiles.size(),
- compileList.length);
+ compileList.length);
compileList = newCompileList;
}
+
+ //
+ // If processing/compiling on a per-extension basis, then handle
the current list,
+ // then reset the list fo files to compile before moving to the
next extension
+ //
+ if (_compileByExt)
+ {
+ compile();
+ resetFileLists();
+ }
}
- compile();
+
+ //
+ // If not processing on a per-extension basis, then compile the entire
aggregated list
+ //
+ if (!_compileByExt)
+ compile();
}
protected boolean _nocompile = false;
+ protected boolean _compileByExt = false;
protected boolean _hasSourcepath;
protected File _genDir;
protected Vector/*<String>*/ _srcExts = new Vector/*<String>*/();