peterreilly 2003/06/27 02:24:10 Modified: src/main/org/apache/tools/ant ComponentHelper.java src/main/org/apache/tools/ant/taskdefs Typedef.java src/testcases/org/apache/tools/ant ProjectTest.java Log: Get Project#getTaskDefinitions and Project#getDataTypeDefinitions to emulate old behaviour This fixs the <antstructure/> output. Provide ComponentHelper#getAntTypeTable to provide the full table Revert changes to ProjectTest Update Typedef.java (forgot this in previous commit) Revision Changes Path 1.13 +69 -8 ant/src/main/org/apache/tools/ant/ComponentHelper.java Index: ComponentHelper.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/ComponentHelper.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- ComponentHelper.java 26 Jun 2003 08:54:28 -0000 1.12 +++ ComponentHelper.java 27 Jun 2003 09:24:10 -0000 1.13 @@ -92,12 +92,19 @@ * @since Ant1.6 */ public class ComponentHelper { - // Map from task names to implementing classes - not used anymore - private Hashtable taskClassDefinitions = new Hashtable(); - /** Map from compoennt name to anttypedefinition */ private AntTypeTable antTypeTable; + /** Map of tasks generated from antTypeTable */ + private Hashtable taskClassDefinitions = new Hashtable(); + /** flag to rebuild taskClassDefinitions */ + private boolean rebuildTaskClassDefinitions = true; + + /** Map of types generated from antTypeTable */ + private Hashtable typeClassDefinitions = new Hashtable(); + /** flag to rebuild typeClassDefinitions */ + private boolean rebuildTypeClassDefinitions = true; + /** * Map from task names to vectors of created tasks * (String to Vector of Task). This is used to invalidate tasks if @@ -105,7 +112,6 @@ */ private Hashtable createdTasks = new Hashtable(); - protected ComponentHelper next; protected Project project; @@ -301,15 +307,70 @@ /** * Returns the current task definition hashtable. The returned hashtable is * "live" and so should not be modified. - * This table does not contain any information * * @return a map of from task name to implementing class * (String to Class). */ public Hashtable getTaskDefinitions() { + synchronized(taskClassDefinitions) { + synchronized (antTypeTable) { + if (rebuildTaskClassDefinitions) { + taskClassDefinitions.clear(); + for (Iterator i = antTypeTable.keySet().iterator(); + i.hasNext();) + { + String name = (String) i.next(); + Class clazz = + (Class) antTypeTable.getExposedClass(name); + if (clazz == null) { + continue; + } + if (Task.class.isAssignableFrom(clazz)) { + taskClassDefinitions.put( + name, antTypeTable.getTypeClass(name)); + } + } + rebuildTaskClassDefinitions = false; + } + } + } return taskClassDefinitions; } + + /** + * Returns the current type definition hashtable. The returned hashtable is + * "live" and so should not be modified. + * + * @return a map of from type name to implementing class + * (String to Class). + */ + public Hashtable getDataTypeDefinitions() { + synchronized(typeClassDefinitions) { + synchronized (antTypeTable) { + if (rebuildTypeClassDefinitions) { + typeClassDefinitions.clear(); + for (Iterator i = antTypeTable.keySet().iterator(); + i.hasNext();) + { + String name = (String) i.next(); + Class clazz = + (Class) antTypeTable.getExposedClass(name); + if (clazz == null) { + continue; + } + if (! Task.class.isAssignableFrom(clazz)) { + typeClassDefinitions.put( + name, antTypeTable.getTypeClass(name)); + } + } + rebuildTypeClassDefinitions = false; + } + } + } + return typeClassDefinitions; + } + /** * Adds a new datatype definition. * Attempting to override an existing definition with an @@ -350,7 +411,7 @@ * @return a map of from datatype name to implementing class * (String to Class). */ - public Hashtable getDataTypeDefinitions() { + public Hashtable getAntTypeTable() { return antTypeTable; } @@ -525,6 +586,8 @@ private void updateDataTypeDefinition(AntTypeDefinition def) { String name = def.getName(); synchronized (antTypeTable) { + rebuildTaskClassDefinitions = true; + rebuildTypeClassDefinitions = true; AntTypeDefinition old = antTypeTable.getDefinition(name); if (old != null) { if (sameDefinition(def, old)) { @@ -682,8 +745,6 @@ } public boolean contains(Object clazz) { - // only used in unit test ProjectTest - // needed ??? for (Iterator i = values().iterator(); i.hasNext();) { AntTypeDefinition def = (AntTypeDefinition) i.next(); Class c = def.getExposedClass(); 1.12 +3 -9 ant/src/main/org/apache/tools/ant/taskdefs/Typedef.java Index: Typedef.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Typedef.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Typedef.java 7 Mar 2003 11:23:02 -0000 1.11 +++ Typedef.java 27 Jun 2003 09:24:10 -0000 1.12 @@ -1,7 +1,7 @@ /* * The Apache Software License, Version 1.1 * - * Copyright (c) 2001-2002 The Apache Software Foundation. All rights + * Copyright (c) 2001-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -54,7 +54,7 @@ package org.apache.tools.ant.taskdefs; -import org.apache.tools.ant.BuildException; + /** * @@ -74,16 +74,10 @@ * types are things likepaths or filesets that can be defined at * the project level and referenced via their ID attribute.</p> * <p>Custom data types usually need custom tasks to put them to good use.</p> - + * * @author Stefan Bodewig * @since Ant 1.4 * @ant.task category="internal" */ public class Typedef extends Definer { - /** - * implement abstract callback of parent class - */ - protected void addDefinition(String name, Class c) throws BuildException { - getProject().addDataTypeDefinition(name, c); - } } 1.18 +5 -6 ant/src/testcases/org/apache/tools/ant/ProjectTest.java Index: ProjectTest.java =================================================================== RCS file: /home/cvs/ant/src/testcases/org/apache/tools/ant/ProjectTest.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- ProjectTest.java 26 Jun 2003 08:54:29 -0000 1.17 +++ ProjectTest.java 27 Jun 2003 09:24:10 -0000 1.18 @@ -183,9 +183,9 @@ p.addBuildListener(mbl); p.addTaskDefinition("Ok", DummyTaskOk.class); - assertEquals(DummyTaskOk.class, p.getDataTypeDefinitions().get("Ok")); + assertEquals(DummyTaskOk.class, p.getTaskDefinitions().get("Ok")); p.addTaskDefinition("OkNonTask", DummyTaskOkNonTask.class); - assertEquals(DummyTaskOkNonTask.class, p.getDataTypeDefinitions().get("OkNonTask")); + assertEquals(DummyTaskOkNonTask.class, p.getTaskDefinitions().get("OkNonTask")); mbl.assertEmpty(); assertTaskDefFails(DummyTaskPrivate.class, DummyTaskPrivate.class + " is not public"); @@ -220,7 +220,7 @@ mbl.addBuildEvent("return type of execute() should be void but was \"int\" in " + DummyTaskWithNonVoidExecute.class, Project.MSG_WARN); p.addTaskDefinition("NonVoidExecute", DummyTaskWithNonVoidExecute.class); mbl.assertEmpty(); - assertEquals(DummyTaskWithNonVoidExecute.class, p.getDataTypeDefinitions().get("NonVoidExecute")); + assertEquals(DummyTaskWithNonVoidExecute.class, p.getTaskDefinitions().get("NonVoidExecute")); } public void testInputHandler() { @@ -233,12 +233,11 @@ } public void testTaskDefinitionContainsKey() { - assertTrue(p.getDataTypeDefinitions().containsKey("echo")); + assertTrue(p.getTaskDefinitions().containsKey("echo")); } public void testTaskDefinitionContains() { - assertTrue(p.getDataTypeDefinitions() - .contains(org.apache.tools.ant.taskdefs.Echo.class)); + assertTrue(p.getTaskDefinitions().contains(org.apache.tools.ant.taskdefs.Echo.class)); } private class DummyTaskPrivate extends Task {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]