| @@ -7,6 +7,9 @@ Changes that could break older environments: | |||
| * Ant 1.10.x requires Java8 or newer at compile or build time. | |||
| The 1.9.x series wil stay compatible with Java5. | |||
| * The <apt> task has been removed since apt itself has been removed | |||
| with Java8. | |||
| Fixed bugs: | |||
| ----------- | |||
| @@ -1,179 +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. | |||
| --> | |||
| <html lang="en-us"><head> | |||
| <meta http-equiv="Content-Language" content="en-us"><link rel="stylesheet" type="text/css" href="../stylesheets/style.css"> | |||
| <title>Apt Task</title></head> | |||
| <body> | |||
| <h2><a name="Apt">Apt</a></h2> | |||
| <h3>Description</h3> | |||
| <p>Runs the annotation processor tool (apt), and then optionally compiles | |||
| the original code, and any generated source code. | |||
| <p>This task runs on Java 1.5 to Java 1.7.</p> | |||
| <p>Apt is deprecated in Java 1.6, which can run annotation | |||
| processors as part of javac, and removed from the distribution in Java 1.8. | |||
| The task will fire an exception when attempting to run under Java 1.8.</p> | |||
| <p>This task inherits from the <a href="javac.html">Javac Task</a>, and thus | |||
| supports nearly all of the same attributes, and subelements. | |||
| There is one special case, the <tt>fork</tt> attribute, which is present | |||
| but which can only be set to <tt>true</tt>. That is, apt only works as | |||
| a forked process. | |||
| </p> | |||
| <p> | |||
| In addition, it supports | |||
| the following addition items:</p> | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tbody><tr> | |||
| <td valign="top"><b>Attribute</b></td> | |||
| <td valign="top"><b>Description</b></td> | |||
| <td align="center" valign="top"><b>Required</b></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">compile</td> | |||
| <td valign="top">After running the Apt, should the code be compiled. (see the | |||
| <code>-nocompile</code> flag on the Apt executable)</td> | |||
| <td align="center" valign="top">No, defaults to false.</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">factory</td> | |||
| <td valign="top">The fully qualified classname of the AnnotationProcessFactory to be used | |||
| to construct annotation processors. This represents the <code>-factory</code> | |||
| command line flag of the Apt executable.</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">factorypathref</td> | |||
| <td valign="top">The reference id of the path used to find the classes needed by the | |||
| AnnotationProcessorFactory (and the location of the factory itself). | |||
| This represents the <code>-factorypath</code> flag on the Apt executable.</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">preprocessdir</td> | |||
| <td valign="top">The directory used for preprocessing. This is the directory where the | |||
| generated source code will be place. This represents the <code>-s</code> flag on | |||
| the Apt executable.</td> | |||
| <td align="center" valign="top">No</td> | |||
| </tr> | |||
| </tbody></table> | |||
| <h3>Parameters specified as nested elements</h3> | |||
| <h4>factorypath</h4> | |||
| <p>You can specify the path used to find the classes needed by the AnnotationProcessorFactory | |||
| at runtime, using this element. It is represents as a generic path like structure. This | |||
| represents the <code>-factorypath</code> flag on the Apt executable.</p> | |||
| <h4>option</h4> | |||
| <p>Used to represent a generic option to pass to Apt. This represents the <code>-A</code> flag on the | |||
| Apt executable. You can specify zero or more <code><option></code> elements.</p> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tbody><tr> | |||
| <td valign="top" width="12%"><b>Attribute</b></td> | |||
| <td valign="top" width="78%"><b>Description</b></td> | |||
| <td valign="top" width="10%"><b>Required</b></td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">name</td> | |||
| <td align="center">The name of the option</td> | |||
| <td align="center">Yes.</td> | |||
| </tr> | |||
| <tr> | |||
| <td valign="top">value</td> | |||
| <td align="center">The value to set the option to</td> | |||
| <td align="center">Yes.</td> | |||
| </tr> | |||
| </tbody></table> | |||
| <h3>Examples</h3> | |||
| <blockquote><pre> | |||
| <apt srcdir="${src}" | |||
| destdir="${build}" | |||
| classpath="xyz.jar" | |||
| debug="on" | |||
| compile="true" | |||
| factory="com.mycom.MyAnnotationProcessorFactory" | |||
| factorypathref="my.factorypath.id" | |||
| preprocessdir="${preprocess.dir}"> | |||
| </apt> | |||
| </pre></blockquote> | |||
| <p>compiles all <code>.java</code> files under the <code>${src}</code> | |||
| directory, and stores | |||
| the <code>.class</code> files in the <code>${build}</code> directory. | |||
| The classpath used includes <code>xyz.jar</code>, and compiling with | |||
| debug information is on. It also forces the generated source code to | |||
| be compiled. The generated source code will be placed in | |||
| <code>${preprocess.dir}</code> directory, using the class | |||
| <code>com.mycom.MyAnnotationProcessorFactory</code> to supply | |||
| AnnotationProcessor instances.</p> | |||
| <h3>Notes</h3> | |||
| <p> | |||
| The inherited "fork" attribute is set to true by default; please do not change it. | |||
| </p> | |||
| <p> | |||
| The inherited "compiler" attribute is ignored, as it is forced to use the Apt compiler | |||
| </p> | |||
| <p>Using the Apt compiler with the "compile" option set to "true" | |||
| forces you to use Sun's Apt compiler, which will use the JDK's Javac compiler. | |||
| If you wish to use another compiler, you will first need run the Apt processor | |||
| with the "compile" flag set to "false", and then use a | |||
| <code><javac></code> task to compile first your original source code, and then the | |||
| generated source code:</p> | |||
| <blockquote><pre> | |||
| <apt srcdir="${src}" | |||
| destdir="${build}" | |||
| classpath="xyz.jar" | |||
| debug="true" | |||
| compile="false" | |||
| factory="com.mycom.MyAnnotationProcessorFactory" | |||
| factorypathref="my.factorypath.id" | |||
| preprocessdir="${preprocess.dir}"> | |||
| </apt> | |||
| <javac srcdir="${src}" | |||
| destdir="${build}" | |||
| classpath="xyz.jar" | |||
| debug="on"/> | |||
| <javac srcdir="${preprocess.dir}" | |||
| destdir="${build}" | |||
| classpath="xyz.jar" | |||
| debug="true"/> | |||
| </pre></blockquote> | |||
| This may involve more build file coding, but the speedup gained from switching | |||
| to jikes may justify the effort. | |||
| <p> | |||
| </p> | |||
| </body></html> | |||
| @@ -40,7 +40,6 @@ | |||
| <li><a href="Tasks/antstructure.html">AntStructure</a></li> | |||
| <li><a href="Tasks/antversion.html">AntVersion</a></li> | |||
| <li><a href="Tasks/apply.html">Apply/<i>ExecOn</i></a></li> | |||
| <li><a href="Tasks/apt.html">Apt</a></li> | |||
| <li><a href="Tasks/attrib.html">Attrib</a></li> | |||
| <li><a href="Tasks/augment.html">Augment</a></li> | |||
| <li><a href="Tasks/available.html">Available</a></li> | |||
| @@ -231,12 +231,6 @@ documentation.</p> | |||
| specified.</p></td> | |||
| </tr> | |||
| <tr valign="top"> | |||
| <td nowrap><a href="Tasks/apt.html">Apt</a></td> | |||
| <td><p>Runs the annotation processor tool (apt), and then optionally compiles | |||
| the original code, and any generated source code.</p></td> | |||
| </tr> | |||
| <tr valign="top"> | |||
| <td nowrap><a href="Tasks/jspc.html">JspC</a></td> | |||
| <td><p>Runs the JSP compiler. It can be used to precompile JSP pages | |||
| @@ -1,270 +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; | |||
| 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<Option> options = new Vector<Option>(); | |||
| private File preprocessDir; | |||
| /** The name of the apt tool. */ | |||
| public static final String EXECUTABLE_NAME = "apt"; | |||
| /** An warning message when ignoring compiler attribute. */ | |||
| public static final String ERROR_IGNORING_COMPILER_OPTION | |||
| = "Ignoring compiler attribute for the APT task, as it is fixed"; | |||
| /** A warning message if used with java < 1.5. */ | |||
| public static final String ERROR_WRONG_JAVA_VERSION | |||
| = "Apt task requires Java 1.5+"; | |||
| /** | |||
| * exposed for debug messages | |||
| */ | |||
| public static final String WARNING_IGNORING_FORK = | |||
| "Apt only runs in its own JVM; fork=false option ignored"; | |||
| /** | |||
| * The nested option element. | |||
| */ | |||
| public static final class Option { | |||
| private String name; | |||
| private String value; | |||
| /** Constructor for Option */ | |||
| public Option() { | |||
| //default | |||
| } | |||
| /** | |||
| * Get the name attribute. | |||
| * @return the name attribute. | |||
| */ | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| /** | |||
| * Set the name attribute. | |||
| * @param name the name of the option. | |||
| */ | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| /** | |||
| * Get the value attribute. | |||
| * @return the value attribute. | |||
| */ | |||
| public String getValue() { | |||
| return value; | |||
| } | |||
| /** | |||
| * Set the value attribute. | |||
| * @param value the value of the option. | |||
| */ | |||
| public void setValue(String value) { | |||
| this.value = value; | |||
| } | |||
| } | |||
| /** | |||
| * Constructor for Apt task. | |||
| * This sets the apt compiler adapter as the compiler in the super class. | |||
| */ | |||
| public Apt() { | |||
| super(); | |||
| super.setCompiler(AptExternalCompilerAdapter.class.getName()); | |||
| super.setFork(true); | |||
| } | |||
| /** | |||
| * Get the name of the apt executable. | |||
| * | |||
| * @return the name of the executable. | |||
| */ | |||
| public String getAptExecutable() { | |||
| String exe = getExecutable(); | |||
| return exe != null ? exe : | |||
| JavaEnvUtils.getJdkExecutable(EXECUTABLE_NAME); | |||
| } | |||
| /** | |||
| * Set the compiler. | |||
| * This is not allowed and a warning log message is made. | |||
| * @param compiler not used. | |||
| */ | |||
| public void setCompiler(String compiler) { | |||
| log(ERROR_IGNORING_COMPILER_OPTION, Project.MSG_WARN); | |||
| } | |||
| /** | |||
| * Set the fork attribute. | |||
| * Non-forking APT is highly classpath dependent and appears to be too | |||
| * brittle to work. The sole reason this attribute is retained | |||
| * is the superclass does it | |||
| * @param fork if false; warn the option is ignored. | |||
| */ | |||
| public void setFork(boolean fork) { | |||
| if (!fork) { | |||
| log(WARNING_IGNORING_FORK, Project.MSG_WARN); | |||
| } | |||
| } | |||
| /** | |||
| * Get the compiler class name. | |||
| * @return the compiler class name. | |||
| */ | |||
| public String getCompiler() { | |||
| return super.getCompiler(); | |||
| } | |||
| /** | |||
| * Get the compile option for the apt compiler. | |||
| * If this is false the "-nocompile" argument will be used. | |||
| * @return the value of the compile option. | |||
| */ | |||
| public boolean isCompile() { | |||
| return compile; | |||
| } | |||
| /** | |||
| * Set the compile option for the apt compiler. | |||
| * Default value is true. | |||
| * @param compile if true set the compile option. | |||
| */ | |||
| public void setCompile(boolean compile) { | |||
| this.compile = compile; | |||
| } | |||
| /** | |||
| * Get the factory option for the apt compiler. | |||
| * If this is non-null the "-factory" argument will be used. | |||
| * @return the value of the factory option. | |||
| */ | |||
| public String getFactory() { | |||
| return factory; | |||
| } | |||
| /** | |||
| * Set the factory option for the apt compiler. | |||
| * Default value is null. | |||
| * @param factory the classname of the factory. | |||
| */ | |||
| public void setFactory(String factory) { | |||
| this.factory = factory; | |||
| } | |||
| /** | |||
| * Add a reference to a path to the factoryPath attribute. | |||
| * @param ref a reference to a path. | |||
| */ | |||
| public void setFactoryPathRef(Reference ref) { | |||
| createFactoryPath().setRefid(ref); | |||
| } | |||
| /** | |||
| * Add a path to the factoryPath attribute. | |||
| * @return a path to be configured. | |||
| */ | |||
| public Path createFactoryPath() { | |||
| if (factoryPath == null) { | |||
| factoryPath = new Path(getProject()); | |||
| } | |||
| return factoryPath.createPath(); | |||
| } | |||
| /** | |||
| * Get the factory path attribute. | |||
| * If this is not null, the "-factorypath" argument will be used. | |||
| * The default value is null. | |||
| * @return the factory path attribute. | |||
| */ | |||
| public Path getFactoryPath() { | |||
| return factoryPath; | |||
| } | |||
| /** | |||
| * Create a nested option. | |||
| * @return an option to be configured. | |||
| */ | |||
| public Option createOption() { | |||
| Option opt = new Option(); | |||
| options.add(opt); | |||
| return opt; | |||
| } | |||
| /** | |||
| * Get the options to the compiler. | |||
| * Each option will use '"-E" name ["=" value]' argument. | |||
| * @return the options. | |||
| */ | |||
| public Vector<Option> getOptions() { | |||
| return options; | |||
| } | |||
| /** | |||
| * Get the preprocessdir attribute. | |||
| * This corresponds to the "-s" argument. | |||
| * The default value is null. | |||
| * @return the preprocessdir attribute. | |||
| */ | |||
| public File getPreprocessDir() { | |||
| return preprocessDir; | |||
| } | |||
| /** | |||
| * Set the preprocessdir attribute. | |||
| * @param preprocessDir where to place processor generated source files. | |||
| */ | |||
| public void setPreprocessDir(File preprocessDir) { | |||
| this.preprocessDir = preprocessDir; | |||
| } | |||
| /** | |||
| * Do the compilation. | |||
| * @throws BuildException on error. | |||
| */ | |||
| public void execute() | |||
| throws BuildException { | |||
| if (JavaEnvUtils.getJavaVersionNumber() >= 18) { | |||
| throw new BuildException("apt does not exist under Java 1.8 and higher"); | |||
| } | |||
| super.execute(); | |||
| } | |||
| } | |||
| @@ -1,187 +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.compilers; | |||
| import java.io.File; | |||
| import java.lang.reflect.Method; | |||
| import java.util.Enumeration; | |||
| import java.util.Vector; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.taskdefs.Apt; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| import org.apache.tools.ant.types.Path; | |||
| /** | |||
| * <p>The implementation of the apt compiler for JDK 1.5.</p> | |||
| * | |||
| * <p>As usual, the low level entry points for Java tools are neither documented or | |||
| * stable; this entry point may change from that of 1.5.0_01-b08 without any | |||
| * warning at all. The IDE decompile of the tool entry points is as follows:</p> | |||
| * <pre> | |||
| * public class Main { | |||
| * public Main() ; | |||
| * | |||
| * public static transient void main(String... strings); | |||
| * | |||
| * public static transient int process(String... strings); | |||
| * | |||
| * public static transient int process(PrintWriter printWriter, | |||
| * String... strings); | |||
| * public static transient int process( | |||
| * AnnotationProcessorFactory annotationProcessorFactory, | |||
| * String... strings); | |||
| * | |||
| * public static transient int process( | |||
| * AnnotationProcessorFactory annotationProcessorFactory, | |||
| * PrintWriter printWriter, | |||
| * String... strings); | |||
| * private static transient int processing( | |||
| * AnnotationProcessorFactory annotationProcessorFactory, | |||
| * PrintWriter printWriter, | |||
| * String... strings) ; | |||
| * } | |||
| * </pre> | |||
| * | |||
| * This Adapter is designed to run Apt in-JVM, an option that is not actually | |||
| * exposed to end-users, because it was too brittle during beta testing; classpath | |||
| * problems being the core issue. | |||
| * | |||
| * @since Ant 1.7 | |||
| */ | |||
| public class AptCompilerAdapter extends DefaultCompilerAdapter { | |||
| /** | |||
| * Integer returned by the Apt compiler to indicate success. | |||
| */ | |||
| private static final int APT_COMPILER_SUCCESS = 0; | |||
| /** | |||
| * class in tools.jar that implements APT | |||
| */ | |||
| public static final String APT_ENTRY_POINT = "com.sun.tools.apt.Main"; | |||
| /** | |||
| * method used to compile. | |||
| */ | |||
| public static final String APT_METHOD_NAME = "process"; | |||
| /** | |||
| * Get the facade task that fronts this adapter | |||
| * | |||
| * @return task instance | |||
| * @see DefaultCompilerAdapter#getJavac() | |||
| */ | |||
| protected Apt getApt() { | |||
| return (Apt) getJavac(); | |||
| } | |||
| /** | |||
| * Using the front end arguments, set up the command line to run Apt | |||
| * | |||
| * @param apt task | |||
| * @param cmd command that is set up with the various switches from the task | |||
| * options | |||
| */ | |||
| static void setAptCommandlineSwitches(final Apt apt, final Commandline cmd) { | |||
| if (!apt.isCompile()) { | |||
| cmd.createArgument().setValue("-nocompile"); | |||
| } | |||
| // Process the factory class | |||
| final String factory = apt.getFactory(); | |||
| if (factory != null) { | |||
| cmd.createArgument().setValue("-factory"); | |||
| cmd.createArgument().setValue(factory); | |||
| } | |||
| // Process the factory path | |||
| final Path factoryPath = apt.getFactoryPath(); | |||
| if (factoryPath != null) { | |||
| cmd.createArgument().setValue("-factorypath"); | |||
| cmd.createArgument().setPath(factoryPath); | |||
| } | |||
| final File preprocessDir = apt.getPreprocessDir(); | |||
| if (preprocessDir != null) { | |||
| cmd.createArgument().setValue("-s"); | |||
| cmd.createArgument().setFile(preprocessDir); | |||
| } | |||
| // Process the processor options | |||
| final Vector options = apt.getOptions(); | |||
| final Enumeration elements = options.elements(); | |||
| Apt.Option opt; | |||
| StringBuffer arg = null; | |||
| while (elements.hasMoreElements()) { | |||
| opt = (Apt.Option) elements.nextElement(); | |||
| arg = new StringBuffer(); | |||
| arg.append("-A").append(opt.getName()); | |||
| if (opt.getValue() != null) { | |||
| arg.append("=").append(opt.getValue()); | |||
| } | |||
| cmd.createArgument().setValue(arg.toString()); | |||
| } | |||
| } | |||
| /** | |||
| * using our front end task, set up the command line switches | |||
| * | |||
| * @param cmd command line to set up | |||
| */ | |||
| protected void setAptCommandlineSwitches(final Commandline cmd) { | |||
| final Apt apt = getApt(); | |||
| setAptCommandlineSwitches(apt, cmd); | |||
| } | |||
| /** | |||
| * Run the compilation. | |||
| * @return true on success. | |||
| * @throws BuildException if the compilation has problems. | |||
| */ | |||
| public boolean execute() throws BuildException { | |||
| attributes.log("Using apt compiler", Project.MSG_VERBOSE); | |||
| //set up the javac options | |||
| final Commandline cmd = setupModernJavacCommand(); | |||
| //then add the Apt options | |||
| setAptCommandlineSwitches(cmd); | |||
| //finally invoke APT | |||
| // Use reflection to be able to build on all JDKs: | |||
| try { | |||
| final Class c = Class.forName(APT_ENTRY_POINT); | |||
| final Object compiler = c.newInstance(); | |||
| final Method compile = c.getMethod(APT_METHOD_NAME, | |||
| new Class[]{(new String[]{}).getClass()}); | |||
| final int result = ((Integer) compile.invoke | |||
| (compiler, new Object[]{cmd.getArguments()})) | |||
| .intValue(); | |||
| return (result == APT_COMPILER_SUCCESS); | |||
| } catch (final BuildException be) { | |||
| //rethrow build exceptions | |||
| throw be; | |||
| } catch (final Exception ex) { | |||
| //cast everything else to a build exception | |||
| throw new BuildException("Error starting apt compiler", | |||
| ex, location); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,71 +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.compilers; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.Project; | |||
| import org.apache.tools.ant.taskdefs.Apt; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| /** | |||
| * The implementation of the apt compiler for JDK 1.5 using an external process | |||
| * | |||
| * @since Ant 1.7 | |||
| */ | |||
| public class AptExternalCompilerAdapter extends DefaultCompilerAdapter { | |||
| /** | |||
| * Get the facade task that fronts this adapter | |||
| * | |||
| * @return task instance | |||
| * @see DefaultCompilerAdapter#getJavac() | |||
| */ | |||
| protected Apt getApt() { | |||
| return (Apt) getJavac(); | |||
| } | |||
| /** | |||
| * Performs a compile using the Javac externally. | |||
| * @return true the compilation was successful. | |||
| * @throws BuildException if there is a problem. | |||
| */ | |||
| public boolean execute() throws BuildException { | |||
| attributes.log("Using external apt compiler", Project.MSG_VERBOSE); | |||
| // Setup the apt executable | |||
| Apt apt = getApt(); | |||
| Commandline cmd = new Commandline(); | |||
| cmd.setExecutable(apt.getAptExecutable()); | |||
| setupModernJavacCommandlineSwitches(cmd); | |||
| AptCompilerAdapter.setAptCommandlineSwitches(apt, cmd); | |||
| int firstFileName = cmd.size(); | |||
| //add the files | |||
| logAndAddFilesToCompile(cmd); | |||
| //run | |||
| return 0 == executeExternalCompile(cmd.getCommandline(), | |||
| firstFileName, | |||
| true); | |||
| } | |||
| } | |||
| @@ -19,7 +19,6 @@ antcall=org.apache.tools.ant.taskdefs.CallTarget | |||
| antstructure=org.apache.tools.ant.taskdefs.AntStructure | |||
| antversion=org.apache.tools.ant.taskdefs.condition.AntVersion | |||
| apply=org.apache.tools.ant.taskdefs.Transform | |||
| apt=org.apache.tools.ant.taskdefs.Apt | |||
| attributenamespacedef=org.apache.tools.ant.taskdefs.AttributeNamespaceDef | |||
| augment=org.apache.tools.ant.taskdefs.AugmentReference | |||
| available=org.apache.tools.ant.taskdefs.Available | |||
| @@ -1,25 +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. | |||
| * | |||
| */ | |||
| /** | |||
| */ | |||
| @Distributed( | |||
| protocol="CORBA", | |||
| distribution=Distributed.DistributionTypes.FEDERATED | |||
| ) | |||
| public class AptExample { | |||
| } | |||
| @@ -1,39 +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. | |||
| * | |||
| */ | |||
| import java.lang.annotation.Annotation; | |||
| import java.lang.annotation.Target; | |||
| import java.lang.annotation.Retention; | |||
| import java.lang.annotation.Documented; | |||
| import java.lang.annotation.ElementType; | |||
| import java.lang.annotation.RetentionPolicy; | |||
| /** | |||
| */ | |||
| @Documented | |||
| @Retention(value = RetentionPolicy.RUNTIME) | |||
| @Target(value = ElementType.TYPE) | |||
| public @interface Distributed { | |||
| public DistributionTypes distribution() default DistributionTypes.LOCAL; | |||
| public String protocol() default "RMI"; | |||
| public enum DistributionTypes { SINGLETON, LOCAL, FAULT_TOLERANT, FEDERATED, MOBILE}; | |||
| } | |||
| @@ -1,50 +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. | |||
| * | |||
| */ | |||
| import com.sun.mirror.apt.AnnotationProcessorFactory; | |||
| import com.sun.mirror.apt.AnnotationProcessor; | |||
| import com.sun.mirror.apt.AnnotationProcessorEnvironment; | |||
| import java.util.Collection; | |||
| import java.util.Set; | |||
| import java.util.Arrays; | |||
| import java.util.Collections; | |||
| /** | |||
| * This was the first piece of Java1.5 code in the source tree. | |||
| * @since 20050-03-09T21:29:25Z | |||
| */ | |||
| public class DistributedAnnotationFactory implements AnnotationProcessorFactory { | |||
| private static final Collection<String> supportedAnnotations | |||
| = Collections.unmodifiableCollection(Arrays.asList("*")); | |||
| public Collection<String> supportedOptions() { | |||
| return Collections.emptySet(); | |||
| } | |||
| public Collection<String> supportedAnnotationTypes() { | |||
| return supportedAnnotations; | |||
| } | |||
| public AnnotationProcessor getProcessorFor( | |||
| Set<com.sun.mirror.declaration.AnnotationTypeDeclaration> annotationTypeDeclarations, | |||
| AnnotationProcessorEnvironment env) { | |||
| return new DistributedAnnotationProcessor(env); | |||
| } | |||
| } | |||
| @@ -1,65 +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. | |||
| * | |||
| */ | |||
| //found in tools.jar, not the JRE runtime. | |||
| import com.sun.mirror.apt.AnnotationProcessor; | |||
| import com.sun.mirror.apt.AnnotationProcessorEnvironment; | |||
| import com.sun.mirror.declaration.TypeDeclaration; | |||
| import com.sun.mirror.declaration.ClassDeclaration; | |||
| import com.sun.mirror.util.SimpleDeclarationVisitor; | |||
| import static com.sun.mirror.util.DeclarationVisitors.*; | |||
| import java.util.Map; | |||
| /** | |||
| * Annotation processor outputs stuff | |||
| */ | |||
| public class DistributedAnnotationProcessor implements AnnotationProcessor { | |||
| public AnnotationProcessorEnvironment env; | |||
| public DistributedAnnotationProcessor(AnnotationProcessorEnvironment env) { | |||
| this.env = env; | |||
| } | |||
| public void echo(String text) { | |||
| env.getMessager().printNotice(text); | |||
| } | |||
| public void process() { | |||
| echo("DistributedAnnotationProcessor-is-go"); | |||
| Map<String, String> options=env.getOptions(); | |||
| for(String key:options.keySet()) { | |||
| echo("Option ["+key+"] = "+options.get(key)); | |||
| } | |||
| //work time | |||
| for (TypeDeclaration typeDecl : env.getSpecifiedTypeDeclarations()) { | |||
| typeDecl.accept(getDeclarationScanner(new ClassVisitor(), | |||
| NO_OP)); | |||
| } | |||
| } | |||
| private class ClassVisitor extends SimpleDeclarationVisitor { | |||
| public void visitClassDeclaration(ClassDeclaration d) { | |||
| echo("visiting "+ d.getQualifiedName()); | |||
| } | |||
| } | |||
| } | |||