You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/04/02 02:17:36 UTC

svn commit: r524705 - in /tapestry/tapestry4/trunk: ./ tapestry-annotations/ tapestry-contrib/ tapestry-examples/TimeTracker/ tapestry-examples/Workbench/ tapestry-framework/src/java/org/apache/tapestry/enhance/ tapestry-framework/src/java/org/apache/t...

Author: jkuhnert
Date: Sun Apr  1 17:17:35 2007
New Revision: 524705

URL: http://svn.apache.org/viewvc?view=rev&rev=524705
Log:
Updated relevant OGNL interfaces to work with new codebase.

Modified:
    tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml
    tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml
    tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java
    tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml
    tapestry/tapestry4/trunk/tapestry.iml
    tapestry/tapestry4/trunk/tapestry.ipr
    tapestry/tapestry4/trunk/tapestry.iws

Modified: tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-annotations/tapestry-annotations.iml Sun Apr  1 17:17:35 2007
@@ -11,7 +11,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry-framework" exported="" />
+    <orderEntry type="module" module-name="tapestry" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>
@@ -258,6 +258,7 @@
         </SOURCES>
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntryProperties />
   </component>
 </module>

Modified: tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-contrib/tapestry-contrib.iml Sun Apr  1 17:17:35 2007
@@ -11,7 +11,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry-framework" />
+    <orderEntry type="module" module-name="tapestry" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>
@@ -267,6 +267,7 @@
         </SOURCES>
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntryProperties />
   </component>
 </module>

Modified: tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/TimeTracker/TimeTracker.iml Sun Apr  1 17:17:35 2007
@@ -14,9 +14,6 @@
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="tapestry" />
-    <orderEntry type="module" module-name="tapestry-annotations" />
-    <orderEntry type="module" module-name="tapestry-contrib" />
-    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
@@ -340,6 +337,9 @@
         </SOURCES>
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="tapestry-annotations" />
+    <orderEntry type="module" module-name="tapestry-contrib" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntryProperties />
   </component>
   <component name="WebModuleBuildComponent">
@@ -375,7 +375,7 @@
       <url>jar://$MODULE_DIR$/../../../idea/lib/j2ee.jar!/</url>
     </containerElement>
     <containerElement type="library" name="descriptor" level="project">
-      <attribute name="method" value="0" />
+      <attribute name="method" value="1" />
       <attribute name="URI" value="/WEB-INF/classes" />
     </containerElement>
     <containerElement type="library" name="Maven Dependency: ant:ant:jar:1.6.5:test" level="module">

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/Workbench.iml Sun Apr  1 17:17:35 2007
@@ -16,9 +16,6 @@
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="module" module-name="tapestry" />
-    <orderEntry type="module" module-name="tapestry-annotations" />
-    <orderEntry type="module" module-name="tapestry-contrib" />
-    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntry type="module-library">
       <library>
         <CLASSES>
@@ -252,6 +249,9 @@
         </SOURCES>
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="tapestry-annotations" />
+    <orderEntry type="module" module-name="tapestry-contrib" />
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntryProperties />
   </component>
   <component name="WebModuleBuildComponent">
@@ -287,7 +287,7 @@
       <url>jar://$MODULE_DIR$/../../../idea/lib/j2ee.jar!/</url>
     </containerElement>
     <containerElement type="library" name="descriptor" level="project">
-      <attribute name="method" value="0" />
+      <attribute name="method" value="1" />
       <attribute name="URI" value="/WEB-INF/classes" />
     </containerElement>
     <containerElement type="library" name="Maven Dependency: ant:ant:jar:1.6.5:test" level="module">

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java Sun Apr  1 17:17:35 2007
@@ -13,10 +13,10 @@
 // limitations under the License.
 package org.apache.tapestry.enhance;
 
+import javassist.CtClass;
+
 import java.util.HashMap;
 import java.util.Map;
-
-import javassist.CtClass;
 
 /**
  * Common code for {@link org.apache.hivemind.service.impl.ClassFabImpl} and

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java Sun Apr  1 17:17:35 2007
@@ -13,6 +13,8 @@
 //limitations under the License.
 package org.apache.tapestry.services.impl;
 
+import javassist.CannotCompileException;
+import javassist.NotFoundException;
 import ognl.*;
 import ognl.enhance.*;
 import org.apache.commons.logging.Log;
@@ -29,10 +31,10 @@
 
 /**
  * Adds to default ognl compiler class pools.
+ *
  * @author jkuhnert
  */
