anchor.diff:  
   NOTE: See also `io.quarkus.arc.processor.BuildExtension.Key` to discover the available metadata.
   
  +=== Custom Contexts
  +
  +An extension can register a custom `InjectableContext` implementation by means of a `ContextRegistrarBuildItem`:
  +
  +[source,java]
  +----
  +@BuildStep
  +ContextRegistrarBuildItem customContext() {
  +    return new ContextRegistrarBuildItem(new ContextRegistrar() {
  +         public void register(RegistrationContext registrationContext) {
  +            registrationContext.configure(CustomScoped.class).normal().contextClass(MyCustomContext.class).done();
  +         }
  +    });
  +}
  +----
  +
   [[remove_unused_beans]]
   == Removing Unused Beans
   
  
positive.code: 
  === Synthetic Beans
  
  Sometimes it's useful to register a synthetic bean, i.e. a bean that doesn't need to have a corresponding java class.
  In CDI this could be achieved using `AfterBeanDiscovery.addBean()` methods.
  In {project-name} we produce a `BeanRegistrarBuildItem` and leverage the `io.quarkus.arc.processor.BeanConfigurator` API to build a synthetic bean definition.
  
  // TODO add example
  
  NOTE: The output of a `BeanConfigurator` is recorded as bytecode. Therefore there are some limitations in how a synthetic bean instance is created. See also `BeanConfigurator.creator()` methods.
  
  
negative.code: [[limitations]]
  == Limitations
  
  * `@ConversationScoped` is not supported
  * Decorators are not supported
  * Portable Extensions are not supported
  * `BeanManager` - only the following methods are implemented: `getBeans()`, `createCreationalContext()`, `getReference()`, `resolve()`, `getContext()`, `getEvent()` and `createInstance()`
  