Skip to content

Commit

Permalink
Draft an API for programmatic access to assignability rules for obser…
Browse files Browse the repository at this point in the history
…ver methods and typesafe resolution.
  • Loading branch information
manovotn committed Dec 12, 2023
1 parent ecec955 commit 083c308
Showing 1 changed file with 38 additions and 0 deletions.
38 changes: 38 additions & 0 deletions api/src/main/java/jakarta/enterprise/inject/spi/BeanContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -251,4 +251,42 @@ public interface BeanContainer {
* @since 2.0
*/
Instance<Object> createInstance();

/**
* Returns true if a bean with given bean types and qualifiers would be assignable
* to an injection point with given required type and required qualifiers, false otherwise.
* In other words, this method provides access to the typesafe resolution rules - the process of matching a bean to an injection point.
* <p>
* Callers do not need to include implicit qualifiers such as {@code @Default} or {@code Any}.
* These will be automatically added where applicable.
* <p>
* Throws {@link IllegalArgumentException} if any of the arguments is {@code null}.
*
* @param beanTypes bean types of a bean; must not be {@code null}
* @param beanQualifiers qualifiers of a bean; must not be {@code null}
* @param requiredType required type of an injection point; must not be {@code null}
* @param requiredQualifiers required qualifiers of an injection point; must not be {@code null}
* @return true if a bean with given bean types and qualifiers would be assignable
* to an injection point with given required type and required qualifiers, false otherwise
*/
boolean isMatchingBean(Set<Type> beanTypes, Set<Annotation> beanQualifiers, Type requiredType, Set<Annotation> requiredQualifiers);

/**
* Returns true if an event object with given type and qualifiers would match
* an observer method with given observed event type and observed event qualifiers, false otherwise.
* In other words, this method provides access to the assignability rules for observers - the process of matching an event to an observer method.
* <p>
* Callers do not need to supply implicit qualifiers such as {@code @Default} or {@code Any}.
* These will be automatically added where applicable.
* <p>
* Throws {@link IllegalArgumentException} if any of the arguments is {@code null}.
*
* @param eventType type of an event object; must not be {@code null}
* @param eventQualifiers event qualifiers; must not be {@code null}
* @param observedEventType observed event type of an observer method; must not be {@code null}
* @param observedEventQualifiers observed event qualifiers on an observer method; must not be {@code null}
* @return true if an event object with given type and qualifiers would result in notifying
* an observer method with given observed event type and observed event qualifiers, false otherwise
*/
boolean isMatchingEvent(Type eventType, Set<Annotation> eventQualifiers, Type observedEventType, Set<Annotation> observedEventQualifiers);
}

0 comments on commit 083c308

Please sign in to comment.