Package ej.mwt.stylesheet.selector

## Class RootSelector

- java.lang.Object
- - ej.mwt.stylesheet.selector.RootSelector

- All Implemented Interfaces:
    `Selector`

      public class RootSelector
      extends Object
      implements Selector

  A root selector selects by checking if a widget is the root widget of its hierarchy (i.e. if it has no parent).

  Equivalent to `:root` selector in CSS. Its specificity is (0,0,1,0).

  See Also:
    `SelectorHelper`

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static RootSelector` | `ROOT_SELECTOR` | Root selector singleton to avoid creating several ones.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `RootSelector()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `appliesToWidget​(Widget widget)` | Checks whether or not this selector applies to the given widget.
    `boolean` | `equals​(Object obj)` | Indicates whether some other object is "equal to" this one.
    `int` | `getSpecificity()` | Returns the specificity of this selector.
    `int` | `hashCode()` | Returns a hash code value for the object.

    - ### Methods inherited from class java.lang.Object

      `clone, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### ROOT_SELECTOR

          public static final RootSelector ROOT_SELECTOR

      Root selector singleton to avoid creating several ones.

  - ### Constructor Detail

    - #### RootSelector

          public RootSelector()

  - ### Method Detail

    - #### appliesToWidget

          public boolean appliesToWidget​(Widget widget)

      Description copied from interface: `Selector`
      Checks whether or not this selector applies to the given widget.
      Specified by:
        `appliesToWidget` in interface `Selector`
      Parameters:
        `widget` - the widget to test.
      Returns:
        `true` if this selectors applies to the given widget, `false` otherwise.

    - #### getSpecificity

          public int getSpecificity()

      Description copied from interface: `Selector`
      Returns the specificity of this selector.

      The specificity allows to determine in which order the rules of a stylesheet should be applied.

      A specificity is composed of four numbers (defined by CSS2 specification):

      - count 1 if the declaration is from is a 'style' attribute rather than a rule with a selector, 0 otherwise (= a)
      - count the number of ID attributes in the selector (= b)
      - count the number of other attributes and pseudo-classes in the selector (= c)
      - count the number of widget names and pseudo-widgets in the selector (= d)
      Concatenating the four numbers a-b-c-d (in a number system with a large base) gives the specificity. In this implementation, each number is stored on a byte in an integer. `SelectorHelper` provides a method to compute the specificity of a selector.
      Specified by:
        `getSpecificity` in interface `Selector`
      Returns:
        the specificity of this selector.

    - #### equals

          public boolean equals​(@Nullable
                                Object obj)

      Description copied from class: `Object`
      Indicates whether some other object is "equal to" this one.

      The `equals` method implements an equivalence relation on non-null object references:

      - It is reflexive: for any non-null reference value `x`, `x.equals(x)` should return `true`.
      - It is symmetric: for any non-null reference values `x` and `y`, `x.equals(y)` should return `true` if and only if `y.equals(x)` returns `true`.
      - It is transitive: for any non-null reference values `x`, `y`, and `z`, if `x.equals(y)` returns `true` and `y.equals(z)` returns `true`, then `x.equals(z)` should return `true`.
      - It is consistent: for any non-null reference values `x` and `y`, multiple invocations of `x.equals(y)` consistently return `true` or consistently return `false`, provided no information used in `equals` comparisons on the objects is modified.
      - For any non-null reference value `x`, `x.equals(null)` should return `false`.

      The `equals` method for class `Object` implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values `x` and `y`, this method returns `true` if and only if `x` and `y` refer to the same object (`x == y` has the value `true`).

      Note that it is generally necessary to override the `hashCode` method whenever this method is overridden, so as to maintain the general contract for the `hashCode` method, which states that equal objects must have equal hash codes.

      Specified by:
        `equals` in interface `Selector`
      Overrides:
        `equals` in class `Object`
      Parameters:
        `obj` - the reference object with which to compare.
      Returns:
        `true` if this object is the same as the obj argument; `false` otherwise.
      See Also:
        `Object.hashCode()`, `HashMap`

    - #### hashCode

          public int hashCode()

      Description copied from class: `Object`
      Returns a hash code value for the object. This method is supported for the benefit of hash tables such as those provided by `HashMap`.

      The general contract of `hashCode` is:

      - Whenever it is invoked on the same object more than once during an execution of a Java application, the `hashCode` method must consistently return the same integer, provided no information used in `equals` comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.
      - If two objects are equal according to the `equals(Object)` method, then calling the `hashCode` method on each of the two objects must produce the same integer result.
      - It is not required that if two objects are unequal according to the `Object.equals(java.lang.Object)` method, then calling the `hashCode` method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.

      As much as is reasonably practical, the hashCode method defined by class `Object` does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)

      Overrides:
        `hashCode` in class `Object`
      Returns:
        a hash code value for this object.
      See Also:
        `Object.equals(java.lang.Object)`, `System.identityHashCode(java.lang.Object)`