Commits

jkuh...@d4b077e3-5828-0410-b394-cb2b42183085  committed e63f963

Optimized imports, slight tweaks on formatting / etc.

  • Participants
  • Parent commits 5b4ef21

Comments (0)

Files changed (130)

       <module fileurl="file://$PROJECT_DIR$/OGNL.iml" filepath="$PROJECT_DIR$/OGNL.iml" />
     </modules>
   </component>
-  <component name="ProjectRootManager" version="2" assert-keyword="false" jdk-15="false" project-jdk-name="1.4.2" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="false" project-jdk-name="1.4.2" project-jdk-type="JavaSDK" />
   <component name="ProjectRunConfigurationManager" />
   <component name="RmicSettings">
     <option name="IS_EANABLED" value="false" />
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/CollectionDirectPropertyTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/CollectionDirectPropertyTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ObjectMethodAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ObjectMethodAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ConstantTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ConstantTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTAssign.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTAssign.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ProjectionSelectionTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ProjectionSelectionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTNotEq.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTNotEq.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTAdd.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTAdd.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArithmeticAndLogicalOperatorsTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/BooleanExpression.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/NumberFormatExceptionTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/NumberFormatExceptionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/LambdaExpressionTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/LambdaExpressionTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/BeanProvider.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ognl.jj" afterPath="$PROJECT_DIR$/src/java/ognl/ognl.jj" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTNot.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTNot.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/enhance" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTXor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTXor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTRemainder.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTRemainder.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTProject.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTProject.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PropertyNotFoundTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PropertyNotFoundTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTUnsignedShiftRight.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTUnsignedShiftRight.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/ComparisonExpression.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTStaticField.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTStaticField.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/SecondBean.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTChain.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTChain.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTSelectFirst.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTSelectFirst.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/SimpleNode.java" afterPath="$PROJECT_DIR$/src/java/ognl/SimpleNode.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/MapPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/MapPropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTSelect.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTSelect.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTSubtract.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTSubtract.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/CorrectedObjectNullHandler.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/CorrectedObjectNullHandler.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTOr.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTOr.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/build/javassist.jar" afterPath="$PROJECT_DIR$/lib/build/javassist.jar" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/OgnlOps.java" afterPath="$PROJECT_DIR$/src/java/ognl/OgnlOps.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/OGNL.ipr" afterPath="$PROJECT_DIR$/OGNL.ipr" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/BeanProviderImpl.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ProtectedInnerClassTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ProtectedInnerClassTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ObjectIndexedPropertyTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ObjectIndexedPropertyTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/NumericExpression.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTNotIn.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTNotIn.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/PropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/PropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/OGNL.iws" afterPath="$PROJECT_DIR$/OGNL.iws" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/OrderedReturn.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/SimpleNavigationChainTreeTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/SimpleNavigationChainTreeTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTMap.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTMap.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArrayCreationTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArrayCreationTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/Performance.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/Performance.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTEq.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTEq.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/MapCreationTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/MapCreationTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/enhance/TestExpressionCompiler.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrimitiveArrayTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrimitiveArrayTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTGreaterEq.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTGreaterEq.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTList.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTList.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ClassMethodTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ClassMethodTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Indexed.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Indexed.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PropertyTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PropertyTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTCtor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTCtor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTShiftLeft.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTShiftLeft.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTConst.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTConst.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTDivide.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTDivide.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/OgnlExpressionCompiler.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/OgnlParser.java" afterPath="$PROJECT_DIR$/src/java/ognl/OgnlParser.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/MethodTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/MethodTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArrayElementsTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ArrayElementsTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Root.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Root.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ExpressionNode.java" afterPath="$PROJECT_DIR$/src/java/ognl/ExpressionNode.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/EnhancedClassLoader.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/IndexedPropertyTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/IndexedPropertyTest.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/build.properties" afterPath="$PROJECT_DIR$/build.properties" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/pom.xml" afterPath="$PROJECT_DIR$/pom.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/OGNL.iws" afterPath="$PROJECT_DIR$/OGNL.iws" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/OGNL.ipr" afterPath="$PROJECT_DIR$/OGNL.ipr" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/JavaSource.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/NullHandlerTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/NullHandlerTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/SetterTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/SetterTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTVarRef.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTVarRef.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Simple.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Simple.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTNegate.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTNegate.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/BeanProviderAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/NestedMethodTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/NestedMethodTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/InterfaceInheritanceTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/InterfaceInheritanceTest.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/ContextClassLoader.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/NullStringCatenationTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/NullStringCatenationTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrivateMemberTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrivateMemberTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTBitAnd.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTBitAnd.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTTest.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/OgnlContext.java" afterPath="$PROJECT_DIR$/src/java/ognl/OgnlContext.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/FirstBean.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/OgnlTestCase.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/OgnlTestCase.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTAnd.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTAnd.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTEval.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTEval.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/NodeType.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTInstanceof.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTInstanceof.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/InheritedMethodsTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ArrayPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ArrayPropertyAccessor.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/UnsupportedCompilationException.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/SimplePropertyTreeTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/SimplePropertyTreeTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/OgnlParserTreeConstants.java" afterPath="$PROJECT_DIR$/src/java/ognl/OgnlParserTreeConstants.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTLess.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTLess.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTShiftRight.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTShiftRight.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTBitOr.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTBitOr.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/SetPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/SetPropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/CompilingPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/CompilingPropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/StaticsAndConstructorsTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/StaticsAndConstructorsTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/MethodWithConversionTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/MethodWithConversionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/Ognl.java" afterPath="$PROJECT_DIR$/src/java/ognl/Ognl.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/OgnlRuntime.java" afterPath="$PROJECT_DIR$/src/java/ognl/OgnlRuntime.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTThisVarRef.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTThisVarRef.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTStaticMethod.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTStaticMethod.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ListPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ListPropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTBitNegate.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTBitNegate.java" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionCompiler.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Bean3.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Bean3.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTLessEq.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTLessEq.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrimitiveNullHandlingTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrimitiveNullHandlingTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTMethod.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTMethod.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrivateAccessorTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/PrivateAccessorTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ContextVariableTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ContextVariableTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTIn.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTIn.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTKeyValue.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTKeyValue.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/IndexAccessTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/IndexAccessTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ConstantTreeTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ConstantTreeTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTRootVarRef.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTRootVarRef.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/osbuild.xml" afterPath="$PROJECT_DIR$/osbuild.xml" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/objects/BaseBean.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/ShortCircuitingExpressionTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/Node.java" afterPath="$PROJECT_DIR$/src/java/ognl/Node.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTMultiply.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTMultiply.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTProperty.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTProperty.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ObjectPropertyAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/ObjectPropertyAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/test/java/org/ognl/test/MemberAccessTest.java" afterPath="$PROJECT_DIR$/src/test/java/org/ognl/test/MemberAccessTest.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTSelectLast.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTSelectLast.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTSequence.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTSequence.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/ASTGreater.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTGreater.java" />
     </list>
   </component>
   <component name="ChangesViewManager" flattened_view="true" />
       <showLibraryContents />
       <hideEmptyPackages />
       <abbreviatePackageNames />
-      <showStructure PackagesPane="false" ProjectPane="false" Scope="false" Favorites="false" />
+      <showStructure ProjectPane="false" PackagesPane="false" Scope="false" Favorites="false" />
       <autoscrollToSource />
       <autoscrollFromSource />
       <sortByType />
     <property name="cvs_file_history_treeWidth0" value="464" />
     <property name="cvs_file_history_treeWidth1" value="464" />
     <property name="cvs_file_history_treeWidth2" value="464" />
+    <property name="cvs_file_history_flatWidth2" value="464" />
     <property name="cvs_file_history_treeWidth3" value="464" />
