Anonymous avatar Anonymous committed abf713a

Cleaning up source / javadocs / etc in preparation for release. Tried unsuccessfully to get docbook running happily.

Comments (0)

Files changed (17)

     <completion properties="true" methods="false" htmlAttributes="true" />
     <ext extensionComponentSpec="jwc" extensionPageSpec="page" extensionScript="script" />
   </component>
+  <component name="IdProvider" IDEtalkID="D6C42C2F050272871E47A6B68AAC3B78" />
   <component name="InspectionProjectProfileManager">
     <option name="PROJECT_PROFILE" value="Project Default" />
     <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
     </modules>
   </component>
   <component name="ProjectRootManager" version="2" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK" />
+  <component name="ResourceManagerContainer">
+    <option name="myResourceBundles">
+      <value>
+        <list size="0" />
+      </value>
+    </option>
+  </component>
   <component name="RmicSettings">
     <option name="IS_EANABLED" value="false" />
     <option name="DEBUGGING_INFO" value="true" />
 <?xml version="1.0" encoding="UTF-8"?>
 <project relativePaths="false" version="4">
+  <component name="CCaseConfig">
+    <option name="checkoutReserved" value="false" />
+    <option name="markExternalChangeAsUpToDate" value="true" />
+    <option name="checkInUseHijack" value="true" />
+    <option name="useUcmModel" value="true" />
+    <option name="isOffline" value="false" />
+    <option name="synchOutside" value="false" />
+    <option name="lastScr" value="" />
+    <option name="scrTextFileName" value="" />
+    <option name="lastViewType" />
+  </component>
   <component name="ChangeBrowserSettings">
     <option name="MAIN_SPLITTER_PROPORTION" value="0.45221445" />
     <option name="MESSAGES_SPLITTER_PROPORTION" value="0.8" />
   </component>
   <component name="ChangeListManager">
     <list default="true" name="Default" comment="">
-      <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$/docbook.properties" afterPath="$PROJECT_DIR$/docbook.properties" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionAccessor.java" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionAccessor.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/docbook.xml" afterPath="$PROJECT_DIR$/docbook.xml" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/pom.xml" afterPath="$PROJECT_DIR$/pom.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/NodeType.java" afterPath="$PROJECT_DIR$/src/java/ognl/NodeType.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$/docs/index.html" afterPath="$PROJECT_DIR$/docs/index.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/OGNL.ipr" afterPath="$PROJECT_DIR$/OGNL.ipr" />
+      <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/ASTAdd.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTAdd.java" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionCompiler.java" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/ExpressionCompiler.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="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="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/ASTMethod.java" afterPath="$PROJECT_DIR$/src/java/ognl/ASTMethod.java" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/NumericExpression.java" afterPath="$PROJECT_DIR$/src/java/ognl/NumericExpression.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$/www/index.html" afterPath="$PROJECT_DIR$/www/index.html" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/enhance/LocalReferenceImpl.java" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/LocalReferenceImpl.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/enhance/OrderedReturn.java" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/OrderedReturn.java" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/java/ognl/enhance/OgnlExpressionCompiler.java" afterPath="$PROJECT_DIR$/src/java/ognl/enhance/OgnlExpressionCompiler.java" />
     </list>
   </component>
   <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
     <OptionsSetting value="false" id="Update" />
     <OptionsSetting value="true" id="Status" />
     <OptionsSetting value="true" id="Edit" />
+    <OptionsSetting value="true" id="Undo Check Out" />
+    <OptionsSetting value="true" id="Get Latest Version" />
     <ConfirmationsSetting value="0" id="Add" />
     <ConfirmationsSetting value="0" id="Remove" />
   </component>
     <subPane>
       <PATH>
         <PATH_ELEMENT>
-          <option name="myItemId" value="com.intellij.openapi.project.impl.ProjectImpl@14ab266" />
+          <option name="myItemId" value="com.intellij.openapi.project.impl.ProjectImpl@a450bb" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
       </PATH>
       <PATH>
         <PATH_ELEMENT>
-          <option name="myItemId" value="com.intellij.openapi.project.impl.ProjectImpl@14ab266" />
+          <option name="myItemId" value="com.intellij.openapi.project.impl.ProjectImpl@a450bb" />
           <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
         </PATH_ELEMENT>
         <PATH_ELEMENT>
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatWidth0" value="284" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatWidth3" value="35" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatWidth2" value="304" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatOrder1" value="1" />
     <property name="cvs_file_history_treeOrder2" value="2" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatOrder1" value="1" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatOrder0" value="0" />
     <property name="cvs_file_history_treeOrder1" value="1" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatOrder3" value="3" />
     <property name="last_opened_file_path" value="$USERPROFILE$/projects/tapestry" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeWidth0" value="243" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeWidth4" value="1042" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeWidth3" value="243" />
     <property name="GoToClass.includeJavaFiles" value="false" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeWidth3" value="243" />
     <property name="GoToClass.toSaveIncludeLibraries" value="false" />
     <property name="cvs_file_history_treeWidth0" value="503" />
     <property name="cvs_file_history_treeWidth1" value="503" />
     <property name="cvs_file_history_treeWidth2" value="504" />
+    <property name="cvs_file_history_flatWidth2" value="504" />
     <property name="cvs_file_history_treeWidth3" value="503" />
-    <property name="cvs_file_history_flatWidth2" value="504" />
+    <property name="cvs_file_history_flatWidth3" value="503" />
     <property name="cvs_file_history_treeOrder0" value="0" />
-    <property name="cvs_file_history_flatWidth3" value="503" />
     <property name="MemberChooser.showClasses" value="true" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatWidth4" value="1098" />
     <property name="cvs_file_history_flatWidth0" value="503" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_flatWidth4" value="1098" />
     <property name="cvs_file_history_flatWidth1" value="503" />
     <property name="GoToClass.includeLibraries" value="false" />
     <property name="GoToFile.includeJavaFiles" value="false" />
     <property name="RunManagerConfig.compileBeforeRunning" value="true" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder3" value="3" />
     <property name="cvs_file_history_flatOrder2" value="2" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder3" value="3" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder4" value="4" />
     <property name="cvs_file_history_flatOrder3" value="3" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder4" value="4" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder1" value="1" />
     <property name="cvs_file_history_flatOrder0" value="0" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder1" value="1" />
+    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder2" value="2" />
     <property name="cvs_file_history_flatOrder1" value="1" />
-    <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder2" value="2" />
     <property name="FileHistory.org.jetbrains.idea.svn.history.SvnHistoryProvider_treeOrder0" value="0" />
     <property name="MemberChooser.copyJavadoc" value="false" />
   </component>
         <option name="Make" value="true" />
       </method>
     </tempConfiguration>
+    <configuration default="true" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" value="" />
+      <option name="SUITE_NAME" value="" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" value="" />
+      <option name="METHOD_NAME" />
+      <option name="GROUP_NAME" value="" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="VM_PARAMETERS" value="" />
+      <option name="PARAMETERS" value="" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/build" />
+      <option name="OUTPUT_DIRECTORY" value="" />
+      <option name="ADDITIONAL_CLASS_PATH" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <option name="PROPERTIES_FILE" value="" />
+      <properties />
+      <method>
+        <option name="Make" value="true" />
+      </method>
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <module name="" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="HTML_FILE_NAME" />
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <option name="VM_PARAMETERS" />
+      <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="Make" value="true" />
       </method>
     </configuration>
