- All Implemented Interfaces:
PartialStateHolder
,UntargetableComponent
,StateHolder
,TransientStateHolder
,ComponentSystemEventListener
,FacesListener
,SystemEventListenerHolder
,EventListener
- Direct Known Subclasses:
UIInstructions
,UILiteralText
,UIText
-
Field Summary
Fields inherited from class jakarta.faces.component.UIComponent
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, FACETS_KEY, VIEW_LOCATION_KEY
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
addFacesListener
(FacesListener faces) Add the specifiedFacesListener
to the set of listeners registered to receive event notifications from thisUIComponent
.void
broadcast
(FacesEvent event) Broadcast the specifiedFacesEvent
to all registered event listeners who have expressed an interest in events of this type.void
decode
(FacesContext faces) Decode any new state of thisUIComponent
from the request contained in the specifiedFacesContext
, and store this state as needed.void
encodeAll
(FacesContext faces) If this component returnstrue
fromUIComponent.isRendered()
, take the following action.void
encodeBegin
(FacesContext faces) If ourrendered
property istrue
, render the beginning of the current state of thisUIComponent
to the response contained in the specifiedFacesContext
.void
encodeChildren
(FacesContext faces) void
encodeEnd
(FacesContext faces) findComponent
(String id) Search for and return theUIComponent
with anid
that matches the specified search expression (if any), according to the algorithm described below.int
Return the number of childUIComponent
s that are associated with thisUIComponent
.protected FacesContext
Convenience method to return theFacesContext
instance for the current request.protected FacesListener[]
getFacesListeners
(Class faces) Return an array of registeredFacesListener
s that are instances of the specified class.Convenience method to return the named facet, if it exists, ornull
otherwise.int
Return the number of facetUIComponent
s that are associated with thisUIComponent
.Return a mutableMap
representing the facetUIComponent
s associated with thisUIComponent
, keyed by facet name (which must be a String).Return the identifier of the component family to which this component belongs.Return the parentUIComponent
of thisUIComponent
, if any.protected Renderer
getRenderer
(FacesContext faces) Convenience method to return theRenderer
instance associated with this component, if any; otherwise, returnnull
.Return theRenderer
type for thisUIComponent
(if any).boolean
Return a flag indicating whether this component is responsible for rendering its child components.getValueExpression
(String name) Return theValueExpression
used to calculate the value for the specified attribute or property name, if any.boolean
If true, the Object implementing this interface must not participate in state saving or restoring.void
processDecodes
(FacesContext faces) Perform the component tree processing required by the Apply Request Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.void
processUpdates
(FacesContext faces) Perform the component tree processing required by the Update Model Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.void
processValidators
(FacesContext faces) Perform the component tree processing required by the Process Validations phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.void
queueEvent
(FacesEvent event) Queue an event for broadcast at the end of the current request processing lifecycle phase.protected void
removeFacesListener
(FacesListener faces) Remove the specifiedFacesListener
from the set of listeners registered to receive event notifications from thisUIComponent
.void
setParent
(UIComponent parent) Set the parentUIComponent
of thisUIComponent
.void
setRendererType
(String rendererType) void
setTransient
(boolean tranzient) Denotes whether or not the Object implementing this interface must or must not participate in state saving or restoring.void
setValueExpression
(String name, ValueExpression arg1) Set theValueExpression
used to calculate the value for the specified attribute or property name, if any.Methods inherited from class jakarta.faces.component.UIComponentBase
addClientBehavior, clearInitialState, getAttributes, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getId, getListenersForEventClass, getPassThroughAttributes, invokeOnComponent, isRendered, markInitialState, processRestoreState, processSaveState, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setRendered, subscribeToEvent, unsubscribeFromEvent
Methods inherited from class jakarta.faces.component.UIComponent
getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, visitTree
-
Constructor Details
-
UILeaf
public UILeaf()
-
-
Method Details
-
getValueExpression
Description copied from class:UIComponent
Return the
ValueExpression
used to calculate the value for the specified attribute or property name, if any.This method must be overridden and implemented for components that comply with Jakarta Faces 1.2 and later.
- Overrides:
getValueExpression
in classUIComponent
- Parameters:
name
- Name of the attribute or property for which to retrieve aValueExpression
- Returns:
- the value expression, or
null
.
-
setValueExpression
Description copied from class:UIComponent
Set the
ValueExpression
used to calculate the value for the specified attribute or property name, if any.The implementation must call
Expression.isLiteralText()
on the argumentexpression
. IfisLiteralText()
returnstrue
, invokeValueExpression.getValue(jakarta.el.ELContext)
on the argument expression and pass the result as thevalue
parameter in a call tothis.
whereUIComponent.getAttributes()
.put(name, value)name
is the argumentname
. If an exception is thrown as a result of callingValueExpression.getValue(jakarta.el.ELContext)
, wrap it in aFacesException
and re-throw it. IfisLiteralText()
returnsfalse
, simply store the un-evaluatedexpression
argument in the collection ofValueExpression
s under the key given by the argumentname
.This method must be overridden and implemented for components that comply with Jakarta Faces 1.2 and later.
- Overrides:
setValueExpression
in classUIComponent
- Parameters:
name
- Name of the attribute or property for which to set aValueExpression
arg1
- TheValueExpression
to set, ornull
to remove any currently setValueExpression
-
getFamily
Description copied from class:UIComponent
Return the identifier of the component family to which this component belongs. This identifier, in conjunction with the value of the
rendererType
property, may be used to select the appropriateRenderer
for this component instance. Note this method should NOT returnnull
- Specified by:
getFamily
in classUIComponent
- Returns:
- the component family (not null).
-
getParent
Description copied from class:UIComponent
Return the parent
UIComponent
of thisUIComponent
, if any. A component must allow child components to be added to and removed from the list of children of this component, even though the child component returns null fromgetParent( )
.- Overrides:
getParent
in classUIComponentBase
- Returns:
- the parent component.
-
setParent
Description copied from class:UIComponent
Set the parent
UIComponent
of thisUIComponent
. Ifparent.isInView()
returnstrue
, calling this method will first cause aPreRemoveFromViewEvent
to be published, for this node, and then the children of this node. Then, once the re-parenting has occurred, aPostAddToViewEvent
will be published as well, first for this node, and then for the node's children, but only if any of the following conditions are true.-
FacesContext.getCurrentPhaseId()
returnsPhaseId.RESTORE_VIEW
and partial state saving is enabled. -
FacesContext.isPostback()
returnsfalse
andFacesContext.getCurrentPhaseId()
returns something other thanPhaseId.RESTORE_VIEW
This method must never be called by developers; a
UIComponent
's internal implementation will call it as components are added to or removed from a parent's childList
or facetMap
.- Overrides:
setParent
in classUIComponentBase
- Parameters:
parent
- The new parent, ornull
for the root node of a component tree
-
-
getRendererType
Description copied from class:UIComponent
Return the
Renderer
type for thisUIComponent
(if any).- Overrides:
getRendererType
in classUIComponentBase
- Returns:
- the renderer type.
-
setRendererType
Description copied from class:UIComponent
Set the
Renderer
type for thisUIComponent
, ornull
for components that render themselves.- Overrides:
setRendererType
in classUIComponentBase
- Parameters:
rendererType
- Logical identifier of the type ofRenderer
to use, ornull
for components that render themselves
-
getRendersChildren
public boolean getRendersChildren()Description copied from class:UIComponent
Return a flag indicating whether this component is responsible for rendering its child components. The default implementation in
UIComponentBase.getRendersChildren()
tries to find the renderer for this component. If it does, it callsRenderer.getRendersChildren()
and returns the result. If it doesn't, it returns false. As of version 1.2 of the Jakarta Faces Specification, component authors are encouraged to returntrue
from this method and rely onUIComponentBase.encodeChildren(jakarta.faces.context.FacesContext)
.- Overrides:
getRendersChildren
in classUIComponentBase
- Returns:
true
if the component renders its children,false
otherwise.
-
getChildren
Description copied from class:UIComponent
Return a mutable
List
representing the childUIComponent
s associated with this component. The returned implementation must support all of the standard and optionalList
methods, plus support the following additional requirements:- The
List
implementation must implement thejava.io.Serializable
interface. - Any attempt to add a
null
must throw a NullPointerException - Any attempt to add an object that does not implement
UIComponent
must throw a ClassCastException. - Whenever a new child component is added, the
parent
property of the child must be set to this component instance. If theparent
property of the child was already non-null, the child must first be removed from its previous parent (where it may have been either a child or a facet). - Whenever an existing child component is removed, the
parent
property of the child must be set tonull
. -
After the child component has been added to the view,
Application.publishEvent(jakarta.faces.context.FacesContext, java.lang.Class<? extends jakarta.faces.event.SystemEvent>, java.lang.Object)
must be called, passingPostAddToViewEvent
.class
as the first argument and the newly added component as the second argument if any the following cases are true.-
FacesContext.getCurrentPhaseId()
returnsPhaseId.RESTORE_VIEW
and partial state saving is enabled. -
FacesContext.isPostback()
returnsfalse
andFacesContext.getCurrentPhaseId()
returns something other thanPhaseId.RESTORE_VIEW
-
- Overrides:
getChildren
in classUIComponentBase
- Returns:
- the list of children.
- The
-
getChildCount
public int getChildCount()Description copied from class:UIComponent
Return the number of child
UIComponent
s that are associated with thisUIComponent
. If there are no children, this method must return 0. The method must not cause the creation of a child component list.- Overrides:
getChildCount
in classUIComponentBase
- Returns:
- the number of child components.
-
findComponent
Description copied from class:UIComponent
Search for and return the
UIComponent
with anid
that matches the specified search expression (if any), according to the algorithm described below.WARNING: The found
UIComponent
instance, if any, is returned without regard for its tree traversal context. Retrieving an Jakarta Expression Language-bound attribute from the component is not safe. Jakarta Expression Language expressions can contain implicit objects, such as#{component}
, which assume they are being evaluated within the scope of a tree traversal context. Evaluating expressions with these kinds of implicit objects outside of a tree traversal context produces undefined results. SeeUIComponent.invokeOnComponent(jakarta.faces.context.FacesContext, java.lang.String, jakarta.faces.component.ContextCallback)
for a method that does correctly account for the tree traversal context when operating on the foundUIComponent
instance.UIComponent.invokeOnComponent(jakarta.faces.context.FacesContext, java.lang.String, jakarta.faces.component.ContextCallback)
is also useful to find components given a simpleclientId
.Component identifiers are required to be unique within the scope of the closest ancestor
NamingContainer
that encloses this component (which might be this component itself). If there are noNamingContainer
components in the ancestry of this component, the root component in the tree is treated as if it were aNamingContainer
, whether or not its class actually implements theNamingContainer
interface.A search expression consists of either an identifier (which is matched exactly against the
id
property of aUIComponent
, or a series of such identifiers linked by theUINamingContainer.getSeparatorChar(jakarta.faces.context.FacesContext)
character value. The search algorithm should operates as follows, though alternate alogrithms may be used as long as the end result is the same:- Identify the
UIComponent
that will be the base for searching, by stopping as soon as one of the following conditions is met:- If the search expression begins with the the separator character (called an "absolute" search expression), the
base will be the root
UIComponent
of the component tree. The leading separator character will be stripped off, and the remainder of the search expression will be treated as a "relative" search expression as described below. - Otherwise, if this
UIComponent
is aNamingContainer
it will serve as the basis. - Otherwise, search up the parents of this component. If a
NamingContainer
is encountered, it will be the base. - Otherwise (if no
NamingContainer
is encountered) the rootUIComponent
will be the base.
- If the search expression begins with the the separator character (called an "absolute" search expression), the
base will be the root
- The search expression (possibly modified in the previous step) is now a "relative" search expression that will be
used to locate the component (if any) that has an
id
that matches, within the scope of the base component. The match is performed as follows:- If the search expression is a simple identifier, this value is compared to the
id
property, and then recursively through the facets and children of the baseUIComponent
(except that if a descendantNamingContainer
is found, its own facets and children are not searched). - If the search expression includes more than one identifier separated by the separator character, the first
identifier is used to locate a
NamingContainer
by the rules in the previous bullet point. Then, thefindComponent()
method of thisNamingContainer
will be called, passing the remainder of the search expression.
- If the search expression is a simple identifier, this value is compared to the
- Overrides:
findComponent
in classUIComponentBase
- Parameters:
id
- Search expression identifying theUIComponent
to be returned- Returns:
- the found
UIComponent
, ornull
if the component was not found.
- Identify the
-
getFacets
Description copied from class:UIComponent
Return a mutable
Map
representing the facetUIComponent
s associated with thisUIComponent
, keyed by facet name (which must be a String). The returned implementation must support all of the standard and optionalMap
methods, plus support the following additional requirements:- The
Map
implementation must implement thejava.io.Serializable
interface. - Any attempt to add a
null
key or value must throw a NullPointerException. - Any attempt to add a key that is not a String must throw a ClassCastException.
- Any attempt to add a value that is not a
UIComponent
must throw a ClassCastException. - Whenever a new facet
UIComponent
is added:- The
parent
property of the component must be set to this component instance. - If the
parent
property of the component was already non-null, the component must first be removed from its previous parent (where it may have been either a child or a facet).
- The
- Whenever an existing facet
UIComponent
is removed:- The
parent
property of the facet must be set tonull
.
- The
- Overrides:
getFacets
in classUIComponentBase
- Returns:
- the map of facets.
- The
-
getFacetCount
public int getFacetCount()Description copied from class:UIComponent
Return the number of facet
UIComponent
s that are associated with thisUIComponent
. If there are no facets, this method must return 0. The method must not cause the creation of a facet component map.For backwards compatability with classes that extend UIComponent directly, a default implementation is provided that simply calls
UIComponent.getFacets()
and then calls thesize()
method on the returnedMap
. A more optimized version of this method is provided inUIComponentBase.getFacetCount()
.- Overrides:
getFacetCount
in classUIComponentBase
- Returns:
- the number of facets.
-
getFacet
Description copied from class:UIComponent
Convenience method to return the named facet, if it exists, or
null
otherwise. If the requested facet does not exist, the facets Map must not be created.- Overrides:
getFacet
in classUIComponentBase
- Parameters:
name
- Name of the desired facet- Returns:
- the component, or
null
.
-
getFacetsAndChildren
Description copied from class:UIComponent
Return an
Iterator
over the facet followed by childUIComponent
s of thisUIComponent
. Facets are returned in an undefined order, followed by all the children in the order they are stored in the child list. If this component has no facets or children, an emptyIterator
is returned.The returned
Iterator
must not support theremove()
operation.- Overrides:
getFacetsAndChildren
in classUIComponentBase
- Returns:
- the facets and children iterator.
-
broadcast
Description copied from class:UIComponent
Broadcast the specified
FacesEvent
to all registered event listeners who have expressed an interest in events of this type. Listeners are called in the order in which they were added.If the
event
is an instance ofBehaviorEvent
and the currentcomponent
is the source of theevent
callBehaviorEvent.getBehavior()
to get theBehavior
for the event. CallBehavior.broadcast(jakarta.faces.event.BehaviorEvent)
on theBehavior
instance.- Overrides:
broadcast
in classUIComponentBase
- Parameters:
event
- TheFacesEvent
to be broadcast- Throws:
AbortProcessingException
- Signal the Jakarta Faces implementation that no further processing on the current event should be performed
-
decode
Description copied from class:UIComponent
Decode any new state of this
UIComponent
from the request contained in the specifiedFacesContext
, and store this state as needed.During decoding, events may be enqueued for later processing (by event listeners who have registered an interest), by calling
queueEvent()
.- Overrides:
decode
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the request we are processing
-
encodeBegin
Description copied from class:UIComponent
If our
rendered
property istrue
, render the beginning of the current state of thisUIComponent
to the response contained in the specifiedFacesContext
. CallUIComponent.pushComponentToEL(jakarta.faces.context.FacesContext,jakarta.faces.component.UIComponent)
. CallApplication.publishEvent(jakarta.faces.context.FacesContext, java.lang.Class<? extends jakarta.faces.event.SystemEvent>, java.lang.Object)
, passingPreRenderComponentEvent
.class
as the first argument and the component instance to be rendered as the second argument.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeBegin(FacesContext, UIComponent)
.If our
rendered
property isfalse
, callUIComponent.pushComponentToEL(jakarta.faces.context.FacesContext,jakarta.faces.component.UIComponent)
and return immediately.- Overrides:
encodeBegin
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while rendering
-
encodeChildren
Description copied from class:UIComponent
If our
rendered
property istrue
, render the childUIComponent
s of thisUIComponent
. This method will only be called if therendersChildren
property istrue
.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeChildren(FacesContext, UIComponent)
. If noRenderer
is associated with thisUIComponent
, iterate over each of the children of this component and callUIComponent.encodeAll(jakarta.faces.context.FacesContext)
.- Overrides:
encodeChildren
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while rendering
-
encodeEnd
Description copied from class:UIComponent
If our
rendered
property istrue
, render the ending of the current state of thisUIComponent
.If a
Renderer
is associated with thisUIComponent
, the actual encoding will be delegated toRenderer.encodeEnd(FacesContext, UIComponent)
.Call
UIComponent.popComponentFromEL(jakarta.faces.context.FacesContext)
. before returning regardless of the value of therendered
property.- Overrides:
encodeEnd
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the response we are creating- Throws:
IOException
- if an input/output error occurs while rendering
-
encodeAll
Description copied from class:UIComponent
If this component returns
true
fromUIComponent.isRendered()
, take the following action.Render this component and all its children that return
true
fromisRendered()
, regardless of the value of theUIComponent.getRendersChildren()
flag.- Overrides:
encodeAll
in classUIComponent
- Parameters:
faces
- the Faces context.- Throws:
IOException
- if an input/output error occurs while rendering
-
addFacesListener
Description copied from class:UIComponentBase
Add the specified
FacesListener
to the set of listeners registered to receive event notifications from thisUIComponent
. It is expected thatUIComponent
classes acting as event sources will have corresponding typesafe APIs for registering listeners of the required type, and the implementation of those registration methods will delegate to this method. For example:public class FooEvent extends FacesEvent { ... protected boolean isAppropriateListener(FacesListener listener) { return (listener instanceof FooListener); } protected void processListener(FacesListener listener) { ((FooListener) listener).processFoo(this); } ... } public interface FooListener extends FacesListener { public void processFoo(FooEvent event); } public class FooComponent extends UIComponentBase { ... public void addFooListener(FooListener listener) { addFacesListener(listener); } public void removeFooListener(FooListener listener) { removeFacesListener(listener); } ... }
- Overrides:
addFacesListener
in classUIComponentBase
- Parameters:
faces
- TheFacesListener
to be registered
-
getFacesListeners
Description copied from class:UIComponent
Return an array of registered
FacesListener
s that are instances of the specified class. If there are no such registered listeners, a zero-length array is returned. The returned array can be safely be cast to an array strongly typed to an element type ofclazz
.- Overrides:
getFacesListeners
in classUIComponentBase
- Parameters:
faces
- Class that must be implemented by aFacesListener
for it to be returned- Returns:
- the Faces listeners, or a zero-length array.
-
removeFacesListener
Description copied from class:UIComponentBase
Remove the specified
FacesListener
from the set of listeners registered to receive event notifications from thisUIComponent
.- Overrides:
removeFacesListener
in classUIComponentBase
- Parameters:
faces
- TheFacesListener
to be deregistered
-
queueEvent
Description copied from class:UIComponent
Queue an event for broadcast at the end of the current request processing lifecycle phase. The default implementation in
UIComponentBase
must delegate this call to thequeueEvent()
method of the parentUIComponent
.- Overrides:
queueEvent
in classUIComponentBase
- Parameters:
event
-FacesEvent
to be queued
-
processDecodes
Description copied from class:UIComponent
Perform the component tree processing required by the Apply Request Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
UIComponent.pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processDecodes()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. - Call the
decode()
method of this component. - Call
UIComponent.popComponentFromEL(jakarta.faces.context.FacesContext)
from inside of afinally block, just before returning.
- If a
RuntimeException
is thrown during decode processing, callFacesContext.renderResponse()
and re-throw the exception.
- Overrides:
processDecodes
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the request we are processing
- If the
-
processValidators
Description copied from class:UIComponent
Perform the component tree processing required by the Process Validations phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
UIComponent.pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processValidators()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. - After returning from calling
getFacetsAndChildren()
callUIComponent.popComponentFromEL(jakarta.faces.context.FacesContext)
.
- Overrides:
processValidators
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the request we are processing- See Also:
- If the
-
processUpdates
Description copied from class:UIComponent
Perform the component tree processing required by the Update Model Values phase of the request processing lifecycle for all facets of this component, all children of this component, and this component itself, as follows.
- If the
rendered
property of thisUIComponent
isfalse
, skip further processing. - Call
UIComponent.pushComponentToEL(jakarta.faces.context.FacesContext, jakarta.faces.component.UIComponent)
. - Call the
processUpdates()
method of all facets and children of thisUIComponent
, in the order determined by a call togetFacetsAndChildren()
. After returning from theprocessUpdates()
method on a child or facet, callUIComponent.popComponentFromEL(jakarta.faces.context.FacesContext)
- Overrides:
processUpdates
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the request we are processing
- If the
-
getFacesContext
Description copied from class:UIComponent
Convenience method to return the
FacesContext
instance for the current request.- Overrides:
getFacesContext
in classUIComponentBase
- Returns:
- the Faces context.
-
getRenderer
Description copied from class:UIComponent
Convenience method to return the
Renderer
instance associated with this component, if any; otherwise, returnnull
.- Overrides:
getRenderer
in classUIComponentBase
- Parameters:
faces
-FacesContext
for the current request- Returns:
- the renderer, or
null
.
-
isTransient
public boolean isTransient()Description copied from interface:StateHolder
If true, the Object implementing this interface must not participate in state saving or restoring.
- Specified by:
isTransient
in interfaceStateHolder
- Overrides:
isTransient
in classUIComponentBase
- Returns:
true
if transient,false
otherwise.
-
setTransient
public void setTransient(boolean tranzient) Description copied from interface:StateHolder
Denotes whether or not the Object implementing this interface must or must not participate in state saving or restoring.
- Specified by:
setTransient
in interfaceStateHolder
- Overrides:
setTransient
in classUIComponentBase
- Parameters:
tranzient
- boolean passtrue
if this Object will not participate in state saving or restoring, otherwise passfalse
.
-