myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jakob Korherr <jakob.korh...@gmail.com>
Subject Re: svn commit: r1188267 [1/2] - in /myfaces/core/trunk/api/src: main/java/javax/faces/application/ main/java/javax/faces/component/ main/java/javax/faces/component/behavior/ main/java/javax/faces/convert/ main/java/javax/faces/event/ main/java/javax
Date Mon, 24 Oct 2011 22:14:05 GMT
Hi Mark,

Thanks for all the stuff, but actually I cannot find evidence in
JSR-133 that tells me that the following is not allowed:

private final HashMap<String, String> map = new HashMap<String, String>();
...
map.put("a", "b");

Again this would mean that it is not allowed to make mutable object
references final. In my understanding of JSR-133 your statements are
true for immutable object references that are marked final (like
Strings), but not for mutable ones.

But please show me the statement that tells me otherwise - I can't find it!

Regards,
Jakob

2011/10/25 Mark Struberg <struberg@yahoo.de>:
> http://www.cs.umd.edu/~pugh/java/memoryModel/
>
> plus
>
>
> http://download.oracle.com/otndocs/jcp/memory_model-1.0-pfd-spec-oth-JSpec/
>
> (see freezesBeforeDereference)
>
> (this got slightly changed with the vm3 spec, but cannot find it atm)
>
> and
>
> http://www.angelikalanger.com/Articles/EffectiveJava/38.JMM-Overview/38.JMM-Overview.html
> Erstmaliger Lesezugriff auf final-Variablen.   final-Variablen
> werden bekanntlich spätestens im Konstruktor mit ihrem konstanten
> Wert initialiert.  Das Ende der Konstruktion löst einen partiellen
> Flush aus, bei dem die final-Variablen und alle "abhängigen" Objekte
> in den Hauptspeicher zurückgeschrieben werden.  Die "abhängigen"
> Objekte sind jene, die von einer  final-Variablen aus per Referenz
> erreichbar sind.  Der erste lesende Zugriff auf eine final-Variable
> löst einen partiellen Refresh aus, bei dem die final-Variable und
> alle "abhängigen" Objekte in den Arbeitsspeicher geladen werden.
> Ein erneuter Refresh erfolgt nicht, weil die Variable einen konstanten
> Inhalt hat, der sich nicht mehr ändert.  Auch das wollen wir
> uns in einem späteren Beitrag im Detail ansehen.
>
>
> Of course the details are pretty complicated, but the 'final' keyword does much more than most people think of.
>
> LieGrue,
> strub
>
>
> ----- Original Message -----
>> From: Jakob Korherr <jakob.korherr@gmail.com>
>> To: MyFaces Development <dev@myfaces.apache.org>; Mark Struberg <struberg@yahoo.de>
>> Cc:
>> Sent: Monday, October 24, 2011 11:47 PM
>> Subject: Re: svn commit: r1188267 [1/2] - in /myfaces/core/trunk/api/src: main/java/javax/faces/application/ main/java/javax/faces/component/ main/java/javax/faces/component/behavior/ main/java/javax/faces/convert/ main/java/javax/faces/event/ main/java/javax
>>
>>>  Please take a look at the Java-VM and the Java-Mem specification.
>>
>> Actually I have never heard of anything like that and I could not find
>> any evidence supporting your information while looking at the Java-VM
>> spec, Mark. Can you please point me in the right direction?
>>
>> IMHO it is stupid to declare that e.g. a private final HashMap must
>> not change its inner state. This would not make any sence for the
>> developer.
>>
>> Regards,
>> Jakob
>>
>> 2011/10/24 Mark Struberg <struberg@yahoo.de>:
>>>  Please take a look at the Java-VM and the Java-Mem specification.
>>>
>>>  The Java VM has a lot of optimisation for high scalability.
>>>  One of those features is that memory which is not declared volatile will
>> get copied to a different mem location for each thread accessing it. This allows
>> to highly utilize the L1 and L2 caches of modern multi core CPUs. Which in turn
>> also means that if we take as an example
>>>
>>>  public class MyCls {
>>>
>>>    private static int i;
>>>
>>>    public int getCounter() { return i;}
>>>
>>>
>>>    public void count() { i++ };
>>>
>>>  }
>>>
>>>  might well return different values for getCounter() for different parallel
>> threads!
>>>
>>>
>>>  I know this is not really as well known as it should be, but marking a
>> class member 'final' does also mean that it's mem doesn't need
>> to get synced back (because it's assumed that this got initialized once and
>> then will never change).
>>>
>>>  LieGrue,
>>>  strub
>>>
>>>
>>>
>>>
>>>  ----- Original Message -----
>>>>  From: Leonardo Uribe <lu4242@gmail.com>
>>>>  To: MyFaces Development <dev@myfaces.apache.org>; Mark Struberg
>> <struberg@yahoo.de>
>>>>  Cc:
>>>>  Sent: Monday, October 24, 2011 10:48 PM
>>>>  Subject: Re: svn commit: r1188267 [1/2] - in
>> /myfaces/core/trunk/api/src: main/java/javax/faces/application/
>> main/java/javax/faces/component/ main/java/javax/faces/component/behavior/
>> main/java/javax/faces/convert/ main/java/javax/faces/event/ main/java/javax
>>>>
>>>>  Hi
>>>>
>>>>  I personally prefer use final modifier. In some cases, such vars has
>>>>  some "history" behind, so I do not agree to change them
>> blindly,
>>>>  without check each case. Now, it could exists a hashmap that its
>>>>  variable is final, but its key/value pairs are mutable.
>>>>
>>>>  Really do these type of cleanups makes harder maintain 2.0.x and 2.1.x
>>>>  branches. I usually compare files and apply patches in both branches.
>>>>  I prefer delay this to a future 2.2.x branch, but if it is applied on
>>>>  current trunk its ok anyway.
>>>>
>>>>  regards,
>>>>
>>>>  Leonardo Uribe
>>>>
>>>>  2011/10/24 Mark Struberg <struberg@yahoo.de>:
>>>>>   Hi!
>>>>>
>>>>>   I removed them because they got inhomogenously used. The same
>> method
>>>>  contained variables which are final and others which are not modified
>> neither
>>>>  and not marked final.
>>>>>
>>>>>   Also I found a few hashmaps which were marked final, although they
>> get
>>>>  modified later. Please be aware that final is not only a keyword which
>> stops you
>>>>  from changing the pointer (in C speak) but also means that those
>> underlying mem
>>>>  areas will NOT be synced to other threads!
>>>>>
>>>>>   Otoh there have been unmodifiableCollections in uppercase letters
>> which are
>>>>  not marked final ;)
>>>>>
>>>>>   Btw, if anyone also likes to join and help with the cleanup then
>> you are
>>>>  welcome ^^
>>>>>
>>>>>   I only used IDE support for fixing if without {}, but all other
>> automated
>>>>  reformatting turned out to create WAY too much noise (and sometimes
>> even break
>>>>  the format at all). I tried both IDEA and Eclipse, but none of them
>> worked
>>>>  satisfyingly.
>>>>>
>>>>>
>>>>>   I'll checkin an upgrade of myfaces-core pom.xml with
>>>>  mf-parent-11-SNAPSHOT and an additional -Pcheckstyle profile which will
>> enable
>>>>  the 'standard' checks.
>>>>>
>>>>>   LieGrue,
>>>>>   strub
>>>>>
>>>>>
>>>>>
>>>>>   ----- Original Message -----
>>>>>>   From: Jakob Korherr <jakob.korherr@gmail.com>
>>>>>>   To: MyFaces Development <dev@myfaces.apache.org>;
>>>>  gudnabrsam@gmail.com
>>>>>>   Cc:
>>>>>>   Sent: Monday, October 24, 2011 10:15 PM
>>>>>>   Subject: Re: svn commit: r1188267 [1/2] - in
>>>>  /myfaces/core/trunk/api/src: main/java/javax/faces/application/
>>>>  main/java/javax/faces/component/
>> main/java/javax/faces/component/behavior/
>>>>  main/java/javax/faces/convert/ main/java/javax/faces/event/
>> main/java/javax
>>>>>>
>>>>>>   I agree with Matt. I don't think that having local
>> variables marked
>>>>  as
>>>>>>   final is a bad thing.
>>>>>>
>>>>>>   Regards,
>>>>>>   Jakob
>>>>>>
>>>>>>   2011/10/24 Matt Benson <gudnabrsam@gmail.com>:
>>>>>>>    Not a huge deal; I wouldn't necessarily revert the
>> commit, but
>>>>  IMO
>>>>>>>    there are good reasons to mark local variables as final:
>>  code
>>>>>>>    self-documents the intent that a variable's value
>> won't
>>>>  change;
>>>>>>   then
>>>>>>>    there is the somewhat controversial notion that marking a
>> final
>>>>>>>    variable as such may contribute to better JIT
>> performance.  It
>>>>>>>    certainly couldn't hurt, could it?
>>>>>>>
>>>>>>>    Matt
>>>>>>>
>>>>>>>    On Mon, Oct 24, 2011 at 1:09 PM,
>>  <struberg@apache.org>
>>>>  wrote:
>>>>>>>>    Author: struberg
>>>>>>>>    Date: Mon Oct 24 18:09:08 2011
>>>>>>>>    New Revision: 1188267
>>>>>>>>
>>>>>>>>    URL:
>> http://svn.apache.org/viewvc?rev=1188267&view=rev
>>>>>>>>    Log:
>>>>>>>>    MYFACES-3368 fix linebreakes and unnecessary final
>> for local
>>>>  fields
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
>>>>>>>>
>>>>>>
>>   myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToListener.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToMethodExpression.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodExpressionToMethodBinding.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_SelectItemsIterator.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_ValueBindingToValueExpression.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/_ValueExpressionToValueBinding.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/behavior/_AjaxBehaviorDeltaStateHelper.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/convert/NumberConverter.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/convert/_MessageUtils.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/event/ListenerFor.java
>>>>>>>>
>>>>>>
>>   myfaces/core/trunk/api/src/main/java/javax/faces/event/PhaseEvent.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/validator/BeanValidator.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/validator/ValidatorException.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/AttributeHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/ComponentHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/CompositeFaceletHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/DelegatingMetaTagHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/FacetHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/MetaTagHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/Metadata.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagAttribute.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagAttributeException.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagConfig.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagException.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TagHandlerDelegate.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/TextHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/view/facelets/ValidatorHandler.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/webapp/UIComponentTagBase.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMessageTest.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/test/java/javax/faces/component/AbstractUIComponentPropertyTest.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/test/java/javax/faces/component/UIComponentBaseGetClientIdTest.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/test/java/javax/faces/component/UIComponentInvokeOnComponentTest.java
>>>>>>>>
>>>>>>
>>>>
>>  myfaces/core/trunk/api/src/test/java/javax/faces/component/UIViewParameterTest.java
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/application/NavigationCase.java
>>>>>>   Mon Oct 24 18:09:08 2011
>>>>>>>>    @@ -249,7 +249,7 @@ public class NavigationCase
>>>>>>>>
>>>>  builder.append("\">\n");
>>>>>>>>                    for (Map.Entry<String,
>>>>  List<String>> entry
>>>>>>   : _parameters.entrySet())
>>>>>>>>                    {
>>>>>>>>    -                    final String name =
>> entry.getKey();
>>>>>>>>    +                    String name = entry.getKey();
>>>>>>>>                        for (String value :
>> entry.getValue())
>>>>>>>>                        {
>>>>>>>>                            builder.append("
>>>>>>    <view-param>\n");
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponent.java Mon
>>>>>>   Oct 24 18:09:08 2011
>>>>>>>>    @@ -62,35 +62,38 @@ import
>> org.apache.myfaces.buildtools.mav
>>>>>>>>     import
>>>>>>
>>>>
>> org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
>>>>>>>>
>>>>>>>>     /**
>>>>>>>>    - *
>>>>>>>>    + *
>>>>>>>>     * see Javadoc of <a
>>>>>>
>>>>
>> href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">J
>>>>>>>>     * SF Specification</a>
>>>>>>>>    - *
>>>>>>>>    + *
>>>>>>>>     * @author Manfred Geiler (latest modification by
>> $Author$)
>>>>>>>>     * @version $Revision$ $Date$
>>>>>>>>     */
>>>>>>>>    -@JSFComponent(type =
>> "javax.faces.Component",
>>>>  family =
>>>>>>   "javax.faces.Component", desc = "abstract base
>>>>  component",
>>>>>>   configExcluded = true)
>>>>>>>>    -public abstract class UIComponent implements
>>>>  PartialStateHolder,
>>>>>>   TransientStateHolder , SystemEventListenerHolder,
>>>>  ComponentSystemEventListener {
>>>>>>>>    +@JSFComponent(type =
>> "javax.faces.Component",
>>>>  family =
>>>>>>   "javax.faces.Component",
>>>>>>>>    +              desc = "abstract base
>> component",
>>>>>>   configExcluded = true)
>>>>>>>>    +public abstract class UIComponent
>>>>>>>>    +        implements PartialStateHolder,
>> TransientStateHolder,
>>>>>>   SystemEventListenerHolder, ComponentSystemEventListener
>>>>>>>>    +{
>>>>>>>>        // TODO: Reorder methods, this class is a mess
>>>>>>>>        /**
>>>>>>>>         * Constant used in component attribute map to
>> retrieve
>>>>  the
>>>>>>   BeanInfo of a composite
>>>>>>>>         * component.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @see
>>>>  ViewDeclarationLanguage#getComponentMetadata(FacesContext,
>>>>>>   Resource)
>>>>>>>>         * @see
>>>>>>   ViewDeclarationLanguage#retargetAttachedObjects(FacesContext,
>>>>  UIComponent, List)
>>>>>>>>         * @see
>>>>>>
>>  ViewDeclarationLanguage#retargetMethodExpressions(FacesContext,
>>>>  UIComponent)
>>>>>>>>         * @see Application#createComponent(FacesContext,
>>>>  Resource)
>>>>>>>>         */
>>>>>>>>        public static final String BEANINFO_KEY =
>>>>>>   "javax.faces.component.BEANINFO_KEY";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Constant used in BeanInfo descriptor as a key
>> for
>>>>  retrieve an
>>>>>>   alternate component type
>>>>>>>>         * for create the composite base component.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @see Application#createComponent(FacesContext,
>>>>  Resource)
>>>>>>>>         */
>>>>>>>>        public static final String
>> COMPOSITE_COMPONENT_TYPE_KEY =
>>>>>>   "javax.faces.component.COMPOSITE_COMPONENT_TYPE";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Constant used to define the facet inside this
>> component
>>>>  that
>>>>>>   store the component hierarchy
>>>>>>>>         * generated by a composite component
>> implementation, and
>>>>  then
>>>>>>   rendered. In other words,
>>>>>>>>    @@ -98,23 +101,23 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * this face are rendered.
>>>>>>>>         */
>>>>>>>>        public static final String COMPOSITE_FACET_NAME =
>>>>>>   "javax.faces.component.COMPOSITE_FACET_NAME";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Constant used to store the current component
>> that is
>>>>  being
>>>>>>   processed.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @see #pushComponentToEL(FacesContext,
>> UIComponent)
>>>>>>>>         * @see #popComponentFromEL(FacesContext)
>>>>>>>>         */
>>>>>>>>        public static final String CURRENT_COMPONENT =
>>>>>>   "javax.faces.component.CURRENT_COMPONENT";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Constant used to store the current composite
>> component
>>>>  that is
>>>>>>   being processed.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @see #pushComponentToEL(FacesContext,
>> UIComponent)
>>>>>>>>         * @see #popComponentFromEL(FacesContext)
>>>>>>>>    -     */
>>>>>>>>    +     */
>>>>>>>>        public static final String
>> CURRENT_COMPOSITE_COMPONENT =
>>>>>>   "javax.faces.component.CURRENT_COMPOSITE_COMPONENT";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * This constant has two usages. The first one is
>> in
>>>>  component
>>>>>>   attribute map to identify the
>>>>>>>>         * facet name under this component is child of
>> its parent.
>>>>  The
>>>>>>   second one is on BeanInfo descriptor
>>>>>>>>    @@ -123,33 +126,35 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * by COMPOSITE_FACET_NAME constant).
>>>>>>>>         */
>>>>>>>>        public static final String FACETS_KEY =
>>>>>>   "javax.faces.component.FACETS_KEY";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Constant used in component attribute map to
>> store the
>>>>  {@link
>>>>>>   javax.faces.view.Location} object
>>>>>>>>         * where the definition of this component is.
>>>>>>>>         */
>>>>>>>>        public static final String VIEW_LOCATION_KEY =
>>>>>>   "javax.faces.component.VIEW_LOCATION_KEY";
>>>>>>>>    -
>>>>>>>>    -    public static final String
>>>>  ATTRS_WITH_DECLARED_DEFAULT_VALUES =
>>>>>>
>>  "javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VALUES";
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>    +    public static final String
>>>>  ATTRS_WITH_DECLARED_DEFAULT_VALUES
>>>>>>>>    +            =
>>>>>>
>>  "javax.faces.component.ATTR_NAMES_WITH_DEFAULT_VALUES";
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Indicate if the facesContext attribute values
>> under the
>>>>  keys
>>>>>>   javax.faces.component.CURRENT_COMPONENT and
>>>>>>>>         *
>> javax.faces.component.CURRENT_COMPOSITE_COMPONENT
>>>>  should be
>>>>>>   valid or not. By default, those keys are
>>>>>>>>         * deprecated since 2.1
>>>>>>>>         */
>>>>>>>>    -    @JSFWebConfigParam(since="2.1.0",
>>>>>>   expectedValues="true, false",
>> defaultValue="false")
>>>>>>>>    -    public static final String
>>>>>>   HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME =
>>>>>>   "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES";
>>>>>>>>    -
>>>>>>>>    +    @JSFWebConfigParam(since = "2.1.0",
>>>>  expectedValues =
>>>>>>   "true, false", defaultValue = "false")
>>>>>>>>    +    public static final String
>>>>>>   HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME
>>>>>>>>    +            =
>>>>>>   "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES";
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * The key under which the component stack is
>> stored in
>>>>  the
>>>>>>   FacesContext.
>>>>>>>>         * ATTENTION: this constant is duplicate in
>>>>>>   CompositeComponentExpressionUtils.
>>>>>>>>         */
>>>>>>>>        private static final String _COMPONENT_STACK =
>>>>>>   "componentStack:" + UIComponent.class.getName();
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        private static final String
>>>>  _CURRENT_COMPOSITE_COMPONENT_KEY =
>>>>>>   "compositeComponent:" + UIComponent.class.getName();
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        Map<Class<? extends SystemEvent>,
>>>>>>   List<SystemEventListener>>
>> _systemEventListenerClassMap;
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * @deprecated
>>>>>>>>         */
>>>>>>>>    @@ -164,26 +169,27 @@ public abstract class
>> UIComponent implem
>>>>>>>>        private transient Map<String, String>
>>>>  _resourceBundleMap =
>>>>>>   null;
>>>>>>>>        private boolean _inView = false;
>>>>>>>>        private _DeltaStateHelper _stateHelper = null;
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * In JSF 2.0 bindings map was deprecated, and
>> replaced
>>>>  with a map
>>>>>>>>         * inside stateHelper. We need this one here
>> because
>>>>  stateHelper
>>>>>>   needs
>>>>>>>>         * to be implemented from here and internally it
>> depends
>>>>  from this
>>>>>>   property.
>>>>>>>>         */
>>>>>>>>        private boolean _initialStateMarked = false;
>>>>>>>>    -
>>>>>>>>    -    /** Value of the {@link
>>>>>>   UIComponent#HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME}
>> parameter */
>>>>>>>>    +
>>>>>>>>    +    /** Value of the {@link
>>>>>>   UIComponent#HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME}
>> parameter */
>>>>>>>>        private Boolean _honorCurrentComponentAttributes;
>>>>>>>>
>>>>>>>>    -    public UIComponent() {
>>>>>>>>    +    public UIComponent()
>>>>>>>>    +    {
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        public abstract Map<String, Object>
>> getAttributes();
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * {@inheritDoc}
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>        public boolean initialStateMarked()
>>>>>>>>    @@ -193,7 +199,7 @@ public abstract class UIComponent
>> implem
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>         * Invokes the
>>>>  <code>invokeContextCallback</code>
>>>>>>   method with the component, specified by
>>>>  <code>clientId</code>.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @param context
>>>>>>>>         *
>>  <code>FacesContext</code> for
>>>>  the current
>>>>>>   request
>>>>>>>>         * @param clientId
>>>>>>>>    @@ -204,9 +210,11 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * @throws javax.faces.FacesException
>>>>>>>>         */
>>>>>>>>        public boolean invokeOnComponent(FacesContext
>> context,
>>>>  String
>>>>>>   clientId, ContextCallback callback)
>>>>>>>>    -            throws FacesException {
>>>>>>>>    +            throws FacesException
>>>>>>>>    +    {
>>>>>>>>            // java.lang.NullPointerException - if any of
>> the
>>>>  arguments are
>>>>>>   null
>>>>>>>>    -        if (context == null || clientId == null ||
>> callback
>>>>  == null) {
>>>>>>>>    +        if (context == null || clientId == null ||
>> callback
>>>>  == null)
>>>>>>>>    +        {
>>>>>>>>                throw new NullPointerException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    @@ -215,16 +223,21 @@ public abstract class
>> UIComponent implem
>>>>>>>>            {
>>>>>>>>                // searching for this component?
>>>>>>>>                boolean found =
>>>>  clientId.equals(this.getClientId(context));
>>>>>>>>    -            if (found) {
>>>>>>>>    -                try {
>>>>>>>>    +            if (found)
>>>>>>>>    +            {
>>>>>>>>    +                try
>>>>>>>>    +                {
>>>>>>>>
>> callback.invokeContextCallback(context,
>>>>  this);
>>>>>>>>    -                } catch (Exception e) {
>>>>>>>>    +                }
>>>>>>>>    +                catch (Exception e)
>>>>>>>>    +                {
>>>>>>>>                        throw new FacesException(e);
>>>>>>>>                    }
>>>>>>>>                    return found;
>>>>>>>>                }
>>>>>>>>                // Searching for this component's
>>>>  children/facets
>>>>>>>>    -            for (Iterator<UIComponent> it =
>>>>>>   this.getFacetsAndChildren(); !found && it.hasNext();)
>> {
>>>>>>>>    +            for (Iterator<UIComponent> it =
>>>>>>   this.getFacetsAndChildren(); !found && it.hasNext(); )
>>>>>>>>    +            {
>>>>>>>>                    found =
>> it.next().invokeOnComponent(context,
>>>>  clientId,
>>>>>>   callback);
>>>>>>>>                }
>>>>>>>>                return found;
>>>>>>>>    @@ -237,15 +250,16 @@ public abstract class
>> UIComponent implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @param component
>>>>>>>>         * @return true if the component is a composite
>> component
>>>>  otherwise
>>>>>>   false is returned
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         *
>>>>>>>>         * @throws NullPointerException if the component
>> is null
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public static boolean
>> isCompositeComponent(UIComponent
>>>>  component)
>>>>>>   {
>>>>>>>>    +    public static boolean
>> isCompositeComponent(UIComponent
>>>>  component)
>>>>>>>>    +    {
>>>>>>>>
>>>>>>>>            //since _isCompositeComponent does it the
>> same way we
>>>>  do it
>>>>>>   here also although I
>>>>>>>>            //would prefer following method
>>>>>>>>    @@ -261,15 +275,16 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * instance (which represents the view). If this
>> component
>>>>>>>>         * is a UIViewRoot instance, the components
>>>>  "always"
>>>>>>>>         * is on the view.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * By default it is false but for UIViewRoot
>> instances is
>>>>>>>>         * true.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @return
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public boolean isInView() {
>>>>>>>>    +    public boolean isInView()
>>>>>>>>    +    {
>>>>>>>>            return _inView;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    @@ -292,10 +307,11 @@ public abstract class
>> UIComponent implem
>>>>>>>>         *
>>>>>>>>         * @param context
>>>>>>>>         * @return
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    protected boolean isVisitable(VisitContext
>> context) {
>>>>>>>>    +    protected boolean isVisitable(VisitContext
>> context)
>>>>>>>>    +    {
>>>>>>>>
>>>>>>>>            Collection<VisitHint> hints =
>>>>  context.getHints();
>>>>>>>>
>>>>>>>>    @@ -322,18 +338,23 @@ public abstract class
>> UIComponent implem
>>>>>>>>         */
>>>>>>>>        public abstract void setValueBinding(String name,
>>>>  ValueBinding
>>>>>>   binding);
>>>>>>>>
>>>>>>>>    -    public void setValueExpression(String name,
>>>>  ValueExpression
>>>>>>   expression) {
>>>>>>>>    -        if (name == null) {
>>>>>>>>    +    public void setValueExpression(String name,
>>>>  ValueExpression
>>>>>>   expression)
>>>>>>>>    +    {
>>>>>>>>    +        if (name == null)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> NullPointerException("name");
>>>>>>>>            }
>>>>>>>>    -        if (name.equals("id")) {
>>>>>>>>    +        if (name.equals("id"))
>>>>>>>>    +        {
>>>>>>>>                throw new
>> IllegalArgumentException("Can't
>>>>  set a
>>>>>>   ValueExpression for the 'id' property.");
>>>>>>>>            }
>>>>>>>>    -        if (name.equals("parent")) {
>>>>>>>>    +        if (name.equals("parent"))
>>>>>>>>    +        {
>>>>>>>>                throw new
>> IllegalArgumentException("Can't
>>>>  set a
>>>>>>   ValueExpression for the 'parent' property.");
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        if (expression == null) {
>>>>>>>>    +        if (expression == null)
>>>>>>>>    +        {
>>>>>>>>                //if (bindings != null) {
>>>>>>>>                //    bindings.remove(name);
>>>>>>>>                //    if (bindings.isEmpty()) {
>>>>>>>>    @@ -341,13 +362,19 @@ public abstract class
>> UIComponent implem
>>>>>>>>                //    }
>>>>>>>>                //}
>>>>>>>>
>> getStateHelper().remove(PropertyKeys.bindings,
>>>>  name);
>>>>>>>>    -        } else {
>>>>>>>>    -            if (expression.isLiteralText()) {
>>>>>>>>    -                try {
>>>>>>>>    +        }
>>>>>>>>    +        else
>>>>>>>>    +        {
>>>>>>>>    +            if (expression.isLiteralText())
>>>>>>>>    +            {
>>>>>>>>    +                try
>>>>>>>>    +                {
>>>>>>>>                        Object value =
>>>>>>   expression.getValue(getFacesContext().getELContext());
>>>>>>>>                        getAttributes().put(name, value);
>>>>>>>>                        return;
>>>>>>>>    -                } catch (ELException e) {
>>>>>>>>    +                }
>>>>>>>>    +                catch (ELException e)
>>>>>>>>    +                {
>>>>>>>>                        throw new FacesException(e);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    @@ -361,7 +388,8 @@ public abstract class UIComponent
>> implem
>>>>>>>>            }
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    public String getClientId() {
>>>>>>>>    +    public String getClientId()
>>>>>>>>    +    {
>>>>>>>>            return getClientId(getFacesContext());
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    @@ -375,30 +403,36 @@ public abstract class
>> UIComponent implem
>>>>>>>>         *
>>>>>>>>         * @param component the component to start from
>>>>>>>>         * @return the parent composite component if
>> found
>>>>  otherwise null
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public static UIComponent
>>>>  getCompositeComponentParent(UIComponent
>>>>>>   component) {
>>>>>>>>    +    public static UIComponent
>>>>  getCompositeComponentParent(UIComponent
>>>>>>   component)
>>>>>>>>    +    {
>>>>>>>>
>>>>>>>>    -        if(component == null) {
>>>>>>>>    +        if (component == null)
>>>>>>>>    +        {
>>>>>>>>                return null;
>>>>>>>>            }
>>>>>>>>            UIComponent parent = component;
>>>>>>>>
>>>>>>>>    -        do {
>>>>>>>>    +        do
>>>>>>>>    +        {
>>>>>>>>                parent = parent.getParent();
>>>>>>>>    -            if(parent != null &&
>>>>>>   UIComponent.isCompositeComponent(parent)) {
>>>>>>>>    +            if (parent != null &&
>>>>>>   UIComponent.isCompositeComponent(parent))
>>>>>>>>    +            {
>>>>>>>>                    return parent;
>>>>>>>>                }
>>>>>>>>    -        } while(parent != null);
>>>>>>>>    +        } while (parent != null);
>>>>>>>>            return null;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>         * @since 1.2
>>>>>>>>         */
>>>>>>>>    -    public String getContainerClientId(FacesContext
>> ctx) {
>>>>>>>>    -        if (ctx == null) {
>>>>>>>>    +    public String getContainerClientId(FacesContext
>> ctx)
>>>>>>>>    +    {
>>>>>>>>    +        if (ctx == null)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> NullPointerException("FacesContext
>>>>>>   ctx");
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    @@ -406,24 +440,26 @@ public abstract class
>> UIComponent implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @param context
>>>>>>>>         * @return
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public static UIComponent
>>>>  getCurrentComponent(FacesContext
>>>>>>   context) {
>>>>>>>>    -
>>>>>>>>    +    public static UIComponent
>>>>  getCurrentComponent(FacesContext
>>>>>>   context)
>>>>>>>>    +    {
>>>>>>>>    +
>>>>>>>>            Boolean honorCurrentComponentAttributes =
>>>>>>   _getHonorCurrentComponentAttributes(context);
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            if (honorCurrentComponentAttributes ==
>> Boolean.TRUE)
>>>>>>>>            {
>>>>>>>>                return (UIComponent)
>>>>>>   context.getAttributes().get(UIComponent.CURRENT_COMPONENT);
>>>>>>>>            }
>>>>>>>>            else
>>>>>>>>            {
>>>>>>>>    -            LinkedList<UIComponent>
>> componentStack =
>>>>>>   (LinkedList<UIComponent>)
>>>>>>   context.getAttributes().get(UIComponent._COMPONENT_STACK);
>>>>>>>>    -            if(componentStack == null)
>>>>>>>>    +            LinkedList<UIComponent>
>> componentStack
>>>>>>>>    +                    =
>> (LinkedList<UIComponent>)
>>>>>>   context.getAttributes().get(UIComponent._COMPONENT_STACK);
>>>>>>>>    +            if (componentStack == null)
>>>>>>>>                {
>>>>>>>>                    return null;
>>>>>>>>                }
>>>>>>>>    @@ -435,16 +471,17 @@ public abstract class
>> UIComponent implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @param context
>>>>>>>>         * @return
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public static UIComponent
>>>>>>   getCurrentCompositeComponent(FacesContext context) {
>>>>>>>>    -
>>>>>>>>    +    public static UIComponent
>>>>>>   getCurrentCompositeComponent(FacesContext context)
>>>>>>>>    +    {
>>>>>>>>    +
>>>>>>>>            Boolean honorCurrentComponentAttributes =
>>>>>>   _getHonorCurrentComponentAttributes(context);
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            if (honorCurrentComponentAttributes ==
>> Boolean.TRUE)
>>>>>>>>            {
>>>>>>>>                return (UIComponent)
>>>>>>
>>  context.getAttributes().get(UIComponent.CURRENT_COMPOSITE_COMPONENT);
>>>>>>>>    @@ -459,15 +496,22 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>        public abstract String getId();
>>>>>>>>
>>>>>>>>    -    public List<SystemEventListener>
>>>>>>   getListenersForEventClass(Class<? extends SystemEvent>
>>>>  eventClass) {
>>>>>>>>    +    public List<SystemEventListener>
>>>>>>   getListenersForEventClass(Class<? extends SystemEvent>
>>>>  eventClass)
>>>>>>>>    +    {
>>>>>>>>            List<SystemEventListener> listeners;
>>>>>>>>    -        if (_systemEventListenerClassMap == null) {
>>>>>>>>    +        if (_systemEventListenerClassMap == null)
>>>>>>>>    +        {
>>>>>>>>                listeners = Collections.emptyList();
>>>>>>>>    -        } else {
>>>>>>>>    +        }
>>>>>>>>    +        else
>>>>>>>>    +        {
>>>>>>>>                listeners =
>>>>  _systemEventListenerClassMap.get(eventClass);
>>>>>>>>    -            if (listeners == null) {
>>>>>>>>    +            if (listeners == null)
>>>>>>>>    +            {
>>>>>>>>                    listeners = Collections.emptyList();
>>>>>>>>    -            } else {
>>>>>>>>    +            }
>>>>>>>>    +            else
>>>>>>>>    +            {
>>>>>>>>                    listeners =
>>>>  Collections.unmodifiableList(listeners);
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>    @@ -476,17 +520,20 @@ public abstract class
>> UIComponent implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @return
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public UIComponent getNamingContainer() {
>>>>>>>>    +    public UIComponent getNamingContainer()
>>>>>>>>    +    {
>>>>>>>>            // Starting with "this", return the
>> closest
>>>>  component
>>>>>>   in the ancestry that is a NamingContainer
>>>>>>>>            // or null if none can be found.
>>>>>>>>            UIComponent component = this;
>>>>>>>>    -        do {
>>>>>>>>    -            if (component instanceof
>> NamingContainer) {
>>>>>>>>    +        do
>>>>>>>>    +        {
>>>>>>>>    +            if (component instanceof
>> NamingContainer)
>>>>>>>>    +            {
>>>>>>>>                    return component;
>>>>>>>>                }
>>>>>>>>
>>>>>>>>    @@ -512,10 +559,11 @@ public abstract class
>> UIComponent implem
>>>>>>>>         *     otherwise take no action</li>
>>>>>>>>         * <ul>
>>>>>>>>         * @param isInView
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public void setInView(boolean isInView) {
>>>>>>>>    +    public void setInView(boolean isInView)
>>>>>>>>    +    {
>>>>>>>>            _inView = isInView;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    @@ -539,48 +587,63 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>        public abstract boolean getRendersChildren();
>>>>>>>>
>>>>>>>>    -    public Map<String, String>
>> getResourceBundleMap() {
>>>>>>>>    -        if (_resourceBundleMap == null) {
>>>>>>>>    +    public Map<String, String>
>> getResourceBundleMap()
>>>>>>>>    +    {
>>>>>>>>    +        if (_resourceBundleMap == null)
>>>>>>>>    +        {
>>>>>>>>                FacesContext context = getFacesContext();
>>>>>>>>                Locale locale =
>> context.getViewRoot().getLocale();
>>>>>>>>                ClassLoader loader =
>>>>  _ClassUtils.getContextClassLoader();
>>>>>>>>
>>>>>>>>    -            try {
>>>>>>>>    +            try
>>>>>>>>    +            {
>>>>>>>>                    // looks for a ResourceBundle with a
>> base name
>>>>  equal to
>>>>>>   the fully qualified class
>>>>>>>>                    // name of the current UIComponent
>> this and
>>>>  Locale
>>>>>>   equal to the Locale of the current UIViewRoot.
>>>>>>>>                    _resourceBundleMap = new
>>>>>>   BundleMap(ResourceBundle.getBundle(getClass().getName(),
>> locale,
>>>>  loader));
>>>>>>>>    -            } catch (MissingResourceException e) {
>>>>>>>>    +            }
>>>>>>>>    +            catch (MissingResourceException e)
>>>>>>>>    +            {
>>>>>>>>                    // If no such bundle is found, and
>> the
>>>>  component is a
>>>>>>   composite component
>>>>>>>>    -                if (this._isCompositeComponent()) {
>>>>>>>>    +                if (this._isCompositeComponent())
>>>>>>>>    +                {
>>>>>>>>                        // No need to check
>> componentResource (the
>>>>  resource
>>>>>>   used to build the composite
>>>>>>>>                        // component instance) to null
>> since it is
>>>>  already
>>>>>>   done on this._isCompositeComponent()
>>>>>>>>                        Resource componentResource =
>> (Resource)
>>>>>>   getAttributes().get(Resource.COMPONENT_RESOURCE_KEY);
>>>>>>>>                        // Let resourceName be the
>> resourceName of
>>>>  the
>>>>>>   Resource for this composite component,
>>>>>>>>                        // replacing the file extension
>> with
>>>>>>   ".properties"
>>>>>>>>                        int extensionIndex =
>>>>>>   componentResource.getResourceName().lastIndexOf('.');
>>>>>>>>    -                    String resourceName =
>> (extensionIndex
>>>>  < 0 ?
>>>>>>   componentResource.getResourceName() :
>>>>>>   componentResource.getResourceName().substring(0,
>> extensionIndex)) +
>>>>>>   ".properties";
>>>>>>>>    +                    String resourceName =
>> (extensionIndex
>>>>  < 0
>>>>>>>>    +                            ?
>>>>  componentResource.getResourceName()
>>>>>>>>    +                            :
>>>>>>   componentResource.getResourceName().substring(0,
>> extensionIndex)) +
>>>>>>   ".properties";
>>>>>>>>
>>>>>>>>                        // Let libraryName be the
>> libraryName of
>>>>  the the
>>>>>>   Resource for this composite component.
>>>>>>>>                        // Call
>>>>>>
>>  ResourceHandler.createResource(java.lang.String,java.lang.String),
>>>>  passing the
>>>>>>   derived
>>>>>>>>                        // resourceName and
>>>>>>>>                        // libraryName.
>>>>>>>>    -                    Resource bundleResource =
>>>>>>
>>>>
>> context.getApplication().getResourceHandler().createResource(resourceName,
>>>>>>   componentResource.getLibraryName());
>>>>>>>>    +                    Resource bundleResource =
>>>>>>   context.getApplication().getResourceHandler()
>>>>>>>>    +
>>  .createResource(resourceName,
>>>>>>   componentResource.getLibraryName());
>>>>>>>>
>>>>>>>>    -                    if (bundleResource != null) {
>>>>>>>>    +                    if (bundleResource != null)
>>>>>>>>    +                    {
>>>>>>>>                            // If the resultant Resource
>> exists
>>>>  and can be
>>>>>>   found, the InputStream for the resource
>>>>>>>>                            // is used to create a
>> ResourceBundle.
>>>>  If
>>>>>>   either of the two previous steps for obtaining the
>>>>>>>>                            // ResourceBundle
>>>>>>>>                            // for this component is
>> successful,
>>>>  the
>>>>>>   ResourceBundle is wrapped in a Map<String, String> and
>>>>>>>>                            // returned.
>>>>>>>>    -                        try {
>>>>>>>>    -                            _resourceBundleMap = new
>>>>  BundleMap(new
>>>>>>   PropertyResourceBundle(bundleResource.getInputStream()));
>>>>>>>>    -                        } catch (IOException e1) {
>>>>>>>>    +                        try
>>>>>>>>    +                        {
>>>>>>>>    +                            _resourceBundleMap
>>>>>>>>    +                                    = new
>> BundleMap(new
>>>>>>   PropertyResourceBundle(bundleResource.getInputStream()));
>>>>>>>>    +                        }
>>>>>>>>    +                        catch (IOException e1)
>>>>>>>>    +                        {
>>>>>>>>                                // Nothing happens, then
>>>>  resourceBundleMap
>>>>>>   is set as empty map
>>>>>>>>                            }
>>>>>>>>                        }
>>>>>>>>                    }
>>>>>>>>                    // Otherwise Collections.EMPTY_MAP is
>>>>  returned.
>>>>>>>>    -                if (_resourceBundleMap == null) {
>>>>>>>>    +                if (_resourceBundleMap == null)
>>>>>>>>    +                {
>>>>>>>>                        _resourceBundleMap =
>>>>  Collections.emptyMap();
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    @@ -594,26 +657,33 @@ public abstract class
>> UIComponent implem
>>>>>>>>         */
>>>>>>>>        public abstract ValueBinding
>> getValueBinding(String name);
>>>>>>>>
>>>>>>>>    -    public ValueExpression getValueExpression(String
>> name) {
>>>>>>>>    -        if (name == null) {
>>>>>>>>    +    public ValueExpression getValueExpression(String
>> name)
>>>>>>>>    +    {
>>>>>>>>    +        if (name == null)
>>>>>>>>    +        {
>>>>>>>>                throw new NullPointerException("name
>> can not
>>>>  be
>>>>>>   null");
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    -        Map<String,Object> bindings =
>>>>  (Map<String,Object>)
>>>>>>   getStateHelper().
>>>>>>>>    -            get(PropertyKeys.bindings);
>>>>>>>>
>>>>>>>>    -        if (bindings == null) {
>>>>>>>>    -            if (!(this instanceof UIComponentBase))
>> {
>>>>>>>>    +        Map<String, Object> bindings =
>> (Map<String,
>>>>>>   Object>) getStateHelper().
>>>>>>>>    +                get(PropertyKeys.bindings);
>>>>>>>>    +
>>>>>>>>    +        if (bindings == null)
>>>>>>>>    +        {
>>>>>>>>    +            if (!(this instanceof UIComponentBase))
>>>>>>>>    +            {
>>>>>>>>                    // if the component does not inherit
>> from
>>>>>>   UIComponentBase and don't implements JSF 1.2 or later
>>>>>>>>                    ValueBinding vb =
>> getValueBinding(name);
>>>>>>>>    -                if (vb != null) {
>>>>>>>>    +                if (vb != null)
>>>>>>>>    +                {
>>>>>>>>                        //bindings = new
>> HashMap<String,
>>>>>>   ValueExpression>();
>>>>>>>>                        ValueExpression ve = new
>>>>>>   _ValueBindingToValueExpression(vb);
>>>>>>>>    -
>>>>   getStateHelper().put(PropertyKeys.bindings , name,
>>>>>>    ve);
>>>>>>>>    +
>>>>   getStateHelper().put(PropertyKeys.bindings, name,
>>>>>>   ve);
>>>>>>>>                        return ve;
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    -        } else {
>>>>>>>>    +        }
>>>>>>>>    +        else
>>>>>>>>    +        {
>>>>>>>>                //return bindings.get(name);
>>>>>>>>                return (ValueExpression)
>> bindings.get(name);
>>>>>>>>            }
>>>>>>>>    @@ -636,7 +706,7 @@ public abstract class UIComponent
>> implem
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>         * {@inheritDoc}
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>        public void clearInitialState()
>>>>>>>>    @@ -652,8 +722,10 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>        public abstract void encodeEnd(FacesContext
>> context)
>>>>  throws
>>>>>>   IOException;
>>>>>>>>
>>>>>>>>    -    public void encodeAll(FacesContext context)
>> throws
>>>>  IOException {
>>>>>>>>    -        if (context == null) {
>>>>>>>>    +    public void encodeAll(FacesContext context)
>> throws
>>>>  IOException
>>>>>>>>    +    {
>>>>>>>>    +        if (context == null)
>>>>>>>>    +        {
>>>>>>>>                throw new NullPointerException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    @@ -669,23 +741,27 @@ public abstract class
>> UIComponent implem
>>>>>>>>            {
>>>>>>>>                popComponentFromEL(context);
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            //if (isRendered()) {
>>>>>>>>    -            this.encodeBegin(context);
>>>>>>>>    +        this.encodeBegin(context);
>>>>>>>>
>>>>>>>>    -            // rendering children
>>>>>>>>    -            if (this.getRendersChildren()) {
>>>>>>>>    -                this.encodeChildren(context);
>>>>>>>>    -            } // let children render itself
>>>>>>>>    -            else {
>>>>>>>>    -                if (this.getChildCount() > 0) {
>>>>>>>>    -                    for (int i =0; i <
>>>>  this.getChildCount(); i++) {
>>>>>>>>    -                        UIComponent comp =
>>>>  this.getChildren().get(i);
>>>>>>>>    -                        comp.encodeAll(context);
>>>>>>>>    -                    }
>>>>>>>>    +        // rendering children
>>>>>>>>    +        if (this.getRendersChildren())
>>>>>>>>    +        {
>>>>>>>>    +            this.encodeChildren(context);
>>>>>>>>    +        } // let children render itself
>>>>>>>>    +        else
>>>>>>>>    +        {
>>>>>>>>    +            if (this.getChildCount() > 0)
>>>>>>>>    +            {
>>>>>>>>    +                for (int i = 0; i <
>> this.getChildCount();
>>>>  i++)
>>>>>>>>    +                {
>>>>>>>>    +                    UIComponent comp =
>>>>  this.getChildren().get(i);
>>>>>>>>    +                    comp.encodeAll(context);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    -            this.encodeEnd(context);
>>>>>>>>    +        }
>>>>>>>>    +        this.encodeEnd(context);
>>>>>>>>            //}
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    @@ -701,16 +777,19 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>        public abstract void processDecodes(FacesContext
>> context);
>>>>>>>>
>>>>>>>>    -    public void processEvent(ComponentSystemEvent
>> event)
>>>>  throws
>>>>>>   AbortProcessingException {
>>>>>>>>    +    public void processEvent(ComponentSystemEvent
>> event)
>>>>  throws
>>>>>>   AbortProcessingException
>>>>>>>>    +    {
>>>>>>>>            // The default implementation performs the
>> following
>>>>  action. If
>>>>>>   the argument event is an instance of
>>>>>>>>            // AfterRestoreStateEvent,
>>>>>>>>    -        if (event instanceof PostRestoreStateEvent)
>> {
>>>>>>>>    +        if (event instanceof PostRestoreStateEvent)
>>>>>>>>    +        {
>>>>>>>>
>>>>>>>>                // call
>> this.getValueExpression(java.lang.String)
>>>>  passing
>>>>>>   the literal string "binding"
>>>>>>>>                ValueExpression expression =
>>>>>>   getValueExpression("binding");
>>>>>>>>
>>>>>>>>                // If the result is non-null, set the
>> value of the
>>>>>>   ValueExpression to be this.
>>>>>>>>    -            if (expression != null) {
>>>>>>>>    +            if (expression != null)
>>>>>>>>    +            {
>>>>>>>>
>>>>  expression.setValue(getFacesContext().getELContext(),
>>>>>>   this);
>>>>>>>>                }
>>>>>>>>
>>>>>>>>    @@ -722,7 +801,8 @@ public abstract class UIComponent
>> implem
>>>>>>>>                // and jsp restore state triggers, a
>> central point
>>>>  is
>>>>>>   preferrble so we do it here
>>>>>>>>                //TODO ask the EG the spec clearly
>> contradicts
>>>>  blackbox RI
>>>>>>   behavior here
>>>>>>>>
>>>>>>>>    -
>>>>>>
>>  //getFacesContext().getApplication().publishEvent(getFacesContext(),
>>>>>>   PostRestoreStateEvent.class, UIComponent.class, this);
>>>>>>>>    +
>>>>>>
>>   //getFacesContext().getApplication().publishEvent(getFacesContext(),
>>>>>>>>    +            // PostRestoreStateEvent.class,
>>>>  UIComponent.class, this);
>>>>>>>>            }
>>>>>>>>
>>>>>>>>        }
>>>>>>>>    @@ -733,7 +813,9 @@ public abstract class UIComponent
>> implem
>>>>>>>>
>>>>>>>>        public abstract java.lang.Object
>>>>  processSaveState(FacesContext
>>>>>>   context);
>>>>>>>>
>>>>>>>>    -    public void subscribeToEvent(Class<? extends
>>>>  SystemEvent>
>>>>>>   eventClass, ComponentSystemEventListener componentListener) {
>>>>>>>>    +    public void subscribeToEvent(Class<? extends
>>>>  SystemEvent>
>>>>>>   eventClass,
>>>>>>>>    +
>> ComponentSystemEventListener
>>>>>>   componentListener)
>>>>>>>>    +    {
>>>>>>>>            // The default implementation creates an
>> inner
>>>>>>   SystemEventListener instance that wraps argument
>>>>>>>>            // componentListener as the listener
>> argument.
>>>>>>>>            if (eventClass == null)
>>>>>>>>    @@ -744,17 +826,19 @@ public abstract class
>> UIComponent implem
>>>>>>>>            {
>>>>>>>>                throw new
>>>>  NullPointerException("componentListener
>>>>>>   required");
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            SystemEventListener listener = new
>>>>  EventListenerWrapper(this,
>>>>>>   componentListener);
>>>>>>>>
>>>>>>>>            // Make sure the map exists
>>>>>>>>    -        if (_systemEventListenerClassMap == null) {
>>>>>>>>    +        if (_systemEventListenerClassMap == null)
>>>>>>>>    +        {
>>>>>>>>                _systemEventListenerClassMap = new
>>>>  HashMap<Class<?
>>>>>>   extends SystemEvent>,
>> List<SystemEventListener>>();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            List<SystemEventListener> listeners =
>>>>>>   _systemEventListenerClassMap.get(eventClass);
>>>>>>>>            // Make sure the list for class exists
>>>>>>>>    -        if (listeners == null) {
>>>>>>>>    +        if (listeners == null)
>>>>>>>>    +        {
>>>>>>>>                listeners = new
>>>>  _DeltaList<SystemEventListener>(new
>>>>>>   ArrayList<SystemEventListener>(2));
>>>>>>>>
>> _systemEventListenerClassMap.put(eventClass,
>>>>  listeners);
>>>>>>>>            }
>>>>>>>>    @@ -764,13 +848,15 @@ public abstract class
>> UIComponent implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        public void unsubscribeFromEvent(Class<?
>> extends
>>>>  SystemEvent>
>>>>>>   eventClass,
>>>>>>>>    -            ComponentSystemEventListener
>> componentListener) {
>>>>>>>>    +
>>>>  ComponentSystemEventListener
>>>>>>   componentListener)
>>>>>>>>    +    {
>>>>>>>>            /*
>>>>>>>>             * When doing the comparison to determine if
>> an
>>>>  existing
>>>>>>   listener is equal to the argument componentListener
>>>>>>>>             * (and thus must be removed), the equals()
>> method on
>>>>  the
>>>>>>   existing listener must be invoked, passing the
>>>>>>>>             * argument componentListener, rather than
>> the other
>>>>  way
>>>>>>   around.
>>>>>>>>             *
>>>>>>>>    -         * -=Simon Lessard=- What is that supposed
>> to mean?
>>>>  Are we
>>>>>>   supposed to keep an internal map of created listener wrappers?
>>>>>>>>    +         * -=Simon Lessard=- What is that supposed
>> to mean?
>>>>  Are we
>>>>>>   supposed to keep
>>>>>>>>    +         * an internal map of created listener
>> wrappers?
>>>>>>>>             * -= Leonardo Uribe=- Yes, it is supposed a
>> wrapper
>>>>  should be
>>>>>>   used to hold listener references, to prevent
>>>>>>>>             * serialize component instances on the
>> state.
>>>>>>>>             */
>>>>>>>>    @@ -786,12 +872,13 @@ public abstract class
>> UIComponent implem
>>>>>>>>            if (_systemEventListenerClassMap != null)
>>>>>>>>            {
>>>>>>>>                List<SystemEventListener> listeners
>> =
>>>>>>   _systemEventListenerClassMap.get(eventClass);
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>                if (listeners != null &&
>>>>  !listeners.isEmpty())
>>>>>>>>                {
>>>>>>>>    -                for
>> (Iterator<SystemEventListener> it =
>>>>>>   listeners.iterator(); it.hasNext();)
>>>>>>>>    +                for
>> (Iterator<SystemEventListener> it =
>>>>>>   listeners.iterator(); it.hasNext(); )
>>>>>>>>                    {
>>>>>>>>    -                    ComponentSystemEventListener
>> listener =
>>>>>>   ((EventListenerWrapper)
>> it.next()).getComponentSystemEventListener();
>>>>>>>>    +                    ComponentSystemEventListener
>> listener
>>>>>>>>    +                            =
>> ((EventListenerWrapper)
>>>>>>   it.next()).getComponentSystemEventListener();
>>>>>>>>                        if (listener != null &&
>>>>>>   listener.equals(componentListener))
>>>>>>>>                        {
>>>>>>>>                            it.remove();
>>>>>>>>    @@ -822,48 +909,59 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * @param callback the callback to be performed
>>>>>>>>         * @return false if the processing is not done
>> true if we
>>>>  can
>>>>>>   shortcut
>>>>>>>>         * the visiting because we are done with
>> everything
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @since 2.0
>>>>>>>>         */
>>>>>>>>    -    public boolean visitTree(VisitContext context,
>>>>  VisitCallback
>>>>>>   callback) {
>>>>>>>>    -        try {
>>>>>>>>    +    public boolean visitTree(VisitContext context,
>>>>  VisitCallback
>>>>>>   callback)
>>>>>>>>    +    {
>>>>>>>>    +        try
>>>>>>>>    +        {
>>>>>>>>
>> pushComponentToEL(context.getFacesContext(),
>>>>  this);
>>>>>>>>    -
>>>>>>>>    -            if (!isVisitable(context)) {
>>>>>>>>    -                return false;
>>>>>>>>    -            }
>>>>>>>>    -
>>>>>>>>    -            VisitResult res =
>>>>  context.invokeVisitCallback(this,
>>>>>>   callback);
>>>>>>>>    -            switch (res) {
>>>>>>>>    -            //we are done nothing has to be
>> processed anymore
>>>>>>>>    -            case COMPLETE:
>>>>>>>>    -                return true;
>>>>>>>>
>>>>>>>>    -            case REJECT:
>>>>>>>>    +            if (!isVisitable(context))
>>>>>>>>    +            {
>>>>>>>>                    return false;
>>>>>>>>    +            }
>>>>>>>>
>>>>>>>>    -            //accept
>>>>>>>>    -            default:
>>>>>>>>    -                if (getFacetCount() > 0) {
>>>>>>>>    -                    for (UIComponent facet :
>>>>  getFacets().values()) {
>>>>>>>>    -                        if (facet.visitTree(context,
>>>>  callback)) {
>>>>>>>>    -                            return true;
>>>>>>>>    +            VisitResult res =
>>>>  context.invokeVisitCallback(this,
>>>>>>   callback);
>>>>>>>>    +            switch (res)
>>>>>>>>    +            {
>>>>>>>>    +                //we are done nothing has to be
>> processed
>>>>  anymore
>>>>>>>>    +                case COMPLETE:
>>>>>>>>    +                    return true;
>>>>>>>>    +
>>>>>>>>    +                case REJECT:
>>>>>>>>    +                    return false;
>>>>>>>>    +
>>>>>>>>    +                //accept
>>>>>>>>    +                default:
>>>>>>>>    +                    if (getFacetCount() > 0)
>>>>>>>>    +                    {
>>>>>>>>    +                        for (UIComponent facet :
>>>>  getFacets().values())
>>>>>>>>    +                        {
>>>>>>>>    +                            if
>> (facet.visitTree(context,
>>>>  callback))
>>>>>>>>    +                            {
>>>>>>>>    +                                return true;
>>>>>>>>    +                            }
>>>>>>>>                            }
>>>>>>>>                        }
>>>>>>>>    -                }
>>>>>>>>    -                int childCount = getChildCount();
>>>>>>>>    -                if (childCount > 0) {
>>>>>>>>    -                    for (int i =0; i <
>> childCount; i++) {
>>>>>>>>    -                        UIComponent child =
>>>>  getChildren().get(i);
>>>>>>>>    -                        if (child.visitTree(context,
>>>>  callback)) {
>>>>>>>>    -                            return true;
>>>>>>>>    +                    int childCount =
>> getChildCount();
>>>>>>>>    +                    if (childCount > 0)
>>>>>>>>    +                    {
>>>>>>>>    +                        for (int i = 0; i <
>> childCount;
>>>>  i++)
>>>>>>>>    +                        {
>>>>>>>>    +                            UIComponent child =
>>>>  getChildren().get(i);
>>>>>>>>    +                            if
>> (child.visitTree(context,
>>>>  callback))
>>>>>>>>    +                            {
>>>>>>>>    +                                return true;
>>>>>>>>    +                            }
>>>>>>>>                            }
>>>>>>>>                        }
>>>>>>>>    -                }
>>>>>>>>    -                return false;
>>>>>>>>    +                    return false;
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>    -        finally {
>>>>>>>>    +        finally
>>>>>>>>    +        {
>>>>>>>>                //all components must call
>> popComponentFromEl
>>>>  after
>>>>>>   visiting is finished
>>>>>>>>
>> popComponentFromEL(context.getFacesContext());
>>>>>>>>            }
>>>>>>>>    @@ -881,14 +979,14 @@ public abstract class
>> UIComponent implem
>>>>>>>>         * (Note that rendererType is suspicious, in
>> theory this
>>>>  field is
>>>>>>>>         * initialized on constructor, but on 1.1 and 1.2
>> is saved
>>>>  and
>>>>>>   restored,
>>>>>>>>         * so to keep backward behavior we put it on
>> StateHelper )
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * Also, facesListeners can't be wrapped on
>>>>  StateHelper because
>>>>>>   it
>>>>>>>>         * needs to handle PartialStateHolder instances
>> when it is
>>>>  saved
>>>>>>   and
>>>>>>>>         * restored and this interface does not implement
>>>>>>   PartialStateHolder,
>>>>>>>>         * so we can't propagate calls to
>> markInitialState and
>>>>>>   clearInitialState,
>>>>>>>>         * in other words, the List wrapped by
>> StateHelper does
>>>>  not handle
>>>>>>>>         * PartialStateHolder items.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * "bindings" map does not need to deal
>> with
>>>>>>   PartialStateHolder instances,
>>>>>>>>         *  so we can use StateHelper feature (handle
>> delta for
>>>>  this map or
>>>>>>   in
>>>>>>>>         *  other words track add/removal from bindings
>> map as
>>>>  delta).
>>>>>>>>    @@ -902,7 +1000,8 @@ public abstract class
>> UIComponent implem
>>>>>>>>            facesListeners
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    protected StateHelper getStateHelper() {
>>>>>>>>    +    protected StateHelper getStateHelper()
>>>>>>>>    +    {
>>>>>>>>            return getStateHelper(true);
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    @@ -912,26 +1011,32 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>         * @param create if true a state helper is
>> created if not
>>>>  already
>>>>>>   existing
>>>>>>>>         * @return an implementation of the StateHelper
>> interface
>>>>  or null
>>>>>>   if none exists and create is set to false
>>>>>>>>         */
>>>>>>>>    -    protected StateHelper getStateHelper(boolean
>> create) {
>>>>>>>>    -        if(_stateHelper != null) {
>>>>>>>>    +    protected StateHelper getStateHelper(boolean
>> create)
>>>>>>>>    +    {
>>>>>>>>    +        if (_stateHelper != null)
>>>>>>>>    +        {
>>>>>>>>                return _stateHelper;
>>>>>>>>            }
>>>>>>>>    -        if(create) {
>>>>>>>>    +        if (create)
>>>>>>>>    +        {
>>>>>>>>                _stateHelper = new
>> _DeltaStateHelper(this);
>>>>>>>>            }
>>>>>>>>            return _stateHelper;
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        public final TransientStateHelper
>>>>  getTransientStateHelper()
>>>>>>>>        {
>>>>>>>>            return getTransientStateHelper(true);
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    -    public TransientStateHelper
>>>>  getTransientStateHelper(boolean
>>>>>>   create) {
>>>>>>>>    -        if(_stateHelper != null) {
>>>>>>>>    +
>>>>>>>>    +    public TransientStateHelper
>>>>  getTransientStateHelper(boolean
>>>>>>   create)
>>>>>>>>    +    {
>>>>>>>>    +        if (_stateHelper != null)
>>>>>>>>    +        {
>>>>>>>>                return _stateHelper;
>>>>>>>>            }
>>>>>>>>    -        if(create) {
>>>>>>>>    +        if (create)
>>>>>>>>    +        {
>>>>>>>>                _stateHelper = new
>> _DeltaStateHelper(this);
>>>>>>>>            }
>>>>>>>>            return _stateHelper;
>>>>>>>>    @@ -948,22 +1053,24 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        @SuppressWarnings("unchecked")
>>>>>>>>    -    public final void
>> popComponentFromEL(FacesContext
>>>>  context) {
>>>>>>>>    -        Map<Object, Object> contextAttributes
>> =
>>>>>>   context.getAttributes();
>>>>>>>>    -
>>>>>>>>    +    public final void
>> popComponentFromEL(FacesContext
>>>>  context)
>>>>>>>>    +    {
>>>>>>>>    +        Map<Object, Object> contextAttributes
>> =
>>>>>>   context.getAttributes();
>>>>>>>>    +
>>>>>>>>            if (_honorCurrentComponentAttributes == null)
>>>>>>>>            {
>>>>>>>>                _honorCurrentComponentAttributes =
>>>>>>   _getHonorCurrentComponentAttributes(context);
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            if (_honorCurrentComponentAttributes ==
>> Boolean.TRUE)
>>>>>>>>            {
>>>>>>>>                // Pop the current UIComponent from the
>>>>  FacesContext
>>>>>>   attributes map so that the previous
>>>>>>>>                // UIComponent, if any, becomes the
>> current
>>>>  component.
>>>>>>>>    -            LinkedList<UIComponent>
>> componentStack =
>>>>>>   (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    -
>>>>>>>>    -            UIComponent oldCurrent =
>>>>>>
>>  (UIComponent)contextAttributes.get(UIComponent.CURRENT_COMPONENT);
>>>>>>>>    -
>>>>>>>>    +            LinkedList<UIComponent>
>> componentStack
>>>>>>>>    +                    =
>> (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    +
>>>>>>>>    +            UIComponent oldCurrent = (UIComponent)
>>>>>>   contextAttributes.get(UIComponent.CURRENT_COMPONENT);
>>>>>>>>    +
>>>>>>>>                UIComponent newCurrent = null;
>>>>>>>>                if (componentStack != null &&
>>>>>>   !componentStack.isEmpty())
>>>>>>>>                {
>>>>>>>>    @@ -973,7 +1080,7 @@ public abstract class
>> UIComponent implem
>>>>>>>>                        int componentIndex =
>>>>  componentStack.indexOf(this);
>>>>>>>>                        if (componentIndex >= 0)
>>>>>>>>                        {
>>>>>>>>    -                        for (int i = 0; i <
>>>>  (componentIndex+1);
>>>>>>   i++)
>>>>>>>>    +                        for (int i = 0; i <
>>>>  (componentIndex + 1);
>>>>>>   i++)
>>>>>>>>                            {
>>>>>>>>                                newCurrent =
>>>>  componentStack.removeFirst();
>>>>>>>>                            }
>>>>>>>>    @@ -994,8 +1101,8 @@ public abstract class
>> UIComponent implem
>>>>>>>>                    //Reset the current composite
>> component
>>>>>>>>
>>>>>>   contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT,
>> null);
>>>>>>>>                }
>>>>>>>>    -            oldCurrent =
>>>>>>
>>  (UIComponent)contextAttributes.put(UIComponent.CURRENT_COMPONENT,
>>>>  newCurrent);
>>>>>>>>    -
>>>>>>>>    +            oldCurrent = (UIComponent)
>>>>>>   contextAttributes.put(UIComponent.CURRENT_COMPONENT,
>> newCurrent);
>>>>>>>>    +
>>>>>>>>                if (oldCurrent != null &&
>>>>>>   oldCurrent._isCompositeComponent())
>>>>>>>>                {
>>>>>>>>                    // Recalculate the current composite
>> component
>>>>>>>>    @@ -1008,7 +1115,7 @@ public abstract class
>> UIComponent implem
>>>>>>>>                        else
>>>>>>>>                        {
>>>>>>>>                            UIComponent
>> previousCompositeComponent
>>>>  = null;
>>>>>>>>    -                        for
>> (Iterator<UIComponent> it =
>>>>>>   componentStack.iterator(); it.hasNext();)
>>>>>>>>    +                        for
>> (Iterator<UIComponent> it =
>>>>>>   componentStack.iterator(); it.hasNext(); )
>>>>>>>>                            {
>>>>>>>>                                UIComponent component =
>> it.next();
>>>>>>>>                                if
>>>>  (component._isCompositeComponent())
>>>>>>>>    @@ -1026,15 +1133,16 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>            {
>>>>>>>>                // Pop the current UIComponent from the
>>>>  FacesContext
>>>>>>   attributes map so that the previous
>>>>>>>>                // UIComponent, if any, becomes the
>> current
>>>>  component.
>>>>>>>>    -            LinkedList<UIComponent>
>> componentStack =
>>>>>>   (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    -
>>>>>>>>    +            LinkedList<UIComponent>
>> componentStack
>>>>>>>>    +                    =
>> (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    +
>>>>>>>>                UIComponent oldCurrent = null;
>>>>>>>>                if (componentStack != null &&
>>>>>>   !componentStack.isEmpty())
>>>>>>>>                {
>>>>>>>>                    int componentIndex =
>>>>  componentStack.indexOf(this);
>>>>>>>>                    if (componentIndex >= 0)
>>>>>>>>                    {
>>>>>>>>    -                    for (int i = 0; i <
>>>>  (componentIndex+1); i++)
>>>>>>>>    +                    for (int i = 0; i <
>> (componentIndex +
>>>>  1); i++)
>>>>>>>>                        {
>>>>>>>>                            oldCurrent =
>>>>  componentStack.removeFirst();
>>>>>>>>                        }
>>>>>>>>    @@ -1044,12 +1152,12 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                        return;
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>                if (oldCurrent != null &&
>>>>>>   oldCurrent._isCompositeComponent())
>>>>>>>>                {
>>>>>>>>                    // Recalculate the current composite
>> component
>>>>>>>>                    UIComponent
>> previousCompositeComponent = null;
>>>>>>>>    -                for (Iterator<UIComponent> it
>> =
>>>>>>   componentStack.iterator(); it.hasNext();)
>>>>>>>>    +                for (Iterator<UIComponent> it
>> =
>>>>>>   componentStack.iterator(); it.hasNext(); )
>>>>>>>>                    {
>>>>>>>>                        UIComponent component =
>> it.next();
>>>>>>>>                        if
>> (component._isCompositeComponent())
>>>>>>>>    @@ -1064,40 +1172,42 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>        }
>>>>>>>>
>>>>>>>>        @SuppressWarnings("unchecked")
>>>>>>>>    -    public final void pushComponentToEL(FacesContext
>> context,
>>>>>>   UIComponent component) {
>>>>>>>>    +    public final void pushComponentToEL(FacesContext
>> context,
>>>>>>   UIComponent component)
>>>>>>>>    +    {
>>>>>>>>            if (component == null)
>>>>>>>>            {
>>>>>>>>                component = this;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            Map<Object, Object> contextAttributes =
>>>>>>   context.getAttributes();
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            if (_honorCurrentComponentAttributes == null)
>>>>>>>>            {
>>>>>>>>                _honorCurrentComponentAttributes =
>>>>>>   _getHonorCurrentComponentAttributes(context);
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            if (_honorCurrentComponentAttributes ==
>> Boolean.TRUE)
>>>>>>>>            {
>>>>>>>>                UIComponent currentComponent =
>> (UIComponent)
>>>>>>   contextAttributes.get(UIComponent.CURRENT_COMPONENT);
>>>>>>>>    -
>>>>>>>>    -            if(currentComponent != null)
>>>>>>>>    +
>>>>>>>>    +            if (currentComponent != null)
>>>>>>>>                {
>>>>>>>>    -                LinkedList<UIComponent>
>> componentStack
>>>>  =
>>>>>>   (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    -                if(componentStack == null)
>>>>>>>>    +                LinkedList<UIComponent>
>> componentStack
>>>>>>>>    +                        =
>> (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    +                if (componentStack == null)
>>>>>>>>                    {
>>>>>>>>                        componentStack = new
>>>>>>   LinkedList<UIComponent>();
>>>>>>>>
>>>>  contextAttributes.put(UIComponent._COMPONENT_STACK,
>>>>>>   componentStack);
>>>>>>>>                    }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>
>> componentStack.addFirst(currentComponent);
>>>>>>>>                }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>                // Push the current UIComponent this to
>> the
>>>>  FacesContext
>>>>>>    attribute map using the key CURRENT_COMPONENT
>>>>>>>>                // saving the previous UIComponent
>> associated with
>>>>>>   CURRENT_COMPONENT for a subsequent call to
>>>>>>>>                //
>>>>  popComponentFromEL(javax.faces.context.FacesContext).
>>>>>>>>
>>>>  contextAttributes.put(UIComponent.CURRENT_COMPONENT,
>>>>>>   component);
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>                if (component._isCompositeComponent())
>>>>>>>>                {
>>>>>>>>
>>>>>>   contextAttributes.put(UIComponent.CURRENT_COMPOSITE_COMPONENT,
>>>>  component);
>>>>>>>>    @@ -1105,8 +1215,9 @@ public abstract class
>> UIComponent implem
>>>>>>>>            }
>>>>>>>>            else
>>>>>>>>            {
>>>>>>>>    -            LinkedList<UIComponent>
>> componentStack =
>>>>>>   (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    -            if(componentStack == null)
>>>>>>>>    +            LinkedList<UIComponent>
>> componentStack
>>>>>>>>    +                    =
>> (LinkedList<UIComponent>)
>>>>>>   contextAttributes.get(UIComponent._COMPONENT_STACK);
>>>>>>>>    +            if (componentStack == null)
>>>>>>>>                {
>>>>>>>>                    componentStack = new
>>>>  LinkedList<UIComponent>();
>>>>>>>>
>>>>  contextAttributes.put(UIComponent._COMPONENT_STACK,
>>>>>>   componentStack);
>>>>>>>>    @@ -1122,25 +1233,28 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>        /**
>>>>>>>>         * @since 1.2
>>>>>>>>         */
>>>>>>>>    -    public int getFacetCount() {
>>>>>>>>    +    public int getFacetCount()
>>>>>>>>    +    {
>>>>>>>>            // not sure why the RI has this method in
>> both
>>>>>>>>            // UIComponent and UIComponentBase
>>>>>>>>            Map<String, UIComponent> facets =
>> getFacets();
>>>>>>>>            return facets == null ? 0 : facets.size();
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    private boolean _isCompositeComponent() {
>>>>>>>>    +    private boolean _isCompositeComponent()
>>>>>>>>    +    {
>>>>>>>>            //moved to the static method
>>>>>>>>            return
>> UIComponent.isCompositeComponent(this);
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Gets value of
>>>>>>   "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES"
>> parameter
>>>>  cached in
>>>>>>   facesContext.attributes
>>>>>>>>         * or resolves that param and caches its value in
>>>>>>   facesContext.attributes.
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * @return canonical Boolean value for parameter
>>>>>>   "javax.faces.HONOR_CURRENT_COMPONENT_ATTRIBUTES"
>>>>>>>>         */
>>>>>>>>    -    private static Boolean
>>>>>>   _getHonorCurrentComponentAttributes(FacesContext facesContext)
>> {
>>>>>>>>    +    private static Boolean
>>>>>>   _getHonorCurrentComponentAttributes(FacesContext facesContext)
>>>>>>>>    +    {
>>>>>>>>            // performance note: we cache value in
>>>>  facesContext.attributes
>>>>>>   because
>>>>>>>>            // 1) methods pushComponentToEL,
>> popComponentFromEl,
>>>>>>   getCurrentComponent a getCurrentCompositeComponent
>>>>>>>>            // can use that value
>>>>>>>>    @@ -1149,49 +1263,65 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>            // implementation and performance
>>>>>>>>            Map<Object, Object> attributes =
>>>>>>   facesContext.getAttributes();
>>>>>>>>            Boolean paramValue = (Boolean)
>>>>>>   attributes.get(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
>>>>>>>>    -        if (paramValue == null) {
>>>>>>>>    -            String param =
>>>>>>
>>>>
>> facesContext.getExternalContext().getInitParameter(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
>>>>>>>>    +        if (paramValue == null)
>>>>>>>>    +        {
>>>>>>>>    +            String param
>>>>>>>>    +                    =
>>>>>>
>>>>
>> facesContext.getExternalContext().getInitParameter(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME);
>>>>>>>>                paramValue = Boolean.valueOf((param !=
>> null
>>>>  &&
>>>>>>   Boolean.valueOf(param).booleanValue()));
>>>>>>>>
>>>>>>   attributes.put(HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME,
>>>>  paramValue);
>>>>>>>>            }
>>>>>>>>            return paramValue;
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    -    private static class BundleMap implements
>> Map<String,
>>>>>>   String> {
>>>>>>>>    +
>>>>>>>>    +    private static class BundleMap implements
>> Map<String,
>>>>>>   String>
>>>>>>>>    +    {
>>>>>>>>
>>>>>>>>            private ResourceBundle _bundle;
>>>>>>>>            private List<String> _values;
>>>>>>>>
>>>>>>>>    -        public BundleMap(ResourceBundle bundle) {
>>>>>>>>    +        public BundleMap(ResourceBundle bundle)
>>>>>>>>    +        {
>>>>>>>>                _bundle = bundle;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            // Optimized methods
>>>>>>>>    -        public String get(Object key) {
>>>>>>>>    -            try {
>>>>>>>>    +        public String get(Object key)
>>>>>>>>    +        {
>>>>>>>>    +            try
>>>>>>>>    +            {
>>>>>>>>                    return (String)
>>>>  _bundle.getObject(key.toString());
>>>>>>>>    -            } catch (Exception e) {
>>>>>>>>    +            }
>>>>>>>>    +            catch (Exception e)
>>>>>>>>    +            {
>>>>>>>>                    return "???" + key +
>>>>  "???";
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public boolean isEmpty() {
>>>>>>>>    +        public boolean isEmpty()
>>>>>>>>    +        {
>>>>>>>>                return
>> !_bundle.getKeys().hasMoreElements();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public boolean containsKey(Object key) {
>>>>>>>>    -            try {
>>>>>>>>    +        public boolean containsKey(Object key)
>>>>>>>>    +        {
>>>>>>>>    +            try
>>>>>>>>    +            {
>>>>>>>>                    return
>> _bundle.getObject(key.toString()) !=
>>>>  null;
>>>>>>>>    -            } catch (MissingResourceException e) {
>>>>>>>>    +            }
>>>>>>>>    +            catch (MissingResourceException e)
>>>>>>>>    +            {
>>>>>>>>                    return false;
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            // Unoptimized methods
>>>>>>>>    -        public Collection<String> values() {
>>>>>>>>    -            if (_values == null) {
>>>>>>>>    +        public Collection<String> values()
>>>>>>>>    +        {
>>>>>>>>    +            if (_values == null)
>>>>>>>>    +            {
>>>>>>>>                    _values = new
>> ArrayList<String>();
>>>>>>>>    -                for (Enumeration<String>
>> enumer =
>>>>>>   _bundle.getKeys(); enumer.hasMoreElements();) {
>>>>>>>>    +                for (Enumeration<String>
>> enumer =
>>>>>>   _bundle.getKeys(); enumer.hasMoreElements(); )
>>>>>>>>    +                {
>>>>>>>>                        String v =
>>>>  _bundle.getString(enumer.nextElement());
>>>>>>>>                        _values.add(v);
>>>>>>>>                    }
>>>>>>>>    @@ -1199,29 +1329,37 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                return _values;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public int size() {
>>>>>>>>    +        public int size()
>>>>>>>>    +        {
>>>>>>>>                return values().size();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public boolean containsValue(Object value) {
>>>>>>>>    +        public boolean containsValue(Object value)
>>>>>>>>    +        {
>>>>>>>>                return values().contains(value);
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public Set<Map.Entry<String,
>> String>>
>>>>  entrySet() {
>>>>>>>>    +        public Set<Map.Entry<String,
>> String>>
>>>>  entrySet()
>>>>>>>>    +        {
>>>>>>>>                Set<Entry<String, String>>
>> set = new
>>>>>>   HashSet<Entry<String, String>>();
>>>>>>>>    -            for (Enumeration<String> enumer =
>>>>  _bundle.getKeys();
>>>>>>   enumer.hasMoreElements();) {
>>>>>>>>    +            for (Enumeration<String> enumer =
>>>>  _bundle.getKeys();
>>>>>>   enumer.hasMoreElements(); )
>>>>>>>>    +            {
>>>>>>>>                    final String k =
>> enumer.nextElement();
>>>>>>>>    -                set.add(new Map.Entry<String,
>> String>()
>>>>  {
>>>>>>>>    +                set.add(new Map.Entry<String,
>> String>()
>>>>>>>>    +                {
>>>>>>>>
>>>>>>>>    -                    public String getKey() {
>>>>>>>>    +                    public String getKey()
>>>>>>>>    +                    {
>>>>>>>>                            return k;
>>>>>>>>                        }
>>>>>>>>
>>>>>>>>    -                    public String getValue() {
>>>>>>>>    +                    public String getValue()
>>>>>>>>    +                    {
>>>>>>>>                            return (String)
>> _bundle.getObject(k);
>>>>>>>>                        }
>>>>>>>>
>>>>>>>>    -                    public String setValue(String
>> value) {
>>>>>>>>    +                    public String setValue(String
>> value)
>>>>>>>>    +                    {
>>>>>>>>                            throw new
>>>>  UnsupportedOperationException();
>>>>>>>>                        }
>>>>>>>>                    });
>>>>>>>>    @@ -1230,37 +1368,44 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                return set;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public Set<String> keySet() {
>>>>>>>>    +        public Set<String> keySet()
>>>>>>>>    +        {
>>>>>>>>                Set<String> set = new
>>>>  HashSet<String>();
>>>>>>>>    -            for (Enumeration<String> enumer =
>>>>  _bundle.getKeys();
>>>>>>   enumer.hasMoreElements();) {
>>>>>>>>    +            for (Enumeration<String> enumer =
>>>>  _bundle.getKeys();
>>>>>>   enumer.hasMoreElements(); )
>>>>>>>>    +            {
>>>>>>>>                    set.add(enumer.nextElement());
>>>>>>>>                }
>>>>>>>>                return set;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            // Unsupported methods
>>>>>>>>    -        public String remove(Object key) {
>>>>>>>>    +        public String remove(Object key)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> UnsupportedOperationException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public void putAll(Map<? extends String,
>> ? extends
>>>>>>   String> t) {
>>>>>>>>    +        public void putAll(Map<? extends String,
>> ? extends
>>>>>>   String> t)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> UnsupportedOperationException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public String put(String key, String value)
>> {
>>>>>>>>    +        public String put(String key, String value)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> UnsupportedOperationException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        public void clear() {
>>>>>>>>    +        public void clear()
>>>>>>>>    +        {
>>>>>>>>                throw new
>> UnsupportedOperationException();
>>>>>>>>            }
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    static class EventListenerWrapper implements
>>>>  SystemEventListener,
>>>>>>   PartialStateHolder {
>>>>>>>>    +    static class EventListenerWrapper implements
>>>>  SystemEventListener,
>>>>>>   PartialStateHolder
>>>>>>>>    +    {
>>>>>>>>
>>>>>>>>            private Class<?> componentClass;
>>>>>>>>            private ComponentSystemEventListener
>> listener;
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            private boolean _initialStateMarked;
>>>>>>>>
>>>>>>>>            private int listenerCapability;
>>>>>>>>    @@ -1270,16 +1415,16 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>            private static final int
>> LISTENER_TYPE_COMPONENT = 4;
>>>>>>>>            private static final int
>> LISTENER_TYPE_RENDERER = 8;
>>>>>>>>            private static final int LISTENER_TYPE_OTHER
>> = 16;
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            public EventListenerWrapper()
>>>>>>>>            {
>>>>>>>>                //need a no-arg constructor for state
>> saving
>>>>  purposes
>>>>>>>>                super();
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            /**
>>>>>>>>             * Note we have two cases:
>>>>>>>>    -         *
>>>>>>>>    +         *
>>>>>>>>             * 1. listener is an instance of UIComponent.
>> In this
>>>>  case we
>>>>>>   cannot save and restore
>>>>>>>>             *    it because we need to point to the real
>>>>  component, but we
>>>>>>   can assume the instance
>>>>>>>>             *    is the same because
>> UIComponent.subscribeToEvent
>>>>  says so.
>>>>>>   Also take into account
>>>>>>>>    @@ -1289,11 +1434,12 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>             * 3. listener is an instance of
>>>>  ComponentSystemEventListener
>>>>>>   but not from UIComponent.
>>>>>>>>             *    In this case, the instance could
>> implement
>>>>  StateHolder,
>>>>>>   PartialStateHolder or do
>>>>>>>>             *    implement anything, so we have to deal
>> with that
>>>>  case as
>>>>>>   usual.
>>>>>>>>    -         *
>>>>>>>>    +         *
>>>>>>>>             * @param component
>>>>>>>>             * @param listener
>>>>>>>>             */
>>>>>>>>    -        public EventListenerWrapper(UIComponent
>> component,
>>>>>>   ComponentSystemEventListener listener) {
>>>>>>>>    +        public EventListenerWrapper(UIComponent
>> component,
>>>>>>   ComponentSystemEventListener listener)
>>>>>>>>    +        {
>>>>>>>>                assert component != null;
>>>>>>>>                assert listener != null;
>>>>>>>>
>>>>>>>>    @@ -1302,7 +1448,7 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>                initListenerCapability();
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            private void initListenerCapability()
>>>>>>>>            {
>>>>>>>>                this.listenerCapability = 0;
>>>>>>>>    @@ -1318,7 +1464,7 @@ public abstract class
>> UIComponent implem
>>>>>>>>                {
>>>>>>>>                    if (this.listener instanceof
>>>>  PartialStateHolder)
>>>>>>>>                    {
>>>>>>>>    -                    this.listenerCapability =
>>>>  LISTENER_TYPE_OTHER |
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER;
>>>>>>>>    +                    this.listenerCapability =
>>>>  LISTENER_TYPE_OTHER |
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER;
>>>>>>>>                    }
>>>>>>>>                    else if (this.listener instanceof
>> StateHolder)
>>>>>>>>                    {
>>>>>>>>    @@ -1332,7 +1478,8 @@ public abstract class
>> UIComponent implem
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            @Override
>>>>>>>>    -        public boolean equals(Object o) {
>>>>>>>>    +        public boolean equals(Object o)
>>>>>>>>    +        {
>>>>>>>>                if (o == this)
>>>>>>>>                {
>>>>>>>>                    return true;
>>>>>>>>    @@ -1341,13 +1488,16 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                {
>>>>>>>>                    EventListenerWrapper other =
>>>>  (EventListenerWrapper) o;
>>>>>>>>                    return
>>>>  componentClass.equals(other.componentClass)
>>>>>>   && listener.equals(other.listener);
>>>>>>>>    -            } else {
>>>>>>>>    +            }
>>>>>>>>    +            else
>>>>>>>>    +            {
>>>>>>>>                    return false;
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>
>>>>>>>>            @Override
>>>>>>>>    -        public int hashCode() {
>>>>>>>>    +        public int hashCode()
>>>>>>>>    +        {
>>>>>>>>                return componentClass.hashCode() +
>>>>  listener.hashCode();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    @@ -1358,7 +1508,7 @@ public abstract class
>> UIComponent implem
>>>>>>>>
>>>>>>>>                return
>>>>  source.getClass().isAssignableFrom(componentClass);
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            public ComponentSystemEventListener
>>>>>>   getComponentSystemEventListener()
>>>>>>>>            {
>>>>>>>>                return listener;
>>>>>>>>    @@ -1377,9 +1527,9 @@ public abstract class
>> UIComponent implem
>>>>>>>>            public void clearInitialState()
>>>>>>>>            {
>>>>>>>>                //if (!(listener instanceof UIComponent)
>>>>  &&
>>>>>>   listener instanceof PartialStateHolder)
>>>>>>>>    -            if ( (listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>    +            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>                {
>>>>>>>>    -
>>>>   ((PartialStateHolder)listener).clearInitialState();
>>>>>>>>    +                ((PartialStateHolder)
>>>>  listener).clearInitialState();
>>>>>>>>                }
>>>>>>>>                _initialStateMarked = false;
>>>>>>>>            }
>>>>>>>>    @@ -1387,9 +1537,9 @@ public abstract class
>> UIComponent implem
>>>>>>>>            public boolean initialStateMarked()
>>>>>>>>            {
>>>>>>>>                //if (!(listener instanceof UIComponent)
>>>>  &&
>>>>>>   listener instanceof PartialStateHolder)
>>>>>>>>    -            if ( (listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>    +            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>                {
>>>>>>>>    -                return
>>>>>>   ((PartialStateHolder)listener).initialStateMarked();
>>>>>>>>    +                return ((PartialStateHolder)
>>>>>>   listener).initialStateMarked();
>>>>>>>>                }
>>>>>>>>                //return false;
>>>>>>>>                return _initialStateMarked;
>>>>>>>>    @@ -1398,9 +1548,9 @@ public abstract class
>> UIComponent implem
>>>>>>>>            public void markInitialState()
>>>>>>>>            {
>>>>>>>>                //if (!(listener instanceof UIComponent)
>>>>  &&
>>>>>>   listener instanceof PartialStateHolder)
>>>>>>>>    -            if ( (listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>    +            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>                {
>>>>>>>>    -
>>>>   ((PartialStateHolder)listener).markInitialState();
>>>>>>>>    +                ((PartialStateHolder)
>>>>  listener).markInitialState();
>>>>>>>>                }
>>>>>>>>                _initialStateMarked = true;
>>>>>>>>            }
>>>>>>>>    @@ -1408,11 +1558,11 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>            public boolean isTransient()
>>>>>>>>            {
>>>>>>>>                //if ( listener instanceof StateHolder)
>>>>>>>>    -            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0 ||
>>>>>>>>    -                (listenerCapability &
>>>>  LISTENER_SAVE_STATE_HOLDER)
>>>>>>   != 0 )
>>>>>>>>    +            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0 ||
>>>>>>>>    +                    (listenerCapability &
>>>>>>   LISTENER_SAVE_STATE_HOLDER) != 0)
>>>>>>>>                {
>>>>>>>>    -                return
>> ((StateHolder)listener).isTransient();
>>>>>>>>    -            }
>>>>>>>>    +                return ((StateHolder)
>>>>  listener).isTransient();
>>>>>>>>    +            }
>>>>>>>>                return false;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    @@ -1426,24 +1576,27 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                componentClass = (Class) values[0];
>>>>>>>>                if (values[1] instanceof
>> _AttachedDeltaWrapper)
>>>>>>>>                {
>>>>>>>>    -
>>  ((StateHolder)listener).restoreState(context,
>>>>>>   ((_AttachedDeltaWrapper)values[1]).getWrappedStateObject());
>>>>>>>>    +                ((StateHolder)
>>>>  listener).restoreState(context,
>>>>>>>>    +                        ((_AttachedDeltaWrapper)
>>>>>>   values[1]).getWrappedStateObject());
>>>>>>>>                }
>>>>>>>>                else
>>>>>>>>                {
>>>>>>>>                    //Full restore
>>>>>>>>                    listenerCapability = (Integer)
>> values[2];
>>>>>>>>    -
>>>>>>>>    -                if ( (listenerCapability &
>>>>>>   LISTENER_TYPE_COMPONENT) != 0 )
>>>>>>>>    +
>>>>>>>>    +                if ((listenerCapability &
>>>>  LISTENER_TYPE_COMPONENT)
>>>>>>   != 0)
>>>>>>>>                    {
>>>>>>>>                        listener =
>>>>>>   UIComponent.getCurrentComponent(context);
>>>>>>>>                    }
>>>>>>>>    -                else if ( (listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0)
>>>>>>>>    +                else if ((listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0)
>>>>>>>>                    {
>>>>>>>>    -                    listener =
>> (ComponentSystemEventListener)
>>>>>>   UIComponent.getCurrentComponent(context).getRenderer(context);
>>>>>>>>    +                    listener =
>> (ComponentSystemEventListener)
>>>>>>>>    +
>>>>>>
>>   UIComponent.getCurrentComponent(context).getRenderer(context);
>>>>>>>>                    }
>>>>>>>>                    else
>>>>>>>>                    {
>>>>>>>>    -                    listener =
>> (ComponentSystemEventListener)
>>>>>>   UIComponentBase.restoreAttachedState(context, values[1]);
>>>>>>>>    +                    listener =
>> (ComponentSystemEventListener)
>>>>>>>>    +
>>>>>>    UIComponentBase.restoreAttachedState(context, values[1]);
>>>>>>>>                    }
>>>>>>>>                    /*
>>>>>>>>                    listener = values[1] == null ?
>>>>>>>>    @@ -1469,8 +1622,8 @@ public abstract class
>> UIComponent implem
>>>>>>>>                    Object[] state = new Object[3];
>>>>>>>>                    state[0] = componentClass;
>>>>>>>>                    //If this is not a component or a
>> renderer,
>>>>  save it
>>>>>>   calling UIComponent.saveAttachedState
>>>>>>>>    -                if (!( (listenerCapability &
>>>>>>   LISTENER_TYPE_COMPONENT) != 0 ||
>>>>>>>>    -                       (listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0    ) )
>>>>>>>>    +                if (!((listenerCapability &
>>>>>>   LISTENER_TYPE_COMPONENT) != 0 ||
>>>>>>>>    +                        (listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0))
>>>>>>>>                    {
>>>>>>>>                        state[1] =
>>>>>>   UIComponentBase.saveAttachedState(context, listener);
>>>>>>>>                    }
>>>>>>>>    @@ -1485,25 +1638,26 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>                {
>>>>>>>>                    // If initialStateMarked() == true
>> means two
>>>>  things:
>>>>>>>>                    // 1. PSS is being used
>>>>>>>>    -                if ( (listenerCapability &
>>>>>>   LISTENER_TYPE_COMPONENT) != 0)
>>>>>>>>    +                if ((listenerCapability &
>>>>  LISTENER_TYPE_COMPONENT)
>>>>>>   != 0)
>>>>>>>>                    {
>>>>>>>>                        return null;
>>>>>>>>                    }
>>>>>>>>    -                else if ( (listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0)
>>>>>>>>    +                else if ((listenerCapability &
>>>>>>   LISTENER_TYPE_RENDERER) != 0)
>>>>>>>>                    {
>>>>>>>>                        return null;
>>>>>>>>                    }
>>>>>>>>                    else
>>>>>>>>                    {
>>>>>>>>    -                    if ( (listenerCapability &
>>>>>>   LISTENER_SAVE_STATE_HOLDER) != 0 ||
>>>>>>>>    -                         (listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>    +                    if ((listenerCapability &
>>>>>>   LISTENER_SAVE_STATE_HOLDER) != 0 ||
>>>>>>>>    +                            (listenerCapability
>> &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0)
>>>>>>>>                        {
>>>>>>>>                            Object listenerSaved =
>> ((StateHolder)
>>>>>>   listener).saveState(context);
>>>>>>>>                            if (listenerSaved == null)
>>>>>>>>                            {
>>>>>>>>                                return null;
>>>>>>>>                            }
>>>>>>>>    -                        return new
>> Object[]{componentClass,
>>>>  new
>>>>>>   _AttachedDeltaWrapper(listener.getClass(), listenerSaved)};
>>>>>>>>    +                        return new
>> Object[]{componentClass,
>>>>>>>>    +                                            new
>>>>>>   _AttachedDeltaWrapper(listener.getClass(), listenerSaved)};
>>>>>>>>                        }
>>>>>>>>                        else
>>>>>>>>                        {
>>>>>>>>    @@ -1524,11 +1678,11 @@ public abstract class
>> UIComponent
>>>>  implem
>>>>>>>>
>>>>>>>>            public void setTransient(boolean
>> newTransientValue)
>>>>>>>>            {
>>>>>>>>    -            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0 ||
>>>>>>>>    -                    (listenerCapability &
>>>>>>   LISTENER_SAVE_STATE_HOLDER) != 0 )
>>>>>>>>    +            if ((listenerCapability &
>>>>>>   LISTENER_SAVE_PARTIAL_STATE_HOLDER) != 0 ||
>>>>>>>>    +                    (listenerCapability &
>>>>>>   LISTENER_SAVE_STATE_HOLDER) != 0)
>>>>>>>>                {
>>>>>>>>    -
>>>>>>    ((StateHolder)listener).setTransient(newTransientValue);
>>>>>>>>    -            }
>>>>>>>>    +                ((StateHolder)
>>>>>>   listener).setTransient(newTransientValue);
>>>>>>>>    +            }
>>>>>>>>            }
>>>>>>>>        }
>>>>>>>>     }
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UIComponentBase.java
>>>>>>   Mon Oct 24 18:09:08 2011
>>>>>>>>    @@ -590,7 +590,7 @@ public abstract class
>> UIComponentBase ex
>>>>>>>>                return null;
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        final char separatorChar =
>>>>>>   UINamingContainer.getSeparatorChar(getFacesContext());
>>>>>>>>    +        char separatorChar =
>>>>>>   UINamingContainer.getSeparatorChar(getFacesContext());
>>>>>>>>            UIComponent findBase;
>>>>>>>>            if (expr.charAt(0) == separatorChar)
>>>>>>>>            {
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIData.java
>>>>  Mon Oct
>>>>>>   24 18:09:08 2011
>>>>>>>>    @@ -316,7 +316,7 @@ public class UIData extends
>> UIComponentB
>>>>>>>>                throw new NullPointerException();
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    -        final String baseClientId =
>> getClientId(context);
>>>>>>>>    +        String baseClientId = getClientId(context);
>>>>>>>>
>>>>>>>>            // searching for this component?
>>>>>>>>            boolean returnValue =
>> baseClientId.equals(clientId);
>>>>>>>>    @@ -1565,7 +1565,7 @@ public class UIData extends
>> UIComponentB
>>>>>>>>            {
>>>>>>>>                FacesEvent originalEvent =
>> ((FacesEventWrapper)
>>>>>>   event).getWrappedFacesEvent();
>>>>>>>>                int eventRowIndex = ((FacesEventWrapper)
>>>>>>   event).getRowIndex();
>>>>>>>>    -            final int currentRowIndex =
>> getRowIndex();
>>>>>>>>    +            int currentRowIndex = getRowIndex();
>>>>>>>>                UIComponent source =
>> originalEvent.getComponent();
>>>>>>>>                UIComponent compositeParent =
>>>>>>   UIComponent.getCompositeComponentParent(source);
>>>>>>>>
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>  myfaces/core/trunk/api/src/main/java/javax/faces/component/UIInput.java
>>>>  Mon Oct
>>>>>>   24 18:09:08 2011
>>>>>>>>    @@ -1065,7 +1065,7 @@ public class UIInput extends
>> UIOutput im
>>>>>>>>        @SuppressWarnings("unchecked")
>>>>>>>>        private Map<String, List<Object[]>>
>>>>  _getDebugInfoMap()
>>>>>>>>        {
>>>>>>>>    -        final Map<String, Object> requestMap =
>>>>  getFacesContext()
>>>>>>>>    +        Map<String, Object> requestMap =
>>>>  getFacesContext()
>>>>>>>>
>> .getExternalContext().getRequestMap();
>>>>>>>>            Map<String, List<Object[]>>
>> debugInfo =
>>>>>>   (Map<String, List<Object[]>>)
>>>>>>>>                    requestMap.get(DEBUG_INFO_KEY +
>>>>  getClientId());
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/UISelectMany.java Mon
>>>>>>   Oct 24 18:09:08 2011
>>>>>>>>    @@ -419,7 +419,7 @@ public class UISelectMany extends
>> UIInpu
>>>>>>>>            }
>>>>>>>>            else
>>>>>>>>            {
>>>>>>>>    -            Class<? extends Object> valueClass
>> =
>>>>>>   convertedValue.getClass();
>>>>>>>>    +            Class<?> valueClass =
>>>>  convertedValue.getClass();
>>>>>>>>                if (valueClass.isArray())
>>>>>>>>                {
>>>>>>>>                    return new
>>>>  _PrimitiveArrayIterator(convertedValue);
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_ComponentAttributesMap.java
>>>>>>   Mon Oct 24 18:09:08 2011
>>>>>>>>    @@ -210,9 +210,9 @@ class _ComponentAttributesMap
>> implements
>>>>>>>>        /**
>>>>>>>>         * Call put(key, value) for each entry in the
>> provided
>>>>  map.
>>>>>>>>         */
>>>>>>>>    -    public void putAll(Map<? extends String, ?
>> extends
>>>>  Object>
>>>>>>   t)
>>>>>>>>    +    public void putAll(Map<? extends String,
>> ?> t)
>>>>>>>>        {
>>>>>>>>    -        for (Map.Entry<? extends String, ?
>> extends
>>>>  Object> entry
>>>>>>   : t.entrySet())
>>>>>>>>    +        for (Map.Entry<? extends String, ?>
>> entry :
>>>>>>   t.entrySet())
>>>>>>>>            {
>>>>>>>>                put(entry.getKey(), entry.getValue());
>>>>>>>>            }
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_LocaleUtils.java Mon
>>>>>>   Oct 24 18:09:08 2011
>>>>>>>>    @@ -34,21 +34,22 @@ import
>> java.util.concurrent.ConcurrentMa
>>>>>>>>     * <p>This class tries to handle {@code null}
>> input
>>>>  gracefully.
>>>>>>>>     * An exception will not be thrown for a {@code null}
>> input.
>>>>>>>>     * Each method documents its behaviour in more
>>>>  detail.</p>
>>>>>>>>    - *
>>>>>>>>    + *
>>>>>>>>     * NOTE: This a copy of commons lang LocaleUtils, to
>> use it
>>>>  inside
>>>>>>   MyFaces
>>>>>>>>     *
>>>>>>>>     * @since 2.2
>>>>>>>>     * @version $Id$
>>>>>>>>     */
>>>>>>>>    -class _LocaleUtils {
>>>>>>>>    +class _LocaleUtils
>>>>>>>>    +{
>>>>>>>>
>>>>>>>>        /** Concurrent map of language locales by
>> country. */
>>>>>>>>    -    private static final ConcurrentMap<String,
>>>>>>   List<Locale>> cLanguagesByCountry =
>>>>>>>>    -        new ConcurrentHashMap<String,
>>>>  List<Locale>>();
>>>>>>>>    +    private static final ConcurrentMap<String,
>>>>>>   List<Locale>> cLanguagesByCountry =
>>>>>>>>    +            new ConcurrentHashMap<String,
>>>>  List<Locale>>();
>>>>>>>>
>>>>>>>>        /** Concurrent map of country locales by
>> language. */
>>>>>>>>    -    private static final ConcurrentMap<String,
>>>>>>   List<Locale>> cCountriesByLanguage =
>>>>>>>>    -        new ConcurrentHashMap<String,
>>>>  List<Locale>>();
>>>>>>>>    +    private static final ConcurrentMap<String,
>>>>>>   List<Locale>> cCountriesByLanguage =
>>>>>>>>    +            new ConcurrentHashMap<String,
>>>>  List<Locale>>();
>>>>>>>>
>>>>>>>>        /**
>>>>>>>>         * <p>{@code _LocaleUtils} instances should
>> NOT be
>>>>>>   constructed in standard programming.
>>>>>>>>    @@ -57,11 +58,13 @@ class _LocaleUtils {
>>>>>>>>         * <p>This constructor is public to permit
>> tools
>>>>  that require
>>>>>>   a JavaBean instance
>>>>>>>>         * to operate.</p>
>>>>>>>>         */
>>>>>>>>    -    public _LocaleUtils() {
>>>>>>>>    -      super();
>>>>>>>>    +    public _LocaleUtils()
>>>>>>>>    +    {
>>>>>>>>    +        super();
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Converts a String to a
>> Locale.</p>
>>>>>>>>         *
>>>>>>>>    @@ -89,37 +92,51 @@ class _LocaleUtils {
>>>>>>>>         * @return a Locale, null if null input
>>>>>>>>         * @throws IllegalArgumentException if the string
>> is an
>>>>  invalid
>>>>>>   format
>>>>>>>>         */
>>>>>>>>    -    public static Locale toLocale(String str) {
>>>>>>>>    -        if (str == null) {
>>>>>>>>    +    public static Locale toLocale(String str)
>>>>>>>>    +    {
>>>>>>>>    +        if (str == null)
>>>>>>>>    +        {
>>>>>>>>                return null;
>>>>>>>>            }
>>>>>>>>            int len = str.length();
>>>>>>>>    -        if (len != 2 && len != 5 &&
>> len <
>>>>  7) {
>>>>>>>>    +        if (len != 2 && len != 5 &&
>> len <
>>>>  7)
>>>>>>>>    +        {
>>>>>>>>                throw new
>> IllegalArgumentException("Invalid
>>>>  locale
>>>>>>   format: " + str);
>>>>>>>>            }
>>>>>>>>            char ch0 = str.charAt(0);
>>>>>>>>            char ch1 = str.charAt(1);
>>>>>>>>    -        if (ch0 < 'a' || ch0 >
>> 'z' ||
>>>>  ch1 <
>>>>>>   'a' || ch1 > 'z') {
>>>>>>>>    +        if (ch0 < 'a' || ch0 >
>> 'z' ||
>>>>  ch1 <
>>>>>>   'a' || ch1 > 'z')
>>>>>>>>    +        {
>>>>>>>>                throw new
>> IllegalArgumentException("Invalid
>>>>  locale
>>>>>>   format: " + str);
>>>>>>>>            }
>>>>>>>>    -        if (len == 2) {
>>>>>>>>    +        if (len == 2)
>>>>>>>>    +        {
>>>>>>>>                return new Locale(str, "");
>>>>>>>>    -        } else {
>>>>>>>>    -            if (str.charAt(2) != '_') {
>>>>>>>>    +        }
>>>>>>>>    +        else
>>>>>>>>    +        {
>>>>>>>>    +            if (str.charAt(2) != '_')
>>>>>>>>    +            {
>>>>>>>>                    throw new
>>>>  IllegalArgumentException("Invalid locale
>>>>>>   format: " + str);
>>>>>>>>                }
>>>>>>>>                char ch3 = str.charAt(3);
>>>>>>>>    -            if (ch3 == '_') {
>>>>>>>>    +            if (ch3 == '_')
>>>>>>>>    +            {
>>>>>>>>                    return new Locale(str.substring(0,
>> 2),
>>>>  "",
>>>>>>   str.substring(4));
>>>>>>>>                }
>>>>>>>>                char ch4 = str.charAt(4);
>>>>>>>>    -            if (ch3 < 'A' || ch3 >
>> 'Z'
>>>>  || ch4
>>>>>>   < 'A' || ch4 > 'Z') {
>>>>>>>>    +            if (ch3 < 'A' || ch3 >
>> 'Z'
>>>>  || ch4
>>>>>>   < 'A' || ch4 > 'Z')
>>>>>>>>    +            {
>>>>>>>>                    throw new
>>>>  IllegalArgumentException("Invalid locale
>>>>>>   format: " + str);
>>>>>>>>                }
>>>>>>>>    -            if (len == 5) {
>>>>>>>>    +            if (len == 5)
>>>>>>>>    +            {
>>>>>>>>                    return new Locale(str.substring(0,
>> 2),
>>>>  str.substring(3,
>>>>>>   5));
>>>>>>>>    -            } else {
>>>>>>>>    -                if (str.charAt(5) != '_') {
>>>>>>>>    +            }
>>>>>>>>    +            else
>>>>>>>>    +            {
>>>>>>>>    +                if (str.charAt(5) != '_')
>>>>>>>>    +                {
>>>>>>>>                        throw new
>>>>  IllegalArgumentException("Invalid
>>>>>>   locale format: " + str);
>>>>>>>>                    }
>>>>>>>>                    return new Locale(str.substring(0,
>> 2),
>>>>  str.substring(3,
>>>>>>   5), str.substring(6));
>>>>>>>>    @@ -128,6 +145,7 @@ class _LocaleUtils {
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains the list of locales to search
>> through
>>>>  when
>>>>>>   performing
>>>>>>>>         * a locale search.</p>
>>>>>>>>    @@ -140,11 +158,13 @@ class _LocaleUtils {
>>>>>>>>         * @param locale  the locale to start from
>>>>>>>>         * @return the unmodifiable list of Locale
>> objects, 0
>>>>  being locale,
>>>>>>   not null
>>>>>>>>         */
>>>>>>>>    -    public static List<Locale>
>> localeLookupList(Locale
>>>>  locale) {
>>>>>>>>    +    public static List<Locale>
>> localeLookupList(Locale
>>>>  locale)
>>>>>>>>    +    {
>>>>>>>>            return localeLookupList(locale, locale);
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains the list of locales to search
>> through
>>>>  when
>>>>>>   performing
>>>>>>>>         * a locale search.</p>
>>>>>>>>    @@ -162,17 +182,22 @@ class _LocaleUtils {
>>>>>>>>         * @param defaultLocale  the default locale to
>> use if no
>>>>  other is
>>>>>>   found
>>>>>>>>         * @return the unmodifiable list of Locale
>> objects, 0
>>>>  being locale,
>>>>>>   not null
>>>>>>>>         */
>>>>>>>>    -    public static List<Locale>
>> localeLookupList(Locale
>>>>  locale,
>>>>>>   Locale defaultLocale) {
>>>>>>>>    +    public static List<Locale>
>> localeLookupList(Locale
>>>>  locale,
>>>>>>   Locale defaultLocale)
>>>>>>>>    +    {
>>>>>>>>            List<Locale> list = new
>>>>  ArrayList<Locale>(4);
>>>>>>>>    -        if (locale != null) {
>>>>>>>>    +        if (locale != null)
>>>>>>>>    +        {
>>>>>>>>                list.add(locale);
>>>>>>>>    -            if (locale.getVariant().length() > 0)
>> {
>>>>>>>>    +            if (locale.getVariant().length() > 0)
>>>>>>>>    +            {
>>>>>>>>                    list.add(new
>> Locale(locale.getLanguage(),
>>>>>>   locale.getCountry()));
>>>>>>>>                }
>>>>>>>>    -            if (locale.getCountry().length() > 0)
>> {
>>>>>>>>    +            if (locale.getCountry().length() > 0)
>>>>>>>>    +            {
>>>>>>>>                    list.add(new
>> Locale(locale.getLanguage(),
>>>>>>   ""));
>>>>>>>>                }
>>>>>>>>    -            if (list.contains(defaultLocale) ==
>> false) {
>>>>>>>>    +            if (!list.contains(defaultLocale))
>>>>>>>>    +            {
>>>>>>>>                    list.add(defaultLocale);
>>>>>>>>                }
>>>>>>>>            }
>>>>>>>>    @@ -180,45 +205,52 @@ class _LocaleUtils {
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains an unmodifiable list of
>> installed
>>>>>>   locales.</p>
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * <p>This method is a wrapper around
>> {@link
>>>>>>   Locale#getAvailableLocales()}.
>>>>>>>>         * It is more efficient, as the JDK method must
>> create a
>>>>  new array
>>>>>>   each
>>>>>>>>         * time it is called.</p>
>>>>>>>>         *
>>>>>>>>         * @return the unmodifiable list of available
>> locales
>>>>>>>>         */
>>>>>>>>    -    public static List<Locale>
>> availableLocaleList() {
>>>>>>>>    +    public static List<Locale>
>> availableLocaleList()
>>>>>>>>    +    {
>>>>>>>>            return SyncAvoid.AVAILABLE_LOCALE_LIST;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains an unmodifiable set of
>> installed
>>>>>>   locales.</p>
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * <p>This method is a wrapper around
>> {@link
>>>>>>   Locale#getAvailableLocales()}.
>>>>>>>>         * It is more efficient, as the JDK method must
>> create a
>>>>  new array
>>>>>>   each
>>>>>>>>         * time it is called.</p>
>>>>>>>>         *
>>>>>>>>         * @return the unmodifiable set of available
>> locales
>>>>>>>>         */
>>>>>>>>    -    public static Set<Locale>
>> availableLocaleSet() {
>>>>>>>>    +    public static Set<Locale>
>> availableLocaleSet()
>>>>>>>>    +    {
>>>>>>>>            return SyncAvoid.AVAILABLE_LOCALE_SET;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Checks if the locale specified is in
>> the list
>>>>  of
>>>>>>   available locales.</p>
>>>>>>>>         *
>>>>>>>>         * @param locale the Locale object to check if it
>> is
>>>>  available
>>>>>>>>         * @return true if the locale is a known locale
>>>>>>>>         */
>>>>>>>>    -    public static boolean isAvailableLocale(Locale
>> locale) {
>>>>>>>>    +    public static boolean isAvailableLocale(Locale
>> locale)
>>>>>>>>    +    {
>>>>>>>>            return
>> availableLocaleList().contains(locale);
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains the list of languages
>> supported for a
>>>>  given
>>>>>>   country.</p>
>>>>>>>>         *
>>>>>>>>    @@ -228,18 +260,23 @@ class _LocaleUtils {
>>>>>>>>         * @param countryCode  the 2 letter country code,
>> null
>>>>  returns
>>>>>>   empty
>>>>>>>>         * @return an unmodifiable List of Locale
>> objects, not
>>>>  null
>>>>>>>>         */
>>>>>>>>    -    public static List<Locale>
>>>>  languagesByCountry(String
>>>>>>   countryCode) {
>>>>>>>>    -        if (countryCode == null) {
>>>>>>>>    +    public static List<Locale>
>>>>  languagesByCountry(String
>>>>>>   countryCode)
>>>>>>>>    +    {
>>>>>>>>    +        if (countryCode == null)
>>>>>>>>    +        {
>>>>>>>>                return Collections.emptyList();
>>>>>>>>            }
>>>>>>>>            List<Locale> langs =
>>>>>>   cLanguagesByCountry.get(countryCode);
>>>>>>>>    -        if (langs == null) {
>>>>>>>>    +        if (langs == null)
>>>>>>>>    +        {
>>>>>>>>                langs = new ArrayList<Locale>();
>>>>>>>>                List<Locale> locales =
>>>>  availableLocaleList();
>>>>>>>>    -            for (int i = 0; i < locales.size();
>> i++) {
>>>>>>>>    +            for (int i = 0; i < locales.size();
>> i++)
>>>>>>>>    +            {
>>>>>>>>                    Locale locale = locales.get(i);
>>>>>>>>                    if
>> (countryCode.equals(locale.getCountry())
>>>>  &&
>>>>>>>>    -                        locale.getVariant().length()
>> == 0) {
>>>>>>>>    +                        locale.getVariant().length()
>> == 0)
>>>>>>>>    +                {
>>>>>>>>                        langs.add(locale);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    @@ -251,28 +288,34 @@ class _LocaleUtils {
>>>>>>>>        }
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * <p>Obtains the list of countries
>> supported for a
>>>>  given
>>>>>>   language.</p>
>>>>>>>>    -     *
>>>>>>>>    +     *
>>>>>>>>         * <p>This method takes a language code and
>> searches
>>>>  to find
>>>>>>   the
>>>>>>>>         * countries available for that language. Variant
>> locales
>>>>  are
>>>>>>   removed.</p>
>>>>>>>>         *
>>>>>>>>         * @param languageCode  the 2 letter language
>> code, null
>>>>  returns
>>>>>>   empty
>>>>>>>>         * @return an unmodifiable List of Locale
>> objects, not
>>>>  null
>>>>>>>>         */
>>>>>>>>    -    public static List<Locale>
>>>>  countriesByLanguage(String
>>>>>>   languageCode) {
>>>>>>>>    -        if (languageCode == null) {
>>>>>>>>    +    public static List<Locale>
>>>>  countriesByLanguage(String
>>>>>>   languageCode)
>>>>>>>>    +    {
>>>>>>>>    +        if (languageCode == null)
>>>>>>>>    +        {
>>>>>>>>                return Collections.emptyList();
>>>>>>>>            }
>>>>>>>>            List<Locale> countries =
>>>>>>   cCountriesByLanguage.get(languageCode);
>>>>>>>>    -        if (countries == null) {
>>>>>>>>    +        if (countries == null)
>>>>>>>>    +        {
>>>>>>>>                countries = new
>> ArrayList<Locale>();
>>>>>>>>                List<Locale> locales =
>>>>  availableLocaleList();
>>>>>>>>    -            for (int i = 0; i < locales.size();
>> i++) {
>>>>>>>>    +            for (int i = 0; i < locales.size();
>> i++)
>>>>>>>>    +            {
>>>>>>>>                    Locale locale = locales.get(i);
>>>>>>>>                    if
>> (languageCode.equals(locale.getLanguage())
>>>>>>   &&
>>>>>>>>                            locale.getCountry().length()
>> != 0
>>>>  &&
>>>>>>>>    -                        locale.getVariant().length()
>> == 0) {
>>>>>>>>    +                        locale.getVariant().length()
>> == 0)
>>>>>>>>    +                {
>>>>>>>>                        countries.add(locale);
>>>>>>>>                    }
>>>>>>>>                }
>>>>>>>>    @@ -285,13 +328,15 @@ class _LocaleUtils {
>>>>>>>>
>>>>>>>>
>>>>>>
>>>>
>> //-----------------------------------------------------------------------
>>>>>>>>        // class to avoid synchronization
>>>>>>>>    -    static class SyncAvoid {
>>>>>>>>    +    static class SyncAvoid
>>>>>>>>    +    {
>>>>>>>>            /** Unmodifiable list of available locales.
>> */
>>>>>>>>            private static List<Locale>
>>>>  AVAILABLE_LOCALE_LIST;
>>>>>>>>            /** Unmodifiable set of available locales. */
>>>>>>>>            private static Set<Locale>
>> AVAILABLE_LOCALE_SET;
>>>>>>>>    -
>>>>>>>>    -        static {
>>>>>>>>    +
>>>>>>>>    +        static
>>>>>>>>    +        {
>>>>>>>>                List<Locale> list = new
>>>>>>
>>  ArrayList<Locale>(Arrays.asList(Locale.getAvailableLocales()));
>>>>   // extra
>>>>>>   safe
>>>>>>>>                AVAILABLE_LOCALE_LIST =
>>>>  Collections.unmodifiableList(list);
>>>>>>>>                AVAILABLE_LOCALE_SET =
>>>>  Collections.unmodifiableSet(new
>>>>>>   HashSet<Locale>(availableLocaleList()));
>>>>>>>>
>>>>>>>>    Modified:
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToListener.java
>>>>>>>>    URL:
>>>>>>
>>>>
>> http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToListener.java?rev=1188267&r1=1188266&r2=1188267&view=diff
>>>>>>>>
>>>>>>
>>>>
>> ==============================================================================
>>>>>>>>    ---
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToListener.java
>>>>>>   (original)
>>>>>>>>    +++
>>>>>>
>>>>
>> myfaces/core/trunk/api/src/main/java/javax/faces/component/_MethodBindingToListener.java
>>>>>>   Mon Oct 24 18:09:08 2011
>>>>>>>>    @@ -20,7 +20,6 @@
>>>>>>>>     package javax.faces.component;
>>>>>>>>
>>>>>>>>     import javax.faces.FacesException;
>>>>>>>>    -import javax.faces.component.StateHolder;
>>>>>>>>     import javax.faces.context.FacesContext;
>>>>>>>>     import javax.faces.el.EvaluationException;
>>>>>>>>     import javax.faces.el.MethodBinding;
>>>>>>>>    @@ -32,17 +31,20 @@ import
>> javax.faces.event.FacesEvent;
>>>>>>>>     *
>>>>>>>>     * @author Stan Silvert
>>>>>>>>     */
>>>>>>>>    -abstract class _MethodBindingToListener implements
>>>>  StateHolder {
>>>>>>>>    -
>>>>>>>>    +abstract class _MethodBindingToListener implements
>>>>  StateHolder
>>>>>>>>    +{
>>>>>>>>    +
>>>>>>>>        protected MethodBinding methodBinding;
>>>>>>>>    -
>>>>>>>>    -    public _MethodBindingToListener() {
>>>>>>>>    +
>>>>>>>>    +    public _MethodBindingToListener()
>>>>>>>>    +    {
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>        /**
>>>>>>>>         * Creates a new instance of
>> MethodBindingToListener
>>>>>>>>         */
>>>>>>>>    -    public _MethodBindingToListener(MethodBinding
>>>>  methodBinding) {
>>>>>>>>    +    public _MethodBindingToListener(MethodBinding
>>>>  methodBinding)
>>>>>>>>    +    {
>>>>>>>>            if (methodBinding == null)
>>>>>>>>            {
>>>>>>>>                throw new
>> NullPointerException("methodBinding
>>>>  can not
>>>>>>   be null");
>>>>>>>>    @@ -51,58 +53,71 @@ abstract class
>> _MethodBindingToListener
>>>>>>>>            {
>>>>>>>>                throw new
>>>>  IllegalArgumentException("methodBinding must
>>>>>>   implement the StateHolder interface");
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>            this.methodBinding = methodBinding;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    private FacesContext getFacesContext() {
>>>>>>>>    +    private FacesContext getFacesContext()
>>>>>>>>    +    {
>>>>>>>>            return FacesContext.getCurrentInstance();
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    protected void invokeMethodBinding(FacesEvent
>> event)
>>>>  throws
>>>>>>   AbortProcessingException {
>>>>>>>>    -        try {
>>>>>>>>    -            methodBinding.invoke(getFacesContext(),
>> new
>>>>  Object[]
>>>>>>   {event});
>>>>>>>>    +    protected void invokeMethodBinding(FacesEvent
>> event)
>>>>  throws
>>>>>>   AbortProcessingException
>>>>>>>>    +    {
>>>>>>>>    +        try
>>>>>>>>    +        {
>>>>>>>>    +            methodBinding.invoke(getFacesContext(),
>> new
>>>>>>   Object[]{event});
>>>>>>>>            }
>>>>>>>>    -        catch (EvaluationException e) {
>>>>>>>>    +        catch (EvaluationException e)
>>>>>>>>    +        {
>>>>>>>>                Throwable cause = e.getCause();
>>>>>>>>    -            if (cause != null && cause
>> instanceof
>>>>>>   AbortProcessingException) {
>>>>>>>>    -                throw
>> (AbortProcessingException)cause;
>>>>>>>>    +            if (cause != null && cause
>> instanceof
>>>>>>   AbortProcessingException)
>>>>>>>>    +            {
>>>>>>>>    +                throw (AbortProcessingException)
>> cause;
>>>>>>>>                }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>                throw e;
>>>>>>>>            }
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    -    public MethodBinding getMethodBinding() {
>>>>>>>>    +
>>>>>>>>    +    public MethodBinding getMethodBinding()
>>>>>>>>    +    {
>>>>>>>>            return methodBinding;
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    -    public void restoreState(FacesContext context,
>> Object
>>>>  state) {
>>>>>>>>    -        Object[] stateArray = (Object[])state;
>>>>>>>>    -        try {
>>>>>>>>    -            methodBinding =
>>>>>>   (MethodBinding)_ClassUtils.getContextClassLoader()
>>>>>>>>    -
>>>>>>   .loadClass((String)stateArray[0])
>>>>>>>>    -
>>>>  .newInstance();
>>>>>>>>    -        } catch (Exception e) {
>>>>>>>>    +
>>>>>>>>    +    public void restoreState(FacesContext context,
>> Object
>>>>  state)
>>>>>>>>    +    {
>>>>>>>>    +        Object[] stateArray = (Object[]) state;
>>>>>>>>    +        try
>>>>>>>>    +        {
>>>>>>>>    +            methodBinding = (MethodBinding)
>>>>>>   _ClassUtils.getContextClassLoader()
>>>>>>>>    +                    .loadClass((String)
>> stateArray[0])
>>>>>>>>    +                    .newInstance();
>>>>>>>>    +        }
>>>>>>>>    +        catch (Exception e)
>>>>>>>>    +        {
>>>>>>>>                throw new FacesException(e);
>>>>>>>>            }
>>>>>>>>    -
>>>>>>>>    -
>>  ((StateHolder)methodBinding).restoreState(context,
>>>>>>   stateArray[1]);
>>>>>>>>    +
>>>>>>>>    +        ((StateHolder)
>> methodBinding).restoreState(context,
>>>>>>   stateArray[1]);
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    public Object saveState(FacesContext context) {
>>>>>>>>    +    public Object saveState(FacesContext context)
>>>>>>>>    +    {
>>>>>>>>            Object[] stateArray = new Object[2];
>>>>>>>>            stateArray[0] =
>> methodBinding.getClass().getName();
>>>>>>>>    -        stateArray[1] =
>>>>>>   ((StateHolder)methodBinding).saveState(context);
>>>>>>>>    +        stateArray[1] = ((StateHolder)
>>>>>>   methodBinding).saveState(context);
>>>>>>>>            return stateArray;
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    public void setTransient(boolean
>> newTransientValue) {
>>>>>>>>    -
>>>>   ((StateHolder)methodBinding).setTransient(newTransientValue);
>>>>>>>>    +    public void setTransient(boolean
>> newTransientValue)
>>>>>>>>    +    {
>>>>>>>>    +        ((StateHolder)
>>>>  methodBinding).setTransient(newTransientValue);
>>>>>>>>        }
>>>>>>>>
>>>>>>>>    -    public boolean isTransient() {
>>>>>>>>    -        return
>> ((StateHolder)methodBinding).isTransient();
>>>>>>>>    +    public boolean isTransient()
>>>>>>>>    +    {
>>>>>>>>    +        return ((StateHolder)
>> methodBinding).isTransient();
>>>>>>>>        }
>>>>>>>>    -
>>>>>>>>    +
>>>>>>>>     }
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>   --
>>>>>>   Jakob Korherr
>>>>>>
>>>>>>   blog: http://www.jakobk.com
>>>>>>   twitter: http://twitter.com/jakobkorherr
>>>>>>   work: http://www.irian.at
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>>
>> --
>> Jakob Korherr
>>
>> blog: http://www.jakobk.com
>> twitter: http://twitter.com/jakobkorherr
>> work: http://www.irian.at
>>
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at
Mime
View raw message