-    <configuration default="true" type="TestNG" factoryName="TestNG" enabled="false" merge="false">
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" value="" />
-      <option name="SUITE_NAME" value="" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" value="" />
-      <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" value="" />
-      <option name="TEST_OBJECT" value="CLASS" />
-      <option name="VM_PARAMETERS" value="" />
-      <option name="PARAMETERS" value="" />
-      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/build" />
-      <option name="OUTPUT_DIRECTORY" value="" />
-      <option name="ADDITIONAL_CLASS_PATH" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <option name="PROPERTIES_FILE" value="" />
-      <properties />
-      <method>
-        <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="ENV_VARIABLES" />
       <module name="" />
     </configuration>
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <module name="" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="HTML_FILE_NAME" />
-      <option name="HTML_USED" value="false" />
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <option name="VM_PARAMETERS" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-    </configuration>
     <configuration default="true" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local">
       <option name="WORKING_DIRECTORY" />
       <option name="HOST" value="localhost" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" order="0" />
       <window_info id="Module Dependencies" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
-      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.26071268" order="0" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27469555" order="0" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" order="2" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3488372" order="6" />
       <window_info id="Duplicates" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2742857" order="2" />
       <window_info id="Regex" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32924837" order="8" />
       <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="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
+      <window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="3" />
       <window_info id="Maven" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" order="8" />
+      <window_info id="Maven projects" 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="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" />
     <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
     <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
     <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
-    <option name="LAST_COMMIT_MESSAGE" value="Fixes OGNL-86.  NumericExpression superclass was incorrectly using _currentChain context values stored during chained subexpressions for non ASTMethod children." />
+    <option name="LAST_COMMIT_MESSAGE" value="Cleaning up source / javadocs / etc in preparation for release.  Tried unsuccessfully to get docbook running happily." />
     <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
     <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
     <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
     <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
     <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
     <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
-    <MESSAGE value="Fixes OGNL-55.&#10;&#10;ExpressionCompiler.shouldCast(Node) was returning true for ASTConst ...Obviousoly not correct." />
     <MESSAGE value="Fixed small error with ASTTest expressions containing sub-expressions without any paranthetical boundaries." />
     <MESSAGE value="Fixes OGNL-58. ASTChain children weren't having their expression root strings added." />
     <MESSAGE value="Fixes OGNL-56. Trying to be clever with source strings containg booleans didn't work out.  Used clumsier OgnlOps method instead." />
     <MESSAGE value="Fixes OGNL-84, OGNL-83.  Precasting statements were being stolen by ASTMethod for inner children incorrectly.  ASTProperty also wasn't setting the correct current type on previously indexed methods. &#10;&#10;Also reverted surefire version since someone there seems to have broken the current version." />
     <MESSAGE value="Fixes OGNL-85.  Error with type conversion in constructor calls.  Finally refactored ASTCtor to really dig through the available constructors and more thoroughly convert parameter types when possible." />
     <MESSAGE value="Fixes OGNL-86.  NumericExpression superclass was incorrectly using _currentChain context values stored during chained subexpressions for non ASTMethod children." />
+    <MESSAGE value="Cleaning up source / javadocs / etc in preparation for release.  Tried unsuccessfully to get docbook running happily." />
+  </component>
+  <component name="VssConfiguration">
+    <option name="CLIENT_PATH" value="" />
+    <option name="SRCSAFEINI_PATH" value="" />
+    <option name="USER_NAME" value="" />
+    <option name="PWD" value="" />
+    <CheckoutOptions>
+      <option name="COMMENT" value="" />
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false" />
+      <option name="REPLACE_WRITABLE" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckoutOptions>
+    <CheckinOptions>
+      <option name="COMMENT" value="" />
+      <option name="KEEP_CHECKED_OUT" value="false" />
+      <option name="RECURSIVE" value="false" />
+    </CheckinOptions>
+    <AddOptions>
+      <option name="STORE_ONLY_LATEST_VERSION" value="false" />
+      <option name="CHECK_OUT_IMMEDIATELY" value="false" />
+    </AddOptions>
+    <UndocheckoutOptions>
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="REPLACE_LOCAL_COPY" value="0" />
+      <option name="RECURSIVE" value="false" />
+    </UndocheckoutOptions>
+    <GetOptions>
+      <option name="REPLACE_WRITABLE" value="0" />
+      <option name="MAKE_WRITABLE" value="false" />
+      <option name="ANSWER_NEGATIVELY" value="false" />
+      <option name="ANSWER_POSITIVELY" value="false" />
+      <option name="RECURSIVE" value="false" />
+      <option name="VERSION" />
+    </GetOptions>
   </component>
   <component name="XPathView.XPathProjectComponent">
     <history />
     <option name="myLastEditedConfigurable" />
   </component>
   <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/StaticsAndConstructorsTest.java">
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTAdd.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="106" column="67" selection-start="3995" selection-end="3995" vertical-scroll-proportion="0.2713568">
+        <state line="52" column="0" selection-start="2180" selection-end="2180" vertical-scroll-proportion="0.2763819">
           <folding>
             <element signature="imports" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTCtor.java">
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/NodeType.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="268" column="25" selection-start="10280" selection-end="10280" vertical-scroll-proportion="0.22110553">
+        <state line="26" column="0" selection-start="474" selection-end="474" vertical-scroll-proportion="0.30150753">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/OgnlParserTokenManager.java">
+    <entry file="file://$PROJECT_DIR$/src/java/ognl/PropertyAccessor.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="45" column="26" selection-start="1502" selection-end="1502" vertical-scroll-proportion="0.3961474">
+        <state line="49" column="15" selection-start="2869" selection-end="2869" vertical-scroll-proportion="0.2512563">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/SetterTest.java">
+    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/accessors/ListPropertyAccessorTest.java">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="73" column="21" selection-start="3892" selection-end="3892" vertical-scroll-proportion="0.2763819">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTSubtract.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="36" column="33" selection-start="1894" selection-end="1894" vertical-scroll-proportion="0.12338425">
+        <state line="18" column="42" selection-start="499" selection-end="499" vertical-scroll-proportion="0.113065325">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/NumericExpression.java">
+    <entry file="file://$PROJECT_DIR$/docs/index.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="57" column="16" selection-start="1326" selection-end="1326" vertical-scroll-proportion="0.45358402">
+        <state line="17" column="0" selection-start="1142" selection-end="1142" vertical-scroll-proportion="0.22116219">
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="HtmlPreview">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/www/index.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="25" column="4" selection-start="1325" selection-end="1325" vertical-scroll-proportion="0.3252385">
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="HtmlPreview">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/www/project_tools.html">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="3" column="0" selection-start="239" selection-end="239" vertical-scroll-proportion="0.039028622">
+          <folding />
+        </state>
+      </provider>
+      <provider editor-type-id="HtmlPreview">
+        <state />
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/docbook/LanguageGuide.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state line="4" column="14" selection-start="177" selection-end="177" vertical-scroll-proportion="0.05154639">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTAdd.java">
+    <entry file="file://$PROJECT_DIR$/docbook/style/html-xsl.template">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="179" column="24" selection-start="7272" selection-end="7272" vertical-scroll-proportion="0.45828438">
+        <state line="8" column="0" selection-start="279" selection-end="279" vertical-scroll-proportion="0.10178117">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ExpressionNode.java">
+    <entry file="file://$PROJECT_DIR$/docbook/DeveloperGuide.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="107" column="16" selection-start="4099" selection-end="4099" vertical-scroll-proportion="0.31257343">
+        <state line="18" column="29" selection-start="495" selection-end="495" vertical-scroll-proportion="0.22164948">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTChain.java">
+    <entry file="file://$PROJECT_DIR$/docbook/style/fop-xsl.template">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="275" column="18" selection-start="11633" selection-end="11633" vertical-scroll-proportion="0.2467685">
+        <state line="25" column="0" selection-start="1082" selection-end="1082" vertical-scroll-proportion="0.31806615">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/java/ognl/ASTMethod.java">
+    <entry file="file://$PROJECT_DIR$/docbook.properties">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="235" column="49" selection-start="8688" selection-end="8688" vertical-scroll-proportion="0.29964748">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
+        <state line="12" column="42" selection-start="555" selection-end="555" vertical-scroll-proportion="0.15075377">
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$USERPROFILE$/projects/tapestry/pom.xml">
+    <entry file="file://$PROJECT_DIR$/build.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="242" column="26" selection-start="9397" selection-end="9397" vertical-scroll-proportion="0.37659034">
+        <state line="59" column="0" selection-start="1846" selection-end="1846" vertical-scroll-proportion="0.56743">
           <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/pom.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="140" column="12" selection-start="4924" selection-end="4924" vertical-scroll-proportion="0.70737916">
