All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jakarta.enterprise.inject.build.compatible.spi.SyntheticBeanBuilder Maven / Gradle / Ivy

/*
 * Copyright (c) 2021 Red Hat and others
 *
 * This program and the accompanying materials are made available under the
 * Apache Software License 2.0 which is available at:
 * https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

package jakarta.enterprise.inject.build.compatible.spi;

import jakarta.enterprise.lang.model.AnnotationInfo;
import jakarta.enterprise.lang.model.declarations.ClassInfo;
import jakarta.enterprise.lang.model.types.Type;

import java.lang.annotation.Annotation;

/**
 * Builder for synthetic beans.
 * Instances are not reusable. For each synthetic bean, new instance
 * must be created by {@link SyntheticComponents#addBean(Class)}.
 *
 * @param  the bean class of this synthetic bean
 * @since 4.0
 */
public interface SyntheticBeanBuilder {
    /**
     * Adds {@code type} to the set of bean types of this synthetic bean. This method may be called
     * multiple times to add multiple bean types.
     * 

* If not called, the set of bean types of this synthetic bean will be a singleton set * containing {@code java.lang.Object}. * * @param type the bean type, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder type(Class type); /** * Adds {@code type} to the set of bean types of this synthetic bean. This method may be called * multiple times to add multiple bean types. *

* If not called, the set of bean types of this synthetic bean will be a singleton set * containing {@code java.lang.Object}. * * @param type the bean type, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder type(ClassInfo type); /** * Adds {@code type} to the set of bean types of this synthetic bean. This method may be called * multiple times to add multiple bean types. *

* If not called, the set of bean types of this synthetic bean will be a singleton set * containing {@code java.lang.Object}. * * @param type the bean type, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder type(Type type); /** * Adds a marker annotation of given type to the set of qualifiers of this synthetic bean. * This method may be called multiple times to add multiple qualifiers. *

* If not called, this synthetic bean will have the {@code @Default} qualifier * (and the {@code @Any} qualifier that all beans have). * * @param annotationType the type of the marker annotation, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder qualifier(Class annotationType); /** * Adds given annotation to the set of qualifiers of this synthetic bean. * This method may be called multiple times to add multiple qualifiers. *

* If not called, this synthetic bean will have the {@code @Default} qualifier * (and the {@code @Any} qualifier that all beans have). * * @param qualifierAnnotation the annotation, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder qualifier(AnnotationInfo qualifierAnnotation); /** * Adds given annotation to the set of qualifiers of this synthetic bean. * This method may be called multiple times to add multiple qualifiers. *

* If not called, this synthetic bean will have the {@code @Default} qualifier * (and the {@code @Any} qualifier that all beans have). * * @param qualifierAnnotation the annotation, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder qualifier(Annotation qualifierAnnotation); /** * Sets the scope of this synthetic bean to given scope type. *

* If not called, this synthetic bean will be {@code @Dependent}. * * @param scopeAnnotation the scope type, must not be {@code null} * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder scope(Class scopeAnnotation); /** * Marks this synthetic bean as an alternative if desired. To make this synthetic bean * an enabled alternative, call both {@code alternative(true)} and {@code priority(some priority)}. *

* If this synthetic bean is an alternative, not setting a priority means * that it is not enabled, which is equivalent to not registering it at all. *

* If not called, this synthetic bean will not be an alternative. * * @param isAlternative whether this synthetic bean should be an alternative * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder alternative(boolean isAlternative); /** * Sets a priority of this synthetic bean. To make this synthetic bean an enabled alternative, * call both {@code alternative(true)} and {@code priority(some priority)}. *

* If this synthetic bean is an alternative, not setting a priority means * that it is not enabled, which is equivalent to not registering it at all. *

* If not called, this synthetic bean will not have a priority. * If this synthetic bean is not an alternative, the priority is ignored. * * @param priority the priority of this synthetic bean * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder priority(int priority); /** * Sets the bean name of this synthetic bean. If {@code beanName} is {@code null}, * this synthetic bean will not have a name. *

* If not called, this synthetic bean will not have a name. * * @param beanName the bean name of this synthetic bean * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder name(String beanName); /** * Adds {@code stereotypeAnnotation} to the set of stereotypes of this synthetic bean. * This method may be called multiple times to add multiple stereotypes. *

* If not called, this synthetic bean will have no stereotype. * * @param stereotypeAnnotation the stereotype, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder stereotype(Class stereotypeAnnotation); /** * Adds {@code stereotypeAnnotation} to the set of stereotypes of this synthetic bean. * This method may be called multiple times to add multiple stereotypes. *

* If not called, this synthetic bean will have no stereotype. * * @param stereotypeAnnotation the stereotype, must not be {@code null} * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder stereotype(ClassInfo stereotypeAnnotation); /** * Adds a {@code boolean}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, boolean value); /** * Adds a {@code boolean} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, boolean[] value); /** * Adds an {@code int}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, int value); /** * Adds an {@code int} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, int[] value); /** * Adds a {@code long}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, long value); /** * Adds a {@code long} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, long[] value); /** * Adds a {@code double}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, double value); /** * Adds a {@code double} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, double[] value); /** * Adds a {@code String}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, String value); /** * Adds a {@code String} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, String[] value); /** * Adds an enum-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Enum value); /** * Adds an enum array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Enum[] value); /** * Adds a {@code Class}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Class value); /** * Adds a {@code Class}-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. *

* When looked up from the parameter map in the creation/destruction function, the value will be * an instance of {@link Class}, not a {@code ClassInfo}. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, ClassInfo value); /** * Adds a {@code Class} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Class[] value); /** * Adds a {@code Class} array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. *

* When looked up from the parameter map in the creation/destruction function, the values will be * instances of {@link Class}, not {@code ClassInfo}. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, ClassInfo[] value); /** * Adds an annotation-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. *

* When looked up from the parameter map in the creation/destruction function, the value will be * an instance of the annotation type, not an {@code AnnotationInfo}. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, AnnotationInfo value); /** * Adds an annotation-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Annotation value); /** * Adds an annotation array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. *

* When looked up from the parameter map in the creation/destruction function, the values will be * instances of the corresponding annotation types, not {@code AnnotationInfo}. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, AnnotationInfo[] value); /** * Adds an annotation array-valued parameter to the parameter map. The parameter map is passed * to the {@linkplain SyntheticBeanCreator creation} and {@linkplain SyntheticBeanDisposer destruction} * functions when a bean instance is created/destroyed. * * @param key the parameter key, must not be {@code null} * @param value the parameter value * @return this {@code SyntheticBeanBuilder} */ SyntheticBeanBuilder withParam(String key, Annotation[] value); /** * Sets the class of the synthetic bean {@linkplain SyntheticBeanCreator creation} function. * CDI container will create an instance of the creation function every time when it needs * to obtain an instance of the synthetic bean. The class must be {@code public} and have * a {@code public} zero-parameter constructor; it must not be a bean. *

* If not called, the synthetic bean registration will fail. * * @param creatorClass the {@linkplain SyntheticBeanCreator creation} function class, must not be {@code null} * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder createWith(Class> creatorClass); /** * Sets the class of the synthetic bean {@linkplain SyntheticBeanDisposer destruction} function. * CDI container will create an instance of the destruction function every time when it needs * to destruction an instance of the synthetic bean. The class must be {@code public} and have * a {@code public} zero-parameter constructor; it must not be a bean. *

* If not called, a noop destruction function will be used. * * @param disposerClass the {@linkplain SyntheticBeanDisposer destruction} function class, must not be {@code null} * @return this {@code SyntheticBeanBuilder} * @throws IllegalStateException if this method is called multiple times */ SyntheticBeanBuilder disposeWith(Class> disposerClass); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy