diff --git a/build.gradle b/build.gradle index 71936787..8d79fa1b 100644 --- a/build.gradle +++ b/build.gradle @@ -67,7 +67,7 @@ gradle.projectsEvaluated { dependencies { implementation 'javax.validation:validation-api:1.1.0.Final' - implementation 'com.graphql-java:graphql-java:21.5' + implementation 'com.graphql-java:graphql-java:26.1' implementation 'com.graphql-java:graphql-java-extended-scalars:21.0' implementation 'javax.xml.bind:jaxb-api:2.3.1' diff --git a/gradle.properties b/gradle.properties index f4dab5f2..ca47a183 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,4 +5,4 @@ org.gradle.daemon=true org.gradle.parallel=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 -version = 21.5-nosto \ No newline at end of file +version = 26.1-nosto \ No newline at end of file diff --git a/src/main/java/graphql/annotations/AnnotationsSchemaCreator.java b/src/main/java/graphql/annotations/AnnotationsSchemaCreator.java index e9fb1aa9..e36e7928 100644 --- a/src/main/java/graphql/annotations/AnnotationsSchemaCreator.java +++ b/src/main/java/graphql/annotations/AnnotationsSchemaCreator.java @@ -20,8 +20,8 @@ import graphql.annotations.processor.typeFunctions.TypeFunction; import graphql.relay.Relay; import graphql.schema.GraphQLDirective; +import graphql.schema.GraphQLNamedType; import graphql.schema.GraphQLSchema; -import graphql.schema.GraphQLType; import graphql.schema.SchemaTransformer; import java.util.*; @@ -247,9 +247,9 @@ public GraphQLSchema build() { Set directives = directivesObjectList.stream().map(dir -> graphQLAnnotations.directive(dir)).collect(Collectors.toSet()); directiveContainerClasses.forEach(dir -> directives.addAll(graphQLAnnotations.directives(dir))); - Set additionalTypes = additionalTypesList.stream().map(additionalType -> - additionalType.isInterface() ? - graphQLAnnotations.generateInterface(additionalType) : graphQLAnnotations.object(additionalType)).collect(Collectors.toSet()); + Set additionalTypes = additionalTypesList.stream().map(additionalType -> + (GraphQLNamedType) (additionalType.isInterface() ? + graphQLAnnotations.generateInterface(additionalType) : graphQLAnnotations.object(additionalType))).collect(Collectors.toSet()); this.graphqlSchemaBuilder.query(graphQLAnnotations.object(queryObject)); if (this.mutationObject != null) { diff --git a/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java b/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java index f17810af..30d00327 100644 --- a/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java +++ b/src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilder.java @@ -135,7 +135,7 @@ private void transformArgument(Annotation annotation, GraphQLDirective.Builder d Object value; if ( graphQLArgument.getType() instanceof GraphQLScalarType ) { - value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().parseValue(argumentValue); + value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().serialize(argumentValue); } else { @@ -161,7 +161,7 @@ private void transformArgument(String[] argumentValues, GraphQLDirective.Builder if (graphQLArgument.getType() instanceof GraphQLScalarType) { try { - Object value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().parseValue(argumentValue); + Object value = ((GraphQLScalarType) graphQLArgument.getType()).getCoercing().serialize(argumentValue); builder.value( value ); } catch (Exception e) { throw new GraphQLAnnotationsException(COULD_NOT_PARSE_ARGUMENT_VALUE_TO_ARGUMENT_TYPE, e); diff --git a/src/main/java/graphql/annotations/processor/util/CodeRegistryUtil.java b/src/main/java/graphql/annotations/processor/util/CodeRegistryUtil.java index 77d9c29b..ee675fa9 100644 --- a/src/main/java/graphql/annotations/processor/util/CodeRegistryUtil.java +++ b/src/main/java/graphql/annotations/processor/util/CodeRegistryUtil.java @@ -43,6 +43,6 @@ public static void wrapDataFetcher(GraphQLFieldDefinition fieldDefinition, Annot * @return the data fetcher */ public static DataFetcher getDataFetcher(GraphQLCodeRegistry.Builder codeRegistryBuilder, GraphQLSchemaElement parentElement, GraphQLFieldDefinition fieldDefinition) { - return codeRegistryBuilder.getDataFetcher((GraphQLFieldsContainer) parentElement, fieldDefinition); + return codeRegistryBuilder.getDataFetcher(FieldCoordinates.coordinates((GraphQLFieldsContainer) parentElement, fieldDefinition), fieldDefinition); } } diff --git a/src/main/java/graphql/annotations/strategies/EnhancedExecutionStrategy.java b/src/main/java/graphql/annotations/strategies/EnhancedExecutionStrategy.java index 465ff79d..04b06db7 100644 --- a/src/main/java/graphql/annotations/strategies/EnhancedExecutionStrategy.java +++ b/src/main/java/graphql/annotations/strategies/EnhancedExecutionStrategy.java @@ -14,35 +14,29 @@ */ package graphql.annotations.strategies; -import graphql.ExecutionResult; import graphql.execution.*; import graphql.language.*; import graphql.schema.GraphQLEnumType; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLObjectType; import java.util.HashMap; import java.util.Optional; -import java.util.concurrent.CompletableFuture; public class EnhancedExecutionStrategy extends AsyncSerialExecutionStrategy { private static final String CLIENT_MUTATION_ID = "clientMutationId"; @Override - protected CompletableFuture resolveField(ExecutionContext executionContext, ExecutionStrategyParameters parameters) { - GraphQLObjectType parentType = (GraphQLObjectType) parameters.getExecutionStepInfo().getUnwrappedNonNullType(); - GraphQLFieldDefinition fieldDef = getFieldDef(executionContext.getGraphQLSchema(), parentType, parameters.getField().getSingleField()); - if (fieldDef == null) return null; + protected FieldValueInfo completeValue(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException { + graphql.schema.GraphQLType fieldType = parameters.getExecutionStepInfo().getType(); - if (fieldDef.getName().contentEquals(CLIENT_MUTATION_ID)) { + if (parameters.getExecutionStepInfo().getFieldDefinition().getName().contentEquals(CLIENT_MUTATION_ID)) { Field field = (Field) executionContext.getOperationDefinition().getSelectionSet().getSelections().get(0); Argument argument = field.getArguments().get(0); Object clientMutationId; if (argument.getValue() instanceof VariableReference) { VariableReference ref = (VariableReference) argument.getValue(); - HashMap mutationInputVariables = (HashMap) executionContext.getVariables().get(ref.getName()); + HashMap mutationInputVariables = (HashMap) executionContext.getCoercedVariables().get(ref.getName()); clientMutationId = mutationInputVariables.get(CLIENT_MUTATION_ID); } else { ObjectValue value = (ObjectValue) field.getArguments().get(0).getValue(); @@ -51,25 +45,9 @@ protected CompletableFuture resolveField(ExecutionContext execu .findFirst().get().getValue(); clientMutationId = clientMutationIdVal.getValue(); } - - ExecutionStepInfo fieldTypeInfo = ExecutionStepInfo.newExecutionStepInfo().type(fieldDef.getType()).parentInfo(parameters.getExecutionStepInfo()).build(); - ExecutionStrategyParameters newParameters = ExecutionStrategyParameters.newParameters() - .fields(parameters.getFields()) - .nonNullFieldValidator(parameters.getNonNullFieldValidator()) - .executionStepInfo(fieldTypeInfo) - .source(clientMutationId) - .build(); - - - return completeValue(executionContext, newParameters).getFieldValue(); - } else { - return super.resolveField(executionContext, parameters); + return super.completeValue(executionContext, withSource(parameters, clientMutationId)); } - } - @Override - protected FieldValueInfo completeValue(ExecutionContext executionContext, ExecutionStrategyParameters parameters) throws NonNullableFieldWasNullException { - graphql.schema.GraphQLType fieldType = parameters.getExecutionStepInfo().getType(); Object result = parameters.getSource(); if (result instanceof Enum && fieldType instanceof GraphQLEnumType) { Object value = ((GraphQLEnumType) fieldType).parseValue(((Enum) result).name()); diff --git a/src/test/java/graphql/annotations/GraphQLIterableAndArrayTest.java b/src/test/java/graphql/annotations/GraphQLIterableAndArrayTest.java index 6cb8bb04..14afea25 100644 --- a/src/test/java/graphql/annotations/GraphQLIterableAndArrayTest.java +++ b/src/test/java/graphql/annotations/GraphQLIterableAndArrayTest.java @@ -25,7 +25,6 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -138,10 +137,10 @@ public void queryWithArrayWithinAnArray() { } private Object getQueryResultAtIndex(ExecutionResult result, String queryName, int index) { - return ((ArrayList) (((LinkedHashMap) result.getData()).get(queryName))).get(index); + return ((List) (((LinkedHashMap) result.getData()).get(queryName))).get(index); } private Object getQueryResultAtCell(ExecutionResult result, String queryName, int rowIndex, int columnIndex) { - return (((ArrayList) (getQueryResultAtIndex(result, queryName, rowIndex))).get(columnIndex)); + return (((List) (getQueryResultAtIndex(result, queryName, rowIndex))).get(columnIndex)); } } diff --git a/src/test/java/graphql/annotations/directives/DirectiveWiringMapRetrieverTest.java b/src/test/java/graphql/annotations/directives/DirectiveWiringMapRetrieverTest.java index bc89d1fa..d521baae 100644 --- a/src/test/java/graphql/annotations/directives/DirectiveWiringMapRetrieverTest.java +++ b/src/test/java/graphql/annotations/directives/DirectiveWiringMapRetrieverTest.java @@ -19,6 +19,7 @@ import graphql.annotations.processor.DirectiveAndWiring; import graphql.annotations.processor.ProcessingElementsContainer; import graphql.annotations.processor.exceptions.GraphQLAnnotationsException; +import graphql.introspection.Introspection; import graphql.schema.GraphQLDirective; import org.testng.annotations.Test; @@ -67,8 +68,8 @@ public void getDirectiveWiringMap_noDirectivesInRegistry_throwAGraphQLAnnotation public void getDirectiveWiringMap_wiringClassIsPrivate_throwAGraphQLAnnotationsException() throws Exception { // Arrange DirectiveWiringMapRetriever directiveWiringMapRetriever = new DirectiveWiringMapRetriever(); - GraphQLDirective upperCase = newDirective().name("upperCase").build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); ProcessingElementsContainer container = new ProcessingElementsContainer(); container.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, ThirdWiringClass.class)); container.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, SecondWiringClass.class)); @@ -87,8 +88,8 @@ public void getDirectiveWiringMap_wiringClassIsPrivate_throwAGraphQLAnnotationsE public void getDirectiveWiringMap_directivesAreInRegistry_returnCorrectMap() throws Exception { // Arrange DirectiveWiringMapRetriever directiveWiringMapRetriever = new DirectiveWiringMapRetriever(); - GraphQLDirective upperCase = newDirective().name("upperCase").build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); ProcessingElementsContainer container = new ProcessingElementsContainer(); container.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); container.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, SecondWiringClass.class)); diff --git a/src/test/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilderTest.java b/src/test/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilderTest.java index fc170f48..3ad3cc8d 100644 --- a/src/test/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilderTest.java +++ b/src/test/java/graphql/annotations/processor/retrievers/fieldBuilders/DirectivesBuilderTest.java @@ -95,9 +95,9 @@ public void testDecoratedField_noDirectiveInRegistry_throwAGraphQLAnnotationsExc public void testDecoratedField_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); - GraphQLDirective annotationDirective = newDirective().name("anno").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective annotationDirective = newDirective().name("anno").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -126,8 +126,8 @@ public void testDecoratedField_directivesAreInRegistry_directivesAreBuilt() thro public void testDecoratedFieldWithArguments_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -150,8 +150,8 @@ public void testDecoratedFieldWithArguments_directivesAreInRegistry_directivesAr public void testDecoratedFieldWithArguments_argumentsValuesLongerThanArgumentsNumber_throwAGraphQLAnnotationsException() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -171,7 +171,7 @@ public void testDecoratedFieldWithArguments_directiveArgumentIsNotAScalarType_th // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); GraphQLInputObjectType inputField = GraphQLInputObjectType.newInputObject().name("inputField").build(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("arg").type(inputField)).build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("arg").type(inputField)).validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); DirectivesBuilder directivesBuilder = new DirectivesBuilder(this.getClass().getField("decoratedFieldWithArguments"), processingElementsContainer); @@ -189,7 +189,7 @@ public void testDecoratedFieldWithArguments_directiveArgumentIsNotAScalarType_th public void testDecoratedFieldWithArguments_argumentValueIsNotTheSameTypeAsArgument_throwAGraphQLAnnotationsException() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("arg").type(GraphQLInt)).build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("arg").type(GraphQLInt)).validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); DirectivesBuilder directivesBuilder = new DirectivesBuilder(this.getClass().getField("decoratedFieldWithArguments"), processingElementsContainer); @@ -208,8 +208,8 @@ public void testDecoratedFieldWithArguments_moreArgumentsThanArgumentsValues_dir // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("arg").type(GraphQLString)) - .argument(builder -> builder.name("arg2").type(GraphQLInt).defaultValue("5")).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + .argument(builder -> builder.name("arg2").type(GraphQLInt).defaultValue("5")).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -242,9 +242,9 @@ public void testDecoratedArgument_noDirectiveInRegistry_throwAGraphQLAnnotations public void testDecoratedArgument_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); - GraphQLDirective anno = newDirective().name("anno").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective anno = newDirective().name("anno").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -271,8 +271,8 @@ public void testDecoratedArgument_directivesAreInRegistry_directivesAreBuilt() t public void testDecoratedParameterWithArguments_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -304,9 +304,9 @@ public void testDecoratedClass_noDirectiveInRegistry_throwAGraphQLAnnotationsExc public void testDecoratedClass_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); - GraphQLDirective anno = newDirective().name("anno").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString).defaultValue("DefaultString")).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective anno = newDirective().name("anno").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class)); @@ -337,8 +337,8 @@ public void testDecoratedClass_directivesAreInRegistry_directivesAreBuilt() thro public void testDecoratedClassWithArguments_directivesAreInRegistry_directivesAreBuilt() throws Exception { // Arrange ProcessingElementsContainer processingElementsContainer = new ProcessingElementsContainer(); - GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).build(); - GraphQLDirective lowerCase = newDirective().name("lowerCase").build(); + GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("myArg").type(GraphQLString)).validLocation(Introspection.DirectiveLocation.FIELD).build(); + GraphQLDirective lowerCase = newDirective().name("lowerCase").validLocation(Introspection.DirectiveLocation.FIELD).build(); processingElementsContainer.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class)); processingElementsContainer.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, WiringClass.class));