-    <property name="cvs_file_history_flatWidth2" value="464" />
+    <property name="cvs_file_history_flatWidth3" value="464" />
     <property name="cvs_file_history_treeOrder0" value="0" />
     <property name="MemberChooser.showClasses" value="true" />
-    <property name="cvs_file_history_flatWidth3" value="464" />
     <property name="cvs_file_history_flatWidth0" value="464" />
+    <property name="cvs_file_history_flatWidth1" value="464" />
     <property name="GoToClass.includeLibraries" value="false" />
-    <property name="cvs_file_history_flatWidth1" value="464" />
   </component>
   <component name="ReadonlyStatusHandler">
     <option name="SHOW_DIALOG" value="true" />
   </component>
   <component name="RecentsManager" />
-  <component name="RestoreUpdateTree">
-    <UpdateInfo date="2/17/07 1:16 PM" ActionInfo="_Update">
-      <UpdatedFiles>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Updated from server" />
-          <option name="myStatusName" value="Changed on server" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="CHANGED_ON_SERVER" />
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Updated" />
-            <option name="myStatusName" value="Changed" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="UPDATED" />
-            <PATH>$PROJECT_DIR$/pom.xml</PATH>
-            <PATH>$PROJECT_DIR$/src/java/ognl/ognl.jj</PATH>
-            <PATH>$PROJECT_DIR$/src/java/ognl/OgnlParser.java</PATH>
-            <PATH>$PROJECT_DIR$/src/java/ognl/OgnlParserTreeConstants.java</PATH>
-            <PATH>$PROJECT_DIR$/build.properties</PATH>
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Created" />
-            <option name="myStatusName" value="Created" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="CREATED" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Deleted" />
-            <option name="myStatusName" value="Deleted" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="true" />
-            <option name="myId" value="REMOVED_FROM_REPOSITORY" />
-          </FILE-GROUP>
-          <FILE-GROUP>
-            <option name="myUpdateName" value="Restored" />
-            <option name="myStatusName" value="Will be restored" />
-            <option name="mySupportsDeletion" value="false" />
-            <option name="myCanBeAbsent" value="false" />
-            <option name="myId" value="RESTORED" />
-          </FILE-GROUP>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Modified" />
-          <option name="myStatusName" value="Modified" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MODIFIED" />
-          <PATH>$PROJECT_DIR$/OGNL.ipr</PATH>
-          <PATH>$PROJECT_DIR$/OGNL.iws</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Skipped" />
-          <option name="myStatusName" value="Skipped" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="SKIPPED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged with conflicts" />
-          <option name="myStatusName" value="Will be merged with conflicts" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED_WITH_CONFLICTS" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Merged" />
-          <option name="myStatusName" value="Will be merged" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="MERGED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Not in repository" />
-          <option name="myStatusName" value="Not in repository" />
-          <option name="mySupportsDeletion" value="true" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="UNKNOWN" />
-          <PATH>$PROJECT_DIR$/target</PATH>
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally added" />
-          <option name="myStatusName" value="Locally added" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_ADDED" />
-        </FILE-GROUP>
-        <FILE-GROUP>
-          <option name="myUpdateName" value="Locally removed" />
-          <option name="myStatusName" value="Locally removed" />
-          <option name="mySupportsDeletion" value="false" />
-          <option name="myCanBeAbsent" value="false" />
-          <option name="myId" value="LOCALLY_REMOVED" />
-        </FILE-GROUP>
-      </UpdatedFiles>
-    </UpdateInfo>
-  </component>
-  <component name="RunManager">
-    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false">
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+  <component name="RestoreUpdateTree" />
+  <component name="RunManager" selected="JUnit.ArrayElementsTest">
+    <tempConfiguration default="false" name="ArrayElementsTest" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
+      <pattern value="org.ognl.test.*" />
+      <module name="OGNL" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <module name="" />
-    </configuration>
+      <option name="PACKAGE_NAME" value="org.ognl.test" />
+      <option name="MAIN_CLASS_NAME" value="org.ognl.test.ArrayElementsTest" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="wholeProject" />
+      </option>
+      <RunnerSettings RunnerId="Run" />
+      <ConfigurationWrapper RunnerId="Run" />
+      <method>
+        <option name="Make" value="true" />
+      </method>
+    </tempConfiguration>
     <configuration default="true" type="JUnit" factoryName="JUnit" enabled="false" merge="false">
       <module name="" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
         <option name="Make" value="true" />
       </method>
     </configuration>
+    <configuration default="true" type="Application" factoryName="Application" enabled="false" merge="false">
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <module name="" />
+    </configuration>
+    <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="Applet" factoryName="Applet">
       <module name="" />
       <option name="MAIN_CLASS_NAME" />
       <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
       <option name="ALTERNATIVE_JRE_PATH" />
     </configuration>
-    <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 name="&lt;template&gt;" type="WebApp" default="true" selected="false">
       <Host>localhost</Host>
       <Port>5050</Port>
     </todo-panel>
   </component>
   <component name="ToolWindowManager">
-    <frame x="102" y="189" width="1955" height="1336" extended-state="0" />
+    <frame x="126" y="196" width="1955" height="1336" extended-state="0" />
     <editor active="false" />
     <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.33" 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.32994062" 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.27457628" order="8" />
       <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32994062" order="8" />
       <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
       <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="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.18344755" order="0" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.17395888" order="0" />
       <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="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.33" order="2" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.27905005" order="2" />
       <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" />
       <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
   </component>
   <component name="VcsManagerConfiguration">
     <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
-    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
+    <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="PERFORM_UPDATE_IN_BACKGROUND" value="false" />
     <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="Applied Race condition bugfix patch from Tim to fix OGNL-8 . &#10;&#10;Updated project files to reflect new target version of 2.6.11." />
+    <option name="LAST_COMMIT_MESSAGE" value="Optimized imports, slight tweaks on formatting / etc." />
     <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" />
     <MESSAGE value="Added maven2 pom." />
     <MESSAGE value="Removed eclipse cruft." />
     <MESSAGE value="Applied Race condition bugfix patch from Tim to fix OGNL-8 . &#10;&#10;Updated project files to reflect new target version of 2.6.11." />
+    <MESSAGE value="Merged performance branch into trunk." />
+    <MESSAGE value="Optimized imports, slight tweaks on formatting / etc." />
   </component>
   <component name="antWorkspaceConfiguration">
     <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
   <component name="com.intellij.ide.util.scopeChooser.ScopeChooserConfigurable" proportions="" version="1">
     <option name="myLastEditedConfigurable" />
   </component>
-  <component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.16666667,0.5" version="1">
+  <component name="com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectRootMasterDetailsConfigurable" proportions="0.16666667" version="1">
     <option name="myPlainMode" value="false" />
-    <option name="myLastEditedConfigurable" value="OGNL" />
+    <option name="myLastEditedConfigurable" value="Project 'OGNL'" />
   </component>
   <component name="com.intellij.profile.ui.ErrorOptionsConfigurable" proportions="" version="1">
     <option name="myLastEditedConfigurable" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/www/index.html">
