Package ej.mwt.stylesheet.selector

## Interface Selector

- All Known Implementing Classes:
    `AdjacentSiblingCombinator`, `AndCombinator`, `ChildCombinator`, `ClassSelector`, `Combinator`, `DescendantCombinator`, `DisabledSelector`, `EnabledSelector`, `EvenChildSelector`, `FirstChildSelector`, `GeneralSiblingCombinator`, `LastChildSelector`, `NotSelector`, `NthChildSelector`, `OddChildSelector`, `RootSelector`, `StateSelector`, `StrictTypeSelector`, `TypeSelector`, `UniversalSelector`

      public interface Selector

  Represents a selector.

- - ### Method Summary

    All Methods Instance Methods Abstract 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.

- - ### Method Detail

    - #### appliesToWidget

          boolean appliesToWidget​(Widget widget)

      Checks whether or not this selector applies to the given widget.
      Parameters:
        `widget` - the widget to test.
      Returns:
        `true` if this selectors applies to the given widget, `false` otherwise.

    - #### getSpecificity

          int getSpecificity()

      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.
      Returns:
        the specificity of this selector.

    - #### equals

          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.

      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`