com.smartgwt.client.docs

## Interface Reflection

-     public interface Reflection

  ### Registering Classes for Reflection

  In order to specify a SmartGWT class as a constructor in `Component XML` or `Component Schema`, or for other purposes, such as for `autoChildren` or for `DataSourceField.setEditorType(Class)`, you must first register the class with the `BeanFactory` reflection mechanism.

  If you want to register `Canvas` and all its subclasses found in the classpath (including your custom subclasses), you can use the `BeanFactory.CanvasMetaFactory` interface to do this automatically:

  >       GWT.create(BeanFactory.CanvasMetaFactory.class);

  Similarly, to register `FormItem` and all its subclasses found in the classpath (including your custom subclasses), you can use the `BeanFactory.FormItemMetaFactory`.

  >       GWT.create(BeanFactory.FormItemMetaFactory.class);

  Alternatively, if only specific classes need to be instantiated and configured dynamically, you can register just those classes by annotating them with the `BeanFactory.Generate` annotation instead. For instance:

  >        @BeanFactory.Generate
  >       public class MyCanvas extends Canvas {
  >           ...
  >       }

  For framework classes (where you cannot annotate the class directly), you can supply an array of Class literals to the annotation. For instance:

  >        @BeanFactory.Generate({Canvas.class, TreeGrid.class})
  >       public interface EmptyInterface {
  >           ...
  >       }

  When you supply an array of class literals, the class you annotate (here `EmptyInterface`) will not itself have a BeanFactory generated for it. Thus, you can use an empty inner interface for this purpose.

  If there are only a limited number of classes which require dynamic configuration, it will save code size to use the `BeanFactory.Generate` annotation to generate factories for those specific types, rather than using `BeanFactory.CanvasMetaFactory` or `BeanFactory.FormItemMetaFactory`. Once a factory is generated for a class, GWT's opportunities to prune dead code are more limited for that class, since it cannot know what properties will be set or retrieved at run-time.