You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/03/18 20:15:28 UTC

svn commit: r519675 - in /tapestry/tapestry4/trunk: ./ eclipse/ tapestry-framework/src/java/org/apache/tapestry/ tapestry-framework/src/java/org/apache/tapestry/binding/ tapestry-framework/src/java/org/apache/tapestry/listener/ tapestry-framework/src/t...

Author: jkuhnert
Date: Sun Mar 18 12:15:27 2007
New Revision: 519675

URL: http://svn.apache.org/viewvc?view=rev&rev=519675
Log:
Fixes for TAPESTRY-838. 

Exposed listener method name targeted for invocation in IActionListener / ListenerInvoker.

Removed:
    tapestry/tapestry4/trunk/eclipse/Tapestry-Vlib.launch
    tapestry/tapestry4/trunk/eclipse/TimeTracker.launch
    tapestry/tapestry4/trunk/eclipse/Workbench.launch
Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java
    tapestry/tapestry4/trunk/tapestry.iws

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java Sun Mar 18 12:15:27 2007
@@ -38,4 +38,11 @@
      **/
 
     void actionTriggered(IComponent component, IRequestCycle cycle);
+
+    /**
+     * The actual method name that this listener represents.
+     *
+     * @return The method name this listener is bound to.
+     */
+    String getMethodName();
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java Sun Mar 18 12:15:27 2007
@@ -16,12 +16,7 @@
 
 import org.apache.hivemind.Location;
 import org.apache.hivemind.util.Defense;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.RedirectException;
+import org.apache.tapestry.*;
 import org.apache.tapestry.coerce.ValueConverter;
 
 /**
@@ -67,6 +62,11 @@
         return this;
     }
 
+    public String getMethodName()
+    {
+        return _methodName;
+    }
+
     public void actionTriggered(IComponent component, IRequestCycle cycle)
     {
         try
@@ -100,5 +100,4 @@
         buffer.append(", methodName=");
         buffer.append(_methodName);
     }
-
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java Sun Mar 18 12:15:27 2007
@@ -30,6 +30,13 @@
 public interface ListenerInvokerFilter
 {
 
-    void invokeListener(IActionListener listener, IComponent source,
-            IRequestCycle cycle, ListenerInvoker delegate);
+    /**
+     * Invoked when a particular listener is being called.
+     *
+     * @param listener The listener reference being invoked.
+     * @param source The component the listener is being invoked on.
+     * @param cycle The associated request.
+     * @param delegate The delegate responsible for actually invoking the method.
+     */
+    void invokeListener(IActionListener listener, IComponent source, IRequestCycle cycle, ListenerInvoker delegate);
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java Sun Mar 18 12:15:27 2007
@@ -46,7 +46,8 @@
         Defense.notNull(source, "source");
         Defense.notNull(cycle, "cycle");
 