-public class HiveMindExpressionCompiler extends ExpressionCompiler implements OgnlExpressionCompiler
-{
+public class HiveMindExpressionCompiler extends ExpressionCompiler implements OgnlExpressionCompiler {
     private static final Log _log = LogFactory.getLog(HiveMindExpressionCompiler.class);
 
     private ClassFactory _classFactory;
@@ -41,61 +43,7 @@
     {
         _classFactory = classfactory;
     }
-
-    public String castExpression(OgnlContext context, Node expression, String body)
-    {
-        if (_log.isDebugEnabled()) {
-            _log.debug("castExpression() with expression " + expression + " currentType is: " + context.getCurrentType() 
-                    + " previousType: " + context.getPreviousType()
-                    + " \n current Accessor: " + context.getCurrentAccessor()
-                    + " previous Accessor: " + context.getPreviousAccessor()
-                    + "\n current object: " + context.getCurrentObject());
-        }
-
-        if (context.getCurrentAccessor() == null
-                || context.getPreviousType() == null
-                || context.getCurrentAccessor().isAssignableFrom(context.getPreviousType())
-                || (context.getCurrentType() != null
-                        && context.getCurrentObject() != null
-                        && context.getCurrentType().isAssignableFrom(context.getCurrentObject().getClass())
-                        && context.getCurrentAccessor().isAssignableFrom(context.getPreviousType()))
-                        || body == null || body.trim().length() < 1
-                        || (context.getCurrentType() != null && context.getCurrentType().isArray())
-                        || ASTOr.class.isInstance(expression)
-                        || ASTAnd.class.isInstance(expression)
-                        || ASTRootVarRef.class.isInstance(expression)
-                        || context.getCurrentAccessor() == Class.class
-                        || Number.class.isAssignableFrom(context.getCurrentAccessor())
-                        || (context.get(ExpressionCompiler.PRE_CAST) != null && ((String)context.get(ExpressionCompiler.PRE_CAST)).startsWith("new"))
-                        || ASTStaticField.class.isInstance(expression)
-                        || (OrderedReturn.class.isInstance(expression) && ((OrderedReturn)expression).getLastExpression() != null))
-            return body;
-
-        if (_log.isDebugEnabled()) {
-            _log.debug("castExpression() with expression " + expression + " currentType is: " + context.getCurrentType() 
-                    + " previousType: " + context.getPreviousType()
-                    + " current Accessor: " + context.getCurrentAccessor()
-                    + " previous Accessor: " + context.getPreviousAccessor());
-        }
-
-        String castClass = null;
-        if (context.getCurrentType() != null && context.getCurrentType().isArray()) {
-
-            castClass = context.getCurrentType().getCanonicalName();
-        } else if (context.getCurrentAccessor().isArray()) {
-
-            castClass = context.getCurrentAccessor().getCanonicalName();
-        } else {
-            castClass = (context.getCurrentAccessor().getName().indexOf("$") > -1)
-            ? OgnlRuntime.getCompiler().getInterfaceClass(context.getCurrentAccessor()).getName()
-                : context.getCurrentAccessor().getName();
-        }
-
-        ExpressionCompiler.addCastString(context, "((" + castClass + ")");
-
-        return ")" + body;
-    }
-
+    
     public String getClassName(Class clazz)
     {
         if (IRender.class.isAssignableFrom(clazz) || Modifier.isPublic(clazz.getModifiers()))
@@ -109,7 +57,7 @@
 
         Class[] intf = clazz.getInterfaces();
 
-        for (int i=0; i < intf.length; i++) {
+        for (int i = 0; i < intf.length; i++) {
             if (intf[i].getName().indexOf("util.List") > 0)
                 return intf[i].getName();
             else if (intf[i].getName().indexOf("Iterator") > 0)
@@ -125,21 +73,21 @@
     public Class getInterfaceClass(Class clazz)
     {
         if (IRender.class.isAssignableFrom(clazz) || clazz.isInterface()
-                || Modifier.isPublic(clazz.getModifiers()))
+            || Modifier.isPublic(clazz.getModifiers()))
             return clazz;
 
         if (clazz.getName().equals("java.util.AbstractList$Itr"))
             return Iterator.class;
 
         if (Modifier.isPublic(clazz.getModifiers())
-                && clazz.isInterface() || clazz.isPrimitive()) {
+            && clazz.isInterface() || clazz.isPrimitive()) {
 
             return clazz;
         }
 
         Class[] intf = clazz.getInterfaces();
 
-        for (int i=0; i < intf.length; i++) {
+        for (int i = 0; i < intf.length; i++) {
 
             if (List.class.isAssignableFrom(intf[i]))
                 return List.class;
@@ -160,7 +108,7 @@
     }
 
     public void compileExpression(OgnlContext context, Node expression, Object root)
-    throws Exception
+            throws Exception
     {
         if (_log.isDebugEnabled())
             _log.debug("Compiling expr class " + expression.getClass().getName() + " and root " + root.getClass().getName() + " with toString:" + expression.toString());
@@ -169,19 +117,19 @@
             return;
 
         synchronized (expression) {
-            
+
             String getBody = null;
             String setBody = null;
 
             try {
 
-                ClassFab classFab = _classFactory.newClass(expression.getClass().getName()+expression.hashCode()+"Accessor", Object.class);
+                ClassFab classFab = _classFactory.newClass(expression.getClass().getName() + expression.hashCode() + "Accessor", Object.class);
                 classFab.addInterface(ExpressionAccessor.class);
 
-                MethodSignature valueGetter = new MethodSignature(Object.class, "get", new Class[] {OgnlContext.class, Object.class}, null);
-                MethodSignature valueSetter = new MethodSignature(void.class, "set", new Class[] {OgnlContext.class, Object.class, Object.class}, null);
+                MethodSignature valueGetter = new MethodSignature(Object.class, "get", new Class[]{OgnlContext.class, Object.class}, null);
+                MethodSignature valueSetter = new MethodSignature(void.class, "set", new Class[]{OgnlContext.class, Object.class, Object.class}, null);
 
-                MethodSignature expressionSetter = new MethodSignature(void.class, "setExpression", new Class[] {Node.class}, null);
+                MethodSignature expressionSetter = new MethodSignature(void.class, "setExpression", new Class[]{Node.class}, null);
 
                 // must evaluate expression value at least once if object isn't null
 
@@ -196,7 +144,7 @@
 
                     // The target object may not fully resolve yet because of a partial tree with a null somewhere, we 
                     // don't want to bail out forever because it might be enhancable on another pass eventually
-                    
+
                     return;
                 }
 
@@ -207,11 +155,21 @@
                     setBody = generateSetter(context, classFab, valueSetter, expression, root);
 
                 } catch (UnsupportedCompilationException uc) {
-
+                    
                     if (_log.isDebugEnabled())
                         _log.warn("Unsupported setter compilation caught: " + uc.getMessage() + " for expression: " + expression.toString());
 
                     setBody = generateOgnlSetter(classFab, valueSetter);
+                    
+                    if (!classFab.containsMethod(expressionSetter)) {
+
+                        classFab.addField("_node", Node.class);
+                        classFab.addMethod(Modifier.PUBLIC, expressionSetter, "{ _node = $1; }");
+                    }
+                }
+
+                if (setBody == null) {
+                    setBody = generateOgnlSetter(classFab, valueSetter);
 
                     if (!classFab.containsMethod(expressionSetter)) {
 
@@ -225,9 +183,9 @@
 
                 classFab.addConstructor(new Class[0], new Class[0], "{}");
 
-                Class clazz = ((AbstractFab)classFab).createClass(true);
+                Class clazz = ((AbstractFab) classFab).createClass(true);
 
-                expression.setAccessor((ExpressionAccessor)clazz.newInstance());
+                expression.setAccessor((ExpressionAccessor) clazz.newInstance());
 
                 // need to set expression on node if the field was just defined.
 
@@ -237,44 +195,45 @@
                 }
 
             } catch (Throwable t) {
+                t.printStackTrace();
                 throw new ApplicationRuntimeException("Error compiling expression on object " + root
-                        + " with expression node " + expression + " getter body: " + getBody 
-                        + " setter body: " + setBody, t);
+                                                      + " with expression node " + expression + " getter body: " + getBody
+                                                      + " setter body: " + setBody, t);
             }
         }
     }
 
     protected String generateGetter(OgnlContext context, ClassFab newClass, MethodSignature valueGetter, Node expression, Object root)
-    throws Exception
+            throws Exception
     {
-        String pre="";
-        String post="";
+        String pre = "";
+        String post = "";
         String body = null;
         String getterCode = null;
-        
+
         context.setRoot(root);
         context.setCurrentObject(root);
         context.remove(PRE_CAST);
 
         try {
-            
+
             getterCode = expression.toGetSourceString(context, root);
         } catch (NullPointerException e) {
             if (_log.isDebugEnabled())
                 _log.warn("NullPointer caught compiling getter, may be normal ognl method artifact.", e);
-            
+
             throw new UnsupportedCompilationException("Statement threw nullpointer.");
         }
-        
+
         if (getterCode == null || getterCode.trim().length() <= 0 && !ASTVarRef.class.isAssignableFrom(expression.getClass()))
             getterCode = "null";
 
         Class returnType = null;
 
         if (NodeType.class.isInstance(expression)) {
-            NodeType nType = (NodeType)expression;
+            NodeType nType = (NodeType) expression;
             returnType = nType.getGetterClass();
-            
+
             if (returnType != null && !String.class.isAssignableFrom(returnType)) {
 
                 pre = pre + " ($w) (";
@@ -282,7 +241,7 @@
             }
         }
 
-        String castExpression = (String)context.get(PRE_CAST);
+        String castExpression = (String) context.get(PRE_CAST);
 
         if (returnType == null) {
             pre = pre + " ($w) (";
@@ -291,43 +250,76 @@
 
         String rootExpr = !getterCode.equals("null") ? getRootExpression(expression, root, false) : "";
 
-        String noRoot = (String)context.remove("_noRoot");
+        String noRoot = (String) context.remove("_noRoot");
         if (noRoot != null)
             rootExpr = "";
 
-        if (OrderedReturn.class.isInstance(expression) && ((OrderedReturn)expression).getLastExpression() != null) {
+        createLocalReferences(context, newClass, valueGetter.getParameterTypes());
+
+        if (OrderedReturn.class.isInstance(expression) && ((OrderedReturn) expression).getLastExpression() != null) {
 
             body = "{ "
-                + (ASTMethod.class.isInstance(expression) || ASTChain.class.isInstance(expression) ? rootExpr : "")
-                + (castExpression != null ? castExpression : "")
-                + ((OrderedReturn)expression).getCoreExpression()
-                + " return " + pre + ((OrderedReturn)expression).getLastExpression()
-                + post
-                + ";}";
+                   + (ASTMethod.class.isInstance(expression) || ASTChain.class.isInstance(expression) ? rootExpr : "")
+                   + (castExpression != null ? castExpression : "")
+                   + ((OrderedReturn) expression).getCoreExpression()
+                   + " return " + pre + ((OrderedReturn) expression).getLastExpression()
+                   + post
+                   + ";}";
 
         } else {
 
             body = "{ return " + pre
-            + (castExpression != null ? castExpression : "")
-            + rootExpr
-            + getterCode
-            + post
-            + ";}";
+                   + (castExpression != null ? castExpression : "")
+                   + rootExpr
+                   + getterCode
+                   + post
+                   + ";}";
         }
-
+        
         body = body.replaceAll("\\.\\.", ".");
 
         if (_log.isDebugEnabled())
-            _log.debug("Getter Body: ===================================\n"+body);
+            _log.debug("Getter Body: ===================================\n" + body);
 
         return body;
     }
 
+    void createLocalReferences(OgnlContext context, ClassFab classFab, Class[] params)
+            throws CannotCompileException, NotFoundException
+    {
+        context.remove(LOCAL_REFERENCE_COUNTER);
+
+        Map referenceMap = (Map) context.remove(LOCAL_REFERENCE_MAP);
+        if (referenceMap == null)
+            return;
+
+        Iterator it = referenceMap.keySet().iterator();
+
+        while (it.hasNext()) {
+
+            String key = (String) it.next();
+            LocalReference ref = (LocalReference) referenceMap.get(key);
+
+            String widener = ref.getType().isPrimitive() ? " " : " ($w) ";
+
+            String body = "{";
+            body += " return  " + widener + ref.getExpression() + ";";
+            body += "}";
+
+            body = body.replaceAll("\\.\\.", ".");
+
+            // System.out.println("adding method " + ref.getName() + " with body:\n" + body + " and return type: " + ref.getType());
+            
+            MethodSignature method = new MethodSignature(ref.getType(), ref.getName(), params, null);
+            classFab.addMethod(Modifier.PUBLIC, method, body);
+        }
+    }
+
     protected String generateSetter(OgnlContext context, ClassFab newClass, MethodSignature valueSetter, Node expression, Object root)
-    throws Exception
+            throws Exception
     {
-        if (ExpressionNode.class.isInstance(expression) 
-                || ASTConst.class.isInstance(expression))
+        if (ExpressionNode.class.isInstance(expression)
+            || ASTConst.class.isInstance(expression))
             throw new UnsupportedCompilationException("Can't compile expression/constant setters.");
 
         context.setRoot(root);
@@ -337,7 +329,7 @@
         String body = null;
 
         String setterCode = expression.toSetSourceString(context, root);
-        String castExpression = (String)context.get(PRE_CAST);
+        String castExpression = (String) context.get(PRE_CAST);
 
         if (setterCode == null || setterCode.trim().length() < 1)
             throw new UnsupportedCompilationException("Can't compile null setter body.");
@@ -347,14 +339,21 @@
 
         String pre = getRootExpression(expression, root, false);
 
-        String noRoot = (String)context.remove("_noRoot");
+        String noRoot = (String) context.remove("_noRoot");
         if (noRoot != null)
             pre = "";
 
-        body = "{" 
-            + (castExpression != null ? castExpression : "")
-            + pre 
-            + setterCode + ";}";
+        String setterValue = (String) context.remove("setterConversion");
+        if (setterValue == null)
+            setterValue = "";
+
+        createLocalReferences(context, newClass, valueSetter.getParameterTypes());
+
+        body = "{"
+               + setterValue
+               + (castExpression != null ? castExpression : "")
+               + pre
+               + setterCode + ";}";
 
         body = body.replaceAll("\\.\\.", ".");
 
@@ -362,13 +361,13 @@
             body = null;
 
         if (_log.isDebugEnabled())
-            _log.debug("Setter Body: ===================================\n"+body);
+            _log.debug("Setter Body: ===================================\n" + body);
 
         return body;
     }
 
     String generateOgnlGetter(ClassFab newClass, MethodSignature valueGetter)
-    throws Exception
+            throws Exception
     {
         String body = "{ return _node.getValue($1, $2); }";
 
@@ -376,7 +375,7 @@
     }
 
     String generateOgnlSetter(ClassFab newClass, MethodSignature valueSetter)
-    throws Exception
+            throws Exception
     {
         String body = "{ _node.setValue($1, $2, $3); }";
 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java Sun Apr  1 17:17:35 2007
@@ -14,21 +14,21 @@
 
 package org.apache.tapestry.services.impl;
 
-import static org.easymock.EasyMock.expect;
-
-import java.util.Collections;
-import java.util.Date;
-
+import ognl.OgnlContext;
 import ognl.TypeConverter;
-
 import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.tapestry.BaseComponentTestCase;
 import org.apache.tapestry.Tapestry;
 import org.apache.tapestry.enhance.ClassFactoryImpl;
 import org.apache.tapestry.services.ExpressionEvaluator;
 import org.apache.tapestry.spec.IApplicationSpecification;
+import static org.easymock.EasyMock.*;
 import org.testng.annotations.Test;
 
+import java.lang.reflect.Member;
+import java.util.Collections;
+import java.util.Date;
+
 /**
  * @author Howard M. Lewis Ship
  * @since 4.0
@@ -204,10 +204,12 @@
         verify();
         
         cache.setEvaluator(ee);
-        
+
         Fixture f = new Fixture();
-        
+
         Date d = new Date();
+
+        expect(tc.convertValue(isA(OgnlContext.class), eq(f), isA(Member.class), eq("value"), eq(d), eq(String.class))).andReturn(d.toString());
 
         // Training
         

Modified: tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml (original)
+++ tapestry/tapestry4/trunk/tapestry-portlet/tapestry-portlet.iml Sun Apr  1 17:17:35 2007
@@ -12,7 +12,7 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry-framework" />
+    <orderEntry type="module" module-name="tapestry" />
     <orderEntry type="module-library">
       <library name="Maven Dependency: backport-util-concurrent:backport-util-concurrent:jar:2.2:compile">
         <CLASSES>
@@ -277,6 +277,7 @@
         <SOURCES />
       </library>
     </orderEntry>
+    <orderEntry type="module" module-name="tapestry-framework" />
     <orderEntryProperties />
   </component>
 </module>

Modified: tapestry/tapestry4/trunk/tapestry.iml
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.iml?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.iml (original)
+++ tapestry/tapestry4/trunk/tapestry.iml Sun Apr  1 17:17:35 2007
@@ -45,8 +45,6 @@
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="module" module-name="tapestry-annotations" exported="" />
-    <orderEntry type="module" module-name="tapestry-framework" exported="" />
     <orderEntry type="module-library" exported="">
       <library name="Maven Dependency: ant:ant:jar:1.6.5:test">
         <CLASSES>

Modified: tapestry/tapestry4/trunk/tapestry.ipr
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.ipr?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.ipr (original)
+++ tapestry/tapestry4/trunk/tapestry.ipr Sun Apr  1 17:17:35 2007
@@ -181,8 +181,6 @@
                 <value>
                   <collection type="java.util.TreeSet">
                     <entry type="java.lang.String" value="tapestry" />
-                    <entry type="java.lang.String" value="tapestry-annotations" />
-                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="TimeTracker" />
@@ -191,8 +189,6 @@
                 <value>
                   <collection type="java.util.TreeSet">
                     <entry type="java.lang.String" value="tapestry" />
-                    <entry type="java.lang.String" value="tapestry-annotations" />
-                    <entry type="java.lang.String" value="tapestry-framework" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="Workbench" />
@@ -200,16 +196,7 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry-annotations" />
-                    <entry type="java.lang.String" value="tapestry-framework" />
-                  </collection>
-                </value>
-                <key type="java.lang.String" value="tapestry" />
-              </entry>
-              <entry>
-                <value>
-                  <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry-framework" />
+                    <entry type="java.lang.String" value="tapestry" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-annotations" />
@@ -217,7 +204,7 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry-framework" />
+                    <entry type="java.lang.String" value="tapestry" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-contrib" />
@@ -225,7 +212,7 @@
               <entry>
                 <value>
                   <collection type="java.util.TreeSet">
-                    <entry type="java.lang.String" value="tapestry-framework" />
+                    <entry type="java.lang.String" value="tapestry" />
                   </collection>
                 </value>
                 <key type="java.lang.String" value="tapestry-portlet" />

Modified: tapestry/tapestry4/trunk/tapestry.iws
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry.iws?view=diff&rev=524705&r1=524704&r2=524705
==============================================================================
--- tapestry/tapestry4/trunk/tapestry.iws (original)
+++ tapestry/tapestry4/trunk/tapestry.iws Sun Apr  1 17:17:35 2007
@@ -17,31 +17,17 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/MessagesTarget.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TargetValues.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java" />
-      <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-annotations/src/test/org/apache/tapestry/annotations/Target.java" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" afterPath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" afterPath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iws" afterPath="$PROJECT_DIR$/tapestry.iws" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestBeanAnnotationWorker.java" />
       <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-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java" afterPath="$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestAnnotationUtils.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" afterPath="$PROJECT_DIR$/tapestry-contrib/tapestry-contrib.iml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.ipr" afterPath="$PROJECT_DIR$/tapestry.ipr" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.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-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java" afterPath="$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" afterPath="$PROJECT_DIR$/tapestry-examples/Workbench/Workbench.iml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry.iml" afterPath="$PROJECT_DIR$/tapestry.iml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" afterPath="$PROJECT_DIR$/tapestry-portlet/tapestry-portlet.iml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java" afterPath="$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java" />
     </list>
   </component>
   <component name="ChangesViewManager" flattened_view="true" />
@@ -262,14 +248,14 @@
   </component>
   <component name="RecentsManager" />
   <component name="RestoreUpdateTree" />
-  <component name="RunManager" selected="TestNG.TestEventListenerAnnotationWorker">
-    <tempConfiguration default="false" name="TestEventListenerAnnotationWorker" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
-      <module name="tapestry-annotations" />
+  <component name="RunManager" selected="TestNG.TestExpressionEvaluator">
+    <tempConfiguration default="false" name="TestExpressionEvaluator" 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" />
       <option name="SUITE_NAME" />
-      <option name="PACKAGE_NAME" value="org.apache.tapestry.annotations" />
-      <option name="MAIN_CLASS_NAME" value="org.apache.tapestry.annotations.TestEventListenerAnnotationWorker" />
+      <option name="PACKAGE_NAME" value="org.apache.tapestry.services.impl" />
+      <option name="MAIN_CLASS_NAME" value="org.apache.tapestry.services.impl.TestExpressionEvaluator" />
       <option name="METHOD_NAME" />
       <option name="GROUP_NAME" />
       <option name="TEST_OBJECT" value="CLASS" />
@@ -289,28 +275,26 @@
         <option name="Make" value="true" />
       </method>
     </tempConfiguration>
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-    </configuration>
-    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
+    <configuration default="true" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
       <module name="" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
       <option name="PACKAGE_NAME" />
       <option name="MAIN_CLASS_NAME" />
       <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
+      <option name="GROUP_NAME" />
+      <option name="TEST_OBJECT" value="CLASS" />
       <option name="VM_PARAMETERS" />
       <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="OUTPUT_DIRECTORY" />
       <option name="ADDITIONAL_CLASS_PATH" />
       <option name="TEST_SEARCH_SCOPE">
         <value defaultName="wholeProject" />
       </option>
+      <option name="PROPERTIES_FILE" />
+      <properties />
       <method>
         <option name="Make" value="true" />
       </method>
@@ -325,26 +309,28 @@
       <option name="ENABLE_SWING_INSPECTOR" value="false" />
       <module name="" />
     </configuration>
-    <configuration default="true" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
       <module name="" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="SUITE_NAME" />
       <option name="PACKAGE_NAME" />
       <option name="MAIN_CLASS_NAME" />
       <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" />
-      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="TEST_OBJECT" value="class" />
       <option name="VM_PARAMETERS" />
       <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="OUTPUT_DIRECTORY" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
       <option name="ADDITIONAL_CLASS_PATH" />
       <option name="TEST_SEARCH_SCOPE">
         <value defaultName="wholeProject" />
       </option>
-      <option name="PROPERTIES_FILE" />
-      <properties />
       <method>
         <option name="Make" value="true" />
       </method>
@@ -448,8 +434,8 @@
     </todo-panel>
   </component>
   <component name="ToolWindowManager">
-    <frame x="91" y="145" width="2112" height="1362" extended-state="0" />
-    <editor active="false" />
+    <frame x="96" y="160" width="2112" height="1361" extended-state="0" />
+    <editor active="true" />
     <layout>
       <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20563847" order="8" />
@@ -457,9 +443,9 @@
       <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.23568465" order="1" />
       <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2514523" order="3" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.28524047" 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" />
-      <window_info id="Maven" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.19568823" order="8" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2599668" order="8" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2076412" order="8" />
+      <window_info id="Maven" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.19502075" order="8" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="7" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="1" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="0" />
@@ -467,10 +453,10 @@
       <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
       <window_info id="File View" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.23369037" order="0" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.23661149" 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.25892118" order="2" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25830564" 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" />
@@ -492,7 +478,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="Added auto form binding support to @EventListener. It now automatically figures out which form a targeted IFormComponent is attached to and wires the event up to submit the enclosing form when the event is triggered - unless autoSubmit = false on the annotation." />
+    <option name="LAST_COMMIT_MESSAGE" value="Updated relevant OGNL interfaces to work with new codebase." />
     <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" />
@@ -505,7 +491,6 @@
     <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
     <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
     <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="Minor code cleanup. &#10;&#10;Fixed Palette documentation by removing funky character causing td definitions." />
     <MESSAGE value="Fixes TAPESTRY-872. &#10;&#10;The documented usage of PageAttachListener stated that page properties should be restored before the listener is called. Modified logic so that RequestCycle calls firePageAttached directly and removed the firePageAttached call within AbstractPage.attach" />
     <MESSAGE value="Upgraded commons-fileupload/commons-io." />
     <MESSAGE value="Fixes TAPESTRY-937. Simple stupid indexOf check using &gt; 1 instead of &gt; -1. I'm sure I added this bug at some point." />
@@ -515,6 +500,7 @@
     <MESSAGE value="Js formatting looked a little funky towards the bottom." />
     <MESSAGE value="-) Started partial implementation for doing form auto submissions on IFormComponent EventListener targets.&#10;&#10;-) Updated styling of TimeTracker&#10;&#10;-) Updated HiveMindExpressionCompiler to reflect new changes in ognl 2.7-SNAPSHOT." />
     <MESSAGE value="Added auto form binding support to @EventListener. It now automatically figures out which form a targeted IFormComponent is attached to and wires the event up to submit the enclosing form when the event is triggered - unless autoSubmit = false on the annotation." />
+    <MESSAGE value="Updated relevant OGNL interfaces to work with new codebase." />
   </component>
   <component name="antWorkspaceConfiguration">
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
@@ -525,113 +511,118 @@
   </component>
   <component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.22673559" version="1">
     <option name="myPlainMode" value="false" />
-    <option name="myLastEditedConfigurable" value="TimeTracker" />
+    <option name="myLastEditedConfigurable" value="Workbench" />
   </component>
   <component name="com.intellij.profile.ui.ErrorOptionsConfigurable" proportions="0.16666667,0.5642857" version="1">
     <option name="myLastEditedConfigurable" value="Project Default" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/IEventListener.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/bean/BeanProviderPropertyAccessor.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="67" column="58" selection-start="2681" selection-end="2681" vertical-scroll-proportion="0.51192504">
+        <state line="99" column="12" selection-start="3410" selection-end="3410" vertical-scroll-proportion="0.73168653">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/AnnotatedPage.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/web/WebSession.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="47" column="24" selection-start="1532" selection-end="1532" vertical-scroll-proportion="0.07785467">
+        <state line="25" column="1" selection-start="889" selection-end="889" vertical-scroll-proportion="0.1660988">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/ComponentEventPropertyTest.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowProperties.jwc">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="145" column="45" selection-start="5522" selection-end="5522" vertical-scroll-proportion="0.59775084">
+        <state line="47" column="14" selection-start="1938" selection-end="1938" vertical-scroll-proportion="0.6005111">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/ComponentEventProperty.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.jwc">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="128" column="12" selection-start="4580" selection-end="4580" vertical-scroll-proportion="0.3654174">
+        <state line="34" column="2" selection-start="1405" selection-end="1405" vertical-scroll-proportion="0.4347826">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/EventBoundListener.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="145" column="5" selection-start="4303" selection-end="4303" vertical-scroll-proportion="0.4471891">
+        <state line="42" column="16" selection-start="1500" selection-end="1500" vertical-scroll-proportion="0.28132993">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/ComponentEventConnectionWorkerTest.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-contrib/src/java/org/apache/tapestry/contrib/inspector/ShowEngine.html">
+      <provider editor-type-id="HtmlPreview">
+        <state />
+      </provider>
       <provider selected="true" editor-type-id="text-editor">
-        <state line="71" column="8" selection-start="2827" selection-end="2827" vertical-scroll-proportion="0.43441227">
+        <state line="54" column="7" selection-start="1357" selection-end="1358" vertical-scroll-proportion="0.41238013">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/TaskEntryPage.java">
+    <entry file="jar://$USERPROFILE$/.m2/repository/hivemind/hivemind/1.1.1/hivemind-1.1.1-sources.jar!/org/apache/hivemind/service/MethodSignature.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="110" column="5" selection-start="4176" selection-end="4176" vertical-scroll-proportion="0.30664396">
+        <state line="117" column="35" selection-start="3424" selection-end="3424" vertical-scroll-proportion="0.16709292">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/spec/ComponentSpecification.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/pom.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="733" column="8" selection-start="19827" selection-end="19827" vertical-scroll-proportion="0.43611583">
+        <state line="17" column="20" selection-start="755" selection-end="755" vertical-scroll-proportion="0.2173913">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ComponentEventConnectionWorker.java">
+    <entry file="file://$PROJECT_DIR$/pom.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="369" column="45" selection-start="12977" selection-end="12977" vertical-scroll-proportion="0.29471892">
+        <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/IComponentEventInvoker.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-examples/TimeTracker/pom.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="85" column="61" selection-start="3308" selection-end="3365" vertical-scroll-proportion="0.43781942">
+        <state line="120" column="40" selection-start="4435" selection-end="4435" vertical-scroll-proportion="0.5396419">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/internal/event/impl/ComponentEventInvokerTest.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/page/LocaleList.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="129" column="73" selection-start="4904" selection-end="4904" vertical-scroll-proportion="1.0175439">
+        <state line="42" column="4" selection-start="1264" selection-end="1264" vertical-scroll-proportion="0.33248082">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/descriptor/META-INF/hivemodule.xml">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/test/org/apache/tapestry/services/impl/TestExpressionEvaluator.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="206" column="24" selection-start="9256" selection-end="9256" vertical-scroll-proportion="0.48892674">
-          <folding />
+        <state line="186" column="0" selection-start="4672" selection-end="4672" vertical-scroll-proportion="0.4117647">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/internal/event/impl/ComponentEventInvoker.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/HiveMindExpressionCompiler.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="301" column="4" selection-start="9763" selection-end="9763" vertical-scroll-proportion="0.7189097">
+        <state line="175" column="63" selection-start="6647" selection-end="6647" vertical-scroll-proportion="0.46035805">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/test/org/apache/tapestry/annotations/TestEventListenerAnnotationWorker.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/services/impl/ExpressionEvaluatorImpl.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="95" column="8" selection-start="3618" selection-end="3618" vertical-scroll-proportion="0.41226575">
+        <state line="152" column="12" selection-start="4886" selection-end="4886" vertical-scroll-proportion="0.012787724">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/tapestry-annotations/src/java/org/apache/tapestry/annotations/EventListenerAnnotationWorker.java">
+    <entry file="file://$PROJECT_DIR$/tapestry-framework/src/java/org/apache/tapestry/enhance/AbstractFab.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="66" column="0" selection-start="2376" selection-end="2376" vertical-scroll-proportion="0.5911414">
+        <state line="56" column="29" selection-start="1569" selection-end="1569" vertical-scroll-proportion="0.25575447">
           <folding />
         </state>
       </provider>
@@ -640,6 +631,7 @@
   <component name="testng.defaultConfiguration">
     <outputDirectory />
     <properties />
+    <groups />
   </component>
 </project>