+        <state line="18" column="0" selection-start="630" selection-end="630" vertical-scroll-proportion="0.13994911">
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/PropertyTest.java">
+    <entry file="file://$PROJECT_DIR$/docbook.xml">
       <provider selected="true" editor-type-id="text-editor">
-        <state line="112" column="59" selection-start="7342" selection-end="7342" vertical-scroll-proportion="0.38944724">
-          <folding>
-            <element signature="imports" expanded="true" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/src/test/java/org/ognl/test/objects/Root.java">
-      <provider selected="true" editor-type-id="text-editor">
-        <state line="472" column="21" selection-start="11249" selection-end="11249" vertical-scroll-proportion="0.6482412">
-          <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="473" column="8" selection-start="16858" selection-end="16858" vertical-scroll-proportion="0.37939698">
+        <state line="71" column="0" selection-start="5595" selection-end="5595" vertical-scroll-proportion="0.40712467">
           <folding />
         </state>
       </provider>

docbook.properties

 #=======================================================================
 # DocBook XSL processor setup
 #=======================================================================
-docbook.xsl.version=1.69.1
-docbook.xsl.base=docbook-xsl-1.69.1
-docbook.xsl.path=extlib/docbook-xsl-1.69.1
+docbook.xsl.version=1.72.0
+docbook.xsl.base=docbook-xsl-1.72.0
+docbook.xsl.path=extlib/docbook-xsl-1.72.0
 
 #=======================================================================
 # FOP setup
     <property name="project.docbook.filelist" value="LanguageGuide,DeveloperGuide"/>
 
     <!-- Build results setup -->
-    <property name="output.docbook.style" location="build/docbook/style"/>
-    <property name="output.docbook.fop" location="build/docbook/fop"/>
-    <property name="output.docbook.html" location="build/docbook/html"/>
-    <property name="output.docbook.pdf" location="build/docbook/pdf"/>
+    <property name="output.docbook.style" location="target/docbook/style"/>
+    <property name="output.docbook.fop" location="target/docbook/fop"/>
+    <property name="output.docbook.html" location="target/docbook/html"/>
+    <property name="output.docbook.pdf" location="target/docbook/pdf"/>
 
     <!-- DocBook -->
 
     </target>
 
     <target name="docbook-generate-html-chunked" unless="uptodate.html">
-        <style basedir="${project.docbook}"
+        <xslt basedir="${project.docbook}"
             style="${docbook.html.chunked.xsl}"
             processor="trax"
             force="true"
             <param name="root.filename" expression="index"/>
             <param name="use.id.as.filename" expression="1"/>
             <xmlcatalog refid="docbook.catalog"/>
-        </style>
+        </xslt>
     </target>
 
     <target name="docbook-html-doc" depends="docbook-init">
 <p>
-OGNL stands for Object-Graph Navigation Language; it is an expression language for getting and setting properties of Java objects. You use the same expression for both getting and setting the value of a property.
+OGNL stands for Object-Graph Navigation Language; it is an expression language for getting and setting properties of Java objects.
+You use the same expression for both getting and setting the value of a property.
 </p>
 
 <p>
-The ognl.Ognl class contains convenience methods for evaluating OGNL expressions. You can do this in two stages, parsing an expression into an internal form and then using that internal form to either set or get the value of a property; or you can do it in a single stage, and get or set a property using the String form of the expression directly.
+The ognl.Ognl class contains convenience methods for evaluating OGNL expressions. You can do this in two stages, parsing an expression into
+an internal form and then using that internal form to either set or get the value of a property; or you can do it in a single stage, and get
+or set a property using the String form of the expression directly.
 </p>
 
 <p>
-OGNL started out as a way to set up associations between UI components and controllers using property names. As the desire for more complicated associations grew, Drew Davidson created what he called KVCL, for Key-Value Coding Language, egged on by Luke Blanshard. Luke then reimplemented the language using ANTLR, came up with the new name, and, egged on by Drew, filled it out to its current state. Later on Luke again reimplemented the language using JavaCC. Further maintenance on all the code is done by Drew (with spiritual guidance from Luke).
+OGNL started out as a way to set up associations between UI components and controllers using property names. As the desire for more complicated
+associations grew, Drew Davidson created what he called KVCL, for Key-Value Coding Language, egged on by Luke Blanshard. Luke then reimplemented
+the language using ANTLR, came up with the new name, and, egged on by Drew, filled it out to its current state. Later on Luke again reimplemented
+the language using JavaCC. Further maintenance on all the code is done by Drew (with spiritual guidance from Luke).
 </p>
 
 <p>
             <version>3.8.1</version>
             <scope>test</scope>
         </dependency>
-        <!--
-        <dependency>
-            <groupId>org.testng</groupId>
-            <artifactId>testng</artifactId>
-            <version>5.1</version>
-            <classifier>jdk15</classifier>
-            <scope>test</scope>
-        </dependency>
-        -->
         <dependency>
             <groupId>org.easymock</groupId>
             <artifactId>easymock</artifactId>
-            <version>2.0</version>
+            <version>2.2</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-clean-plugin</artifactId>
-                <version>2.2-SNAPSHOT</version>
+                <version>2.1.1</version>
             </plugin>
         </plugins>
     </build>
 
-    <repositories>
-        <repository>
-            <id>apache.snapshots</id>
-            <url>http://people.apache.org/repo/m2-snapshot-repository</url>
-        </repository>
-    </repositories>
-
     <distributionManagement>
         <repository>
             <id>opencomponentry.com</id>

src/java/ognl/ASTAdd.java

             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()))
+            || BigInteger.class.isAssignableFrom(type.getGetterClass()))
             return true;
-        
+
         if (BigDecimal.class.isAssignableFrom(lastType.getGetterClass())
-                || BigInteger.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;
-        
+            && Double.class.isAssignableFrom(lastType.getGetterClass()))
+            return false;
+
         if (Float.class.isAssignableFrom(type.getGetterClass())
-                && Integer.class.isAssignableFrom(lastType.getGetterClass()))
-                return true;
-        
+            && 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)) {
-
+            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 ) {
-                    
+
+                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)) {
-                        
+
+                    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) {
+
+            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 && "null".equals(expr))
-                           || (!ASTConst.class.isInstance(_children[i]) && (expr == null || expr.trim().length() <= 0))) {
-
+                        || (!ASTConst.class.isInstance(_children[i])
+                            && (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])) {
-                        
+
+                    if (ASTProperty.class.isInstance(_children[i]))
+                    {
                         expr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), context) + expr;
                         context.setCurrentAccessor(context.getRoot().getClass());
-                    } else if (ASTMethod.class.isInstance(_children[i])) {
-                        
+                    } else if (ASTMethod.class.isInstance(_children[i]))
+                    {
                         String chain = (String)context.get("_currentChain");
-                        
                         String rootExpr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), context);
 
                         //System.out.println("astadd chains is >>" + chain + "<< and rootExpr is >>" + rootExpr + "<<");
-                        
+
                         // dirty fix for overly aggressive casting dot operations