-        if (listener != null) listener.actionTriggered(source, cycle);
+        if (listener != null)
+            listener.actionTriggered(source, cycle);
     }
 
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java Sun Mar 18 12:15:27 2007
@@ -36,5 +36,18 @@
 public interface ListenerMethodInvoker
 {
 
+    /**
+     * Called to invoke the bound listener method.
+     *
+     * @param target The object to call the listener method on.
+     * @param cycle The associated request.
+     */
     void invokeListenerMethod(Object target, IRequestCycle cycle);
+    
+    /**
+     * The actual method name that this listener represents.
+     *
+     * @return The method name this listener is bound to.
+     */
+    String getMethodName();
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java Sun Mar 18 12:15:27 2007
@@ -14,11 +14,6 @@
 
 package org.apache.tapestry.listener;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
-
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.util.Defense;
 import org.apache.tapestry.IPage;
@@ -26,6 +21,11 @@
 import org.apache.tapestry.engine.ILink;
 import org.apache.tapestry.event.BrowserEvent;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Logic for mapping a listener method name to an actual method invocation; this
  * may require a little searching to find the correct version of the method,
@@ -201,5 +201,18 @@
         throws IllegalAccessException, InvocationTargetException
     {
         return listenerMethod.invoke(target, parameters);
+    }
+
+
+    public String getMethodName()
+    {
+        return _name;
+    }
+
+    public String toString()
+    {
+        return "ListenerMethodInvokerImpl[" +
+               "_name='" + _name + '\'' +
+               ']';
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java Sun Mar 18 12:15:27 2007
@@ -34,7 +34,6 @@
  */
 public class SyntheticListener implements IActionListener
 {
-
     private final Object _target;
 
     private final ListenerMethodInvoker _invoker;
@@ -51,5 +50,15 @@
     public void actionTriggered(IComponent component, IRequestCycle cycle)
     {
         _invoker.invokeListenerMethod(_target, cycle);
+    }
+    
+    public String getMethodName()
+    {
+        return _invoker.getMethodName();
+    }
+
+    public String toString()
+    {
+        return "SyntheticListener[methodName = " + _invoker.getMethodName() + "]";
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java Sun Mar 18 12:15:27 2007
@@ -14,18 +14,12 @@
 
 package org.apache.tapestry.binding;
 
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-
 import org.apache.hivemind.Location;
-import org.apache.tapestry.BindingException;
-import org.apache.tapestry.IActionListener;
-import org.apache.tapestry.IComponent;
-import org.apache.tapestry.IRequestCycle;
-import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.RedirectException;
+import org.apache.tapestry.*;
 import org.apache.tapestry.coerce.ValueConverter;
 import org.apache.tapestry.listener.ListenerMap;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
 import org.testng.annotations.Test;
 
 /**
@@ -37,7 +31,7 @@
 @Test
 public class TestListenerMethodBinding extends BindingTestCase
 {
-    public void testInvokeListener()
+    public void test_Invoke_Listener()
     {
         IComponent component = newComponent();
         ListenerMap map = newListenerMap();
@@ -63,7 +57,7 @@
         verify();
     }
 
-    public void testToString()
+    public void test_To_String()
     {
         IComponent component = newComponent();
         Location l = newLocation();
@@ -83,7 +77,7 @@
         verify();
     }
 
-    public void testInvokeAndPageRedirect()
+    public void test_Invoke_And_Page_Redirect()
     {
         IComponent component = newComponent();
         ListenerMap map = newListenerMap();
@@ -117,7 +111,7 @@
         verify();
     }
 
-    public void testInvokeAndRedirect()
+    public void test_Invoke_And_Redirect()
     {
         IComponent component = newComponent();
         ListenerMap map = newListenerMap();
@@ -151,7 +145,7 @@
         verify();
     }
 
-    public void testInvokeListenerFailure()
+    public void test_Invoke_Listener_Failure()
     {
         IComponent component = newComponent();
         ListenerMap map = newListenerMap();
@@ -192,15 +186,25 @@
         verify();
     }
 
-    private void trainGetListener(IComponent component, ListenerMap lm, IActionListener listener)
+    public void test_Get_Method_Name()
     {
-        trainGetListeners(component, lm);
-        trainGetListener(lm, "foo", listener);
+        IComponent component = newComponent();
+        Location l = newLocation();
+        ValueConverter vc = newValueConverter();
+        
+        replay();
+
+        ListenerMethodBinding b = new ListenerMethodBinding("param", vc, l, component, "foo");
+
+        assertEquals(b.getMethodName(), "foo");
+
+        verify();
     }
 
-    protected IRequestCycle newCycle()
+    private void trainGetListener(IComponent component, ListenerMap lm, IActionListener listener)
     {
-        return newMock(IRequestCycle.class);
+        trainGetListeners(component, lm);
+        trainGetListener(lm, "foo", listener);
     }
 
     private void trainGetListener(ListenerMap map, String methodName, IActionListener listener)
@@ -222,4 +226,4 @@
     {
         return newMock(IActionListener.class);
     }
-}
\ No newline at end of file
+}

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java Sun Mar 18 12:15:27 2007
@@ -13,11 +13,10 @@
 // limitations under the License.
 package org.apache.tapestry.listener;
 
-import static org.easymock.EasyMock.expect;
-
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.event.BrowserEvent;
+import static org.easymock.EasyMock.expect;
 import org.testng.annotations.Test;
 
 
@@ -70,5 +69,14 @@
         invoker.invokeListenerMethod(target, cycle);
         
         verify();
+    }
+
+    public void test_To_String()
+    {
+        ListenerMethodInvoker invoker =
+            new ListenerMethodInvokerImpl("bangbangClicked", ListenerMethodHolder.class.getDeclaredMethods());
+
+        
+        assertEquals(invoker.toString(), "ListenerMethodInvokerImpl[_name='bangbangClicked']");
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry.iws
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.iws?view=diff&rev=519675&r1=519674&r2=519675
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.iws (original)
+++ tapestry/tapestry4/trunk/tapestry.iws Sun Mar 18 12:15:27 2007
@@ -17,29 +17,19 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
+      <change type="DELETED" beforePath="$PROJECT_DIR$/eclipse/Tapestry-Vlib.launch" afterPath="" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iws" afterPath="$PROJECT_DIR$/tapestry.iws" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss/data/hypersonic/localDB.properties" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-contrib/pom.xml" afterPath="$PROJECT_DIR$/tapestry-contrib/pom.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/tapestry-annotations.iml" afterPath="$PROJECT_DIR$/tapestry-annotations/tapestry-annotations.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.ipr" afterPath="$PROJECT_DIR$/tapestry.ipr" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss/data/hypersonic/localDB.script" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker/TimeTracker.iml" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker/TimeTracker.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" afterPath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/tapestry-contrib/.cvsignore" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/site/apt/usersguide/validation.apt" afterPath="$PROJECT_DIR$/src/site/apt/usersguide/validation.apt" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/tapestry-portlet/.cvsignore" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/.cvsignore" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" afterPath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss/data/hypersonic" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss/deploy" afterPath="" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/tapestry-examples/Workbench/.cvsignore" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iml" afterPath="$PROJECT_DIR$/tapestry.iml" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/.cvsignore" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" afterPath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" />
-      <change type="DELETED" beforePath="$PROJECT_DIR$/config/jboss/data" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/eclipse/TimeTracker.launch" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/eclipse/Workbench.launch" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java" />
     </list>
   </component>
   <component name="ChangesViewManager" flattened_view="true" />
@@ -213,48 +203,6 @@
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
       </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
-      <PATH>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry.ipr" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="tapestry" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-        <PATH_ELEMENT>
-          <option name="myItemId" value="PsiDirectory:$PROJECT_DIR$/config" />
-          <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-        </PATH_ELEMENT>
-      </PATH>
     </subPane>
   </component>
   <component name="ProjectReloadState">
@@ -292,26 +240,26 @@
   </component>
   <component name="RecentsManager" />
   <component name="RestoreUpdateTree" />
-  <component name="RunManager" selected="TestNG.ExternalServiceTest">
-    <tempConfiguration default="false" name="ExternalServiceTest" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
+  <component name="RunManager" selected="TestNG.TestListenerMethodBinding">
+    <tempConfiguration default="false" name="TestListenerMethodBinding" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
       <module name="tapestry-framework" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" value="" />
-      <option name="SUITE_NAME" value="" />
-      <option name="PACKAGE_NAME" value="org.apache.tapestry.engine" />
-      <option name="MAIN_CLASS_NAME" value="org.apache.tapestry.engine.ExternalServiceTest" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
+      <option name="PACKAGE_NAME" value="org.apache.tapestry.binding" />
+      <option name="MAIN_CLASS_NAME" value="org.apache.tapestry.binding.TestListenerMethodBinding" />
       <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" value="" />
+      <option name="GROUP_NAME" />
       <option name="TEST_OBJECT" value="CLASS" />
-      <option name="VM_PARAMETERS" value="" />
-      <option name="PARAMETERS" value="" />
-      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
-      <option name="OUTPUT_DIRECTORY" value="" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="OUTPUT_DIRECTORY" />
       <option name="ADDITIONAL_CLASS_PATH" />
       <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
+        <value defaultName="wholeProject" />
       </option>
-      <option name="PROPERTIES_FILE" value="" />
+      <option name="PROPERTIES_FILE" />
       <properties />
       <RunnerSettings RunnerId="Run" />
       <ConfigurationWrapper RunnerId="Run" />
@@ -466,7 +414,7 @@
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20563847" order="8" />
       <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="1" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="1" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.28713694" order="1" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="3" />
       <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32974318" order="8" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20829876" order="8" />
@@ -481,7 +429,7 @@
       <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1932814" order="0" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="6" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2620232" order="2" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2614108" order="2" />
       <window_info id="SVN Repositories" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27219918" order="8" />
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="5" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="0" />
@@ -503,7 +451,7 @@
     <option name="PERFORM_COMMIT_IN_BACKGROUND" value="false" />
     <option name="PUT_FOCUS_INTO_COMMENT" value="false" />
     <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="Minor code cleanup, removal of old .cvsignore properties." />
+    <option name="LAST_COMMIT_MESSAGE" value="Fixes for TAPESTRY-838. &#10;&#10;Exposed listener method name targeted for invocation in IActionListener / ListenerInvoker." />
     <option name="SAVE_LAST_COMMIT_MESSAGE" value="true" />
     <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8" />
     <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
@@ -518,6 +466,7 @@
     <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
     <MESSAGE value="Cleaned up shared idea properties." />
     <MESSAGE value="Minor code cleanup, removal of old .cvsignore properties." />
+    <MESSAGE value="Fixes for TAPESTRY-838. &#10;&#10;Exposed listener method name targeted for invocation in IActionListener / ListenerInvoker." />
   </component>
   <component name="antWorkspaceConfiguration">
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
@@ -534,110 +483,107 @@
     <option name="myLastEditedConfigurable" value="Project Default" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/servlet/ConfigurationServlet.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/form/FormEventType.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="30" column="7" selection-start="1044" selection-end="1044" vertical-scroll-proportion="0.17887564">
+        <state line="53" column="5" selection-start="2023" selection-end="2023" vertical-scroll-proportion="0.5238501">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/conf/log4j.properties">
+    <entry file="file://$PROJECT_DIR$/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="25" column="0" selection-start="926" selection-end="926" vertical-scroll-proportion="0.31942078">
+        <state line="50" column="0" selection-start="2037" selection-end="2037" vertical-scroll-proportion="0.06729131">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/site/apt/index.apt">
+    <entry file="file://$PROJECT_DIR$/src/site/apt/usersguide/validation.apt">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="12" column="0" selection-start="244" selection-end="244" vertical-scroll-proportion="0.15332198">
+        <state line="168" column="0" selection-start="9264" selection-end="9264" vertical-scroll-proportion="0.5340811">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/scripts/TestDefaultParameterValues.xml">
+    <entry file="file://$PROJECT_DIR$/tapestry-portlet/src/java/org/apache/tapestry/portlet/PortletRendererImpl.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="30" column="19" selection-start="914" selection-end="914" vertical-scroll-proportion="0.38330495">
+        <state line="78" column="8" selection-start="2704" selection-end="2704" vertical-scroll-proportion="0.67717206">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/js/build.xml">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerTerminator.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="27" column="4" selection-start="1021" selection-end="1021" vertical-scroll-proportion="0.34497446">
+        <state line="53" column="0" selection-start="1914" selection-end="1914" vertical-scroll-proportion="0.4855196">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/js/tapestry.profile.js">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvoker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="20" column="0" selection-start="708" selection-end="708" vertical-scroll-proportion="0.25553662">
+        <state line="29" column="7" selection-start="1022" selection-end="1022" vertical-scroll-proportion="0.19165248">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/ConfigurationDefaults.properties">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodHolder.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="17" column="0" selection-start="738" selection-end="738" vertical-scroll-proportion="0.21720614">
+        <state line="61" column="5" selection-start="1515" selection-end="1515" vertical-scroll-proportion="0.5494037">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/ComponentEvent.script">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/listener/ListenerMethodInvokerTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="24" column="21" selection-start="1002" selection-end="1002" vertical-scroll-proportion="0.30664396">
+        <state line="61" column="8" selection-start="2021" selection-end="2021" vertical-scroll-proportion="0.5621806">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/package.html">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerInvokerFilter.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="44" column="0" selection-start="1576" selection-end="1576" vertical-scroll-proportion="0.5749129">
+        <state line="31" column="0" selection-start="1119" selection-end="1119" vertical-scroll-proportion="0.21720614">
           <folding />
         </state>
       </provider>
-      <provider editor-type-id="HtmlPreview">
-        <state />
-      </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IRequestCycle.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/SyntheticListener.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="40" column="3" selection-start="1487" selection-end="1487" vertical-scroll-proportion="-0.051107325">
+        <state line="58" column="0" selection-start="1997" selection-end="1997" vertical-scroll-proportion="0.5494037">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-contrib/pom.xml">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/IActionListener.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="16" column="4" selection-start="647" selection-end="647" vertical-scroll-proportion="0.2044293">
+        <state line="46" column="27" selection-start="1428" selection-end="1593" vertical-scroll-proportion="0.43441227">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/form/validator/Identity.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvoker.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="127" column="5" selection-start="4265" selection-end="4265" vertical-scroll-proportion="0.2640545">
+        <state line="37" column="0" selection-start="1421" selection-end="1421" vertical-scroll-proportion="0.31942078">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/form/FormEventType.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/listener/ListenerMethodInvokerImpl.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="53" column="5" selection-start="2023" selection-end="2023" vertical-scroll-proportion="0.5238501">
+        <state line="174" column="43" selection-start="6327" selection-end="6327" vertical-scroll-proportion="0.36115843">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-examples/Workbench/src/context/WEB-INF/Fields.page">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/binding/ListenerMethodBinding.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="50" column="0" selection-start="2037" selection-end="2037" vertical-scroll-proportion="0.06729131">
+        <state line="42" column="0" selection-start="1663" selection-end="1663" vertical-scroll-proportion="0.3157277">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/site/apt/usersguide/validation.apt">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/binding/TestListenerMethodBinding.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="168" column="0" selection-start="9264" selection-end="9264" vertical-scroll-proportion="0.5340811">
+        <state line="201" column="0" selection-start="6137" selection-end="6137" vertical-scroll-proportion="0.83390117">
           <folding />
         </state>
       </provider>