-      <provider editor-type-id="HtmlPreview">
-        <state />
-      </provider>
+    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/ArrayElementsTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="32" column="21" selection-start="1563" selection-end="1563" vertical-scroll-proportion="0.4359673">
+        <state line="46" column="21" selection-start="2181" selection-end="2181" vertical-scroll-proportion="0.13066202">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTBitNegate.java">
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTMethod.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="50" column="18" selection-start="2222" selection-end="2222" vertical-scroll-proportion="0.27583188">
+        <state line="221" column="28" selection-start="7910" selection-end="7910" vertical-scroll-proportion="-0.6050532">
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTChain.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="103" column="84" selection-start="4059" selection-end="4059" vertical-scroll-proportion="0.15425532">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTProperty.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="519" column="17" selection-start="23590" selection-end="23590" vertical-scroll-proportion="0.71143615">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/enhance/OgnlExpressionCompiler.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="18" column="10" selection-start="272" selection-end="272" vertical-scroll-proportion="0.2992021">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/enhance/ExpressionCompiler.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="152" column="0" selection-start="5698" selection-end="5698" vertical-scroll-proportion="0.3723404">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/OgnlOps.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="449" column="27" selection-start="17222" selection-end="17222" vertical-scroll-proportion="0.3324468">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/ArrayPropertyAccessor.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="172" column="69" selection-start="6742" selection-end="6742" vertical-scroll-proportion="0.5412234">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/Performance.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="61" column="4" selection-start="2587" selection-end="2587" vertical-scroll-proportion="0.30052266">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/build.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="5" column="0" selection-start="82" selection-end="82" vertical-scroll-proportion="0.06533101">
+        <state line="4" column="0" selection-start="57" selection-end="57" vertical-scroll-proportion="0.05226481">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ognl.jj">
+    <entry file="file://$PROJECT_DIR$/build.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="43" column="9" selection-start="2374" selection-end="2374" vertical-scroll-proportion="0.28745645">
+        <state line="10" column="11" selection-start="357" selection-end="357" vertical-scroll-proportion="0.13066202">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/OgnlRuntime.java">
+    <entry file="file://$PROJECT_DIR$/osbuild.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="525" column="9" selection-start="20116" selection-end="20116" vertical-scroll-proportion="0.31950575">
+        <state line="99" column="0" selection-start="3739" selection-end="3739" vertical-scroll-proportion="0.16986063">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/pom.xml">
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/enhance/ExpressionAccessor.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="18" column="0" selection-start="635" selection-end="635" vertical-scroll-proportion="0.23519164">
+        <state line="30" column="4" selection-start="797" selection-end="797" vertical-scroll-proportion="0.35278746">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/MemberAccess.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="46" column="7" selection-start="2185" selection-end="2185" vertical-scroll-proportion="0.20905924">
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/Ognl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="85" column="47" selection-start="4232" selection-end="4232" vertical-scroll-proportion="0.37891987">
           <folding />
         </state>
       </provider>

File build.properties

 name = ognl
 fullname = OGNL
-version = 2.6.11
-cvs.tag = ognl_2_6_11
+version = 2.7
 package = ognl

File lib/build/javassist.jar

Binary file modified.
 <project name="os" default="compile" basedir=".">
 
-  <path id="cp">
-    <fileset dir="lib">
-      <include name="**/*.jar"/>
-    </fileset>
-  </path>
+    <path id="cp">
+        <fileset dir="lib">
+            <include name="**/*.jar"/>
+        </fileset>
+    </path>
 
-  <path id="junit.cp">
-    <pathelement location="${build.test}"/>
-    <pathelement location="${build.java-test}"/>
-    <path refid="cp"/>
-  </path>
+    <path id="junit.cp">
+        <pathelement location="${build.test}"/>
+        <pathelement location="${build.java-test}"/>
+        <path refid="cp"/>
+    </path>
 
-  <property name="compile.version" value="1.3"/>
+    <property name="compile.version" value="1.3"/>
 
-  <property file="build.properties"/>
-  <property file="release.properties"/>
+    <property file="build.properties"/>
+    <property file="release.properties"/>
 
-  <property name="lib" value="lib"/>
-  <property name="lib.core" value="${lib}/core"/>
-  <property name="lib.build" value="${lib}/build"/>
+    <property name="lib" value="lib"/>
+    <property name="lib.core" value="${lib}/core"/>
+    <property name="lib.build" value="${lib}/build"/>
 
-  <property name="src" value="src"/>
-  <property name="src.java" value="${src}/java"/>
-  <property name="test" value="${src}/test"/>
-  <property name="src.test" value="${test}/java"/>
+    <property name="src" value="src"/>
+    <property name="src.java" value="${src}/java"/>
+    <property name="test" value="${src}/test"/>
+    <property name="src.test" value="${test}/java"/>
 
-  <property name="build" value="build"/>
-  <property name="build.test" value="${build}/test"/>
-  <property name="build.java-test" value="${build}/java-test"/>
-  <property name="build.java" value="${build}/java"/>
-  <property name="build.clover" value="${build}/clover"/>
-  <property name="dist" value="dist"/>
+    <property name="build" value="build"/>
+    <property name="build.test" value="${build}/classes"/>
+    <property name="build.java-test" value="${build}/classes"/>
+    <property name="build.java" value="${build}/classes"/>
+    <property name="build.clover" value="${build}/clover"/>
+    <property name="dist" value="dist"/>
 
-  <property name="docs" value="docs"/>
+    <property name="docs" value="docs"/>
 
-  <available property="junit.available" classname="junit.framework.TestCase"/>
-  <available property="clover.available" classname="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
+    <available property="junit.available" classname="junit.framework.TestCase"/>
+    <available property="clover.available" classname="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
 
-  <target name="init">
-    <tstamp />
-  </target>
+    <target name="init">
+        <tstamp/>
+    </target>
 
-  <target name="junit-check" depends="init" unless="junit.available">
-    <fail message="Cannot run test cases. Please copy lib/build/junit-3.8.1.jar to ${ant.home}/lib"/>
-  </target>
+    <target name="junit-check" depends="init" unless="junit.available">
+        <fail message="Cannot run test cases. Please copy lib/build/junit-3.8.1.jar to ${ant.home}/lib"/>
+    </target>
 
-  <target name="clover-check" depends="init" unless="clover.available">
-    <fail message="Cannot run coverage tests. Please copy lib/build/clover.jar to ${ant.home}/lib"/>
-  </target>
+    <target name="clover-check" depends="init" unless="clover.available">
+        <fail message="Cannot run coverage tests. Please copy lib/build/clover.jar to ${ant.home}/lib"/>
+    </target>
 
-  <target name="clean" depends="init">
-    <delete dir="${build}"/>
-    <delete dir="${dist}"/>
-  </target>
+    <target name="clean" depends="init">
+        <delete dir="${build}"/>
+        <delete dir="${dist}"/>
+    </target>
 
-  <target name="compile" depends="init">
-    <mkdir dir="${build.java}"/>
-    <javac srcdir="${src.java}" destdir="${build.java}" classpathref="cp" debug="on" source="${compile.version}" target="${compile.version}"/>
-    <copy filtering="no" todir="${build.java}">
-      <fileset dir="${src.java}">
-        <exclude name="**/*.java"/>
-        <exclude name="**/package.html"/>
-      </fileset>
-    </copy>
-  </target>
+    <target name="compile" depends="init">
+        <mkdir dir="${build.java}"/>
+        <javac srcdir="${src.java}" destdir="${build.java}" classpathref="cp" debug="on" source="${compile.version}"
+               target="${compile.version}"/>
+        <copy filtering="no" todir="${build.java}">
+            <fileset dir="${src.java}">
+                <exclude name="**/*.java"/>
+                <exclude name="**/package.html"/>
+            </fileset>
+        </copy>
 
-  <target name="test" depends="junit-check,clover-check,compile">
-    <taskdef resource="clovertasks"/>
-    <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
+        <mkdir dir="${build.test}"/>
+        <javac srcdir="${src.test}" destdir="${build.test}" classpath="${build.java}" source="${compile.version}"
+               target="${compile.version}" classpathref="cp" debug="on"/>
+        <copy filtering="no" todir="${build.test}">
+            <fileset dir="${src.test}">
+                <exclude name="**/*.java"/>
+                <exclude name="**/package.html"/>
+            </fileset>
+        </copy>
 