-                        if (rootExpr.endsWith(".") && chain != null && chain.startsWith(").")) {
+                        if (rootExpr.endsWith(".") && chain != null && chain.startsWith(")."))
+                        {
                             chain = chain.substring(1, chain.length());
                         }
 
                         expr = rootExpr + (chain != null ? chain + "." : "") + expr;
-                        
                         context.setCurrentAccessor(context.getRoot().getClass());
-                        
-                    } else if (ExpressionNode.class.isInstance(_children[i])) {
 
+                    } else if (ExpressionNode.class.isInstance(_children[i]))
+                    {
                         expr = "(" + expr + ")";
-                        
-                    } else if ((_parent == null || !ASTChain.class.isInstance(_parent)) && ASTChain.class.isInstance(_children[i])) {
-
+                    } else if ((_parent == null || !ASTChain.class.isInstance(_parent))
+                               && ASTChain.class.isInstance(_children[i]))
+                    {
                         String rootExpr = ExpressionCompiler.getRootExpression(_children[i], context.getRoot(), context);
                         //System.out.println("astadd rootExpr " + rootExpr + " and expr: " + expr);
 
-                        if (!ASTProperty.class.isInstance(_children[i].jjtGetChild(0)) && rootExpr.endsWith(")") && expr.startsWith(")"))
+                        if (!ASTProperty.class.isInstance(_children[i].jjtGetChild(0))
+                            && rootExpr.endsWith(")") && expr.startsWith(")"))
                             expr = expr.substring(1, expr.length());
 
                         expr = rootExpr + expr;
                         context.setCurrentAccessor(context.getRoot().getClass());
-                        
+
                         String cast = (String)context.remove(ExpressionCompiler.PRE_CAST);
                         if (cast == null)
                             cast = "";
-                        
+
                         expr = cast + expr;
                     }
 
                     // turn quoted characters into quoted strings
-                    
+
                     if (context.getCurrentType() != null && context.getCurrentType() == Character.class
-                        && ASTConst.class.isInstance(_children[i])) {
-                        
+                        && ASTConst.class.isInstance(_children[i]))
+                    {
                         expr = expr.replaceAll("'", "\"");
                         context.setCurrentType(String.class);
                     } else {
+
                         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())
-                                && !ASTStaticField.class.isInstance(_children[i])
-                                && !ASTStaticMethod.class.isInstance(_children[i])
-                                && !ASTTest.class.isInstance(_children[i])) {
-
-                            if (lastType != null && String.class.isAssignableFrom(lastType.getGetterClass()))  {
+                            && !ASTStaticField.class.isInstance(_children[i])
+                            && !ASTStaticMethod.class.isInstance(_children[i])
+                            && !ASTTest.class.isInstance(_children[i]))
+                        {
+                            if (lastType != null && String.class.isAssignableFrom(lastType.getGetterClass()))
+                            {
                                 //System.out.println("Input expr >>" + expr + "<<");
                                 expr = expr.replaceAll("&quot;", "\"");
                                 expr = expr.replaceAll("\"", "'");
                     result += expr;
 
                     // hanlde addition for numeric types when applicable or just string concatenation
-                    
+
                     if ( (lastType == null || !String.class.isAssignableFrom(lastType.getGetterClass()))
-                            && !ASTConst.class.isAssignableFrom(_children[i].getClass())
-                            && !NumericExpression.class.isAssignableFrom(_children[i].getClass())) {
-
+                         && !ASTConst.class.isAssignableFrom(_children[i].getClass())
+                         && !NumericExpression.class.isAssignableFrom(_children[i].getClass()))
+                    {
                         if (context.getCurrentType() != null && Number.class.isAssignableFrom(context.getCurrentType())
-                                && !ASTMethod.class.isInstance(_children[i])) {
+                            && !ASTMethod.class.isInstance(_children[i])) {
 
                             if (ASTVarRef.class.isInstance(_children[i])
-                                    || ASTProperty.class.isInstance(_children[i])
-                                    || ASTChain.class.isInstance(_children[i]))
+                                || ASTProperty.class.isInstance(_children[i])
+                                || ASTChain.class.isInstance(_children[i]))
                                 result += ".";
 
                             result += OgnlRuntime.getNumericValueGetter(context.getCurrentType());
                         }
                     }
 
-                    if (lastType != null) {
+                    if (lastType != null)
                         context.setCurrentAccessor(((NodeType)lastType).getGetterClass());
-                    }
                 }
             }
 
