Package com.google.gwt.resources.gss

## Class ExternalClassesCollector

- java.lang.Object
- - com.google.gwt.thirdparty.common.css.compiler.ast.DefaultTreeVisitor
  - - com.google.gwt.resources.gss.ExternalClassesCollector

- All Implemented Interfaces:
    `com.google.gwt.thirdparty.common.css.compiler.ast.AtRuleHandler`, `com.google.gwt.thirdparty.common.css.compiler.ast.CssCompilerPass`, `com.google.gwt.thirdparty.common.css.compiler.ast.CssTreeVisitor`

      public class ExternalClassesCollector
      extends com.google.gwt.thirdparty.common.css.compiler.ast.DefaultTreeVisitor
      implements com.google.gwt.thirdparty.common.css.compiler.ast.CssCompilerPass

  Compiler pass that collects external styles declared with the `@external` at-rule.

  This pass also removes the `@external` nodes from the AST.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `EXTERNAL_AT_RULE` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ExternalClassesCollector​(com.google.gwt.thirdparty.common.css.compiler.ast.MutatingVisitController visitController, com.google.gwt.thirdparty.common.css.compiler.ast.ErrorManager errorManager)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `enterClassSelector​(com.google.gwt.thirdparty.common.css.compiler.ast.CssClassSelectorNode classSelector)` |
    `com.google.gwt.thirdparty.guava.common.collect.ImmutableSet<java.lang.String>` | `getExternalClassNames​(java.util.Set<java.lang.String> styleClassesSet, java.util.Set<java.lang.String> orphanClassName)` | Returns an immutable set of external class names that should not be renamed.
    `void` | `leaveUnknownAtRule​(com.google.gwt.thirdparty.common.css.compiler.ast.CssUnknownAtRuleNode node)` |
    `void` | `runPass()` |

    - ### Methods inherited from class com.google.gwt.thirdparty.common.css.compiler.ast.DefaultTreeVisitor

      `enterArgumentNode, enterAttributeSelector, enterBlock, enterCombinator, enterComponent, enterCompositeValueNode, enterCompositeValueNodeOperator, enterConditionalBlock, enterConditionalRule, enterDeclaration, enterDeclarationBlock, enterDefinition, enterFontFace, enterForLoop, enterFunctionNode, enterIdSelector, enterImportBlock, enterImportRule, enterKey, enterKeyBlock, enterKeyframeRuleset, enterKeyframesRule, enterMediaRule, enterMediaTypeListDelimiter, enterMixin, enterMixinDefinition, enterPageRule, enterPageSelector, enterPropertyValue, enterProvideNode, enterPseudoClass, enterPseudoElement, enterRequireNode, enterRuleset, enterSelector, enterSelectorBlock, enterTree, enterUnknownAtRule, enterValueNode, leaveArgumentNode, leaveAttributeSelector, leaveBlock, leaveClassSelector, leaveCombinator, leaveComponent, leaveCompositeValueNode, leaveCompositeValueNodeOperator, leaveConditionalBlock, leaveConditionalRule, leaveDeclaration, leaveDeclarationBlock, leaveDefinition, leaveFontFace, leaveForLoop, leaveFunctionNode, leaveIdSelector, leaveImportBlock, leaveImportRule, leaveKey, leaveKeyBlock, leaveKeyframeRuleset, leaveKeyframesRule, leaveMediaRule, leaveMediaTypeListDelimiter, leaveMixin, leaveMixinDefinition, leavePageRule, leavePageSelector, leavePropertyValue, leaveProvideNode, leavePseudoClass, leavePseudoElement, leaveRequireNode, leaveRuleset, leaveSelector, leaveSelectorBlock, leaveTree, leaveValueNode, visit`

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### EXTERNAL_AT_RULE

          public static final java.lang.String EXTERNAL_AT_RULE

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ExternalClassesCollector

          public ExternalClassesCollector​(com.google.gwt.thirdparty.common.css.compiler.ast.MutatingVisitController visitController,
                                          com.google.gwt.thirdparty.common.css.compiler.ast.ErrorManager errorManager)

  - ### Method Detail

    - #### runPass

          public void runPass()

      Specified by:
        `runPass` in interface `com.google.gwt.thirdparty.common.css.compiler.ast.CssCompilerPass`

    - #### enterClassSelector

          public boolean enterClassSelector​(com.google.gwt.thirdparty.common.css.compiler.ast.CssClassSelectorNode classSelector)

      Specified by:
        `enterClassSelector` in interface `com.google.gwt.thirdparty.common.css.compiler.ast.CssTreeVisitor`
      Overrides:
        `enterClassSelector` in class `com.google.gwt.thirdparty.common.css.compiler.ast.DefaultTreeVisitor`

    - #### leaveUnknownAtRule

          public void leaveUnknownAtRule​(com.google.gwt.thirdparty.common.css.compiler.ast.CssUnknownAtRuleNode node)

      Specified by:
        `leaveUnknownAtRule` in interface `com.google.gwt.thirdparty.common.css.compiler.ast.AtRuleHandler`
      Overrides:
        `leaveUnknownAtRule` in class `com.google.gwt.thirdparty.common.css.compiler.ast.DefaultTreeVisitor`

    - #### getExternalClassNames

          public com.google.gwt.thirdparty.guava.common.collect.ImmutableSet<java.lang.String> getExternalClassNames​(java.util.Set<java.lang.String> styleClassesSet,
                                                                                                                     java.util.Set<java.lang.String> orphanClassName)

      Returns an immutable set of external class names that should not be renamed. The returned set contains all complete class names defined with `@external` as well as all of the class names from `styleClassesSet` that match prefixes defined with `@external`.

      The set will contain also the class names that are not in the AST anymore (defined in a conditional node that has been evaluated to false) and are not associated to a java method. That doesn't make sense to rename these class names because they are not in the final css and javascript. Moreover we handle the case where an `@external` related to these style classes has been removed from the AST (because it was also defined in a conditional node evaluated to false) and the compiler doesn't have to throw and error for this case.

             /* conditional node evaluated to false at compile time */

      Parameters:
        `styleClassesSet` - a set of class names that should be filtered to return those matching external prefixes. Note that the passed-in set is not modified.
        `orphanClassName` - a set of class names that aren't associated to a java method of the CssResource interface.
      Returns:
        an immutable set of class names. Note that the returned names are not prefixed with "."; they are the raw name.