myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de>
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:22:12 GMT
Please reread the section with 

> final-Variablen und alle "abhängigen" Objekte

Actually this is the problem that the compiler just checks if the reference doesn't change. But it's allowed to invoke methods on this reference (becaues this doesnt necessarily mean it''s state changes). Thus the compiler cant detect it - but it's still invalid!

Also read section B (esp B.1 and B.2.2) of JSR-133.


LieGrue and gn8,
strub



----- Original Message -----
> From: Jakob Korherr <jakob.korherr@gmail.com>
> To: MyFaces Development <dev@myfaces.apache.org>; Mark Struberg <struberg@yahoo.de>
> Cc: 
> Sent: Tuesday, October 25, 2011 12:14 AM
> 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 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