-            if (_parent == null || ASTSequence.class.isAssignableFrom(_parent.getClass())) {
-
+            if (_parent == null || ASTSequence.class.isAssignableFrom(_parent.getClass()))
+            {
                 if (_getterClass != null && String.class.isAssignableFrom(_getterClass))
                     _getterClass = Object.class;
-            } else {
-
+            } else
+            {
                 context.setCurrentType(_getterClass);
             }
 

src/java/ognl/NodeType.java

 
 
 /**
- * @author jkuhnert
+ * Used by some of the {@link ognl.enhance.OgnlExpressionCompiler} logic to determine the object
+ * type of {@link Node}s during expression evaluation.
  */
 public interface NodeType
 {
-    public Class getGetterClass();
-    
-    public Class getSetterClass();
+    /**
+     * The type returned from the expression - if any.
+     *
+     * @return The type.
+     */
+    Class getGetterClass();
+
+    /**
+     * The type used to set the value - if any.
+     *
+     * @return The type.
+     */
+    Class getSetterClass();
 }

src/java/ognl/Ognl.java

  * The simplest use of the Ognl class is to get the value of an expression from an object, without
  * extra context or pre-parsing.
  * </P>
- * 
+ *
  * <PRE>
- * 
+ *
  * import ognl.Ognl; import ognl.OgnlException; try { result = Ognl.getValue(expression, root); }
  * catch (OgnlException ex) { // Report error or recover }
- * 
+ *
  * </PRE>
- * 
+ *
  * <P>
  * This will parse the expression given and evaluate it against the root object given, returning the
  * result. If there is an error in the expression, such as the property is not found, the exception
  * how to extract the <CODE>documentName</CODE> property out of the root object and append a
  * string with the current user name in parens:
  * </P>
- * 
+ *
  * <PRE>
- * 
+ *
  * private Map context = new HashMap(); public void setUserName(String value) {
  * context.put("userName", value); } try { // get value using our own custom context map result =
  * Ognl.getValue("documentName + \" (\" + ((#userName == null) ? \"&lt;nobody&gt;\" : #userName) +
  * \")\"", context, root); } catch (OgnlException ex) { // Report error or recover }
- * 
+ *
  * </PRE>
- * 
+ *
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  * @version 27 June 1999
  */
 public abstract class Ognl
 {
-    
+
     /**
      * Parses the given OGNL expression and returns a tree representation of the expression that can
      * be used by <CODE>Ognl</CODE> static methods.
-     * 
+     *
      * @param expression
      *            the OGNL expression to be parsed
      * @return a tree representation of the expression
      *             if there is a pathological environmental problem
      */
     public static Object parseExpression(String expression)
-        throws OgnlException
+            throws OgnlException
     {
         try {
             OgnlParser parser = new OgnlParser(new StringReader(expression));
             throw new ExpressionSyntaxException(expression, e);
         }
     }
-    
+
+    /**
+     * Parses and compiles the given expression using the {@link ognl.enhance.OgnlExpressionCompiler} returned
+     * from {@link ognl.OgnlRuntime#getCompiler()}.
+     *
+     * @param context
+     *          The context to use.
+     * @param root
+     *          The root object for the given expression.
+     * @param expression
+     *          The expression to compile.
+     *
+     * @return The node with a compiled accessor set on {@link ognl.Node#getAccessor()} if compilation
+     *          was successfull. In instances where compilation wasn't possible because of a partially null
+     *          expression the {@link ExpressionAccessor} instance may be null and the compilation of this expression
+     *          still possible at some as yet indertermined point in the future.
+     *
+     * @throws Exception If a compilation error occurs.
+     */
     public static Node compileExpression(OgnlContext context, Object root, String expression)
-    throws Exception
+            throws Exception
     {
         Node expr = (Node)Ognl.parseExpression(expression);
-        
+
         OgnlRuntime.compileExpression(context, expr, root);
-        
+
         return expr;
     }
-    
+
     /**
      * Creates and returns a new standard naming context for evaluating an OGNL expression.
-     * 
+     *
      * @param root
      *            the root of the object graph
      * @return a new Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
 
     /**
      * Creates and returns a new standard naming context for evaluating an OGNL expression.
-     * 
+     *
      * @param root
-     *            the root of the object graph
+     *          The root of the object graph.
+     * @param classResolver
+     *          The resolver used to instantiate {@link Class} instances referenced in the expression.
+     *
      * @return a new OgnlContext with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
 
     /**
      * Creates and returns a new standard naming context for evaluating an OGNL expression.
-     * 
+     *
      * @param root
-     *            the root of the object graph
+     *          The root of the object graph.
+     * @param classResolver
+     *          The resolver used to instantiate {@link Class} instances referenced in the expression.
+     * @param converter
+     *          Converter used to convert return types of an expression in to their desired types.
+     *
      * @return a new Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
 
     /**
      * Creates and returns a new standard naming context for evaluating an OGNL expression.
-     * 
+     *
      * @param root
-     *            the root of the object graph
+     *          The root of the object graph.
+     * @param classResolver
+     *          The resolver used to instantiate {@link Class} instances referenced in the expression.
+     * @param converter
+     *          Converter used to convert return types of an expression in to their desired types.
+     * @param memberAccess
+     *          Java security handling object to determine semantics for accessing normally private/protected
+     *          methods / fields.
      * @return a new Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
-    public static Map createDefaultContext(Object root, ClassResolver classResolver, TypeConverter converter,
-            MemberAccess memberAccess)
+    public static Map createDefaultContext(Object root, ClassResolver classResolver,
+                                           TypeConverter converter, MemberAccess memberAccess)
     {
         return addDefaultContext(root, classResolver, converter, memberAccess, new OgnlContext());
     }
     /**
      * Appends the standard naming context for evaluating an OGNL expression into the context given
      * so that cached maps can be used as a context.
-     * 
+     *
      * @param root
      *            the root of the object graph
      * @param context
     /**
      * Appends the standard naming context for evaluating an OGNL expression into the context given
      * so that cached maps can be used as a context.
-     * 
+     *
      * @param root
-     *            the root of the object graph
+     *          The root of the object graph.
+     * @param classResolver
+     *          The resolver used to instantiate {@link Class} instances referenced in the expression.
      * @param context
-     *            the context to which OGNL context will be added.
+     *          The context to which OGNL context will be added.
+     *
      * @return Context Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
     /**
      * Appends the standard naming context for evaluating an OGNL expression into the context given
      * so that cached maps can be used as a context.
-     * 
+     *
      * @param root
-     *            the root of the object graph
+     *          The root of the object graph.
+     * @param classResolver
+     *          The resolver used to instantiate {@link Class} instances referenced in the expression.
+     * @param converter
+     *          Converter used to convert return types of an expression in to their desired types.
      * @param context
-     *            the context to which OGNL context will be added.
+     *          The context to which OGNL context will be added.
+     *
      * @return Context Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
-    public static Map addDefaultContext(Object root, ClassResolver classResolver, TypeConverter converter, Map context)
+    public static Map addDefaultContext(Object root, ClassResolver classResolver,
+                                        TypeConverter converter, Map context)
     {
         return addDefaultContext(root, classResolver, converter, null, context);
     }
     /**
      * Appends the standard naming context for evaluating an OGNL expression into the context given
      * so that cached maps can be used as a context.
-     * 
+     *
      * @param root
      *            the root of the object graph
      * @param classResolver
      * @return Context Map with the keys <CODE>root</CODE> and <CODE>context</CODE> set
      *         appropriately
      */
-    public static Map addDefaultContext(Object root, ClassResolver classResolver, TypeConverter converter,
-            MemberAccess memberAccess, Map context)
+    public static Map addDefaultContext(Object root, ClassResolver classResolver,
+                                        TypeConverter converter, MemberAccess memberAccess, Map context)
     {
         OgnlContext result;
-        
+
         if (!(context instanceof OgnlContext)) {
             result = new OgnlContext();
             result.setValues(context);
         if (memberAccess != null) {
             result.setMemberAccess(memberAccess);
         }
-        
+
         result.setRoot(root);
         return result;
     }
-    
+
+    /**
+     * Configures the {@link ClassResolver} to use for the given context.  Will be used during
+     * expression parsing / execution to resolve class names.
+     *
+     * @param context
+     *          The context to place the resolver.
+     * @param classResolver
+     *          The resolver to use to resolve classes.
+     */
     public static void setClassResolver(Map context, ClassResolver classResolver)
     {
         context.put(OgnlContext.CLASS_RESOLVER_CONTEXT_KEY, classResolver);
     }
 
+    /**
+     * Gets the previously stored {@link ClassResolver} for the given context - if any.
+     *
+     * @param context
+     *          The context to get the configured resolver from.
+     *
+     * @return The resolver instance, or null if none found. 
+     */
     public static ClassResolver getClassResolver(Map context)
     {
         return (ClassResolver) context.get(OgnlContext.CLASS_RESOLVER_CONTEXT_KEY);
     }
 
+    /**
+     * Configures the type converter to use for a given context. This will be used
+     * to convert into / out of various java class types.
+     *
+     * @param context
+     *          The context to configure it for.
+     * @param converter
+     *          The converter to use.
+     */
     public static void setTypeConverter(Map context, TypeConverter converter)
     {
         context.put(OgnlContext.TYPE_CONVERTER_CONTEXT_KEY, converter);
     }
 
+    /**
+     * Gets the currently configured {@link TypeConverter} for the given context - if any.
+     *
+     * @param context
+     *          The context to get the converter from.
+     *
+     * @return The converter - or null if none found.
+     */
     public static TypeConverter getTypeConverter(Map context)
     {
         return (TypeConverter) context.get(OgnlContext.TYPE_CONVERTER_CONTEXT_KEY);
     }
 
+    /**
+     * Configures the specified context with a {@link MemberAccess} instance for
+     * handling field/method protection levels.
+     *
+     * @param context
+     *          The context to configure.
+     * @param memberAccess
+     *          The access resolver to configure the context with.
+     */
     public static void setMemberAccess(Map context, MemberAccess memberAccess)
     {
         context.put(OgnlContext.MEMBER_ACCESS_CONTEXT_KEY, memberAccess);
     }
 
+    /**
+     * Gets the currently stored {@link MemberAccess} object for the given context - if any.
+     *
+     * @param context
+     *          The context to get the object from.
+     * 
+     * @return The configured {@link MemberAccess} instance in the specified context - or null if none found.
+     */
     public static MemberAccess getMemberAccess(Map context)
     {
         return (MemberAccess) context.get(OgnlContext.MEMBER_ACCESS_CONTEXT_KEY);
     }
 
+    /**
+     * Sets the root object to use for all expressions in the given context - doesn't necessarily replace
+     * root object instances explicitly passed in to other expression resolving methods on this class.
+     *
+     * @param context
+     *          The context to store the root object in.
+     * @param root
+     *          The root object.
+     */
     public static void setRoot(Map context, Object root)
     {
         context.put(OgnlContext.ROOT_CONTEXT_KEY, root);
     }
 
+    /**
+     * Gets the stored root object for the given context - if any.
+     *
+     * @param context
+     *          The context to get the root object from.
+     * 
+     * @return The root object - or null if none found.
+     */
     public static Object getRoot(Map context)
     {
         return context.get(OgnlContext.ROOT_CONTEXT_KEY);
     }
 
+    /**
+     * Gets the last {@link Evaluation} executed on the given context.
+     *
+     * @param context
+     *          The context to get the evaluation from.
+     * 
+     * @return The {@link Evaluation} - or null if none was found.
+     */
     public static Evaluation getLastEvaluation(Map context)
     {
         return (Evaluation) context.get(OgnlContext.LAST_EVALUATION_CONTEXT_KEY);
     /**
      * Evaluates the given OGNL expression tree to extract a value from the given root object. The
      * default context is set for the given context and root via <CODE>addDefaultContext()</CODE>.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param context
      *             if there is a pathological environmental problem
      */
     public static Object getValue(Object tree, Map context, Object root)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(tree, context, root, null);
     }
     /**
      * Evaluates the given OGNL expression tree to extract a value from the given root object. The
      * default context is set for the given context and root via <CODE>addDefaultContext()</CODE>.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param context
      *             if there is a pathological environmental problem
      */
     public static Object getValue(Object tree, Map context, Object root, Class resultType)
-        throws OgnlException
+            throws OgnlException
     {
         Object result;
         OgnlContext ognlContext = (OgnlContext) addDefaultContext(root, context);
-        
+
         Node node = (Node)tree;
-        
+
         if (node.getAccessor() != null)
             result =  node.getAccessor().get(ognlContext, root);
         else
             result = node.getValue(ognlContext, root);
-        
+
         if (resultType != null) {
             result = getTypeConverter(context).convertValue(context, root, null, null, result, resultType);
         }
         return result;
     }
-    
+
     /**
      * Gets the value represented by the given pre-compiled expression on the specified root 
      * object.
-     * 
+     *
      * @param expression
      *          The pre-compiled expression, as found in {@link Node#getAccessor()}. 
      * @param context
     {
         return expression.get(context, root);
     }
-    
+
     /**
      * Gets the value represented by the given pre-compiled expression on the specified root 
      * object.
-     * 
+     *
      * @param expression
      *          The pre-compiled expression, as found in {@link Node#getAccessor()}. 
      * @param context
      * @return
      *          The value.
      */
-    public static Object getValue(ExpressionAccessor expression, OgnlContext context, Object root, Class resultType)
+    public static Object getValue(ExpressionAccessor expression, OgnlContext context,
+                                  Object root, Class resultType)
     {
         return getTypeConverter(context).convertValue(context, root, null, null, expression.get(context, root), resultType);
     }
-    
+
     /**
      * Evaluates the given OGNL expression to extract a value from the given root object in a given
      * context
-     * 
+     *
      * @see #parseExpression(String)
      * @see #getValue(Object,Object)
      * @param expression
      *             if there is a pathological environmental problem
      */
     public static Object getValue(String expression, Map context, Object root)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(expression, context, root, null);
     }
     /**
      * Evaluates the given OGNL expression to extract a value from the given root object in a given
      * context
-     * 
+     *
      * @see #parseExpression(String)
      * @see #getValue(Object,Object)
      * @param expression
      *             if there is a pathological environmental problem
      */
     public static Object getValue(String expression, Map context, Object root, Class resultType)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(parseExpression(expression), context, root, resultType);
     }
 
     /**
      * Evaluates the given OGNL expression tree to extract a value from the given root object.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param root
      *             if there is a pathological environmental problem
      */
     public static Object getValue(Object tree, Object root)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(tree, root, null);
     }
 
     /**
      * Evaluates the given OGNL expression tree to extract a value from the given root object.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param root
      *             if there is a pathological environmental problem
      */
     public static Object getValue(Object tree, Object root, Class resultType)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(tree, createDefaultContext(root), root, resultType);
     }
     /**
      * Convenience method that combines calls to <code> parseExpression </code> and
      * <code> getValue</code>.
-     * 
+     *
      * @see #parseExpression(String)
      * @see #getValue(Object,Object)
      * @param expression
      *             if there is a pathological environmental problem
      */
     public static Object getValue(String expression, Object root)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(expression, root, null);
     }
     /**
      * Convenience method that combines calls to <code> parseExpression </code> and
      * <code> getValue</code>.
-     * 
+     *
      * @see #parseExpression(String)
      * @see #getValue(Object,Object)
      * @param expression
      *             if there is a pathological environmental problem
      */
     public static Object getValue(String expression, Object root, Class resultType)