-    <mkdir dir="${build.clover}"/>
-    <clover-setup initString="${build.clover}/coverage.db">
-      <files>
-        <exclude name="src/test/**/*.java"/>
-      </files>
-    </clover-setup>
+        <mkdir dir="${build.java-test}"/>
+        <javac srcdir="${src.java}" destdir="${build.java-test}" source="${compile.version}" target="${compile.version}"
+               classpathref="cp" debug="on"/>
+        <copy filtering="no" todir="${build.java-test}">
+            <fileset dir="${src.java}">
+                <exclude name="**/*.java"/>
+                <exclude name="**/package.html"/>
+            </fileset>
+        </copy>
+    </target>
 
-    <mkdir dir="${build.test}"/>
-    <javac srcdir="${src.test}" destdir="${build.test}" classpath="${build.java}" source="${compile.version}" target="${compile.version}" classpathref="cp" debug="on"/>
-    <copy filtering="no" todir="${build.test}">
-      <fileset dir="${src.test}">
-        <exclude name="**/*.java"/>
-        <exclude name="**/package.html"/>
-      </fileset>
-    </copy>
+    <target name="test" depends="junit-check,clover-check,compile">
+        <taskdef resource="clovertasks"/>
+        <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
 
-    <mkdir dir="${build.java-test}"/>
-    <javac srcdir="${src.java}" destdir="${build.java-test}" source="${compile.version}" target="${compile.version}" classpathref="cp" debug="on"/>
-    <copy filtering="no" todir="${build.java-test}">
-      <fileset dir="${src.java}">
-        <exclude name="**/*.java"/>
-        <exclude name="**/package.html"/>
-      </fileset>
-    </copy>
+        <mkdir dir="${build.clover}"/>
+        <clover-setup initString="${build.clover}/coverage.db">
+            <files>
+                <exclude name="src/test/**/*.java"/>
+            </files>
+        </clover-setup>
 
-    <mkdir dir="${dist}/docs/junit"/>
-    <junit printsummary="no" haltonfailure="no" haltonerror="yes" fork="yes" showoutput="true" forkmode="once">
-      <jvmarg value="-Djava.awt.headless=true"/>
-      <classpath>
-        <path refid="junit.cp"/>
-      </classpath>
+        <mkdir dir="${dist}/docs/junit"/>
+        <junit printsummary="no" haltonfailure="no" haltonerror="yes" fork="yes" showoutput="true" forkmode="once">
+            <jvmarg value="-Djava.awt.headless=true"/>
+            <classpath>
+                <path refid="junit.cp"/>
+            </classpath>
 
-      <formatter type="brief" useFile="false"/>
-      <formatter type="xml"/>
+            <formatter type="brief" useFile="false"/>
+            <formatter type="xml"/>
 
-      <batchtest todir="${dist}/docs/junit">
-        <fileset dir="${src.test}">
-          <exclude name="**/Abstract*.java"/>
-          <include name="**/*Test.java"/>
-        </fileset>
-      </batchtest>
-    </junit>
-  </target>
+            <batchtest todir="${dist}/docs/junit">
+                <fileset dir="${src.test}">
+                    <exclude name="**/Abstract*.java"/>
+                    <include name="**/*Test.java"/>
+                </fileset>
+            </batchtest>
+        </junit>
+    </target>
 
-  <target name="javadocs">
-    <mkdir dir="${dist}/docs/api"/>
-    <javadoc sourcepath="${src.java}"
-             destdir="${dist}/docs/api"
-             packagenames="${package}.*"
-             classpathref="cp"
-             author="true"
-             version="true"
-             overview="${src.java}/overview.html"
-             windowTitle="${fullname} API - ${version}"
-             doctitle="${fullname} API (${version})"
-             footer="&lt;a href=&quot;http://www.opensymphony.com/${name}/&quot; target=&quot;_top&quot;&gt;${fullname} Project Page&lt;/a&gt;"
-             use="true"
-             verbose="false">
-      <link href="http://java.sun.com/j2se/${compile.version}/docs/api/"/>
-      <link href="http://java.sun.com/j2ee/${compile.version}/docs/api/"/>
-    </javadoc>
-    <!-- <copy overwrite="yes" file="${docs}/main.css" tofile="${docs}/api/stylesheet.css"/> -->
-  </target>
+    <target name="perf-test" depends="junit-check,compile">
+        <path id="perf.cp">
+            <pathelement location="${build.java}"/>
+            <fileset dir="${lib.build}">
+                <include name="*.jar"/>
+            </fileset>
+        </path>
+        <java classname="org.ognl.test.Performance" classpathref="perf.cp">
+            <arg value="-server"/>
+        </java>
+    </target>
 
-  <target name="docs.impl">
-    <copy todir="${dist}/docs">
-      <fileset dir="${docs}"/>
-    </copy>
-  </target>
+    <target name="javadocs">
+        <mkdir dir="${dist}/docs/api"/>
+        <javadoc sourcepath="${src.java}"
+                 destdir="${dist}/docs/api"
+                 packagenames="${package}.*"
+                 classpathref="cp"
+                 author="true"
+                 version="true"
+                 overview="${src.java}/overview.html"
+                 windowTitle="${fullname} API - ${version}"
+                 doctitle="${fullname} API (${version})"
+                 footer="&lt;a href=&quot;http://www.opensymphony.com/${name}/&quot; target=&quot;_top&quot;&gt;${fullname} Project Page&lt;/a&gt;"
+                 use="true"
+                 verbose="false">
+            <link href="http://java.sun.com/j2se/${compile.version}/docs/api/"/>
+            <link href="http://java.sun.com/j2ee/${compile.version}/docs/api/"/>
+        </javadoc>
+        <!-- <copy overwrite="yes" file="${docs}/main.css" tofile="${docs}/api/stylesheet.css"/> -->
+    </target>
 
-  <target name="docs" depends="javadocs, clover.report, junit.report, docs.impl">
-  </target>
+    <target name="docs.impl">
+        <copy todir="${dist}/docs">
+            <fileset dir="${docs}"/>
+        </copy>
+    </target>
 
-  <target name="clover.report" depends="test">
-    <clover-report>
-      <current outfile="${dist}/docs/clover">
-        <format type="html"/>
-      </current>
-    </clover-report>
-  </target>
+    <target name="docs" depends="javadocs, clover.report, junit.report, docs.impl">
+    </target>
 
-  <target name="clover.historical" depends="clover.report">
-    <clover-historypoint historyDir="${build.clover}"/>
+    <target name="clover.report" depends="test">
+        <clover-report>
+            <current outfile="${dist}/docs/clover">
+                <format type="html"/>
+            </current>
+        </clover-report>
+    </target>
 
-    <clover-report>
-      <historical outfile="${dist}/docs/clover" historyDir="${build.clover}">
-        <format type="html"/>
-      </historical>
-    </clover-report>
-  </target>
+    <target name="clover.historical" depends="clover.report">
+        <clover-historypoint historyDir="${build.clover}"/>
 
-  <target name="junit.report" depends="test">
-    <junitreport todir="${dist}/docs/junit">
-      <fileset dir="${dist}/docs/junit">
-        <include name="TEST-*.xml"/>
-      </fileset>
-      <report format="frames" todir="${dist}/docs/junit"/>
-    </junitreport>
-  </target>
+        <clover-report>
+            <historical outfile="${dist}/docs/clover" historyDir="${build.clover}">
+                <format type="html"/>
+            </historical>
+        </clover-report>
+    </target>
 
-  <target name="website" depends="javadocs, docs.impl" />
+    <target name="junit.report" depends="test">
+        <junitreport todir="${dist}/docs/junit">
+            <fileset dir="${dist}/docs/junit">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <report format="frames" todir="${dist}/docs/junit"/>
+        </junitreport>
+    </target>
+
+    <target name="website" depends="javadocs, docs.impl"/>
 
 </project>

File src/java/ognl/ASTAdd.java

 //--------------------------------------------------------------------------
 package ognl;
 
