com.google.gwt.resources.ext

## Interface ResourceGenerator

- All Known Implementing Classes:
    AbstractResourceGenerator

      public interface ResourceGenerator

  Encapsulates per-type resource generation logic. This type is used only by developers who wish to add additional resource types to the resource generation system. Implementations are paired with one or more interfaces derived from ResourcePrototype that have been annotated with an `ResourceGeneratorType` annotation. Instances of ResourceGenerator must support default-instantiation (i.e. via `Class.newInstance()`).

  The methods on an instance of ResourceGenerator will be called in the following order by the resource generation system:

  1. `init(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext)`
  2. `prepare(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext, com.google.gwt.resources.ext.ClientBundleRequirements, com.google.gwt.core.ext.typeinfo.JMethod)` once for each method
  3. Based on the requirements specified by the ResourceGenerator, the framework may decide that no further action is required. If this is the case, the framework will immediately invoke `finish(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext)`.
  4. `createFields(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext, com.google.gwt.resources.ext.ClientBundleFields)`
  5. `createAssignment(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext, com.google.gwt.core.ext.typeinfo.JMethod)` once for each method
  6. `finish(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext)`

  The methods `prepare(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext, com.google.gwt.resources.ext.ClientBundleRequirements, com.google.gwt.core.ext.typeinfo.JMethod)` and `createAssignment(com.google.gwt.core.ext.TreeLogger, com.google.gwt.resources.ext.ResourceContext, com.google.gwt.core.ext.typeinfo.JMethod)` will be called only with those methods whose ResourcePrototype-derived type specifies the particular type of ResourceGenerator as the implementor. The relative order in which ResourceGenerators are invoked and the specific order in which the bundle's methods are presented is undefined.

  Direct access to the contents of the generated bundle implementation is intentionally limited to prevent unrelated ResourceGenerators from potentially creating namespace conflicts or generating invalid Java source.

  See Also:
    `ResourceGeneratorUtil`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method and Description
    --- | ---
    `java.lang.String` | `createAssignment(TreeLogger logger, ResourceContext context, JMethod method)` Produce the right-hand-side of a Java assignment expression to provide the singleton instance object for a particular resource.
    `void` | `createFields(TreeLogger logger, ResourceContext context, ClientBundleFields fields)` The ResourceGenerator can create fields within the implementation of the bundle type.
    `void` | `finish(TreeLogger logger, ResourceContext context)` Called at the end of the resource generation phase and can be used to perform cleanup.
    `void` | `init(TreeLogger logger, ResourceContext context)` Initialize the ResourceGenerator with the generation context that will remain valid for the duration of the resource-generation phase.
    `void` | `prepare(TreeLogger logger, ResourceContext context, ClientBundleRequirements requirements, JMethod method)` Called once for each method the ResourceGenerator is expected to handle.

- - ### Method Detail

    - #### createAssignment

          java.lang.String createAssignment(TreeLogger logger,
                                            ResourceContext context,
                                            JMethod method)
                                     throws UnableToCompleteException

      Produce the right-hand-side of a Java assignment expression to provide the singleton instance object for a particular resource.

      Example:

           new MySampleResource() { public Foo getFoo() { ... } }

      Throws:
        `UnableToCompleteException`

    - #### createFields

          void createFields(TreeLogger logger,
                            ResourceContext context,
                            ClientBundleFields fields)
                     throws UnableToCompleteException

      The ResourceGenerator can create fields within the implementation of the bundle type. The Fields object passed into this method is used to declare, and possibly initialize, Java fields within the final implementation of the resource bundle type.

      The Fields instance should not be retained beyond the lifetime of this method as operation on this object is not defined after the implementation of this method returns.

      Throws:
        `UnableToCompleteException`

    - #### finish

          void finish(TreeLogger logger,
                      ResourceContext context)
               throws UnableToCompleteException

      Called at the end of the resource generation phase and can be used to perform cleanup.
      Throws:
        `UnableToCompleteException`

    - #### init

          void init(TreeLogger logger,
                    ResourceContext context)
             throws UnableToCompleteException

      Initialize the ResourceGenerator with the generation context that will remain valid for the duration of the resource-generation phase. The logger instance should not be retained; use the per-method loggers instead.
      Throws:
        `UnableToCompleteException`

    - #### prepare

          void prepare(TreeLogger logger,
                       ResourceContext context,
                       ClientBundleRequirements requirements,
                       JMethod method)
                throws UnableToCompleteException

      Called once for each method the ResourceGenerator is expected to handle. This allows cross-resource state to be accumulated, such as for data aggregation.
      Throws:
        `UnableToCompleteException`