-        throws OgnlException
+            throws OgnlException
     {
         return getValue(parseExpression(expression), root, resultType);
     }
     /**
      * Evaluates the given OGNL expression tree to insert a value into the object graph rooted at
      * the given root object. The default context is set for the given context and root via <CODE>addDefaultContext()</CODE>.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param context
      *             if there is a pathological environmental problem
      */
     public static void setValue(Object tree, Map context, Object root, Object value)
-        throws OgnlException
+            throws OgnlException
     {
         OgnlContext ognlContext = (OgnlContext) addDefaultContext(root, context);
         Node n = (Node) tree;
-        
+
         if (n.getAccessor() != null) {
             n.getAccessor().set(ognlContext, root, value);
             return;
         }
-        
+
         n.setValue(ognlContext, root, value);
     }
 
     /**
      * Sets the value given using the pre-compiled expression on the specified root 
      * object.
-     * 
+     *
      * @param expression
      *          The pre-compiled expression, as found in {@link Node#getAccessor()}. 
      * @param context
      * @param value
      *          The value to set.
      */
-    public static void setValue(ExpressionAccessor expression, OgnlContext context, Object root, Object value)
+    public static void setValue(ExpressionAccessor expression, OgnlContext context,
+                                Object root, Object value)
     {
         expression.set(context, root, value);
     }
-    
+
     /**
      * Evaluates the given OGNL expression to insert a value into the object graph rooted at the
      * given root object given the context.
-     * 
+     *
      * @param expression
      *            the OGNL expression to be parsed
      * @param root
      *             if there is a pathological environmental problem
      */
     public static void setValue(String expression, Map context, Object root, Object value)
-        throws OgnlException
+            throws OgnlException
     {
         setValue(parseExpression(expression), context, root, value);
     }
     /**
      * Evaluates the given OGNL expression tree to insert a value into the object graph rooted at
      * the given root object.
-     * 
+     *
      * @param tree
      *            the OGNL expression tree to evaluate, as returned by parseExpression()
      * @param root
      *             if there is a pathological environmental problem
      */
     public static void setValue(Object tree, Object root, Object value)
-        throws OgnlException
+            throws OgnlException
     {
         setValue(tree, createDefaultContext(root), root, value);
     }
     /**
      * Convenience method that combines calls to <code> parseExpression </code> and
      * <code> setValue</code>.
-     * 
+     *
      * @see #parseExpression(String)
      * @see #setValue(Object,Object,Object)
      * @param expression
      *             if there is a pathological environmental problem
      */
     public static void setValue(String expression, Object root, Object value)
-        throws OgnlException
+            throws OgnlException
     {
         setValue(parseExpression(expression), root, value);
     }
 
+    /**
+     * Checks if the specified {@link Node} instance represents a constant
+     * expression.
+     *
+     * @param tree
+     *          The {@link Node} to check.
+     * @param context
+     *          The context to use.
+     *
+     * @return True if the node is a constant - false otherwise.
+     * @throws OgnlException  If an error occurs checking the expression.
+     */
     public static boolean isConstant(Object tree, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return ((SimpleNode) tree).isConstant((OgnlContext) addDefaultContext(null, context));
     }
 