+import ognl.enhance.ExpressionCompiler;
+import ognl.enhance.UnsupportedCompilationException;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+
 /**
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTAdd extends ExpressionNode
+class ASTAdd extends NumericExpression
 {
     public ASTAdd(int id) {
         super(id);
 
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
-        Object result = children[0].getValue( context, source );
-        for ( int i=1; i < children.length; ++i )
-            result = OgnlOps.add( result, children[i].getValue(context, source) );
+        Object result = _children[0].getValue( context, source );
+        for ( int i=1; i < _children.length; ++i )
+            result = OgnlOps.add( result, _children[i].getValue(context, source) );
         return result;
     }
-
+    
     public String getExpressionOperator(int index)
     {
         return "+";
     }
+    
+    boolean isWider(NodeType type, NodeType lastType)
+    {
+        if (lastType == null)
+            return true;
+        
+        //System.out.println("checking isWider(" + type.getGetterClass() + " , " + lastType.getGetterClass() + ")");
+        
+        if (String.class.isAssignableFrom(lastType.getGetterClass()))
+            return false;
+        
+        if (String.class.isAssignableFrom(type.getGetterClass()))
+            return true;
+        
+        if (_parent != null && String.class.isAssignableFrom(type.getGetterClass()))
+            return true;
+        
+        if (String.class.isAssignableFrom(lastType.getGetterClass()) && Object.class == type.getGetterClass())
+            return false;
+        
+        if (_parent != null && String.class.isAssignableFrom(lastType.getGetterClass()))
+            return false;
+        else if (_parent == null && String.class.isAssignableFrom(lastType.getGetterClass()))
+            return true;
+        else if (_parent == null && String.class.isAssignableFrom(type.getGetterClass()))
+            return false;
+        
+        if (BigDecimal.class.isAssignableFrom(type.getGetterClass())
+                || BigInteger.class.isAssignableFrom(type.getGetterClass()))
+            return true;
+        
+        if (BigDecimal.class.isAssignableFrom(lastType.getGetterClass())
+                || BigInteger.class.isAssignableFrom(lastType.getGetterClass()))
+            return false;
+        
+        if (Double.class.isAssignableFrom(type.getGetterClass()))
+            return true;
+        
+        if (Integer.class.isAssignableFrom(type.getGetterClass())
+                && Double.class.isAssignableFrom(lastType.getGetterClass()))
+                return false;
+        
+        if (Float.class.isAssignableFrom(type.getGetterClass())
+                && Integer.class.isAssignableFrom(lastType.getGetterClass()))
+                return true;
+        
+        return true;
+    }
+    
+    public String toGetSourceString(OgnlContext context, Object target)
+    {
+        try {
+            String result = "";
+
+            NodeType lastType = null;
+
+            // go through once to determine the ultimate type
+
+            if ((_children != null) && (_children.length > 0)) {
+
+                Class currType = context.getCurrentType();
+                Class currAccessor = context.getCurrentAccessor();
+                
+                Object cast = context.get(ExpressionCompiler.PRE_CAST);
+                
+                for ( int i = 0; i < _children.length; ++i ) {
+                    
+                    _children[i].toGetSourceString(context, target);
+                    
+                    if (NodeType.class.isInstance(_children[i]) && ((NodeType)_children[i]).getGetterClass() != null
+                            &&  isWider((NodeType)_children[i], lastType)) {
+                        
+                        lastType = (NodeType)_children[i];
+                    }
+                }
+                
+                context.put(ExpressionCompiler.PRE_CAST, cast);
+                
+                context.setCurrentType(currType);
+                context.setCurrentAccessor(currAccessor);
+            }
+            
+            // reset context since previous children loop would have changed it
+            
+            context.setCurrentObject(target);
+            
+            if ((_children != null) && (_children.length > 0)) {
+                for ( int i = 0; i < _children.length; ++i ) {
+                    if (i > 0) {
+                        result += " " + getExpressionOperator(i) + " ";
+                    }
+                    
+                    String expr = _children[i].toGetSourceString(context, target);
+                    
+                    if (expr == null || expr.trim().length() <= 0) {
+                        expr = "null";
+                    }
+                    
+                    //System.out.println("astadd child class: " + _children[i].getClass().getName() + " and return expr: " + expr);
+                    
+                    if (ASTProperty.class.isInstance(_children[i])) {
+                        
+                        expr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), false) + expr;
+                        context.setCurrentAccessor(context.getRoot().getClass());
+                    } else if (ASTMethod.class.isInstance(_children[i])) {
+                        
+                        String chain = (String)context.get("_currentChain");
+                        expr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), false) 
+                        + (chain != null ? chain + "." : "") + expr;
+                        context.setCurrentAccessor(context.getRoot().getClass());
+                        
+                    } else if (_parent == null && ASTChain.class.isInstance(_children[i])) {
+                        
+                        expr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), false) + expr;
+                        context.setCurrentAccessor(context.getRoot().getClass());
+                        
+                        String cast = (String)context.remove(ExpressionCompiler.PRE_CAST);
+                        if (cast == null)
+                            cast = "";
+                        
+                        expr = cast + expr;
+                        
+                    }
+                    
+                    if (!ASTVarRef.class.isAssignableFrom(_children[i].getClass()) 
+                            && !ASTProperty.class.isInstance(_children[i])
+                            && !ASTMethod.class.isInstance(_children[i])
+                            && !ASTSequence.class.isInstance(_children[i])
+                            && !ASTChain.class.isInstance(_children[i])
+                            && !NumericExpression.class.isAssignableFrom(_children[i].getClass())) {
+                        
+                        if (lastType != null && String.class.isAssignableFrom(lastType.getGetterClass())
+                                && !expr.startsWith("\"")) 
+                            expr = "\"" + expr + "\"";
+                    }
+                    
+                    result += expr;
+                    
+                    if ((lastType == null || !String.class.isAssignableFrom(lastType.getGetterClass()))
+                            && NodeType.class.isInstance(_children[i]) 
+                            && !ASTConst.class.isAssignableFrom(_children[i].getClass())
+                            && !NumericExpression.class.isAssignableFrom(_children[i].getClass())) {
+                        
+                        NodeType ctype = (NodeType)_children[i];
+                        if (ctype.getGetterClass() != null 
+                                && Number.class.isAssignableFrom(ctype.getGetterClass())
+                                && !ASTMethod.class.isAssignableFrom(_children[i].getClass())) {
+                            
+                            if (ASTVarRef.class.isAssignableFrom(_children[i].getClass()))
+                                result += ".";
+                            
+                            result += OgnlRuntime.getNumericValueGetter(ctype.getGetterClass());
+                        }
+                    }
+
+                }
+            }
+            
+            if (lastType != null) {
+                _getterClass = lastType.getGetterClass();
+                context.setCurrentType(_getterClass);
+                context.setCurrentAccessor(null);
+            }
+            
+            if (_parent == null || ASTSequence.class.isAssignableFrom(_parent.getClass())) {
+                
+                if (_getterClass != null && Number.class.isAssignableFrom(_getterClass))
+                    result = OgnlRuntime.getNumericCast(_getterClass) + "(" + result + ")";
+                else if (_getterClass != null && String.class.isAssignableFrom(_getterClass))
+                    _getterClass = Object.class;
+            }
+
+            return result;
+
+        } catch (Throwable t) {
+            if (UnsupportedCompilationException.class.isInstance(t))
+                throw (UnsupportedCompilationException)t;
+            else
+                throw new RuntimeException(t);
+        }
+    }
 }

File src/java/ognl/ASTAnd.java

 //--------------------------------------------------------------------------
 package ognl;
 
+import ognl.enhance.ExpressionCompiler;
+import ognl.enhance.UnsupportedCompilationException;
+
 /**
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTAnd extends ExpressionNode
+public class ASTAnd extends BooleanExpression
 {
     public ASTAnd(int id) {
         super(id);
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
         Object result = null;
-        int last = children.length - 1;
+        int last = _children.length - 1;
         for ( int i=0; i <= last; ++i ) {
-            result = children[i].getValue( context, source );
+            result = _children[i].getValue( context, source );
             if ( i != last && ! OgnlOps.booleanValue(result) )
                 break;
         }
 
     protected void setValueBody( OgnlContext context, Object target, Object value ) throws OgnlException
     {
-        int last = children.length - 1;
+        int last = _children.length - 1;
         for ( int i=0; i < last; ++i ) {
-            Object v = children[i].getValue( context, target );
+            Object v = _children[i].getValue( context, target );
             if ( ! OgnlOps.booleanValue(v) )
                 return;
         }
-        children[last].setValue( context, target, value );
+        _children[last].setValue( context, target, value );
     }
 
     public String getExpressionOperator(int index)
     {
         return "&&";
     }
+
+    public Class getGetterClass()
+    {
+        return null;
+    }
+    
+    public String toGetSourceString(OgnlContext context, Object target)
+    {
+        if (_children.length != 2)
+            throw new UnsupportedCompilationException("Can only compile boolean expressions with two children.");
+        
+        String result = "";
+        
+        try {
+            
+            String first = OgnlRuntime.getChildSource(context, target, _children[0]);
+            
+            String second = OgnlRuntime.getChildSource(context, target, _children[1]);
+            
+            result += "(ognl.OgnlOps.booleanValue(" + first + ")";
+            
+            result += " ? ";
+            
+            result += second;
+            result += " : ";
+            
+            result += first;
+            
+            result += ")";
+            
+            result += "";
+            
+            context.setCurrentObject(target);
+            
+            context.setCurrentType(Boolean.TYPE);
+        } catch (NullPointerException e) {
+            
+            throw new UnsupportedCompilationException("evaluation resulted in null expression.");
+        } catch (Throwable t) {
+            if (UnsupportedCompilationException.class.isInstance(t))
+                throw (UnsupportedCompilationException)t;
+            else
+                throw new RuntimeException(t);
+        }
+        
+        return result;
+    }
+    
+    public String toSetSourceString(OgnlContext context, Object target)
+    {
+        if (_children.length != 2)
+            throw new UnsupportedCompilationException("Can only compile boolean expressions with two children.");
+        
+        String pre = (String)context.get("_currentChain");
+        if (pre == null)
+            pre = "";
+        
+        String result = "";
+        
+        try {
+            
+            _children[0].getValue(context, target);
+            
+            String first = ExpressionCompiler.getRootExpression(_children[0], context.getRoot(), false)
+            + pre + _children[0].toGetSourceString(context, target);
+            
+            _children[1].getValue(context, target);
+            
+            String second = ExpressionCompiler.getRootExpression(_children[1], context.getRoot(), false) 
+            + pre + _children[1].toSetSourceString(context, target);
+            
+            result += "if(ognl.OgnlOps.booleanValue(" + first + ")){";
+            
+            result += second;
+            result += "; } ";
+            
+            context.setCurrentObject(target);
+            
+            context.setCurrentType(Boolean.TYPE);
+            
+        } catch (Throwable t) {
+            if (UnsupportedCompilationException.class.isInstance(t))
+                throw (UnsupportedCompilationException)t;
+            else
+                throw new RuntimeException(t);
+        }
+        
+        return result;
+    }
 }

File src/java/ognl/ASTAssign.java

 //--------------------------------------------------------------------------
 package ognl;
 
+import ognl.enhance.UnsupportedCompilationException;
+
 /**
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
 
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
-        Object result = children[1].getValue( context, source );
-        children[0].setValue( context, source, result );
+        Object result = _children[1].getValue( context, source );
+        _children[0].setValue( context, source, result );
         return result;
     }
 
     public String toString()
     {
-        return children[0] + " = " + children[1];
+        return _children[0] + " = " + _children[1];
+    }
+    
+    public String toGetSourceString(OgnlContext context, Object target)
+    {
+        String result = "";
+        
+        result += _children[0].toGetSourceString(context, target);
+        
+        if (ASTProperty.class.isInstance(_children[1])) {
+            result += "((" + OgnlRuntime.getCompiler().getClassName(target.getClass()) + ")$2).";
+        }
+        
+        String value =_children[1].toGetSourceString(context, target);
+        
+        if (value == null)
+            throw new UnsupportedCompilationException("Value for assignment is null, can't enhance statement to bytecode.");
+        
+        if (ASTSequence.class.isAssignableFrom(_children[1].getClass())) {
+            ASTSequence seq = (ASTSequence)_children[1];
+            result = seq.getCoreExpression() + result;
+            value = seq.getLastExpression();
+        }
+        
+        if (NodeType.class.isInstance(_children[1]) 
+                && !ASTProperty.class.isInstance(_children[1])
+                && ((NodeType)_children[1]).getGetterClass() != null) {
+            
+            value = "new " + ((NodeType)_children[1]).getGetterClass().getName() + "(" + value + ")";
+        }
+        
+        return result + value + ")";
+    }
+    
+    public String toSetSourceString(OgnlContext context, Object target)
+    {
+        String result = "";
+        
+        result += _children[0].toSetSourceString(context, target);
+        
+        if (ASTProperty.class.isInstance(_children[1])) {
+            result += "((" + OgnlRuntime.getCompiler().getClassName(target.getClass()) + ")$2).";
+        }
+        
+        String value =_children[1].toSetSourceString(context, target);
+        
+        if (value == null)
+            throw new UnsupportedCompilationException("Value for assignment is null, can't enhance statement to bytecode.");
+        
+        if (ASTSequence.class.isAssignableFrom(_children[1].getClass())) {
+            ASTSequence seq = (ASTSequence)_children[1];
+            result = seq.getCoreExpression() + result;
+            value = seq.getLastExpression();
+        }
+        
+        if (NodeType.class.isInstance(_children[1]) 
+                && !ASTProperty.class.isInstance(_children[1])
+                && ((NodeType)_children[1]).getGetterClass() != null) {
+            
+            value = "new " + ((NodeType)_children[1]).getGetterClass().getName() + "(" + value + ")";
+        }
+        
+        return result + value + ")";
     }
 }

File src/java/ognl/ASTBitAnd.java

  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTBitAnd extends ExpressionNode
+class ASTBitAnd extends NumericExpression
 {
     public ASTBitAnd(int id) {
         super(id);
 
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
-        Object result = children[0].getValue( context, source );
-        for ( int i=1; i < children.length; ++i )
-            result = OgnlOps.binaryAnd( result, children[i].getValue(context, source) );
+        Object result = _children[0].getValue( context, source );
+        for ( int i=1; i < _children.length; ++i )
+            result = OgnlOps.binaryAnd( result, _children[i].getValue(context, source) );
         return result;
     }
 

File src/java/ognl/ASTBitNegate.java

  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTBitNegate extends ExpressionNode
+class ASTBitNegate extends NumericExpression
 {
     public ASTBitNegate(int id) {
         super(id);
 
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
-        return OgnlOps.bitNegate( children[0].getValue(context, source) );
+        return OgnlOps.bitNegate( _children[0].getValue(context, source) );
     }
 
     public String toString()
     {
-        return "~" + children[0];
+        return "~" + _children[0];
     }
 }

File src/java/ognl/ASTBitOr.java

  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTBitOr extends ExpressionNode
+class ASTBitOr extends NumericExpression
 {
     public ASTBitOr(int id) {
         super(id);
 
     protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
     {
-        Object result = children[0].getValue( context, source );
-        for ( int i=1; i < children.length; ++i )
-            result = OgnlOps.binaryOr( result, children[i].getValue(context, source) );
+        Object result = _children[0].getValue( context, source );
+        for ( int i=1; i < _children.length; ++i )
+            result = OgnlOps.binaryOr( result, _children[i].getValue(context, source) );
         return result;
     }
 

File src/java/ognl/ASTChain.java

-//--------------------------------------------------------------------------
-//	Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard
-//  All rights reserved.
+// --------------------------------------------------------------------------
+// Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard
+// All rights reserved.
 //
-//	Redistribution and use in source and binary forms, with or without
-//  modification, are permitted provided that the following conditions are
-//  met:
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
 //
-//	Redistributions of source code must retain the above copyright notice,
-//  this list of conditions and the following disclaimer.
-//	Redistributions in binary form must reproduce the above copyright
-//  notice, this list of conditions and the following disclaimer in the
-//  documentation and/or other materials provided with the distribution.
-//	Neither the name of the Drew Davidson nor the names of its contributors
-//  may be used to endorse or promote products derived from this software
-//  without specific prior written permission.
+// Redistributions of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+// Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+// Neither the name of the Drew Davidson nor the names of its contributors
+// may be used to endorse or promote products derived from this software
+// without specific prior written permission.
 //
-//	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-//  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-//  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-//  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-//  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-//  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-//  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-//  THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-//  DAMAGE.
-//--------------------------------------------------------------------------
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+// DAMAGE.
+// --------------------------------------------------------------------------
 package ognl;
 
+import ognl.enhance.ExpressionCompiler;
+import ognl.enhance.OrderedReturn;
+import ognl.enhance.UnsupportedCompilationException;
+
 import java.lang.reflect.Array;
 
 /**
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
-class ASTChain extends SimpleNode
+public class ASTChain extends SimpleNode implements NodeType, OrderedReturn
 {
-    public ASTChain(int id) {
+
+    private Class _getterClass;
+    private Class _setterClass;
+    
+    private String _lastExpression;
+    
+    private String _coreExpression;
+    
+    public ASTChain(int id)
+    {
         super(id);
     }
 
-    public ASTChain(OgnlParser p, int id) {
+    public ASTChain(OgnlParser p, int id)
+    {
         super(p, id);
     }
-
-    public void jjtClose() {
+    
+    public String getLastExpression()
+    {
+        return _lastExpression;
+    }
+    
+    public String getCoreExpression()
+    {
+        return _coreExpression;
+    }
+    
+    public void jjtClose()
+    {
         flattenTree();
     }
 
-    protected Object getValueBody( OgnlContext context, Object source ) throws OgnlException
+    protected Object getValueBody(OgnlContext context, Object source)
+        throws OgnlException
     {
-        Object      result = source;
+        Object result = source;
 
-        for ( int i = 0, ilast = children.length - 1; i <= ilast; ++i ) {
-            boolean         handled = false;
+        for(int i = 0, ilast = _children.length - 1; i <= ilast; ++i) {
+            boolean handled = false;
 
             if (i < ilast) {
-                if (children[i] instanceof ASTProperty) {
-                    ASTProperty     propertyNode = (ASTProperty)children[i];
-                    int             indexType = propertyNode.getIndexedPropertyType(context, result);
+                if (_children[i] instanceof ASTProperty) {
+                    ASTProperty propertyNode = (ASTProperty) _children[i];
+                    int indexType = propertyNode.getIndexedPropertyType(context, result);
 
-                    if ((indexType != OgnlRuntime.INDEXED_PROPERTY_NONE) && (children[i + 1] instanceof ASTProperty)) {
-                        ASTProperty     indexNode = (ASTProperty)children[i + 1];
-
+                    if ((indexType != OgnlRuntime.INDEXED_PROPERTY_NONE) && (_children[i + 1] instanceof ASTProperty)) {
+                        ASTProperty indexNode = (ASTProperty) _children[i + 1];
+                        
                         if (indexNode.isIndexedAccess()) {
-                            Object      index = indexNode.getProperty(context, result);
-
+                            Object index = indexNode.getProperty(context, result);
+                            
                             if (index instanceof DynamicSubscript) {
                                 if (indexType == OgnlRuntime.INDEXED_PROPERTY_INT) {
-                                    Object      array = propertyNode.getValue(context, result);
-                                    int         len = Array.getLength(array);
+                                    Object array = propertyNode.getValue(context, result);
+                                    int len = Array.getLength(array);
 
-                                    switch (((DynamicSubscript)index).getFlag()) {
-                                        case DynamicSubscript.ALL:
-                                            result = Array.newInstance( array.getClass().getComponentType(), len );
-                                            System.arraycopy( array, 0, result, 0, len );
-                                            handled = true;
-                                            i++;
-                                            break;
-                                        case DynamicSubscript.FIRST:
-                                            index = new Integer((len > 0) ? 0 : -1);
-                                            break;
-                                        case DynamicSubscript.MID:
-                                            index = new Integer((len > 0) ? (len / 2) : -1);
-                                            break;
-                                        case DynamicSubscript.LAST:
-                                            index = new Integer((len > 0) ? (len - 1) : -1);
-                                            break;
+                                    switch(((DynamicSubscript) index).getFlag()) {
+                                    case DynamicSubscript.ALL:
+                                        result = Array.newInstance(array.getClass().getComponentType(), len);
+                                        System.arraycopy(array, 0, result, 0, len);
+                                        handled = true;
+                                        i++;
+                                        break;
+                                    case DynamicSubscript.FIRST:
+                                        index = new Integer((len > 0) ? 0 : -1);
+                                        break;
+                                    case DynamicSubscript.MID:
+                                        index = new Integer((len > 0) ? (len / 2) : -1);
+                                        break;
+                                    case DynamicSubscript.LAST:
+                                        index = new Integer((len > 0) ? (len - 1) : -1);
+                                        break;
                                     }
                                 } else {
-                                    if (indexType == OgnlRuntime.INDEXED_PROPERTY_OBJECT) {
-                                        throw new OgnlException("DynamicSubscript '" + indexNode + "' not allowed for object indexed property '" + propertyNode + "'");
-                                    }
+                                    if (indexType == OgnlRuntime.INDEXED_PROPERTY_OBJECT) { throw new OgnlException(
+                                            "DynamicSubscript '" + indexNode
+                                                    + "' not allowed for object indexed property '" + propertyNode
+                                                    + "'"); }
                                 }
                             }
                             if (!handled) {
-                                result = OgnlRuntime.getIndexedProperty(context, result, propertyNode.getProperty(context, result).toString(), index);
+                                result = OgnlRuntime.getIndexedProperty(context, result, propertyNode.getProperty(
+                                        context, result).toString(), index);
                                 handled = true;
                                 i++;
                             }
                 }
             }
             if (!handled) {
-                result = children[i].getValue( context, result );
+                result = _children[i].getValue(context, result);
             }
         }
         return result;
     }
 
-    protected void setValueBody( OgnlContext context, Object target, Object value ) throws OgnlException
+    protected void setValueBody(OgnlContext context, Object target, Object value)
+        throws OgnlException
     {
-        boolean         handled = false;
+        boolean handled = false;
 
-        for ( int i = 0, ilast = children.length - 2; i <= ilast; ++i ) {
+        for(int i = 0, ilast = _children.length - 2; i <= ilast; ++i) {
             if (i == ilast) {
-                if (children[i] instanceof ASTProperty) {
-                    ASTProperty     propertyNode = (ASTProperty)children[i];
-                    int             indexType = propertyNode.getIndexedPropertyType(context, target);
+                if (_children[i] instanceof ASTProperty) {
+                    ASTProperty propertyNode = (ASTProperty) _children[i];
+                    int indexType = propertyNode.getIndexedPropertyType(context, target);
 
-                    if ((indexType != OgnlRuntime.INDEXED_PROPERTY_NONE) && (children[i + 1] instanceof ASTProperty)) {
-                        ASTProperty     indexNode = (ASTProperty)children[i + 1];
+                    if ((indexType != OgnlRuntime.INDEXED_PROPERTY_NONE) && (_children[i + 1] instanceof ASTProperty)) {
+                        ASTProperty indexNode = (ASTProperty) _children[i + 1];
 
                         if (indexNode.isIndexedAccess()) {
-                            Object      index = indexNode.getProperty(context, target);
+                            Object index = indexNode.getProperty(context, target);
 
                             if (index instanceof DynamicSubscript) {
                                 if (indexType == OgnlRuntime.INDEXED_PROPERTY_INT) {
-                                    Object      array = propertyNode.getValue(context, target);
-                                    int         len = Array.getLength(array);
+                                    Object array = propertyNode.getValue(context, target);
+                                    int len = Array.getLength(array);
 
-                                    switch (((DynamicSubscript)index).getFlag()) {
-                                        case DynamicSubscript.ALL:
-                                            System.arraycopy(target, 0, value, 0, len);
-                                            handled = true;
-                                            i++;
-                                            break;
-                                        case DynamicSubscript.FIRST:
-                                            index = new Integer((len > 0) ? 0 : -1);
-                                            break;
-                                        case DynamicSubscript.MID:
-                                            index = new Integer((len > 0) ? (len / 2) : -1);
-                                            break;
-                                        case DynamicSubscript.LAST:
-                                            index = new Integer((len > 0) ? (len - 1) : -1);
-                                            break;
+                                    switch(((DynamicSubscript) index).getFlag()) {
+                                    case DynamicSubscript.ALL:
+                                        System.arraycopy(target, 0, value, 0, len);
+                                        handled = true;
+                                        i++;
+                                        break;
+                                    case DynamicSubscript.FIRST:
+                                        index = new Integer((len > 0) ? 0 : -1);
+                                        break;
+                                    case DynamicSubscript.MID:
+                                        index = new Integer((len > 0) ? (len / 2) : -1);
+                                        break;
+                                    case DynamicSubscript.LAST:
+                                        index = new Integer((len > 0) ? (len - 1) : -1);
+                                        break;
                                     }
                                 } else {
-                                    if (indexType == OgnlRuntime.INDEXED_PROPERTY_OBJECT) {
-                                        throw new OgnlException("DynamicSubscript '" + indexNode + "' not allowed for object indexed property '" + propertyNode + "'");
-                                    }
+                                    if (indexType == OgnlRuntime.INDEXED_PROPERTY_OBJECT) { throw new OgnlException(
+                                            "DynamicSubscript '" + indexNode
+                                                    + "' not allowed for object indexed property '" + propertyNode
+                                                    + "'"); }
                                 }
                             }
                             if (!handled) {
-                                OgnlRuntime.setIndexedProperty(context, target, propertyNode.getProperty(context, target).toString(), index, value);
+                                OgnlRuntime.setIndexedProperty(context, target, propertyNode.getProperty(context,
+                                        target).toString(), index, value);
                                 handled = true;
                                 i++;
                             }
                 }
             }
             if (!handled) {
-                target = children[i].getValue( context, target );
+                target = _children[i].getValue(context, target);
             }
         }
         if (!handled) {
-            children[children.length - 1].setValue( context, target, value );
+            _children[_children.length - 1].setValue(context, target, value);
         }
     }
 
-    public boolean isSimpleNavigationChain( OgnlContext context ) throws OgnlException
+    public boolean isSimpleNavigationChain(OgnlContext context)
+        throws OgnlException
     {
-        boolean     result = false;
-
-        if ((children != null) && (children.length > 0)) {
+        boolean result = false;
+        
+        if ((_children != null) && (_children.length > 0)) {
             result = true;
-            for (int i = 0; result && (i < children.length); i++) {
-                if (children[i] instanceof SimpleNode) {
-                    result = ((SimpleNode)children[i]).isSimpleProperty(context);
+            for(int i = 0; result && (i < _children.length); i++) {
+                if (_children[i] instanceof SimpleNode) {
+                    result = ((SimpleNode) _children[i]).isSimpleProperty(context);
                 } else {
                     result = false;
                 }
         return result;
     }
 
+    public Class getGetterClass()
+    {
+        return _getterClass;
+    }
+    
+    public Class getSetterClass()
+    {
+        return _setterClass;
+    }
+    
     public String toString()
     {
-        String      result = "";
+        String result = "";
 
-        if ((children != null) && (children.length > 0)) {
-            for (int i = 0; i < children.length; i++) {
+        if ((_children != null) && (_children.length > 0)) {
+            for(int i = 0; i < _children.length; i++) {
                 if (i > 0) {
-                    if (!(children[i] instanceof ASTProperty) || !((ASTProperty)children[i]).isIndexedAccess()) {
+                    if (!(_children[i] instanceof ASTProperty) || !((ASTProperty) _children[i]).isIndexedAccess()) {
                         result = result + ".";
                     }
                 }
-                result += children[i].toString();
+                result += _children[i].toString();
             }
         }
         return result;
     }
+    
+    public String toGetSourceString(OgnlContext context, Object target)
+    {
+        if (target == null)
+            throw new UnsupportedCompilationException("Eval expressions not supported as native java yet.");
+        
+        String prevChain = (String)context.get("_currentChain");
+        
+        context.setCurrentObject(target);
+        context.setCurrentType(target.getClass());
+        
+        String result = "";
+        NodeType _lastType = null;
+        boolean ordered = false;
+        boolean constructor = false;
+        try {
+            if ((_children != null) && (_children.length > 0)) {
+                for(int i = 0; i < _children.length; i++) {
+                    
+                    //System.out.println("astchain child: " + _children[i].getClass().getName() + " with current object target " + context.getCurrentObject());
+                    
+                    String value = _children[i].toGetSourceString(context, context.getCurrentObject());
+                    
+                    //System.out.println("astchain child returned >>  " + value + "  <<");
+                    
+                    if (ASTCtor.class.isInstance(_children[i]))
+                        constructor = true;
+                    
+                    if (NodeType.class.isInstance(_children[i]) 
+                            && ((NodeType)_children[i]).getGetterClass() != null) {
+                        
+                        _lastType = (NodeType)_children[i];
+                    }
+                    
+                    if (!constructor && !(OrderedReturn.class.isInstance(_children[i]) && ((OrderedReturn)_children[i]).getLastExpression() != null)
+                            && (_parent == null || !ASTSequence.class.isInstance(_parent))) {
+                        
+                        value = OgnlRuntime.getCompiler().castExpression(context, _children[i], value);
+                    }
+                    
+                    if (OrderedReturn.class.isInstance(_children[i]) && ((OrderedReturn)_children[i]).getLastExpression() != null) {
+                        
+                        ordered = true;
+                        OrderedReturn or = (OrderedReturn)_children[i];
+                        
+                        if (or.getCoreExpression() == null || or.getCoreExpression().trim().length() <= 0)
+                            result = "";
+                        else
+                            result += or.getCoreExpression();
+                        
+                        _lastExpression = or.getLastExpression();
+                        
+                        if (context.get(ExpressionCompiler.PRE_CAST) != null) {
+                            _lastExpression = context.remove(ExpressionCompiler.PRE_CAST) + _lastExpression;
+                        }
+                    } else if (ASTOr.class.isInstance(_children[i]) 
+                            || ASTAnd.class.isInstance(_children[i])
+                            || ASTCtor.class.isInstance(_children[i])
+                            || ASTStaticField.class.isInstance(_children[i])) {
+                        context.put("_noRoot", "true");
+                        result = value;
+                    } else
+                        result += value;
+                    
+                    context.put("_currentChain", result);
+                }
+            }
+        } catch (Throwable t) {
+            if (UnsupportedCompilationException.class.isInstance(t))
+                throw (UnsupportedCompilationException)t;
+            else
+                throw new RuntimeException(t);
+        }
+        
+        if (_lastType != null) {
+            _getterClass = _lastType.getGetterClass();
+            _setterClass = _lastType.getSetterClass();
+        }