diff --git a/criteria/common/src/org/immutables/criteria/expression/Query.java b/criteria/common/src/org/immutables/criteria/expression/Query.java index 536646d6d..b0c17e2f0 100644 --- a/criteria/common/src/org/immutables/criteria/expression/Query.java +++ b/criteria/common/src/org/immutables/criteria/expression/Query.java @@ -27,10 +27,13 @@ /** * Query which is composed of predicates, projections, limit, offset, group by and order by expressions. */ -@Value.Style(visibility = Value.Style.ImplementationVisibility.PACKAGE) @Value.Immutable public abstract class Query { + public static ImmutableQuery of(Class entityClass) { + return ImmutableQuery.of(entityClass); + } + @Value.Parameter public abstract Class entityClass(); @@ -68,46 +71,26 @@ public boolean hasAggregations() { return !groupBy().isEmpty() || projections().stream().anyMatch(p -> p instanceof AggregationCall); } - public static Query of(Class entityClass) { - return ImmutableQuery.of(entityClass); - } - - public Query withFilter(Expression filter) { - return ImmutableQuery.copyOf(this).withFilter(filter); - } - - public Query addCollations(Iterable collations) { + public ImmutableQuery addCollations(Iterable collations) { return ImmutableQuery.builder().from(this).addAllCollations(collations).build(); } - public Query addProjections(Expression ... projections) { + public ImmutableQuery addProjections(Expression ... projections) { return ImmutableQuery.builder().from(this).addProjections(projections).build(); } - public Query addProjections(Iterable projections) { + public ImmutableQuery addProjections(Iterable projections) { return ImmutableQuery.builder().from(this).addAllProjections(projections).build(); } - public Query addGroupBy(Iterable groupBy) { + public ImmutableQuery addGroupBy(Iterable groupBy) { return ImmutableQuery.builder().from(this).addAllGroupBy(groupBy).build(); } - public Query addGroupBy(Expression ... groupBy) { + public ImmutableQuery addGroupBy(Expression ... groupBy) { return ImmutableQuery.builder().from(this).addGroupBy(groupBy).build(); } - public Query withCount(boolean count) { - return ImmutableQuery.builder().from(this).count(count).build(); - } - - public Query withOffset(long offset) { - return ImmutableQuery.copyOf(this).withOffset(offset); - } - - public Query withLimit(long limit) { - return ImmutableQuery.copyOf(this).withLimit(limit); - } - @Override public String toString() { final StringWriter string = new StringWriter(); diff --git a/criteria/common/src/org/immutables/criteria/matcher/CriteriaContext.java b/criteria/common/src/org/immutables/criteria/matcher/CriteriaContext.java index 64e79cd49..4eb318e98 100644 --- a/criteria/common/src/org/immutables/criteria/matcher/CriteriaContext.java +++ b/criteria/common/src/org/immutables/criteria/matcher/CriteriaContext.java @@ -18,6 +18,7 @@ import org.immutables.criteria.expression.Expression; import org.immutables.criteria.expression.Expressions; +import org.immutables.criteria.expression.ImmutableQuery; import org.immutables.criteria.expression.Path; import org.immutables.criteria.expression.Query; import org.immutables.criteria.expression.Queryable; @@ -123,7 +124,7 @@ private DnfExpression dnfExpression() { @Override public Query query() { - final Query query = Query.of(entityClass); + final ImmutableQuery query = Query.of(entityClass); Expression expression = expression(); if (expression instanceof DnfExpression) { DnfExpression dnfExpression = dnfExpression(); diff --git a/criteria/common/src/org/immutables/criteria/matcher/OrMatcher.java b/criteria/common/src/org/immutables/criteria/matcher/OrMatcher.java index e8937df52..3c726b338 100644 --- a/criteria/common/src/org/immutables/criteria/matcher/OrMatcher.java +++ b/criteria/common/src/org/immutables/criteria/matcher/OrMatcher.java @@ -17,8 +17,6 @@ package org.immutables.criteria.matcher; import org.immutables.criteria.Criterion; -import org.immutables.criteria.expression.Expression; -import org.immutables.criteria.expression.Expressions; import org.immutables.criteria.expression.Operators; /** diff --git a/criteria/common/src/org/immutables/criteria/repository/AbstractReader.java b/criteria/common/src/org/immutables/criteria/repository/AbstractReader.java index a4db5ad73..a335afc9b 100644 --- a/criteria/common/src/org/immutables/criteria/repository/AbstractReader.java +++ b/criteria/common/src/org/immutables/criteria/repository/AbstractReader.java @@ -18,6 +18,7 @@ import org.immutables.criteria.expression.Collation; import org.immutables.criteria.expression.Expression; +import org.immutables.criteria.expression.ImmutableQuery; import org.immutables.criteria.expression.Ordering; import org.immutables.criteria.expression.Query; import org.immutables.criteria.matcher.Matchers; @@ -35,10 +36,11 @@ */ public abstract class AbstractReader> implements Reader { - private final Query query; + private final ImmutableQuery query; protected AbstractReader(Query query) { - this.query = Objects.requireNonNull(query, "query"); + Objects.requireNonNull(query, "query"); + this.query = ImmutableQuery.copyOf(query); } protected abstract R newReader(Query query); diff --git a/criteria/common/src/org/immutables/criteria/repository/Writable.java b/criteria/common/src/org/immutables/criteria/repository/Writable.java index 5e0a3581c..01b76aba1 100644 --- a/criteria/common/src/org/immutables/criteria/repository/Writable.java +++ b/criteria/common/src/org/immutables/criteria/repository/Writable.java @@ -19,8 +19,6 @@ import com.google.common.collect.ImmutableList; import org.immutables.criteria.Criterion; -import java.util.Arrays; - /** * Declares repository as writable. Means documents can be inserted / updated / deleted. * diff --git a/criteria/common/src/org/immutables/criteria/repository/reactive/ReactiveFetcherDelegate.java b/criteria/common/src/org/immutables/criteria/repository/reactive/ReactiveFetcherDelegate.java index c934b70eb..ff633810e 100644 --- a/criteria/common/src/org/immutables/criteria/repository/reactive/ReactiveFetcherDelegate.java +++ b/criteria/common/src/org/immutables/criteria/repository/reactive/ReactiveFetcherDelegate.java @@ -20,6 +20,7 @@ import org.immutables.criteria.backend.NonUniqueResultException; import org.immutables.criteria.backend.ProjectedTuple; import org.immutables.criteria.backend.StandardOperations; +import org.immutables.criteria.expression.ImmutableQuery; import org.immutables.criteria.expression.Query; import org.immutables.criteria.matcher.Matchers; import org.immutables.criteria.matcher.Projection; @@ -34,11 +35,12 @@ class ReactiveFetcherDelegate implements ReactiveFetcher { - private final Query query; + private final ImmutableQuery query; private final Backend.Session session; private ReactiveFetcherDelegate(Query query, Backend.Session session) { - this.query = Objects.requireNonNull(query, "query"); + Objects.requireNonNull(query, "query"); + this.query = ImmutableQuery.copyOf(query); this.session = Objects.requireNonNull(session, "session"); } @@ -79,7 +81,7 @@ public Publisher oneOrNone() { } private Publisher validateAsList(Consumer> validatorFn) { - Query query = this.query; + ImmutableQuery query = ImmutableQuery.copyOf(this.query); if (!query.limit().isPresent()) { // ensure at most one element // fail if there are 2 or more @@ -103,7 +105,7 @@ public Publisher exists() { @Override public Publisher count() { - Query newQuery = this.query.withCount(true); + Query newQuery = query.withCount(true); return session.execute(StandardOperations.Select.of(newQuery)).publisher(); } diff --git a/criteria/common/test/org/immutables/criteria/AggregationExpressionTest.java b/criteria/common/test/org/immutables/criteria/AggregationExpressionTest.java index ac867162b..0bd5142f2 100644 --- a/criteria/common/test/org/immutables/criteria/AggregationExpressionTest.java +++ b/criteria/common/test/org/immutables/criteria/AggregationExpressionTest.java @@ -24,8 +24,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.io.PrintWriter; -import java.io.StringWriter; import java.util.Arrays; import java.util.stream.Collectors; diff --git a/criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java b/criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java index f5e72a102..485b6fabc 100644 --- a/criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java +++ b/criteria/common/test/org/immutables/criteria/ExpressionAsStringTest.java @@ -23,8 +23,6 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import java.io.PrintWriter; -import java.io.StringWriter; import java.util.Arrays; import java.util.stream.Collectors; diff --git a/criteria/common/test/org/immutables/criteria/backend/IdResolverTest.java b/criteria/common/test/org/immutables/criteria/backend/IdResolverTest.java index 46bb33c82..4461d2f54 100644 --- a/criteria/common/test/org/immutables/criteria/backend/IdResolverTest.java +++ b/criteria/common/test/org/immutables/criteria/backend/IdResolverTest.java @@ -16,7 +16,6 @@ package org.immutables.criteria.backend; -import org.immutables.criteria.backend.IdResolver; import org.immutables.criteria.javabean.JavaBean1; import org.immutables.criteria.personmodel.Person; import org.junit.jupiter.api.Test; diff --git a/criteria/common/test/org/immutables/criteria/backend/JavaBeanNamingTest.java b/criteria/common/test/org/immutables/criteria/backend/JavaBeanNamingTest.java index 13ae4ed44..23031db7e 100644 --- a/criteria/common/test/org/immutables/criteria/backend/JavaBeanNamingTest.java +++ b/criteria/common/test/org/immutables/criteria/backend/JavaBeanNamingTest.java @@ -19,8 +19,6 @@ import org.immutables.criteria.expression.Path; import org.junit.jupiter.api.Test; -import java.lang.reflect.Member; - import static org.immutables.check.Checkers.check; class JavaBeanNamingTest { diff --git a/criteria/common/test/org/immutables/criteria/reflect/ClassScannerTest.java b/criteria/common/test/org/immutables/criteria/reflect/ClassScannerTest.java index e3b93ba85..fb264a454 100644 --- a/criteria/common/test/org/immutables/criteria/reflect/ClassScannerTest.java +++ b/criteria/common/test/org/immutables/criteria/reflect/ClassScannerTest.java @@ -16,7 +16,6 @@ package org.immutables.criteria.reflect; -import org.immutables.criteria.reflect.ClassScanner; import org.junit.jupiter.api.Test; import java.lang.reflect.Member; diff --git a/criteria/common/test/org/immutables/criteria/typemodel/DoubleTemplate.java b/criteria/common/test/org/immutables/criteria/typemodel/DoubleTemplate.java index a57b86da2..ec8f0362a 100644 --- a/criteria/common/test/org/immutables/criteria/typemodel/DoubleTemplate.java +++ b/criteria/common/test/org/immutables/criteria/typemodel/DoubleTemplate.java @@ -22,7 +22,6 @@ import org.junit.jupiter.api.Test; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.OptionalDouble; import java.util.function.Supplier; diff --git a/criteria/common/test/org/immutables/criteria/typemodel/IntegerTemplate.java b/criteria/common/test/org/immutables/criteria/typemodel/IntegerTemplate.java index 6742b642a..917db2bd8 100644 --- a/criteria/common/test/org/immutables/criteria/typemodel/IntegerTemplate.java +++ b/criteria/common/test/org/immutables/criteria/typemodel/IntegerTemplate.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.Optional; -import java.util.OptionalDouble; import java.util.OptionalInt; import java.util.function.Supplier; diff --git a/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/IndexResolver.java b/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/IndexResolver.java index b5eed7410..a4749dd45 100644 --- a/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/IndexResolver.java +++ b/criteria/elasticsearch/src/org/immutables/criteria/elasticsearch/IndexResolver.java @@ -21,6 +21,7 @@ public interface IndexResolver extends ContainerResolver { + @Override String resolve(Class entityType); /** diff --git a/criteria/elasticsearch/test/org/immutables/criteria/elasticsearch/ElasticAggregationTest.java b/criteria/elasticsearch/test/org/immutables/criteria/elasticsearch/ElasticAggregationTest.java index 5a66132bc..fb40cb31f 100644 --- a/criteria/elasticsearch/test/org/immutables/criteria/elasticsearch/ElasticAggregationTest.java +++ b/criteria/elasticsearch/test/org/immutables/criteria/elasticsearch/ElasticAggregationTest.java @@ -17,7 +17,6 @@ package org.immutables.criteria.elasticsearch; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.base.Throwables; import org.elasticsearch.client.RestClient; import org.immutables.criteria.backend.Backend; import org.immutables.criteria.personmodel.PersonAggregationTest; diff --git a/criteria/inmemory/test/org/immutables/criteria/inmemory/InMemoryTest.java b/criteria/inmemory/test/org/immutables/criteria/inmemory/InMemoryTest.java index 6d23aa22b..205b9a486 100644 --- a/criteria/inmemory/test/org/immutables/criteria/inmemory/InMemoryTest.java +++ b/criteria/inmemory/test/org/immutables/criteria/inmemory/InMemoryTest.java @@ -16,7 +16,6 @@ package org.immutables.criteria.inmemory; -import org.immutables.criteria.personmodel.ImmutablePerson; import org.immutables.criteria.personmodel.Person; import org.immutables.criteria.personmodel.PersonCriteria; import org.immutables.criteria.personmodel.PersonGenerator; diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/MongoBackend.java b/criteria/mongo/src/org/immutables/criteria/mongo/MongoBackend.java index 91a1c2a91..3fda9aa1a 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/MongoBackend.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/MongoBackend.java @@ -17,8 +17,8 @@ package org.immutables.criteria.mongo; import org.immutables.criteria.backend.Backend; -import org.immutables.criteria.backend.PathNaming; import org.immutables.criteria.backend.IdResolver; +import org.immutables.criteria.backend.PathNaming; import java.util.Objects; diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/BsonGenerator.java b/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/BsonGenerator.java index 99f25f56b..5016c21a3 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/BsonGenerator.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/BsonGenerator.java @@ -16,7 +16,6 @@ package org.immutables.criteria.mongo.bson4jackson; import com.fasterxml.jackson.core.Base64Variant; -import com.fasterxml.jackson.core.ObjectCodec; import com.fasterxml.jackson.core.base.GeneratorBase; import org.bson.BsonBinary; import org.bson.BsonWriter; @@ -24,7 +23,6 @@ import javax.annotation.concurrent.NotThreadSafe; import java.io.IOException; -import java.io.InputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Arrays; diff --git a/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/JacksonCodecs.java b/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/JacksonCodecs.java index 4bff06489..fcb5147f4 100644 --- a/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/JacksonCodecs.java +++ b/criteria/mongo/src/org/immutables/criteria/mongo/bson4jackson/JacksonCodecs.java @@ -18,7 +18,6 @@ import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.BeanDescription; import com.fasterxml.jackson.databind.DeserializationConfig; @@ -52,7 +51,6 @@ import org.bson.codecs.configuration.CodecRegistry; import org.bson.conversions.Bson; -import java.io.IOException; import java.util.Objects; import java.util.function.Predicate; @@ -98,7 +96,7 @@ private static JsonDeserializer deserializer(final Codec codec) { Objects.requireNonNull(codec, "codec"); return new JsonDeserializer() { @Override - public T deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException, JsonProcessingException { + public T deserialize(JsonParser parser, DeserializationContext ctxt) { @SuppressWarnings("unchecked") final BsonReader reader = ((Wrapper) parser).unwrap(); return codec.decode(reader, DecoderContext.builder().build()); diff --git a/criteria/mongo/test/org/immutables/criteria/mongo/AggregationQueryTest.java b/criteria/mongo/test/org/immutables/criteria/mongo/AggregationQueryTest.java index fc5ec084f..8689b1deb 100644 --- a/criteria/mongo/test/org/immutables/criteria/mongo/AggregationQueryTest.java +++ b/criteria/mongo/test/org/immutables/criteria/mongo/AggregationQueryTest.java @@ -38,7 +38,6 @@ class AggregationQueryTest { private final PersonCriteria person = PersonCriteria.person; - @Test void basic() { // select nickName, sum(age) from ... group by nickName diff --git a/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/IdAnnotationModuleTest.java b/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/IdAnnotationModuleTest.java index e4e4cc46a..f375001f2 100644 --- a/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/IdAnnotationModuleTest.java +++ b/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/IdAnnotationModuleTest.java @@ -24,11 +24,11 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.common.collect.ImmutableList; import org.immutables.criteria.Criteria; +import org.immutables.criteria.backend.IdResolver; import org.immutables.criteria.javabean.JavaBean1; import org.immutables.criteria.personmodel.ImmutablePerson; import org.immutables.criteria.personmodel.Person; import org.immutables.criteria.personmodel.PersonGenerator; -import org.immutables.criteria.backend.IdResolver; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; diff --git a/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/Parsers.java b/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/Parsers.java index 5bbdd86e2..cf48f1b52 100644 --- a/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/Parsers.java +++ b/criteria/mongo/test/org/immutables/criteria/mongo/bson4jackson/Parsers.java @@ -24,7 +24,6 @@ import org.bson.BsonBinaryWriter; import org.bson.BsonDocument; import org.bson.BsonValue; -import org.bson.BsonWriter; import org.bson.codecs.EncoderContext; import org.bson.codecs.configuration.CodecRegistry; import org.bson.io.BasicOutputBuffer; diff --git a/criteria/pom.xml b/criteria/pom.xml index 3e25d4223..2d8474767 100644 --- a/criteria/pom.xml +++ b/criteria/pom.xml @@ -56,6 +56,12 @@ -Xep:CheckReturnValue:ERROR -Xep:MethodCanBeStatic:ERROR + -Xep:BadImport:ERROR + -Xep:MissingOverride:ERROR + -Xep:OrphanedFormatString:ERROR + -Xep:RedundantOverride:ERROR + -Xep:RedundantThrows:ERROR + -Xep:RemoveUnusedImports:ERROR -Xlint:unchecked diff --git a/value-processor/src/org/immutables/value/processor/Criteria.generator b/value-processor/src/org/immutables/value/processor/Criteria.generator index 7be641939..a3874fd14 100644 --- a/value-processor/src/org/immutables/value/processor/Criteria.generator +++ b/value-processor/src/org/immutables/value/processor/Criteria.generator @@ -40,35 +40,11 @@ package [type.package]; import org.immutables.criteria.Criterion; import org.immutables.criteria.matcher.AbstractContextHolder; import org.immutables.criteria.matcher.CriteriaContext; -import org.immutables.criteria.matcher.CriteriaCreator; -import org.immutables.criteria.matcher.IterableMatcher; import org.immutables.criteria.matcher.AndMatcher; import org.immutables.criteria.matcher.OrMatcher; -import org.immutables.criteria.matcher.Matchers; -import org.immutables.criteria.matcher.OptionalMatcher; -import org.immutables.criteria.matcher.ObjectMatcher; -import org.immutables.criteria.matcher.StringMatcher; -import org.immutables.criteria.matcher.BooleanMatcher; import org.immutables.criteria.matcher.NotMatcher; import org.immutables.criteria.matcher.WithMatcher; -import org.immutables.criteria.matcher.ComparableMatcher; import org.immutables.criteria.matcher.Projection; -import org.immutables.criteria.expression.Expression; -import org.immutables.criteria.expression.ExpressionVisitor; -import org.immutables.criteria.expression.Expressions; -import org.immutables.criteria.expression.Constant; -import org.immutables.criteria.expression.Operators; -import org.immutables.criteria.expression.Operator; -import org.immutables.criteria.expression.Path; -import org.immutables.criteria.expression.Call; - -import java.util.Objects; - -[for a in type.allMarshalingAttributes] -[if a.hasCriteria] -import [a.criteria.rawTypeName]; -[/if] -[/for] [for starImport in type.requiredSourceStarImports] import [starImport]; @@ -105,23 +81,14 @@ import [starImport]; package [type.package]; [/if] -import org.immutables.criteria.Criterion; -import org.immutables.criteria.matcher.AbstractContextHolder; import org.immutables.criteria.matcher.CriteriaContext; import org.immutables.criteria.matcher.CriteriaCreator; import org.immutables.criteria.matcher.Disjunction; -import org.immutables.criteria.expression.Query; -import org.immutables.criteria.expression.Queryable; - -[for a in type.allMarshalingAttributes] -[if a.hasCriteria] -import [a.criteria.rawTypeName]; -[/if] -[/for] [for starImport in type.requiredSourceStarImports] import [starImport]; [/for] + /** * A {@code [type.name]Criteria} provides fluent, type-safe API for querying documents * based on {@link [type.name]} model. diff --git a/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator b/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator index 6c3f6727a..ece800ed4 100644 --- a/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator +++ b/value-processor/src/org/immutables/value/processor/CriteriaRepository.generator @@ -38,24 +38,10 @@ package [type.package]; import [starImport]; [/for] -import com.google.common.collect.ImmutableList; - -import org.immutables.criteria.Criterion; -import org.immutables.criteria.Criterias; import org.immutables.criteria.backend.Backend; -import org.immutables.criteria.backend.StandardOperations; -import org.immutables.criteria.backend.WriteResult; import org.immutables.criteria.repository.Repository; -import org.immutables.criteria.repository.Watcher; -import org.immutables.criteria.repository.reactive.ReactiveRepository; -import org.immutables.criteria.repository.reactive.ReactiveReader; -import org.immutables.criteria.repository.reactive.ReactiveWatcher; - -import org.reactivestreams.Publisher; import java.util.Objects; -import java.util.List; -import java.util.function.Function; /** * A {@code [type.name]Repository} provides access for storing and retrieving objects diff --git a/value-processor/src/org/immutables/value/processor/meta/CriteriaModel.java b/value-processor/src/org/immutables/value/processor/meta/CriteriaModel.java index 6a82b3aeb..068a2c9f9 100644 --- a/value-processor/src/org/immutables/value/processor/meta/CriteriaModel.java +++ b/value-processor/src/org/immutables/value/processor/meta/CriteriaModel.java @@ -519,14 +519,7 @@ private Type.Parameterized buildMatcher(IntrospectedType introspected) { public MatcherDefinition matcher() { return matcherDefinition; } - - /** - * Return class name of matcher for this criteria - */ - public String rawTypeName() { - return matcher().matcherType().reference.name; - } - + public static class MatcherDefinition { private final ValueAttribute attribute; private final Type.Parameterized matcherType;