+     /**
+     * Checks if the specified expression represents a constant expression.
+     *
+     * @param expression
+     *          The expression to check.
+     * @param context
+     *          The context to use.
+     *
+     * @return True if the node is a constant - false otherwise.
+     * @throws OgnlException  If an error occurs checking the expression.
+     */
     public static boolean isConstant(String expression, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return isConstant(parseExpression(expression), context);
     }
 
+    /**
+     * Same as {@link #isConstant(Object, java.util.Map)} - only the {@link Map} context
+     * is created for you.
+     *
+     * @param tree
+     *          The {@link Node} to check.
+     * 
+     * @return True if the node represents a constant expression - false otherwise.
+     * @throws OgnlException If an exception occurs.
+     */
     public static boolean isConstant(Object tree)
-        throws OgnlException
+            throws OgnlException
     {
         return isConstant(tree, createDefaultContext(null));
     }
 
+    /**
+     * Same as {@link #isConstant(String, java.util.Map)} - only the {@link Map}
+     * instance is created for you.
+     *
+     * @param expression
+     *          The expression to check.
+     *
+     * @return True if the expression represents a constant - false otherwise.
+     * @throws OgnlException If an exception occurs.
+     */
     public static boolean isConstant(String expression)
-        throws OgnlException
+            throws OgnlException
     {
         return isConstant(parseExpression(expression), createDefaultContext(null));
     }
 
     public static boolean isSimpleProperty(Object tree, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return ((SimpleNode) tree).isSimpleProperty((OgnlContext) addDefaultContext(null, context));
     }
 
     public static boolean isSimpleProperty(String expression, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleProperty(parseExpression(expression), context);
     }
 
     public static boolean isSimpleProperty(Object tree)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleProperty(tree, createDefaultContext(null));
     }
 
     public static boolean isSimpleProperty(String expression)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleProperty(parseExpression(expression), createDefaultContext(null));
     }
 
     public static boolean isSimpleNavigationChain(Object tree, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return ((SimpleNode) tree).isSimpleNavigationChain((OgnlContext) addDefaultContext(null, context));
     }
 
     public static boolean isSimpleNavigationChain(String expression, Map context)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleNavigationChain(parseExpression(expression), context);
     }
 
     public static boolean isSimpleNavigationChain(Object tree)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleNavigationChain(tree, createDefaultContext(null));
     }
 
     public static boolean isSimpleNavigationChain(String expression)
-        throws OgnlException
+            throws OgnlException
     {
         return isSimpleNavigationChain(parseExpression(expression), createDefaultContext(null));
     }

