Author: bodewig Date: Mon Sep 11 11:53:44 2006 New Revision: 442287 URL: http://svn.apache.org/viewvc?view=rev&rev=442287 Log: Push setLocation down to ProjectComponent, reflect it into adapted tasks
Added: ant/core/trunk/src/etc/testcases/core/location.xml (with props) ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java (with props) Modified: ant/core/trunk/WHATSNEW ant/core/trunk/src/main/org/apache/tools/ant/ProjectComponent.java ant/core/trunk/src/main/org/apache/tools/ant/Task.java ant/core/trunk/src/main/org/apache/tools/ant/TaskAdapter.java ant/core/trunk/src/main/org/apache/tools/ant/UnknownElement.java Modified: ant/core/trunk/WHATSNEW URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=442287&r1=442286&r2=442287 ============================================================================== --- ant/core/trunk/WHATSNEW (original) +++ ant/core/trunk/WHATSNEW Mon Sep 11 11:53:44 2006 @@ -38,6 +38,10 @@ Bugzilla report 36772. * added searchparents attribute to <available>. Bugzilla report 39549. +* tasks that don't extend Ant's Task class can will now get the build file + location reflected into a method of the signature void setLocation(Location) + - if such a method exists. + Changes from Ant 1.6.5 to Ant 1.7.0Beta1 ======================================== Added: ant/core/trunk/src/etc/testcases/core/location.xml URL: http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/core/location.xml?view=auto&rev=442287 ============================================================================== --- ant/core/trunk/src/etc/testcases/core/location.xml (added) +++ ant/core/trunk/src/etc/testcases/core/location.xml Mon Sep 11 11:53:44 2006 @@ -0,0 +1,38 @@ +<?xml version="1.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. +--> +<project name="location" default="all"> + <target name="all"> + <fail>Only use this build file from within tests</fail> + </target> + + <target name="testPlainTask"> + <echo id="echo">Hello</echo> + </target> + + <target name="testStandaloneType"> + <echo id="echo2">Hello</echo> + <fileset id="fs" dir="."/> + </target> + + <target name="testConditionTask"> + <condition property="foo" id="cond"> + <equals arg1="bar" arg2="baz"/> + </condition> + </target> + +</project> \ No newline at end of file Propchange: ant/core/trunk/src/etc/testcases/core/location.xml ------------------------------------------------------------------------------ svn:eol-style = native Modified: ant/core/trunk/src/main/org/apache/tools/ant/ProjectComponent.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/ProjectComponent.java?view=diff&rev=442287&r1=442286&r2=442287 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/ProjectComponent.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/ProjectComponent.java Mon Sep 11 11:53:44 2006 @@ -34,6 +34,14 @@ */ protected Project project; + /** + * Location within the build file of this task definition. + * @deprecated since 1.6.x. + * You should not be accessing this variable directly. + * Please use the [EMAIL PROTECTED] #getLocation()} method. + */ + protected Location location = Location.UNKNOWN_LOCATION; + /** Sole constructor. */ public ProjectComponent() { } @@ -58,6 +66,32 @@ */ public Project getProject() { return project; + } + + /** + * Returns the file/location where this task was defined. + * + * @return the file/location where this task was defined. + * Should not return <code>null</code>. Location.UNKNOWN_LOCATION + * is used for unknown locations. + * + * @see Location#UNKNOWN_LOCATION + */ + public Location getLocation() { + return location; + } + + /** + * Sets the file/location where this task was defined. + * + * @param location The file/location where this task was defined. + * Should not be <code>null</code>--use + * Location.UNKNOWN_LOCATION if the location isn't known. + * + * @see Location#UNKNOWN_LOCATION + */ + public void setLocation(Location location) { + this.location = location; } /** Modified: ant/core/trunk/src/main/org/apache/tools/ant/Task.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/Task.java?view=diff&rev=442287&r1=442286&r2=442287 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/Task.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/Task.java Mon Sep 11 11:53:44 2006 @@ -48,14 +48,6 @@ protected String description; /** - * Location within the build file of this task definition. - * @deprecated since 1.6.x. - * You should not be accessing this variable directly. - * Please use the [EMAIL PROTECTED] #getLocation()} method. - */ - protected Location location = Location.UNKNOWN_LOCATION; - - /** * Name of this task to be used for logging purposes. * This defaults to the same as the type, but may be * overridden by the user. For instance, the name "java" @@ -188,32 +180,6 @@ * @exception BuildException if something goes wrong with the build. */ public void execute() throws BuildException { - } - - /** - * Returns the file/location where this task was defined. - * - * @return the file/location where this task was defined. - * Should not return <code>null</code>. Location.UNKNOWN_LOCATION - * is used for unknown locations. - * - * @see Location#UNKNOWN_LOCATION - */ - public Location getLocation() { - return location; - } - - /** - * Sets the file/location where this task was defined. - * - * @param location The file/location where this task was defined. - * Should not be <code>null</code>--use - * Location.UNKNOWN_LOCATION if the location isn't known. - * - * @see Location#UNKNOWN_LOCATION - */ - public void setLocation(Location location) { - this.location = location; } /** Modified: ant/core/trunk/src/main/org/apache/tools/ant/TaskAdapter.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/TaskAdapter.java?view=diff&rev=442287&r1=442286&r2=442287 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/TaskAdapter.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/TaskAdapter.java Mon Sep 11 11:53:44 2006 @@ -100,9 +100,23 @@ * or the method could not be executed. */ public void execute() throws BuildException { - Method setProjectM = null; try { - setProjectM = proxy.getClass().getMethod( + Method setLocationM = proxy.getClass().getMethod( + "setLocation", new Class[] {Location.class}); + if (setLocationM != null) { + setLocationM.invoke(proxy, new Object[] {getLocation()}); + } + } catch (NoSuchMethodException e) { + // ignore this if the class being used as a task does not have + // a set location method. + } catch (Exception ex) { + log("Error setting location in " + proxy.getClass(), + Project.MSG_ERR); + throw new BuildException(ex); + } + + try { + Method setProjectM = proxy.getClass().getMethod( "setProject", new Class[] {Project.class}); if (setProjectM != null) { setProjectM.invoke(proxy, new Object[] {getProject()}); Modified: ant/core/trunk/src/main/org/apache/tools/ant/UnknownElement.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/UnknownElement.java?view=diff&rev=442287&r1=442286&r2=442287 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/UnknownElement.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/UnknownElement.java Mon Sep 11 11:53:44 2006 @@ -424,6 +424,9 @@ if (o instanceof Task) { ((Task) o).setOwningTarget(getOwningTarget()); } + if (o instanceof ProjectComponent) { + ((ProjectComponent) o).setLocation(getLocation()); + } return o; } @@ -545,7 +548,9 @@ childTask.setRuntimeConfigurableWrapper(childWrapper); childTask.setTaskName(childName); childTask.setTaskType(childName); - childTask.setLocation(child.getLocation()); + } + if (realChild instanceof ProjectComponent) { + ((ProjectComponent) realChild).setLocation(child.getLocation()); } child.handleChildren(realChild, childWrapper); return true; Added: ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java?view=auto&rev=442287 ============================================================================== --- ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java (added) +++ ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java Mon Sep 11 11:53:44 2006 @@ -0,0 +1,54 @@ +/* + * 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; + +import org.apache.tools.ant.taskdefs.ConditionTask; +import org.apache.tools.ant.taskdefs.Echo; +import org.apache.tools.ant.types.FileSet; + +public class LocationTest extends BuildFileTest { + + public void setUp() { + configureProject("src/etc/testcases/core/location.xml"); + } + + public void testPlainTask() { + executeTarget("testPlainTask"); + Echo e = (Echo) getProject().getReference("echo"); + assertFalse(e.getLocation() == Location.UNKNOWN_LOCATION); + assertFalse(e.getLocation().getLineNumber() == 0); + } + + public void testStandaloneType() { + executeTarget("testStandaloneType"); + Echo e = (Echo) getProject().getReference("echo2"); + FileSet f = (FileSet) getProject().getReference("fs"); + assertFalse(f.getLocation() == Location.UNKNOWN_LOCATION); + assertEquals(e.getLocation().getLineNumber() + 1, + f.getLocation().getLineNumber()); + } + + public void testConditionTask() { + executeTarget("testConditionTask"); + TaskAdapter ta = (TaskAdapter) getProject().getReference("cond"); + ConditionTask c = (ConditionTask) ta.getProxy(); + assertFalse(c.getLocation() == Location.UNKNOWN_LOCATION); + assertFalse(c.getLocation().getLineNumber() == 0); + } +} \ No newline at end of file Propchange: ant/core/trunk/src/testcases/org/apache/tools/ant/LocationTest.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]