diff --git a/README.md b/README.md index e267152..86d014c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ dependency: org.microbean microbean-event - 0.0.2 + 0.0.3 ``` diff --git a/pom.xml b/pom.xml index 446ea61..34a05be 100644 --- a/pom.xml +++ b/pom.xml @@ -127,7 +127,7 @@ org.microbean microbean-assign - 0.0.10 + 0.0.11 @@ -139,7 +139,7 @@ org.microbean microbean-bean - 0.0.21 + 0.0.22 diff --git a/src/main/java/org/microbean/event/EventQualifiersMatcher.java b/src/main/java/org/microbean/event/EventQualifiersMatcher.java index 7e28042..bb48d3c 100644 --- a/src/main/java/org/microbean/event/EventQualifiersMatcher.java +++ b/src/main/java/org/microbean/event/EventQualifiersMatcher.java @@ -16,11 +16,11 @@ import java.util.Collection; import org.microbean.assign.Matcher; +import org.microbean.assign.Qualifiers; import org.microbean.attributes.Attributes; -import static org.microbean.assign.Qualifiers.anyQualifier; -import static org.microbean.assign.Qualifiers.qualifiers; +import static java.util.Objects.requireNonNull; /** * A {@link Matcher} encapsulating , Collection> { + /* + * Instance fields. + */ + + + private final Qualifiers qualifiers; + + /* * Constructors. */ @@ -41,9 +49,14 @@ public final class EventQualifiersMatcher implements Matcher receiverAttribu final Collection payloadAttributes) { // "An event is delivered to an observer method if...the observer method has no event qualifiers or has a subset of // the event qualifiers." - final Collection receiverQualifiers = qualifiers(receiverAttributes); - return receiverQualifiers.isEmpty() || qualifiers(payloadAttributes).containsAll(receiverQualifiers); + final Collection receiverQualifiers = qualifiers.qualifiers(receiverAttributes); + return receiverQualifiers.isEmpty() || qualifiers.qualifiers(payloadAttributes).containsAll(receiverQualifiers); } } diff --git a/src/main/java/org/microbean/event/Events.java b/src/main/java/org/microbean/event/Events.java index 3b313d5..eb1f9b9 100644 --- a/src/main/java/org/microbean/event/Events.java +++ b/src/main/java/org/microbean/event/Events.java @@ -23,15 +23,13 @@ import org.microbean.attributes.Attributes; +import org.microbean.bean.Qualifiers; import org.microbean.bean.ReferencesSelector; import org.microbean.construct.Domain; import static java.util.Objects.requireNonNull; -import static org.microbean.assign.Qualifiers.anyQualifiers; -import static org.microbean.assign.Qualifiers.qualifiers; - /** * A utility class for working with events. * @@ -39,9 +37,11 @@ */ // Deliberately not final. public class Events { - + private final EventTypes eventTypes; + private final Qualifiers qualifiers; + private final EventTypeMatcher eventTypeMatcher; private final EventQualifiersMatcher eventQualifiersMatcher; @@ -53,6 +53,8 @@ public class Events { * * @param eventTypes an {@link EventTypes}; must not be {@code null} * + * @param qualifiers a {@link Qualifiers}; must not be {@code null} + * * @param eventTypeMatcher an {@link EventTypeMatcher}; must not be {@code null} * * @param eventQualifiersMatcher an {@link EventQualifiersMatcher}; must not be {@code null} @@ -60,10 +62,12 @@ public class Events { * @exception NullPointerException if any argument is {@code null} */ public Events(final EventTypes eventTypes, + final Qualifiers qualifiers, final EventTypeMatcher eventTypeMatcher, final EventQualifiersMatcher eventQualifiersMatcher) { super(); this.eventTypes = requireNonNull(eventTypes, "eventTypes"); + this.qualifiers = requireNonNull(qualifiers, "qualifiers"); this.eventTypeMatcher = requireNonNull(eventTypeMatcher, "eventTypeMatcher"); this.eventQualifiersMatcher = requireNonNull(eventQualifiersMatcher, "eventQualifiersMatcher"); final Domain d = eventTypes.domain(); @@ -71,7 +75,7 @@ public Events(final EventTypes eventTypes, new AttributedType(d.declaredType(d.typeElement(EventListener.class.getCanonicalName()), d.wildcardType(), d.wildcardType(null, d.javaLangObjectType())), - anyQualifiers()); + this.qualifiers.anyQualifiers()); } /** @@ -103,14 +107,14 @@ public final void fire(final TypeMirror typeArgumentSource, final Object event, final ReferencesSelector rs) { final EventTypeList eventTypes = this.eventTypes.eventTypes(typeArgumentSource, event); - final List eventQualifiers = qualifiers(attributes); + final List eventQualifiers = this.qualifiers.qualifiers(attributes); final Iterator> i = rs.>references(this.eventListenerAttributedType).iterator(); while (i.hasNext()) { final EventListener el = i.next(); try { final AttributedType slot = el.attributedType(); - if (slot == null || !this.eventQualifiersMatcher.test(qualifiers(slot.attributes()), eventQualifiers)) { + if (slot == null || !this.eventQualifiersMatcher.test(this.qualifiers.qualifiers(slot.attributes()), eventQualifiers)) { continue; } final TypeMirror slotType = slot.type(); diff --git a/src/test/java/org/microbean/event/TestJDKFacts.java b/src/test/java/org/microbean/event/TestJDKFacts.java index 4337014..6c83e2c 100644 --- a/src/test/java/org/microbean/event/TestJDKFacts.java +++ b/src/test/java/org/microbean/event/TestJDKFacts.java @@ -22,9 +22,6 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/org/microbean/event/TestLanguageModelFacts.java b/src/test/java/org/microbean/event/TestLanguageModelFacts.java index d755e8e..43b5b68 100644 --- a/src/test/java/org/microbean/event/TestLanguageModelFacts.java +++ b/src/test/java/org/microbean/event/TestLanguageModelFacts.java @@ -16,11 +16,13 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import javax.lang.model.element.AnnotationMirror; import javax.lang.model.element.AnnotationValue; import javax.lang.model.element.Element; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeParameterElement; @@ -41,14 +43,14 @@ import static javax.lang.model.element.ElementKind.CLASS; import static javax.lang.model.element.ElementKind.METHOD; +import static javax.lang.model.element.Modifier.ABSTRACT; +import static javax.lang.model.element.Modifier.PUBLIC; + import static javax.lang.model.type.TypeKind.DECLARED; -import static javax.lang.model.type.TypeKind.TYPEVAR; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; -import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -73,12 +75,19 @@ final void testAnnotationMirrorEnclosingAndEnclosedElements() { final ExecutableElement element = m.keySet().iterator().next(); final TypeElement deprecatedElement = (TypeElement)element.getEnclosingElement(); assertSame(ANNOTATION_TYPE, deprecatedElement.getKind()); + Set modifiers = deprecatedElement.getModifiers(); + assertEquals(2, modifiers.size()); + assertTrue(modifiers.contains(PUBLIC)); + assertTrue(modifiers.contains(ABSTRACT)); final List enclosedElements = deprecatedElement.getEnclosedElements(); assertEquals(2, enclosedElements.size()); - enclosedElements.forEach(ee -> assertSame(METHOD, ee.getKind())); - System.out.println("*** modifiers: " + deprecatedElement.getModifiers()); - enclosedElements.forEach(ee -> System.out.println(" modifiers for " + ee + ": " + ee.getModifiers())); - + for (final Element ee : enclosedElements) { + assertSame(METHOD, ee.getKind()); + modifiers = ee.getModifiers(); + assertEquals(2, modifiers.size()); + assertTrue(modifiers.contains(PUBLIC)); + assertTrue(modifiers.contains(ABSTRACT)); + } } @Test