src/java/ognl/OgnlRuntime.java

 import java.util.*;
 
 /**
- * This is an abstract class with static methods that define runtime caching information in OGNL.
+ * Utility class used by internal OGNL API to do various things like:
+ *
+ * <ul>
+ * <li>Handles majority of reflection logic / caching. </li>
+ * <li>Utility methods for casting strings / various numeric types used by {@link OgnlExpressionCompiler}.</li.
+ * <li>Core runtime configuration point for setting/using global {@link TypeConverter} / {@link OgnlExpressionCompiler} /
+ * {@link NullHandler} instances / etc.. </li>
+ *</ul>
  *
  * @author Luke Blanshard (blanshlu@netscape.net)
  * @author Drew Davidson (drew@ognl.org)
  */
 public class OgnlRuntime {
 
+    /**
+     * Constant expression used to indicate that a given method / property couldn't be found
+     * during reflection operations.
+     */
     public static final Object NotFound = new Object();
     public static final List NotFoundList = new ArrayList();
     public static final Map NotFoundMap = new HashMap();
 
     public static final String NULL_STRING = "" + null;
 
+    /**
+     * Java beans standard set method prefix.
+     */
     private static final String SET_PREFIX = "set";
+    /**
+     * Java beans standard get method prefix.
+     */
     private static final String GET_PREFIX = "get";
+    /**
+     * Java beans standard is<Foo> boolean getter prefix.
+     */
     private static final String IS_PREFIX = "is";
 
     /**
     private static final EvaluationPool evaluationPool = new EvaluationPool();
     private static final ObjectArrayPool objectArrayPool = new ObjectArrayPool();
 
+    /**
+     * Expression compiler used by {@link Ognl#compileExpression(OgnlContext, Object, String)} calls.
+     */
     private static OgnlExpressionCompiler _compiler = new ExpressionCompiler();
 
     /**
             Object result = null;
             int i = key.hashCode() & TABLE_SIZE_MASK;
 
-            for (Entry entry = table[i]; entry != null; entry = entry.next) {
-                if (entry.key == key) {
+            for (Entry entry = table[i]; entry != null; entry = entry.next)
+            {
+                if (entry.key == key)
+                {
                     result = entry.value;
                     break;
                 }
             }
+
             return result;
         }
 
             int i = key.hashCode() & TABLE_SIZE_MASK;
             Entry entry = table[i];
 
-            if (entry == null) {
+            if (entry == null)
+            {
                 table[i] = new Entry(key, value);
             } else {
-                if (entry.key == key) {
+
+                if (entry.key == key)
+                {
                     result = entry.value;
                     entry.value = value;
                 } else {
-                    while (true) {
-                        if (entry.key == key) {
+
+                    while (true)
+                    {
+                        if (entry.key == key)
+                        {
                             /* replace value */
                             result = entry.value;
                             entry.value = value;
                             break;
                         } else {
-                            if (entry.next == null) {
+                            if (entry.next == null)
+                            {
                                 /* add value */
                                 entry.next = new Entry(key, value);
                                 break;
 
     private static IdentityHashMap PRIMITIVE_WRAPPER_CLASSES = new IdentityHashMap();
 
+    /**
+     * Used to provide primitive type equivalent conversions into and out of
+     * native / object types.
+     */
     static {
         PRIMITIVE_WRAPPER_CLASSES.put(Boolean.TYPE, Boolean.class);
         PRIMITIVE_WRAPPER_CLASSES.put(Boolean.class, Boolean.TYPE);
 
     private static final Map NUMERIC_CASTS = new HashMap();
 
+    /**
+     * Constant strings for casting different primitive types.
+     */
     static {
         NUMERIC_CASTS.put(Double.class, "(double)");
         NUMERIC_CASTS.put(Float.class, "(float)");
 
     private static final Map NUMERIC_VALUES = new HashMap();
 
+    /**
+     * Constant strings for getting the primitive value of different
+     * native types on the generic {@link Number} object interface. (or the less
+     * generic BigDecimal/BigInteger types)
+     */
     static {
         NUMERIC_VALUES.put(Double.class, "doubleValue()");
         NUMERIC_VALUES.put(Float.class, "floatValue()");
 
     private static final Map NUMERIC_LITERALS = new HashMap();
 
+    /**
+     * Numeric primitive literal string expressions.
+     */
     static {
         NUMERIC_LITERALS.put(Integer.class, "");
         NUMERIC_LITERALS.put(Integer.TYPE, "");
 
     static {
         PropertyAccessor p = new ArrayPropertyAccessor();
+
         setPropertyAccessor(Object.class, new ObjectPropertyAccessor());
         setPropertyAccessor(byte[].class, p);
         setPropertyAccessor(short[].class, p);
         setPropertyAccessor(Enumeration.class, new EnumerationPropertyAccessor());
 
         ElementsAccessor e = new ArrayElementsAccessor();
+        
         setElementsAccessor(Object.class, new ObjectElementsAccessor());
         setElementsAccessor(byte[].class, e);
         setElementsAccessor(short[].class, e);
         setElementsAccessor(Number.class, new NumberElementsAccessor());
 
         NullHandler nh = new ObjectNullHandler();
+        
         setNullHandler(Object.class, nh);
         setNullHandler(byte[].class, nh);
         setNullHandler(short[].class, nh);
         setNullHandler(Object[].class, nh);
 
         MethodAccessor ma = new ObjectMethodAccessor();
+        
         setMethodAccessor(Object.class, ma);
         setMethodAccessor(byte[].class, ma);
         setMethodAccessor(short[].class, ma);
                 ((AccessibleObject) method).setAccessible(false);
             }
         }
-        
+
         return result;
     }
 
 
         if (result == null)
             throw new ClassNotFoundException("Unable to resolve class: " + className);
-        
+
         return result;
     }
 
                 Class[] mParameterTypes = getParameterTypes(m);
 
                 if (areArgsCompatible(args, mParameterTypes)
-                        && ((result == null) || isMoreSpecific(mParameterTypes, resultParameterTypes))) {
+                    && ((result == null) || isMoreSpecific(mParameterTypes, resultParameterTypes))) {
                     result = m;
                     resultParameterTypes = mParameterTypes;
                     System.arraycopy(args, 0, actualArgs, 0, args.length);
             Class targetClass = classForName(context, className);
             if (targetClass == null)
                 throw new ClassNotFoundException("Unable to resolve class with name " + className);
-            
+
             MethodAccessor ma = getMethodAccessor(targetClass);
 
             return ma.callStaticMethod(context, targetClass, methodName, args);
     }
 
     public static Object callMethod(OgnlContext context, Object target, String methodName,
-                                          String propertyName, Object[] args)
+                                    String propertyName, Object[] args)
             throws OgnlException
     {
         if (target == null)
                 Class[] cParameterTypes = getParameterTypes(c);
 
                 if (areArgsCompatible(args, cParameterTypes)
-                        && (ctor == null || isMoreSpecific(cParameterTypes, ctorParameterTypes))) {
+                    && (ctor == null || isMoreSpecific(cParameterTypes, ctorParameterTypes))) {
                     ctor = c;
                     ctorParameterTypes = cParameterTypes;
                 }
         Object result = null;
         Method m = getGetMethod(context, (target == null) ? null : target.getClass() , propertyName);
         if (m == null)
-           m = getReadMethod((target == null) ? null : target.getClass(), propertyName, 0);
+            m = getReadMethod((target == null) ? null : target.getClass(), propertyName, 0);
 
         if (checkAccessAndExistence) {
             if ((m == null) || !context.getMemberAccess().isAccessible(context, target, m, propertyName)) {
                 for (Class sc = inClass; (sc != null); sc = sc.getSuperclass()) {
                     if ((o = getFields(sc).get(name)) == NotFound)
                         break;
-                    
+
                     superclasses.add(sc);
-                    
+
                     if ((result = (Field) o) != null)
                         break;
                 }
     }
 
     public static Object getFieldValue(OgnlContext context, Object target, String propertyName,
-                                             boolean checkAccessAndExistence)
+                                       boolean checkAccessAndExistence)
             throws NoSuchFieldException
     {
         Object result = null;
                         context.getMemberAccess().restore(context, target, f, propertyName, state);
                     } else
                         throw new NoSuchFieldException(propertyName);
-                    
+
                 } catch (IllegalAccessException ex) {
                     throw new NoSuchFieldException(propertyName);
                 }
                 state = context.getMemberAccess().setup(context, target, f, propertyName);
                 try {
                     if (isTypeCompatible(value, f.getType())
-                            || ((value = getConvertedType(context, target, f, propertyName, value, f.getType())) != null)) {
+                        || ((value = getConvertedType(context, target, f, propertyName, value, f.getType())) != null)) {
                         f.set(target, value);
                         result = true;
                     }
             Class c = classForName(context, className);
 
             if (c == null)
-                    throw new OgnlException("Unable to find class " + className + " when resolving field name of " + fieldName);
+                throw new OgnlException("Unable to find class " + className + " when resolving field name of " + fieldName);
 
             /*
              * Check for virtual static field "class"; this cannot interfere with normal static
                             boolean isSet = false, isIs = false;
 
                             if ((isSet = ms.startsWith(SET_PREFIX)) || ms.startsWith(GET_PREFIX)
-                                    || (isIs = ms.startsWith(IS_PREFIX))) {
+                                || (isIs = ms.startsWith(IS_PREFIX))) {
                                 int prefixLength = (isIs ? 2 : 3);
 
                                 if (isSet == findSets) {
                 if (propertyCache == null) {
                     cache.put(targetClass, propertyCache = new HashMap(101));
                 }
-                
+
                 propertyCache.put(propertyName, (result == null) ? NotFoundList : result);
             }
             return (result == NotFoundList) ? null : result;
     }
 
     public static boolean isMethodAccessible(OgnlContext context, Object target, Method method,
-                                                   String propertyName)
+                                             String propertyName)
     {
         return (method != null) && context.getMemberAccess().isAccessible(context, target, method, propertyName);
     }
 
         if (pd == null) {
             List methods = getDeclaredMethods(targetClass, propertyName, true /* find 'set' methods */);
-            
+
             if (methods != null) {
                 for (int i = 0, icount = methods.size(); i < icount; i++) {
                     Method m = (Method) methods.get(i);
                 Method m = (Method) methods.get(0);
 
                 if (((isSet = methodName.startsWith(SET_PREFIX)) || (isGet = methodName.startsWith(GET_PREFIX)))
-                        && (methodName.length() > 3)) {
+                    && (methodName.length() > 3)) {
                     String propertyName = Introspector.decapitalize(methodName.substring(3));
                     Class[] parameterTypes = getParameterTypes(m);
                     int parameterCount = parameterTypes.length;
                 }
             }
         }
-        
+
         for (Iterator it = pairs.keySet().iterator(); it.hasNext();) {
             String propertyName = (String) it.next();
             List methods = (List) pairs.get(propertyName);
             if (methods.size() == 2) {
                 Method method1 = (Method) methods.get(0), method2 = (Method) methods.get(1), setMethod = (method1
                         .getParameterTypes().length == 2) ? method1 : method2, getMethod = (setMethod == method1) ? method2
-                                                                                           : method1;
+                        : method1;
                 Class keyType = getMethod.getParameterTypes()[0], propertyType = getMethod.getReturnType();
 
                 if (keyType == setMethod.getParameterTypes()[0]) {
                                                                                      getMethod, setMethod);
                         } catch (Exception ex) {
                             throw new OgnlException("creating object indexed property descriptor for '" + propertyName
-                                    + "' in " + targetClass, ex);
+                                                    + "' in " + targetClass, ex);
                         }
                         intoMap.put(propertyName, propertyDescriptor);
                     }
                 for (int i = 0, icount = pda.length; i < icount; i++) {
                     result.put(pda[i].getName(), pda[i]);
                 }
-                
+
                 findObjectIndexedPropertyDescriptors(targetClass, result);
                 propertyDescriptorCache.put(targetClass, result);
             }
     }
 
     public static MethodAccessor getMethodAccessor(Class cls)
-            throws OgnlException    
+            throws OgnlException
     {
         MethodAccessor answer = (MethodAccessor) getHandler(cls, methodAccessors);
         if (answer != null)
 
         if (target == null) {
             throw new OgnlException("target is null for setProperty(null, \"" + name + "\", " + value
-                    + ")");
+                                    + ")");
         }
         if ((accessor = getPropertyAccessor(getTargetClass(target))) == null) {
             throw new OgnlException(
     }
 
     public static void setIndexedProperty(OgnlContext context, Object source, String name, Object index,
-                                                Object value)
+                                          Object value)
             throws OgnlException
     {
         Object[] args = objectArrayPool.create(index, value);
                     continue;
 
                 if (mparms[p].isPrimitive()
-                        && Character.TYPE != mparms[p] && Byte.TYPE != mparms[p]
-                        && Number.class.isAssignableFrom(parms[p])