stevel 2005/03/09 14:56:39 Modified: . build.xml Added: src/etc/testcases/taskdefs apt.xml src/etc/testcases/taskdefs/apt AptExample.java Distributed.java DistributedAnnotationFactory.java DistributedAnnotationProcessor.java src/testcases/org/apache/tools/ant/taskdefs AptTest.java Log: Apt testing. We can say this works now :) I do worry that the example Java1.5 code looks just like STL C++. We also need to compare factorypath with classpath behaviour. But we can demo that you can add new factories Revision Changes Path 1.1 ant/src/etc/testcases/taskdefs/apt.xml Index: apt.xml =================================================================== <?xml version="1.0"?> <project basedir="."> <!-- apt tests --> <property name="build.dir" location="aptbuild/classes" /> <property name="classes.dir" location="${build.dir}/classes" /> <property name="classes2.dir" location="${build.dir}/classes2" /> <property name="preprocess.dir" location="${build.dir}/source" /> <property name="src" location="apt" /> <property name="AptExample.class" location="${classes.dir}/AptExample.class" /> <macrodef name="assertCompiled"> <attribute name="file" /> <sequential > <fail message="not found: @{file}"> <condition> <not> <available file="@{file}" /> </not> </condition> </fail> </sequential> </macrodef> <presetdef name="assertAptExampleCompiled"> <assertCompiled file="${AptExample.class}"/> </presetdef> <target name="clean"> <delete dir="${build.dir}"/> </target> <target name="init"> <mkdir dir="${classes.dir}"/> <mkdir dir="${classes2.dir}"/> <mkdir dir="${preprocess.dir}"/> </target> <target name="testApt" depends="init"> <apt srcdir="${src}" destdir="${classes.dir}" debug="on" compile="true" preprocessdir="${preprocess.dir}"> </apt> <assertAptExampleCompiled /> </target> <target name="testAptFork" depends="init"> <apt srcdir="${src}" destdir="${classes.dir}" debug="on" compile="true" fork="true" preprocessdir="${preprocess.dir}"> </apt> <assertAptExampleCompiled /> </target> <target name="testListAnnotationTypes" depends="init"> <apt srcdir="${src}" destdir="${classes.dir}" debug="on" compile="true" preprocessdir="${preprocess.dir}"> <compilerarg value="-XListAnnotationTypes" /> <compilerarg value="-Xlint:deprecation" /> </apt> <assertAptExampleCompiled /> </target> <!-- use the factory we compiled. To avoid trouble we deliver into a version in a new classpath, otherwise the dependency logic will not run Apt--> <target name="testAptNewFactory" depends="testApt"> <apt srcdir="${src}" destdir="${classes2.dir}" debug="on" compile="true" factory="DistributedAnnotationFactory" preprocessdir="${preprocess.dir}"> <factorypath path="${classes.dir}" /> <option name="build.dir" value="${build.dir}" /> </apt> <assertAptExampleCompiled /> </target> <target name="testAptNewFactoryFork" depends="testApt"> <apt srcdir="${src}" destdir="${classes2.dir}" debug="on" compile="true" factory="DistributedAnnotationFactory" preprocessdir="${preprocess.dir}"> <factorypath path="${classes.dir}" /> <option name="build.dir" value="${build.dir}" /> </apt> <assertAptExampleCompiled /> </target> </project> 1.1 ant/src/etc/testcases/taskdefs/apt/AptExample.java Index: AptExample.java =================================================================== /* * Copyright 2005 The Apache Software Foundation * * 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. * */ /** */ @Distributed( protocol="CORBA", distribution=Distributed.DistributionTypes.FEDERATED ) public class AptExample { } 1.1 ant/src/etc/testcases/taskdefs/apt/Distributed.java Index: Distributed.java =================================================================== /* * Copyright 2005 The Apache Software Foundation * * 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. * */ 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.1 ant/src/etc/testcases/taskdefs/apt/DistributedAnnotationFactory.java Index: DistributedAnnotationFactory.java =================================================================== /* * Copyright 2005 The Apache Software Foundation * * 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. * */ 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.1 ant/src/etc/testcases/taskdefs/apt/DistributedAnnotationProcessor.java Index: DistributedAnnotationProcessor.java =================================================================== /* * Copyright 2005 The Apache Software Foundation * * 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. * */ //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()); } } } 1.1 ant/src/testcases/org/apache/tools/ant/taskdefs/AptTest.java Index: AptTest.java =================================================================== /* * Copyright 2005 The Apache Software Foundation * * 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. * */ package org.apache.tools.ant.taskdefs; import org.apache.tools.ant.BuildFileTest; /** */ public class AptTest extends BuildFileTest { public AptTest(String name) { super(name); } public void setUp() { configureProject("src/etc/testcases/taskdefs/apt.xml"); } /** * Tears down the fixture, for example, close a network connection. This * method is called after a test is executed. */ protected void tearDown() throws Exception { executeTarget("clean"); } public void testApt() { executeTarget("testApt"); } public void testAptFork() { executeTarget("testAptFork"); } public void testListAnnotationTypes() { executeTarget("testListAnnotationTypes"); assertLogContaining("Set of annotations found:"); assertLogContaining("Distributed"); } public void testAptNewFactory() { executeTarget("testAptNewFactory"); assertProcessed(); } public void testAptNewFactoryFork() { executeTarget("testAptNewFactoryFork"); assertProcessed(); } private void assertProcessed() { assertLogContaining("DistributedAnnotationProcessor-is-go"); assertLogContaining("[-Abuild.dir="); assertLogContaining("visiting DistributedAnnotationFactory"); } } 1.462 +18 -14 ant/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/ant/build.xml,v retrieving revision 1.461 retrieving revision 1.462 diff -u -r1.461 -r1.462 --- build.xml 9 Mar 2005 09:25:52 -0000 1.461 +++ build.xml 9 Mar 2005 22:56:38 -0000 1.462 @@ -30,8 +30,11 @@ <property name="bootstrap.jar" value="ant-bootstrap.jar"/> <property name="ant.package" value="org/apache/tools/ant"/> - <property name="optional.package" value="${ant.package}/taskdefs/optional"/> - <property name="optional.type.package" value="${ant.package}/types/optional"/> + <property name="taskdefs.package" value="${ant.package}/taskdefs"/> + <property name="optional.package" value="${taskdefs.package}/optional"/> + <property name="optional.condition.package" value="${optional.package}/condition"/> + <property name="type.package" value="${ant.package}/types"/> + <property name="optional.type.package" value="${type.package}/optional"/> <property name="apache.resolver.type.package" value="${ant.package}/types/resolver"/> <property name="util.package" value="${ant.package}/util"/> <property name="regexp.package" value="${util.package}/regexp"/> @@ -154,7 +157,8 @@ <selector id="needs.jdk1.5+"> <or> - <filename name="${ant.package}/taskdefs/optional/condition/IsPingable*"/> + <filename name="${optional.condition.package}/IsPingable*"/> + <filename name="${taskdefs.package}/AptTest*"/> </or> </selector> @@ -162,7 +166,7 @@ but not all of them --> <selector id="not.in.kaffe"> <or> - <filename name="${ant.package}/taskdefs/optional/condition/IsPingable*"/> + <filename name="${optional.condition.package}/IsPingable*"/> </or> </selector> @@ -185,7 +189,7 @@ <filename name="${optional.package}/sitraka/**"/> <filename name="${optional.package}/metamata/MMetrics*"/> <filename name="${optional.package}/XsltTest*"/> - <filename name="${ant.package}/types/XMLCatalogBuildFileTest*"/> + <filename name="${type.package}/XMLCatalogBuildFileTest*"/> </or> </selector> @@ -1507,7 +1511,7 @@ <include name="**/*Test*"/> <!-- abstract classes, not testcases --> - <exclude name="${ant.package}/taskdefs/TaskdefsTest.java"/> + <exclude name="${taskdefs.package}/TaskdefsTest.java"/> <exclude name="${ant.package}/BuildFileTest.java"/> <exclude name="${regexp.package}/RegexpMatcherTest.java"/> <exclude name="${regexp.package}/RegexpTest.java"/> @@ -1517,10 +1521,10 @@ <!-- helper classes, not testcases --> <exclude name="org/example/**"/> - <exclude name="${ant.package}/taskdefs/TaskdefTest*Task.java"/> + <exclude name="${taskdefs.package}/TaskdefTest*Task.java"/> <!-- interactive tests --> - <exclude name="${ant.package}/taskdefs/TestProcess.java"/> + <exclude name="${taskdefs.package}/TestProcess.java"/> <exclude name="${optional.package}/splash/SplashScreenTest.java"/> <!-- only run these tests if their required libraries are @@ -1580,7 +1584,7 @@ unless="trax.impl.present"/> <exclude name="${optional.package}/junit/JUnitReportTest.java" unless="run.junitreport"/> - <exclude name="${ant.package}/taskdefs/StyleTest.java" + <exclude name="${taskdefs.package}/StyleTest.java" unless="trax.impl.present"/> <!-- needs BSF to work --> @@ -1610,9 +1614,9 @@ IllegalAccessExceptions otherwise. --> <exclude name="${ant.package}/DirectoryScannerTest.java" unless="tests.and.ant.share.classloader"/> - <exclude name="${ant.package}/taskdefs/SQLExecTest.java" + <exclude name="${taskdefs.package}/SQLExecTest.java" unless="tests.and.ant.share.classloader"/> - <exclude name="${ant.package}/taskdefs/cvslib/ChangeLogWriterTest.java" + <exclude name="${taskdefs.package}/cvslib/ChangeLogWriterTest.java" unless="tests.and.ant.share.classloader"/> <exclude name="${optional.package}/sos/SOSTest.java" unless="tests.and.ant.share.classloader"/> @@ -1622,15 +1626,15 @@ unless="tests.and.ant.share.classloader"/> <exclude name="${optional.package}/metamata/MAuditParserTest.java" unless="tests.and.ant.share.classloader"/> - <exclude name="${ant.package}/taskdefs/ProcessDestroyerTest.java" + <exclude name="${taskdefs.package}/ProcessDestroyerTest.java" unless="tests.and.ant.share.classloader"/> - <exclude name="${ant.package}/taskdefs/ProtectedJarMethodsTest.java" + <exclude name="${taskdefs.package}/ProtectedJarMethodsTest.java" unless="tests.and.ant.share.classloader"/> <!-- can only run if cvs is installed on your machine enable by setting the property have.cvs --> - <exclude name="${ant.package}/taskdefs/AbstractCvsTaskTest.java" + <exclude name="${taskdefs.package}/AbstractCvsTaskTest.java" unless="have.cvs"/> <!-- needs a local ftp server and the entry of a user/password combination -->
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]