From 56cc4d1267f1cff53c74b0bd2aee5d467f456caf Mon Sep 17 00:00:00 2001 From: Sunny Pelletier Date: Tue, 23 Aug 2022 15:18:26 -0400 Subject: [PATCH 1/2] merge with master --- .../AbstractDirectiveConstraint.java | 66 +++++++------------ .../AbstractDecimalMinMaxConstraint.java | 6 +- .../standard/AbstractMinMaxConstraint.java | 5 +- .../standard/AbstractSizeConstraint.java | 5 +- .../standard/DigitsConstraint.java | 6 +- .../standard/ExpressionConstraint.java | 7 +- .../standard/PatternConstraint.java | 3 +- .../constraints/standard/RangeConstraint.java | 6 +- .../ResourceBundleMessageInterpolator.java | 34 ++++------ .../rules/TargetedValidationRules.java | 20 ++---- .../rules/ValidationEnvironment.java | 19 ++---- .../util/DirectivesAndTypeWalker.java | 21 ++---- src/test/groovy/ELDiscover.java | 6 +- .../groovy/graphql/validation/TestUtil.groovy | 5 +- .../BaseConstraintTestSupport.groovy | 16 ++--- 15 files changed, 89 insertions(+), 136 deletions(-) diff --git a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java index 4cfc79b..bb21406 100644 --- a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java +++ b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java @@ -4,18 +4,11 @@ import graphql.GraphQLError; import graphql.PublicSpi; import graphql.Scalars; -import graphql.schema.GraphQLArgument; -import graphql.schema.GraphQLDirective; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLFieldsContainer; -import graphql.schema.GraphQLInputObjectType; -import graphql.schema.GraphQLInputType; -import graphql.schema.GraphQLNamedInputType; -import graphql.schema.GraphQLScalarType; -import graphql.schema.GraphQLTypeUtil; +import graphql.schema.*; import graphql.validation.rules.ValidationEnvironment; import graphql.validation.util.DirectivesAndTypeWalker; import graphql.validation.util.Util; + import java.lang.reflect.Array; import java.math.BigDecimal; import java.util.ArrayList; @@ -25,6 +18,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; + import static graphql.schema.GraphQLTypeUtil.isList; import static graphql.validation.rules.ValidationEnvironment.ValidatedElement.FIELD; import static graphql.validation.util.Util.mkMap; @@ -138,17 +132,17 @@ private List runValidationImpl(ValidationEnvironment validationEnv private List runConstraintOnDirectives(ValidationEnvironment validationEnvironment) { List errors = new ArrayList<>(); - List directives = validationEnvironment.getDirectives(); - directives = Util.sort(directives, GraphQLDirective::getName); + List directives = validationEnvironment.getDirectives(); + directives = Util.sort(directives, GraphQLAppliedDirective::getName); - for (GraphQLDirective directive : directives) { + for (GraphQLAppliedDirective directive : directives) { // we get called for arguments and input field and field types which can have multiple directive constraints on them and hence no just for this one boolean isOurDirective = directive.getName().equals(this.getName()); if (!isOurDirective) { continue; } - validationEnvironment = validationEnvironment.transform(b -> b.context(GraphQLDirective.class, directive)); + validationEnvironment = validationEnvironment.transform(b -> b.context(GraphQLAppliedDirective.class, directive)); // // now run the directive rule with this directive instance List ruleErrors = this.runConstrainOnPossibleListElements(validationEnvironment); @@ -201,18 +195,15 @@ protected boolean isOneOfTheseTypes(GraphQLInputType inputType, Collection mkMessageParams(Object validatedValue, ValidationE * @param msgParams the map of parameters * @return a list of a single error */ - protected List mkError(ValidationEnvironment validationEnvironment, GraphQLDirective directive, Map msgParams) { + protected List mkError(ValidationEnvironment validationEnvironment, GraphQLAppliedDirective directive, Map msgParams) { String messageTemplate = getMessageTemplate(directive); GraphQLError error = validationEnvironment.getInterpolator().interpolate(messageTemplate, msgParams, validationEnvironment); return singletonList(error); } protected List mkError(ValidationEnvironment validationEnvironment, Object... messageParameters) { - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); String messageTemplate = getMessageTemplate(directive); Object validatedValue = validationEnvironment.getValidatedValue(); GraphQLError error = validationEnvironment.getInterpolator().interpolate(messageTemplate, mkMessageParams(validatedValue, validationEnvironment, messageParameters), validationEnvironment); diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java index 00f6da3..1bedd8b 100644 --- a/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java @@ -1,14 +1,16 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLInputType; import graphql.schema.GraphQLScalarType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.rules.ValidationEnvironment; + import java.math.BigDecimal; import java.util.Collections; import java.util.List; + import static graphql.validation.constraints.GraphQLScalars.GRAPHQL_NUMBER_AND_STRING_TYPES; abstract class AbstractDecimalMinMaxConstraint extends AbstractDirectiveConstraint { @@ -29,7 +31,7 @@ protected boolean appliesToType(GraphQLInputType inputType) { protected List runConstraint(ValidationEnvironment validationEnvironment) { Object validatedValue = validationEnvironment.getValidatedValue(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); String value = getStrArg(directive, "value"); boolean inclusive = getBoolArg(directive, "inclusive"); diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java index cdfb40b..e66cad5 100644 --- a/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java @@ -1,12 +1,13 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLInputType; import graphql.schema.GraphQLScalarType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.constraints.GraphQLScalars; import graphql.validation.rules.ValidationEnvironment; + import java.math.BigDecimal; import java.util.Collections; import java.util.List; @@ -29,7 +30,7 @@ protected boolean appliesToType(GraphQLInputType inputType) { @Override protected List runConstraint(ValidationEnvironment validationEnvironment) { Object validatedValue = validationEnvironment.getValidatedValue(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); int value = getIntArg(directive, "value"); boolean isOK; diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractSizeConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractSizeConstraint.java index 329ff95..7a61e0e 100644 --- a/src/main/java/graphql/validation/constraints/standard/AbstractSizeConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/AbstractSizeConstraint.java @@ -1,10 +1,11 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLInputType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.rules.ValidationEnvironment; + import java.util.Collections; import java.util.List; @@ -18,7 +19,7 @@ final protected List runConstraint(ValidationEnvironment validatio Object validatedValue = validationEnvironment.getValidatedValue(); GraphQLInputType argType = validationEnvironment.getValidatedType(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); int min = getIntArg(directive, "min"); int max = getIntArg(directive, "max"); diff --git a/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java b/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java index 3a93513..fe94bbd 100644 --- a/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java @@ -1,14 +1,16 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLInputType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.constraints.Documentation; import graphql.validation.rules.ValidationEnvironment; + import java.math.BigDecimal; import java.util.Collections; import java.util.List; + import static graphql.validation.constraints.GraphQLScalars.GRAPHQL_NUMBER_AND_STRING_TYPES; public class DigitsConstraint extends AbstractDirectiveConstraint { @@ -39,7 +41,7 @@ public boolean appliesToType(GraphQLInputType inputType) { protected List runConstraint(ValidationEnvironment validationEnvironment) { Object validatedValue = validationEnvironment.getValidatedValue(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); int maxIntegerLength = getIntArg(directive, "integer"); int maxFractionLength = getIntArg(directive, "fraction"); diff --git a/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java b/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java index f2d4d6c..16a03dd 100644 --- a/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java @@ -1,10 +1,7 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLFieldsContainer; -import graphql.schema.GraphQLInputType; +import graphql.schema.*; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.constraints.Documentation; import graphql.validation.el.ELSupport; @@ -50,7 +47,7 @@ public boolean appliesTo(GraphQLFieldDefinition fieldDefinition, GraphQLFieldsCo @Override protected List runConstraint(ValidationEnvironment validationEnvironment) { - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); String expression = helpWithCurlyBraces(getStrArg(directive, "value")); Map variables = StandardELVariables.standardELVars(validationEnvironment); diff --git a/src/main/java/graphql/validation/constraints/standard/PatternConstraint.java b/src/main/java/graphql/validation/constraints/standard/PatternConstraint.java index f377b83..b670bf8 100644 --- a/src/main/java/graphql/validation/constraints/standard/PatternConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/PatternConstraint.java @@ -2,6 +2,7 @@ import graphql.GraphQLError; import graphql.Scalars; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLDirective; import graphql.schema.GraphQLInputType; import graphql.validation.constraints.AbstractDirectiveConstraint; @@ -47,7 +48,7 @@ protected List runConstraint(ValidationEnvironment validationEnvir String strValue = String.valueOf(validatedValue); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); String patternArg = getStrArg(directive, "regexp"); Pattern pattern = cachedPattern(patternArg); diff --git a/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java b/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java index 73a412c..1ad9ad6 100644 --- a/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java @@ -1,14 +1,16 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.schema.GraphQLInputType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.constraints.Documentation; import graphql.validation.rules.ValidationEnvironment; + import java.math.BigDecimal; import java.util.Collections; import java.util.List; + import static graphql.validation.constraints.GraphQLScalars.GRAPHQL_NUMBER_AND_STRING_TYPES; public class RangeConstraint extends AbstractDirectiveConstraint { @@ -40,7 +42,7 @@ public boolean appliesToType(GraphQLInputType inputType) { protected List runConstraint(ValidationEnvironment validationEnvironment) { Object validatedValue = validationEnvironment.getValidatedValue(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); BigDecimal min = asBigDecimal(getIntArg(directive, "min")); BigDecimal max = asBigDecimal(getIntArg(directive, "max")); diff --git a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java index 0896a8b..348b11f 100644 --- a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java +++ b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java @@ -4,20 +4,9 @@ import graphql.GraphQLError; import graphql.GraphqlErrorBuilder; import graphql.execution.ResultPath; -import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLAppliedDirective; import graphql.validation.el.StandardELVariables; import graphql.validation.rules.ValidationEnvironment; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; -import java.util.MissingResourceException; -import java.util.Optional; -import java.util.ResourceBundle; -import jakarta.validation.Constraint; -import jakarta.validation.Path; -import jakarta.validation.Payload; import org.hibernate.validator.internal.engine.MessageInterpolatorContext; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl; @@ -27,12 +16,15 @@ import org.hibernate.validator.messageinterpolation.ExpressionLanguageFeatureLevel; import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator; import org.hibernate.validator.spi.resourceloading.ResourceBundleLocator; -import static java.lang.annotation.ElementType.ANNOTATION_TYPE; -import static java.lang.annotation.ElementType.CONSTRUCTOR; -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.PARAMETER; -import static java.lang.annotation.ElementType.TYPE_USE; + +import jakarta.validation.Constraint; +import jakarta.validation.Path; +import jakarta.validation.Payload; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import java.util.*; + +import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** @@ -70,7 +62,7 @@ public class ResourceBundleMessageInterpolator implements MessageInterpolator { @SuppressWarnings("unused") protected ErrorClassification buildErrorClassification(String messageTemplate, Map messageParams, ValidationEnvironment validationEnvironment) { ResultPath fieldOrArgumentPath = validationEnvironment.getValidatedPath(); - GraphQLDirective directive = validationEnvironment.getContextObject(GraphQLDirective.class); + GraphQLAppliedDirective directive = validationEnvironment.getContextObject(GraphQLAppliedDirective.class); return new ValidationErrorType(fieldOrArgumentPath, directive); } @@ -183,9 +175,9 @@ private org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterp private static class ValidationErrorType implements ErrorClassification { private final ResultPath fieldOrArgumentPath; - private final GraphQLDirective directive; + private final GraphQLAppliedDirective directive; - ValidationErrorType(ResultPath fieldOrArgumentPath, GraphQLDirective directive) { + ValidationErrorType(ResultPath fieldOrArgumentPath, GraphQLAppliedDirective directive) { this.fieldOrArgumentPath = fieldOrArgumentPath; this.directive = directive; } diff --git a/src/main/java/graphql/validation/rules/TargetedValidationRules.java b/src/main/java/graphql/validation/rules/TargetedValidationRules.java index b12a8aa..9d72206 100644 --- a/src/main/java/graphql/validation/rules/TargetedValidationRules.java +++ b/src/main/java/graphql/validation/rules/TargetedValidationRules.java @@ -4,17 +4,7 @@ import graphql.GraphQLError; import graphql.PublicApi; import graphql.execution.ResultPath; -import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLArgument; -import graphql.schema.GraphQLDirective; -import graphql.schema.GraphQLDirectiveContainer; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLInputObjectField; -import graphql.schema.GraphQLInputObjectType; -import graphql.schema.GraphQLInputType; -import graphql.schema.GraphQLList; -import graphql.schema.GraphQLObjectType; -import graphql.schema.GraphQLTypeUtil; +import graphql.schema.*; import graphql.util.FpKit; import graphql.validation.interpolation.MessageInterpolator; import graphql.validation.locale.LocaleUtil; @@ -112,7 +102,7 @@ public List runValidationRules(DataFetchingEnvironment env, Messag .validatedType(inputType) .validatedValue(argValue) .validatedPath(fieldPath.segment(fieldArg.getName())) - .directives(fieldArg.getDirectives()) + .directives(fieldArg.getAppliedDirectives()) .messageInterpolator(interpolator) .locale(defaultLocale) .build(); @@ -173,7 +163,7 @@ private List walkObjectArg(ValidationRule rule, ValidationEnvironm .validatedPath(newPath) .validatedValue(validatedValue) .validatedType(fieldType) - .directives(inputField.getDirectives()) + .directives(inputField.getAppliedDirectives()) .validatedElement(INPUT_OBJECT_FIELD) ); @@ -187,11 +177,11 @@ private List walkListArg(ValidationRule rule, ValidationEnvironmen List errors = new ArrayList<>(); GraphQLInputType listItemType = Util.unwrapOneAndAllNonNull(argumentType); - List directives; + List directives; if (!(listItemType instanceof GraphQLDirectiveContainer)) { directives = Collections.emptyList(); } else { - directives = ((GraphQLDirectiveContainer) listItemType).getDirectives(); + directives = ((GraphQLDirectiveContainer) listItemType).getAppliedDirectives(); } int ix = 0; for (Object value : objectList) { diff --git a/src/main/java/graphql/validation/rules/ValidationEnvironment.java b/src/main/java/graphql/validation/rules/ValidationEnvironment.java index 088063b..ecbb5cd 100644 --- a/src/main/java/graphql/validation/rules/ValidationEnvironment.java +++ b/src/main/java/graphql/validation/rules/ValidationEnvironment.java @@ -3,12 +3,7 @@ import graphql.PublicApi; import graphql.execution.ResultPath; import graphql.language.SourceLocation; -import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLArgument; -import graphql.schema.GraphQLDirective; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLFieldsContainer; -import graphql.schema.GraphQLInputType; +import graphql.schema.*; import graphql.validation.interpolation.MessageInterpolator; import java.util.Collections; @@ -55,7 +50,7 @@ public enum ValidatedElement { private final Object validatedValue; private final GraphQLInputType validatedType; private final ValidatedElement validatedElement; - private final List directives; + private final List directives; private ValidationEnvironment(Builder builder) { this.argument = builder.argument; @@ -131,7 +126,7 @@ public ValidatedElement getValidatedElement() { return validatedElement; } - public List getDirectives() { + public List getDirectives() { return directives; } @@ -155,7 +150,7 @@ public static class Builder { private Object validatedValue; private GraphQLInputType validatedType; private ValidatedElement validatedElement; - private List directives = Collections.emptyList(); + private List directives = Collections.emptyList(); public Builder validationEnvironment(ValidationEnvironment validationEnvironment) { this.argument = validationEnvironment.argument; @@ -176,9 +171,9 @@ public Builder validationEnvironment(ValidationEnvironment validationEnvironment } public Builder dataFetchingEnvironment(DataFetchingEnvironment dataFetchingEnvironment) { - fieldsContainer(dataFetchingEnvironment.getExecutionStepInfo().getFieldContainer()); + fieldsContainer(dataFetchingEnvironment.getExecutionStepInfo().getObjectType()); fieldDefinition(dataFetchingEnvironment.getFieldDefinition()); - directives(dataFetchingEnvironment.getFieldDefinition().getDirectives()); + directives(dataFetchingEnvironment.getFieldDefinition().getAppliedDirectives()); executionPath(dataFetchingEnvironment.getExecutionStepInfo().getPath()); validatedPath(dataFetchingEnvironment.getExecutionStepInfo().getPath()); location(dataFetchingEnvironment.getField().getSourceLocation()); @@ -252,7 +247,7 @@ public Builder locale(Locale locale) { return this; } - public Builder directives(List directives) { + public Builder directives(List directives) { this.directives = directives; return this; } diff --git a/src/main/java/graphql/validation/util/DirectivesAndTypeWalker.java b/src/main/java/graphql/validation/util/DirectivesAndTypeWalker.java index 53d7e07..ae46f3f 100644 --- a/src/main/java/graphql/validation/util/DirectivesAndTypeWalker.java +++ b/src/main/java/graphql/validation/util/DirectivesAndTypeWalker.java @@ -1,14 +1,7 @@ package graphql.validation.util; import graphql.Internal; -import graphql.schema.GraphQLArgument; -import graphql.schema.GraphQLDirective; -import graphql.schema.GraphQLDirectiveContainer; -import graphql.schema.GraphQLInputObjectField; -import graphql.schema.GraphQLInputObjectType; -import graphql.schema.GraphQLInputType; -import graphql.schema.GraphQLList; -import graphql.schema.GraphQLTypeUtil; +import graphql.schema.*; import java.util.HashMap; import java.util.List; @@ -20,16 +13,16 @@ public class DirectivesAndTypeWalker { private final Map seenTypes = new HashMap<>(); - public boolean isSuitable(GraphQLArgument argument, BiFunction isSuitable) { + public boolean isSuitable(GraphQLArgument argument, BiFunction isSuitable) { GraphQLInputType inputType = argument.getType(); - List directives = argument.getDirectives(); + List directives = argument.getAppliedDirectives(); return walkInputType(inputType, directives, isSuitable); } - private boolean walkInputType(GraphQLInputType inputType, List directives, BiFunction isSuitable) { + private boolean walkInputType(GraphQLInputType inputType, List directives, BiFunction isSuitable) { String typeName = GraphQLTypeUtil.unwrapAll(inputType).getName(); GraphQLInputType unwrappedInputType = Util.unwrapNonNull(inputType); - for (GraphQLDirective directive : directives) { + for (GraphQLAppliedDirective directive : directives) { if (isSuitable.apply(unwrappedInputType, directive)) { return seen(typeName,true); } @@ -43,7 +36,7 @@ private boolean walkInputType(GraphQLInputType inputType, List for (GraphQLInputObjectField inputField : inputObjType.getFieldDefinitions()) { inputType = inputField.getType(); - directives = inputField.getDirectives(); + directives = inputField.getAppliedDirectives(); if (walkInputType(inputType, directives, isSuitable)) { return seen(typeName,true); @@ -53,7 +46,7 @@ private boolean walkInputType(GraphQLInputType inputType, List if (unwrappedInputType instanceof GraphQLList) { GraphQLInputType innerListType = Util.unwrapOneAndAllNonNull(unwrappedInputType); if (innerListType instanceof GraphQLDirectiveContainer) { - directives = ((GraphQLDirectiveContainer) innerListType).getDirectives(); + directives = ((GraphQLDirectiveContainer) innerListType).getAppliedDirectives(); if (walkInputType(innerListType, directives, isSuitable)) { return seen(typeName,true); } diff --git a/src/test/groovy/ELDiscover.java b/src/test/groovy/ELDiscover.java index e09e511..7c280b1 100644 --- a/src/test/groovy/ELDiscover.java +++ b/src/test/groovy/ELDiscover.java @@ -3,9 +3,6 @@ import jakarta.el.ExpressionFactory; import jakarta.el.StandardELContext; import jakarta.el.ValueExpression; -import jakarta.validation.MessageInterpolator; -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotNull; import org.hibernate.validator.constraints.Range; import org.hibernate.validator.internal.engine.MessageInterpolatorContext; import org.hibernate.validator.internal.engine.path.PathImpl; @@ -17,6 +14,9 @@ import org.hibernate.validator.messageinterpolation.ExpressionLanguageFeatureLevel; import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; +import jakarta.validation.MessageInterpolator; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; import java.lang.reflect.Method; import java.util.Collections; import java.util.HashMap; diff --git a/src/test/groovy/graphql/validation/TestUtil.groovy b/src/test/groovy/graphql/validation/TestUtil.groovy index 4fe940b..f642efb 100644 --- a/src/test/groovy/graphql/validation/TestUtil.groovy +++ b/src/test/groovy/graphql/validation/TestUtil.groovy @@ -15,6 +15,7 @@ import graphql.language.Type import graphql.parser.Parser import graphql.schema.Coercing import graphql.schema.DataFetcher +import graphql.schema.GraphQLAppliedDirective import graphql.schema.GraphQLArgument import graphql.schema.GraphQLDirective import graphql.schema.GraphQLFieldDefinition @@ -189,8 +190,8 @@ class TestUtil { definition) } - static GraphQLDirective mockDirective(String name) { - new GraphQLDirective(name, name, EnumSet.noneOf(DirectiveLocation.class), Collections.emptyList(), false, false, false) + static GraphQLAppliedDirective mockDirective(String name) { + new GraphQLAppliedDirective(name, name, EnumSet.noneOf(DirectiveLocation.class), Collections.emptyList(), false, false, false) } static TypeRuntimeWiring mockTypeRuntimeWiring(String typeName, boolean withResolver) { diff --git a/src/test/groovy/graphql/validation/constraints/BaseConstraintTestSupport.groovy b/src/test/groovy/graphql/validation/constraints/BaseConstraintTestSupport.groovy index 1c3606e..801c654 100644 --- a/src/test/groovy/graphql/validation/constraints/BaseConstraintTestSupport.groovy +++ b/src/test/groovy/graphql/validation/constraints/BaseConstraintTestSupport.groovy @@ -2,18 +2,12 @@ package graphql.validation.constraints import graphql.GraphQLError import graphql.GraphqlErrorBuilder -import graphql.execution.ResultPath import graphql.execution.ExecutionStepInfo import graphql.execution.MergedField +import graphql.execution.ResultPath import graphql.language.Field import graphql.language.SourceLocation -import graphql.schema.DataFetchingEnvironmentImpl -import graphql.schema.GraphQLArgument -import graphql.schema.GraphQLDirective -import graphql.schema.GraphQLFieldDefinition -import graphql.schema.GraphQLFieldsContainer -import graphql.schema.GraphQLObjectType -import graphql.schema.GraphQLSchema +import graphql.schema.* import graphql.validation.TestUtil import graphql.validation.interpolation.MessageInterpolator import graphql.validation.rules.TargetedValidationRules @@ -102,7 +96,7 @@ class BaseConstraintTestSupport extends Specification { .fieldsContainer(fieldsContainer) .executionPath(ResultPath.rootPath().segment(fieldDefinition.getName())) .validatedPath(ResultPath.rootPath().segment(argName)) - .context(GraphQLDirective.class, argUnderTest.getDirective(targetDirective)) + .context(GraphQLAppliedDirective.class, argUnderTest.getAppliedDirective(targetDirective)) .messageInterpolator(interpolator) .build() ruleEnvironment @@ -120,8 +114,8 @@ class BaseConstraintTestSupport extends Specification { .executionPath(path) .validatedElement(ValidationEnvironment.ValidatedElement.FIELD) .validatedPath(path) - .directives(fieldDefinition.getDirectives()) - .context(GraphQLDirective.class, fieldDefinition.getDirective(targetDirective.name)) + .directives(fieldDefinition.getAppliedDirectives()) + .context(GraphQLAppliedDirective.class, fieldDefinition.getAppliedDirective(targetDirective.name)) .messageInterpolator(interpolator) .build() ruleEnvironment From 82ba72be0d5ecff7e50f3aca326fd9f35fdc6d43 Mon Sep 17 00:00:00 2001 From: Sunny Pelletier Date: Thu, 15 Sep 2022 08:14:47 -0400 Subject: [PATCH 2/2] remove all wildcard imports --- .../AbstractDirectiveConstraint.java | 11 +++++++++- .../standard/ExpressionConstraint.java | 5 ++++- .../ResourceBundleMessageInterpolator.java | 22 ++++++++++++++----- .../rules/TargetedValidationRules.java | 12 +++++++++- .../rules/ValidationEnvironment.java | 7 +++++- .../FieldValidatorDataFetcher.java | 7 ++++-- 6 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java index bb21406..ddb7a7f 100644 --- a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java +++ b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java @@ -4,7 +4,16 @@ import graphql.GraphQLError; import graphql.PublicSpi; import graphql.Scalars; -import graphql.schema.*; +import graphql.schema.GraphQLAppliedDirective; +import graphql.schema.GraphQLAppliedDirectiveArgument; +import graphql.schema.GraphQLArgument; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLFieldsContainer; +import graphql.schema.GraphQLInputObjectType; +import graphql.schema.GraphQLInputType; +import graphql.schema.GraphQLNamedInputType; +import graphql.schema.GraphQLScalarType; +import graphql.schema.GraphQLTypeUtil; import graphql.validation.rules.ValidationEnvironment; import graphql.validation.util.DirectivesAndTypeWalker; import graphql.validation.util.Util; diff --git a/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java b/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java index 16a03dd..3f003ff 100644 --- a/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java +++ b/src/main/java/graphql/validation/constraints/standard/ExpressionConstraint.java @@ -1,7 +1,10 @@ package graphql.validation.constraints.standard; import graphql.GraphQLError; -import graphql.schema.*; +import graphql.schema.GraphQLAppliedDirective; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLFieldsContainer; +import graphql.schema.GraphQLInputType; import graphql.validation.constraints.AbstractDirectiveConstraint; import graphql.validation.constraints.Documentation; import graphql.validation.el.ELSupport; diff --git a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java index 348b11f..99df8c1 100644 --- a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java +++ b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java @@ -7,6 +7,9 @@ import graphql.schema.GraphQLAppliedDirective; import graphql.validation.el.StandardELVariables; import graphql.validation.rules.ValidationEnvironment; +import jakarta.validation.Constraint; +import jakarta.validation.Path; +import jakarta.validation.Payload; import org.hibernate.validator.internal.engine.MessageInterpolatorContext; import org.hibernate.validator.internal.metadata.core.ConstraintHelper; import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl; @@ -17,14 +20,21 @@ import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator; import org.hibernate.validator.spi.resourceloading.ResourceBundleLocator; -import jakarta.validation.Constraint; -import jakarta.validation.Path; -import jakarta.validation.Payload; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import java.util.*; - -import static java.lang.annotation.ElementType.*; +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.Optional; +import java.util.ResourceBundle; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE_USE; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** diff --git a/src/main/java/graphql/validation/rules/TargetedValidationRules.java b/src/main/java/graphql/validation/rules/TargetedValidationRules.java index 9d72206..f0a5b20 100644 --- a/src/main/java/graphql/validation/rules/TargetedValidationRules.java +++ b/src/main/java/graphql/validation/rules/TargetedValidationRules.java @@ -4,7 +4,17 @@ import graphql.GraphQLError; import graphql.PublicApi; import graphql.execution.ResultPath; -import graphql.schema.*; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLAppliedDirective; +import graphql.schema.GraphQLArgument; +import graphql.schema.GraphQLDirectiveContainer; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLInputObjectField; +import graphql.schema.GraphQLInputObjectType; +import graphql.schema.GraphQLInputType; +import graphql.schema.GraphQLList; +import graphql.schema.GraphQLObjectType; +import graphql.schema.GraphQLTypeUtil; import graphql.util.FpKit; import graphql.validation.interpolation.MessageInterpolator; import graphql.validation.locale.LocaleUtil; diff --git a/src/main/java/graphql/validation/rules/ValidationEnvironment.java b/src/main/java/graphql/validation/rules/ValidationEnvironment.java index ecbb5cd..903b5bb 100644 --- a/src/main/java/graphql/validation/rules/ValidationEnvironment.java +++ b/src/main/java/graphql/validation/rules/ValidationEnvironment.java @@ -3,7 +3,12 @@ import graphql.PublicApi; import graphql.execution.ResultPath; import graphql.language.SourceLocation; -import graphql.schema.*; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLAppliedDirective; +import graphql.schema.GraphQLArgument; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLFieldsContainer; +import graphql.schema.GraphQLInputType; import graphql.validation.interpolation.MessageInterpolator; import java.util.Collections; diff --git a/src/main/java/graphql/validation/schemawiring/FieldValidatorDataFetcher.java b/src/main/java/graphql/validation/schemawiring/FieldValidatorDataFetcher.java index a02836a..58c1769 100644 --- a/src/main/java/graphql/validation/schemawiring/FieldValidatorDataFetcher.java +++ b/src/main/java/graphql/validation/schemawiring/FieldValidatorDataFetcher.java @@ -1,11 +1,14 @@ package graphql.validation.schemawiring; import graphql.GraphQLError; -import graphql.schema.*; +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.GraphQLFieldsContainer; +import graphql.schema.GraphQLType; import graphql.validation.interpolation.MessageInterpolator; import graphql.validation.rules.OnValidationErrorStrategy; import graphql.validation.rules.TargetedValidationRules; -import graphql.validation.rules.ValidationRule; import graphql.validation.rules.ValidationRules; import graphql.validation.util.Util;