001package org.hamcrest;
002
003/**
004 * Utility class for writing one off matchers.
005 * For example:
006 * <pre>
007 * Matcher&lt;String&gt; aNonEmptyString = new CustomMatcher&lt;String&gt;("a non empty string") {
008 *   public boolean matches(Object object) {
009 *     return ((object instanceof String) && !((String) object).isEmpty();
010 *   }
011 * };
012 * </pre>
013 * <p>
014 * This class is designed for scenarios where an anonymous inner class
015 * matcher makes sense. It should not be used by API designers implementing
016 * matchers.
017 *
018 * @author Neil Dunn
019 * @see CustomTypeSafeMatcher for a type safe variant of this class that you probably
020 *  want to use.
021 * @param <T> The type of object being matched.
022 */
023public abstract class CustomMatcher<T> extends BaseMatcher<T> {
024    private final String fixedDescription;
025
026    public CustomMatcher(String description) {
027        if (description == null) {
028            throw new IllegalArgumentException("Description should be non null!");
029        }
030        this.fixedDescription = description;
031    }
032
033    @Override
034    public final void describeTo(Description description) {
035        description.appendText(fixedDescription);
036    }
037}