diff --git a/README.md b/README.md index 48ec9ee..331d600 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ dependency: org.microbean microbean-assign - 0.0.10 + 0.0.11 ``` diff --git a/src/main/java/org/microbean/assign/AttributedElement.java b/src/main/java/org/microbean/assign/AttributedElement.java index 803cb13..7e78bcb 100644 --- a/src/main/java/org/microbean/assign/AttributedElement.java +++ b/src/main/java/org/microbean/assign/AttributedElement.java @@ -20,7 +20,6 @@ import java.lang.constant.MethodHandleDesc; import java.util.List; -import java.util.Objects; import java.util.Optional; import javax.lang.model.element.Element; diff --git a/src/main/java/org/microbean/assign/Qualifiers.java b/src/main/java/org/microbean/assign/Qualifiers.java index 9058cc7..f767bb0 100644 --- a/src/main/java/org/microbean/assign/Qualifiers.java +++ b/src/main/java/org/microbean/assign/Qualifiers.java @@ -21,124 +21,45 @@ import org.microbean.attributes.Attributes; /** - * A utility class for working with commonly-used qualifiers. + * A utility class for working with qualifiers. + * + *

This class is currently not used by other classes in this package. It may be useful in a variety of dependency + * injection systems.

* * @author Laird Nelson * * @see Attributes */ -public final class Qualifiers { - - private static final Attributes QUALIFIER = Attributes.of("Qualifier"); - - private static final List QUALIFIERS = List.of(QUALIFIER); +public class Qualifiers { - private static final Attributes ANY_QUALIFIER = Attributes.of("Any", QUALIFIERS); - private static final List ANY_QUALIFIERS = List.of(ANY_QUALIFIER); - - private static final Attributes DEFAULT_QUALIFIER = Attributes.of("Default", QUALIFIERS); - - private static final List DEFAULT_QUALIFIERS = List.of(DEFAULT_QUALIFIER); - - private static final List ANY_AND_DEFAULT_QUALIFIERS = List.of(ANY_QUALIFIER, DEFAULT_QUALIFIER); + /* + * Static fields. + */ - private static final Attributes PRIMORDIAL_QUALIFIER = Attributes.of("Primordial", QUALIFIERS); - private static final List PRIMORDIAL_QUALIFIERS = List.of(PRIMORDIAL_QUALIFIER); + private static final Attributes QUALIFIER = Attributes.of("Qualifier"); - private Qualifiers() { - super(); - } + private static final List QUALIFIERS = List.of(QUALIFIER); - /** - * Returns an unmodifiable {@link List} consisting solely of the unattributed any qualifier and the - * default qualifier. - * - * @return an unmodifiable {@link List} consisting solely of the unattributed any qualifier and the default qualifier; - * never {@code null} - * - * @see #anyQualifier() - * - * @see #defaultQualifier() - */ - public static final List anyAndDefaultQualifiers() { - return ANY_AND_DEFAULT_QUALIFIERS; - } - /** - * Returns the unattributed any qualifier. - * - * @return the any qualifier; never {@code null} - * - * @see #anyQualifiers() + /* + * Constructors. */ - public static final Attributes anyQualifier() { - return ANY_QUALIFIER; - } - /** - * Returns {@code true} if and only if the supplied {@link Attributes} {@linkplain Attributes#equals(Object) is equal - * to} the unattributed {@linkplain #anyQualifier() any qualifier}. - * - * @param a an {@link Attributes}; must not be {@code null} - * - * @return {@code true} if and only if the supplied {@link Attributes} {@linkplain Attributes#equals(Object) is equal - * to} the unattributed {@linkplain #anyQualifier() any qualifier} - * - * @exception NullPointerException if {@code a} is {@code null} - */ - public static final boolean anyQualifier(final Attributes a) { - return ANY_QUALIFIER == a || anyQualifier().equals(a) && qualifier(a); - } /** - * Returns an immutable {@link List} consisting solely of the unattributed any qualifier. - * - * @return an immutable {@link List}; never {@code null} - * - * @see #anyQualifier() + * Creates a new {@link Qualifiers}. */ - public static final List anyQualifiers() { - return ANY_QUALIFIERS; + public Qualifiers() { + super(); } - /** - * Returns the default qualifier. - * - * @return the default qualifier; never {@code null} - * - * @see #defaultQualifiers() - */ - public static final Attributes defaultQualifier() { - return DEFAULT_QUALIFIER; - } - /** - * Returns {@code true} if and only if the supplied {@link Attributes} {@linkplain - * Attributes#equals(Object) is equal to} the {@linkplain #defaultQualifier() default qualifier}. - * - * @param a an {@link Attributes}; must not be {@code null} - * - * @return {@code true} if and only if the supplied {@link Attributes} {@linkplain - * Attributes#equals(Object) is equal to} the {@linkplain #defaultQualifier() default qualifier} - * - * @exception NullPointerException if {@code a} is {@code null} + /* + * Instance methods. */ - public static final boolean defaultQualifier(final Attributes a) { - return DEFAULT_QUALIFIER == a || defaultQualifier().equals(a) && qualifier(a); - } - /** - * Returns an immutable {@link List} consisting solely of the default qualifier. - * - * @return an immutable {@link List}; never {@code null} - * - * @see #defaultQualifier() - */ - public static final List defaultQualifiers() { - return DEFAULT_QUALIFIERS; - } /** * Returns an {@link Attributes} that is {@linkplain Attributes#equals(Object) equal to} the supplied {@link @@ -153,11 +74,10 @@ public static final List defaultQualifiers() { * * @exception NullPointerException if {@code a} is {@code null} */ - public static final Attributes normalize(final Attributes a) { + public Attributes normalize(final Attributes a) { return switch (a) { case null -> throw new NullPointerException("a"); - case Attributes q when defaultQualifier(q) -> defaultQualifier(); - case Attributes q when QUALIFIER.equals(q) -> qualifier(); + case Attributes q when this.qualifier().equals(q) -> this.qualifier(); default -> a; }; } @@ -175,63 +95,26 @@ public static final Attributes normalize(final Attributes a) { * * @exception NullPointerException if {@code list} is {@code null} */ - public static final List normalize(final List list) { + public List normalize(final List list) { return switch (list.size()) { case 0 -> List.of(); - case 1 -> list.equals(defaultQualifiers()) ? defaultQualifiers() : List.copyOf(list); + case 1 -> list.equals(this.qualifiers()) ? this.qualifiers() : List.copyOf(list); default -> { final List l = new ArrayList<>(list.size()); for (final Attributes a : list) { - l.add(normalize(a)); + l.add(this.normalize(a)); } yield Collections.unmodifiableList(l); } }; } - /** - * Returns the primordial qualifier. - * - * @return the primordial qualifier; never {@code null} - * - * @see #primordialQualifiers() - */ - public static final Attributes primordialQualifier() { - return PRIMORDIAL_QUALIFIER; - } - - /** - * Returns {@code true} if and only if the supplied {@link Attributes} {@linkplain - * Attributes#equals(Object) is equal to} the {@linkplain #primordialQualifier() primordial qualifier}. - * - * @param a an {@link Attributes}; must not be {@code null} - * - * @return {@code true} if and only if the supplied {@link Attributes} {@linkplain - * Attributes#equals(Object) is equal to} the {@linkplain #primordialQualifier() primordial qualifier} - * - * @exception NullPointerException if {@code a} is {@code null} - */ - public static final boolean primordialQualifier(final Attributes a) { - return PRIMORDIAL_QUALIFIER == a || primordialQualifier().equals(a) && qualifier(a); - } - - /** - * Returns an immutable {@link List} consisting solely of the primordial qualifier. - * - * @return an immutable {@link List}; never {@code null} - * - * @see #primordialQualifier() - */ - public static final List primordialQualifiers() { - return PRIMORDIAL_QUALIFIERS; - } - /** * Returns the qualifier (meta-) qualifier. * * @return the qualifier (meta-) qualifier; never {@code null} */ - public static final Attributes qualifier() { + public Attributes qualifier() { return QUALIFIER; } @@ -246,8 +129,8 @@ public static final Attributes qualifier() { * * @exception NullPointerException if {@code q} is {@code null} */ - public static final boolean qualifier(final Attributes q) { - return q.attributes().contains(qualifier()); + public boolean qualifier(final Attributes q) { + return q.attributes().contains(this.qualifier()); } /** @@ -257,7 +140,7 @@ public static final boolean qualifier(final Attributes q) { * * @see #qualifier() */ - public static final List qualifiers() { + public List qualifiers() { return QUALIFIERS; } @@ -272,16 +155,14 @@ public static final List qualifiers() { * * @exception NullPointerException if {@code c} is {@code null} */ - public static final List qualifiers(final Collection c) { + public List qualifiers(final Collection c) { return switch (c) { case Collection c0 when c0.isEmpty() -> List.of(); - case Collection c0 when c0.equals(defaultQualifiers()) -> defaultQualifiers(); - case Collection c0 when c0.equals(anyAndDefaultQualifiers()) -> anyAndDefaultQualifiers(); - default ->{ + default -> { final ArrayList list = new ArrayList<>(c.size()); for (final Attributes a : c) { - if (qualifier(a)) { - list.add(normalize(a)); + if (this.qualifier(a)) { + list.add(this.normalize(a)); } } list.trimToSize(); diff --git a/src/main/java/org/microbean/assign/SpecializationComparator.java b/src/main/java/org/microbean/assign/SpecializationComparator.java index e6e5ae3..e52568a 100644 --- a/src/main/java/org/microbean/assign/SpecializationComparator.java +++ b/src/main/java/org/microbean/assign/SpecializationComparator.java @@ -14,12 +14,13 @@ package org.microbean.assign; import java.util.Comparator; -import java.util.Objects; import javax.lang.model.type.TypeMirror; import org.microbean.construct.Domain; +import static java.util.Objects.requireNonNull; + /** * A {@link Comparator} of {@link TypeMirror}s that establishes a partial order on its arguments, enforcing * only that more specialized types precede less specialized ones. @@ -43,7 +44,7 @@ public final class SpecializationComparator implements Comparator { */ public SpecializationComparator(final Domain domain) { super(); - this.domain = Objects.requireNonNull(domain, "domain"); + this.domain = requireNonNull(domain, "domain"); } /**