diff --git a/buildSrc/src/main/kotlin/smithy.profiling-conventions.gradle.kts b/buildSrc/src/main/kotlin/smithy.profiling-conventions.gradle.kts index ef9d3d22b5a..9ac7d8f1801 100644 --- a/buildSrc/src/main/kotlin/smithy.profiling-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/smithy.profiling-conventions.gradle.kts @@ -11,3 +11,8 @@ tasks { duplicatesStrategy = DuplicatesStrategy.WARN } } + +// We don't need to lint benchmarks. +tasks.findByName("spotbugsJmh")?.apply { + enabled = false +} diff --git a/smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddRequestValidators.java b/smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddRequestValidators.java index d1b90b1391d..3f62bf6c7a4 100644 --- a/smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddRequestValidators.java +++ b/smithy-aws-apigateway-openapi/src/main/java/software/amazon/smithy/aws/apigateway/openapi/AddRequestValidators.java @@ -77,8 +77,8 @@ public OpenApi after(Context context, OpenApi openapi) { // Check if the service has a request validator. String serviceValidator = null; - if (context.getService().getTrait(RequestValidatorTrait.class).isPresent()) { - serviceValidator = context.getService().getTrait(RequestValidatorTrait.class).get().getValue(); + if (context.getService().hasTrait(RequestValidatorTrait.ID)) { + serviceValidator = context.getService().expectTrait(RequestValidatorTrait.class).getValue(); validators.add(serviceValidator); } diff --git a/smithy-aws-cloudformation-traits/src/main/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceIndex.java b/smithy-aws-cloudformation-traits/src/main/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceIndex.java index ef8f94c1241..b4a4437901a 100644 --- a/smithy-aws-cloudformation-traits/src/main/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceIndex.java +++ b/smithy-aws-cloudformation-traits/src/main/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceIndex.java @@ -237,7 +237,7 @@ private Set getDefaultIdentifierMutabilities(ResourceShape resource) private List> computeResourceAdditionalIdentifiers(StructureShape readInput) { List> identifiers = new ArrayList<>(); for (MemberShape member : readInput.members()) { - if (!member.hasTrait(CfnAdditionalIdentifierTrait.class)) { + if (!member.hasTrait(CfnAdditionalIdentifierTrait.ID)) { continue; } diff --git a/smithy-aws-cloudformation-traits/src/test/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceTraitTest.java b/smithy-aws-cloudformation-traits/src/test/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceTraitTest.java index 1a89b450960..47882d74663 100644 --- a/smithy-aws-cloudformation-traits/src/test/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceTraitTest.java +++ b/smithy-aws-cloudformation-traits/src/test/java/software/amazon/smithy/aws/cloudformation/traits/CfnResourceTraitTest.java @@ -26,20 +26,20 @@ public void loadsFromModel() { .unwrap(); Shape fooResource = result.expectShape(ShapeId.from("smithy.example#FooResource")); - assertTrue(fooResource.hasTrait(CfnResourceTrait.class)); + assertTrue(fooResource.hasTrait(CfnResourceTrait.ID)); CfnResourceTrait fooTrait = fooResource.expectTrait(CfnResourceTrait.class); assertFalse(fooTrait.getName().isPresent()); assertTrue(fooTrait.getAdditionalSchemas().isEmpty()); Shape barResource = result.expectShape(ShapeId.from("smithy.example#BarResource")); - assertTrue(barResource.hasTrait(CfnResourceTrait.class)); + assertTrue(barResource.hasTrait(CfnResourceTrait.ID)); CfnResourceTrait barTrait = barResource.expectTrait(CfnResourceTrait.class); assertThat(barTrait.getName().get(), equalTo("CustomResource")); assertFalse(barTrait.getAdditionalSchemas().isEmpty()); assertThat(barTrait.getAdditionalSchemas(), contains(ShapeId.from("smithy.example#ExtraBarRequest"))); Shape tadResource = result.expectShape(ShapeId.from("smithy.example#TadResource")); - assertTrue(tadResource.hasTrait(CfnResourceTrait.class)); + assertTrue(tadResource.hasTrait(CfnResourceTrait.ID)); CfnResourceTrait tadTrait = tadResource.expectTrait(CfnResourceTrait.class); assertFalse(tadTrait.getName().isPresent()); assertTrue(tadTrait.getAdditionalSchemas().isEmpty()); diff --git a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/CfnConverter.java b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/CfnConverter.java index a954be3988e..c676ab2f83e 100644 --- a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/CfnConverter.java +++ b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/CfnConverter.java @@ -166,7 +166,7 @@ private List createConversionEnvironments(Model model) { // Create an environment for each of the resources to be converted with. List environments = new ArrayList<>(); for (ResourceShape resourceShape : resourceShapes) { - if (resourceShape.getTrait(CfnResourceTrait.class).isPresent()) { + if (resourceShape.hasTrait(CfnResourceTrait.ID)) { ConversionEnvironment environment = createConversionEnvironment(model, serviceShape, resourceShape); environments.add(environment); } diff --git a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/HandlerPermissionMapper.java b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/HandlerPermissionMapper.java index 5a86a3b0976..d76f7dabe97 100644 --- a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/HandlerPermissionMapper.java +++ b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/HandlerPermissionMapper.java @@ -56,7 +56,7 @@ public void before(Context context, ResourceSchema.Builder resourceSchema) { .orElse(SetUtils.of()); createPermissions.addAll(putPermissions); // Put operations without the noReplace trait are used for updates. - if (!resource.hasTrait(NoReplaceTrait.class)) { + if (!resource.hasTrait(NoReplaceTrait.ID)) { updatePermissions.addAll(putPermissions); } diff --git a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/TaggingMapper.java b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/TaggingMapper.java index 30084d4e3f2..9a7d782f1ad 100644 --- a/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/TaggingMapper.java +++ b/smithy-aws-cloudformation/src/main/java/software/amazon/smithy/aws/cloudformation/schema/fromsmithy/mappers/TaggingMapper.java @@ -43,7 +43,7 @@ public static void injectTagsMember( StructureShape.Builder builder ) { String tagMemberName = getTagMemberName(config, resource); - if (resource.hasTrait(TaggableTrait.class)) { + if (resource.hasTrait(TaggableTrait.ID)) { AwsTagIndex tagIndex = AwsTagIndex.of(model); TaggableTrait trait = resource.expectTrait(TaggableTrait.class); CfnResourceIndex resourceIndex = CfnResourceIndex.of(model); @@ -68,7 +68,7 @@ public static void injectTagsMember( @Override public ResourceSchema after(Context context, ResourceSchema resourceSchema) { ResourceShape resourceShape = context.getResource(); - if (!resourceShape.hasTrait(TaggableTrait.class)) { + if (!resourceShape.hasTrait(TaggableTrait.ID)) { return resourceSchema; } diff --git a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysIndex.java b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysIndex.java index f1494ca7f6d..7c555feacde 100644 --- a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysIndex.java +++ b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysIndex.java @@ -174,8 +174,8 @@ private void compute( // Continue recursing into resources and computing keys. subject.asResourceShape().ifPresent(resource -> { - boolean disableConditionKeyInference = resource.hasTrait(DisableConditionKeyInferenceTrait.class) - || service.hasTrait(DisableConditionKeyInferenceTrait.class); + boolean disableConditionKeyInference = resource.hasTrait(DisableConditionKeyInferenceTrait.ID) + || service.hasTrait(DisableConditionKeyInferenceTrait.ID); // Add any inferred resource identifiers to the resource and to the service-wide definitions. Map childIdentifiers = !disableConditionKeyInference @@ -218,7 +218,7 @@ private Map inferChildResourceIdentifiers( // Only infer identifiers introduced by a child. Children should // use their parent identifiers and not duplicate them. ConditionKeyDefinition.Builder builder = ConditionKeyDefinition.builder(); - if (shape.hasTrait(ArnReferenceTrait.class)) { + if (shape.hasTrait(ArnReferenceTrait.ID)) { // Use an ARN type if the targeted shape has the arnReference trait. builder.type(ARN_TYPE); } else { diff --git a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysValidator.java b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysValidator.java index 8239d671ff5..55afdfdef8c 100644 --- a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysValidator.java +++ b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/ConditionKeysValidator.java @@ -40,13 +40,13 @@ public List validate(Model model) { OperationIndex operationIndex = OperationIndex.of(model); return model.shapes(ServiceShape.class) - .filter(service -> service.hasTrait(ServiceTrait.class)) + .filter(service -> service.hasTrait(ServiceTrait.ID)) .flatMap(service -> { List results = new ArrayList<>(); Set knownKeys = conditionIndex.getDefinedConditionKeys(service).keySet(); Set serviceResolvedKeys = Collections.emptySet(); - if (service.hasTrait(ServiceResolvedConditionKeysTrait.class)) { + if (service.hasTrait(ServiceResolvedConditionKeysTrait.ID)) { ServiceResolvedConditionKeysTrait trait = service.expectTrait(ServiceResolvedConditionKeysTrait.class); //assign so we can compare against condition key values for any intersection @@ -83,7 +83,7 @@ public List validate(Model model) { } for (MemberShape memberShape : operationIndex.getInputMembers(operation).values()) { - if (memberShape.hasTrait(ConditionKeyValueTrait.class)) { + if (memberShape.hasTrait(ConditionKeyValueTrait.ID)) { ConditionKeyValueTrait trait = memberShape.expectTrait(ConditionKeyValueTrait.class); String conditionKey = trait.getValue(); if (!knownKeys.contains(conditionKey)) { diff --git a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitValidator.java b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitValidator.java index b425b346de3..cf6ac928b14 100644 --- a/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitValidator.java +++ b/smithy-aws-iam-traits/src/main/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitValidator.java @@ -28,7 +28,7 @@ public List validate(Model model) { for (ResourceShape resource : model.getResourceShapesWithTrait(IamResourceTrait.class)) { // If the resource has both the IamResourceTrait and Arn trait, // check that the resource name is consistent between the two traits - if (resource.hasTrait(ArnTrait.class)) { + if (resource.hasTrait(ArnTrait.ID)) { String resourceName = resource.expectTrait(IamResourceTrait.class) .getName() .orElseGet(() -> StringUtils.lowerCase(resource.getId().getName())); diff --git a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamActionTraitTest.java b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamActionTraitTest.java index 650ba2e544d..bfcd4a7c256 100644 --- a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamActionTraitTest.java +++ b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamActionTraitTest.java @@ -31,7 +31,7 @@ public void loadsFromModel() { Shape fooOperation = result.expectShape(ID); - assertTrue(fooOperation.hasTrait(IamActionTrait.class)); + assertTrue(fooOperation.hasTrait(IamActionTrait.ID)); IamActionTrait trait = fooOperation.expectTrait(IamActionTrait.class); assertEquals(trait.getName().get(), "foo"); assertEquals(trait.getDocumentation().get(), "docs"); diff --git a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitTest.java b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitTest.java index 5a8d619b7e5..2be602ebd8d 100644 --- a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitTest.java +++ b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/IamResourceTraitTest.java @@ -27,7 +27,7 @@ public void loadsFromModel() { Shape superResource = result.expectShape(ID); - assertTrue(superResource.hasTrait(IamResourceTrait.class)); + assertTrue(superResource.hasTrait(IamResourceTrait.ID)); assertEquals(superResource.expectTrait(IamResourceTrait.class).getName().get(), "super"); assertEquals(superResource.expectTrait(IamResourceTrait.class).getRelativeDocumentation().get(), "API-Super.html"); diff --git a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTraitTest.java b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTraitTest.java index de0378b4350..6964c8e33c2 100644 --- a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTraitTest.java +++ b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/RequiredActionsTraitTest.java @@ -25,7 +25,7 @@ public void loadsFromModel() { Shape myOperation = result.expectShape(ShapeId.from("smithy.example#MyOperation")); - assertTrue(myOperation.hasTrait(RequiredActionsTrait.class)); + assertTrue(myOperation.hasTrait(RequiredActionsTrait.ID)); assertThat(myOperation.expectTrait(RequiredActionsTrait.class).getValues(), containsInAnyOrder( "iam:PassRole", diff --git a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/SupportedPrincipalTypesTraitTest.java b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/SupportedPrincipalTypesTraitTest.java index 513b7a452c0..1b60421618f 100644 --- a/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/SupportedPrincipalTypesTraitTest.java +++ b/smithy-aws-iam-traits/src/test/java/software/amazon/smithy/aws/iam/traits/SupportedPrincipalTypesTraitTest.java @@ -25,13 +25,13 @@ public void loadsFromModel() { Shape myService = result.expectShape(ShapeId.from("smithy.example#MyService")); Shape myOperation = result.expectShape(ShapeId.from("smithy.example#MyOperation")); - assertTrue(myService.hasTrait(SupportedPrincipalTypesTrait.class)); + assertTrue(myService.hasTrait(SupportedPrincipalTypesTrait.ID)); assertThat(myService.expectTrait(SupportedPrincipalTypesTrait.class).getValues(), containsInAnyOrder( "IAMUser", "IAMRole")); - assertTrue(myOperation.hasTrait(SupportedPrincipalTypesTrait.class)); + assertTrue(myOperation.hasTrait(SupportedPrincipalTypesTrait.ID)); assertThat(myOperation.expectTrait(SupportedPrincipalTypesTrait.class).getValues(), containsInAnyOrder( "Root", diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ArnIndex.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ArnIndex.java index 0d8b50334bb..e0a5fa9d3bf 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ArnIndex.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ArnIndex.java @@ -43,7 +43,7 @@ public ArnIndex(Model model) { // Pre-compute all of the ARN templates in a service shape. TopDownIndex topDownIndex = TopDownIndex.of(model); List services = model.shapes(ServiceShape.class) - .filter(shape -> shape.hasTrait(ServiceTrait.class)) + .filter(shape -> shape.hasTrait(ServiceTrait.ID)) .collect(Collectors.toList()); templates = unmodifiableMap(services.stream() diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ErrorRenameValidator.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ErrorRenameValidator.java index 0085e53be9e..0bbf0500e28 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ErrorRenameValidator.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/ErrorRenameValidator.java @@ -79,7 +79,7 @@ private void validate(Model model, ServiceShape service, List e renames.keySet().forEach(shapeId -> { Optional shape = model.getShape(shapeId); - if (!shape.isPresent() || !shape.get().hasTrait(ErrorTrait.class)) { + if (!shape.isPresent() || !shape.get().hasTrait(ErrorTrait.ID)) { return; } diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/PlaneIndex.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/PlaneIndex.java index a789380ee59..0e399d5f0f0 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/PlaneIndex.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/PlaneIndex.java @@ -135,9 +135,9 @@ private Plane resolvePlane(ToShapeId service, ShapeId operationOrResource) { } private Plane extractPlane(Shape shape) { - if (shape.hasTrait(ControlPlaneTrait.class)) { + if (shape.hasTrait(ControlPlaneTrait.ID)) { return Plane.CONTROL; - } else if (shape.hasTrait(DataPlaneTrait.class)) { + } else if (shape.hasTrait(DataPlaneTrait.ID)) { return Plane.DATA; } else { return null; diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformer.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformer.java index 16a3ca50362..275d2c3089f 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformer.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformer.java @@ -72,7 +72,7 @@ private Set getOperationsToUpdate( ClientEndpointDiscoveryIndex discoveryIndex = ClientEndpointDiscoveryIndex.of(model); Set stillBoundOperations = model.shapes(ServiceShape.class) // Get all endpoint discovery services - .filter(service -> service.hasTrait(ClientEndpointDiscoveryTrait.class)) + .filter(service -> service.hasTrait(ClientEndpointDiscoveryTrait.ID)) .map(Shape::getId) // Get those services who aren't having their discovery traits removed .filter(service -> !updatedServices.contains(service)) @@ -96,7 +96,7 @@ private Set getOperationsToUpdate( private Set getMembersToUpdate(Model model, Set updatedOperations) { Set stillBoundMembers = model.shapes(OperationShape.class) // Get all endpoint discovery operations - .filter(operation -> operation.hasTrait(ClientDiscoveredEndpointTrait.class)) + .filter(operation -> operation.hasTrait(ClientDiscoveredEndpointTrait.ID)) // Filter out the ones which are having their endpoint discovery traits removed .filter(operation -> !updatedOperations.contains(operation.getId())) // Get the input shapes of those operations @@ -109,7 +109,7 @@ private Set getMembersToUpdate(Model model, Set updatedOperation return model.shapes(MemberShape.class) // Get all members which have the endpoint discovery id trait - .filter(member -> member.hasTrait(ClientEndpointDiscoveryIdTrait.class)) + .filter(member -> member.hasTrait(ClientEndpointDiscoveryIdTrait.ID)) // Get those which are on structures that aren't still bound to endpoint discovery operations .filter(member -> !stillBoundMembers.contains(member.getId())) // Remove the trait diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIndex.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIndex.java index 18886acf937..914fb1f8a7d 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIndex.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIndex.java @@ -86,7 +86,7 @@ private Map getOperations( private List getDiscoveryIds(OperationIndex opIndex, OperationShape operation) { List discoveryIds = new ArrayList<>(); for (MemberShape member : opIndex.expectInputShape(operation).getAllMembers().values()) { - if (member.hasTrait(ClientEndpointDiscoveryIdTrait.class)) { + if (member.hasTrait(ClientEndpointDiscoveryIdTrait.ID)) { discoveryIds.add(member); } } diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryValidator.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryValidator.java index 5ae2a5ff172..50782646a53 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryValidator.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryValidator.java @@ -111,7 +111,7 @@ private List validateOperations( Map endpointDiscoveryServices ) { return model.shapes(OperationShape.class) - .filter(operation -> operation.hasTrait(ClientDiscoveredEndpointTrait.class)) + .filter(operation -> operation.hasTrait(ClientDiscoveredEndpointTrait.ID)) .map(operation -> { List infos = endpointDiscoveryServices.keySet() .stream() diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/AwsTagIndex.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/AwsTagIndex.java index 173e6fe97d2..24f6bc0a260 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/AwsTagIndex.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/AwsTagIndex.java @@ -301,7 +301,7 @@ private void computeResourceTagLocations(Model model, ResourceShape resource) { // Put is always a create operation resourceIsTagOnCreate.add(resource.getId()); // and it's also an update when not annotated with `@noReplace`. - if (!resource.hasTrait(NoReplaceTrait.class)) { + if (!resource.hasTrait(NoReplaceTrait.ID)) { resourceIsTagOnUpdate.add(resource.getId()); } } diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TagEnabledServiceValidator.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TagEnabledServiceValidator.java index bbcf4b9301f..9930861b7b1 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TagEnabledServiceValidator.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TagEnabledServiceValidator.java @@ -38,7 +38,7 @@ private List validateService( int taggableResourceCount = 0; for (ResourceShape resource : topDownIndex.getContainedResources(service)) { - if (resource.hasTrait(TaggableTrait.class)) { + if (resource.hasTrait(TaggableTrait.ID)) { ++taggableResourceCount; } } diff --git a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TaggableResourceValidator.java b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TaggableResourceValidator.java index 365b4673599..8218e57feca 100644 --- a/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TaggableResourceValidator.java +++ b/smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/TaggableResourceValidator.java @@ -35,10 +35,10 @@ public List validate(Model model) { for (ServiceShape service : model.getServiceShapes()) { for (ResourceShape resource : topDownIndex.getContainedResources(service)) { boolean resourceLikelyTaggable = false; - if (resource.hasTrait(TaggableTrait.class)) { + if (resource.hasTrait(TaggableTrait.ID)) { events.addAll(validateResource(model, resource, service, tagIndex)); resourceLikelyTaggable = true; - } else if (resource.hasTrait(ArnTrait.class) && tagIndex.serviceHasTagApis(service)) { + } else if (resource.hasTrait(ArnTrait.ID) && tagIndex.serviceHasTagApis(service)) { // If a resource does not have the taggable trait, but has an ARN, and the service has tag // operations, it is most likely a mistake. events.add(warning(resource, "Resource is likely missing `aws.api#taggable` trait.")); @@ -46,7 +46,7 @@ public List validate(Model model) { } // It's possible the resource was marked as taggable but the service isn't tagEnabled. - if (resourceLikelyTaggable && !service.hasTrait(TagEnabledTrait.class)) { + if (resourceLikelyTaggable && !service.hasTrait(TagEnabledTrait.ID)) { events.add(warning(service, "Service has resources with `aws.api#taggable` applied but does not " + "have the `aws.api#tagEnabled` trait.")); @@ -81,7 +81,7 @@ private List validateResource( boolean isServiceWideTaggable = awsTagIndex.serviceHasTagApis(service.getId()); boolean isInstanceOpTaggable = isTaggableViaInstanceOperations(model, resource); - if (isServiceWideTaggable && !isInstanceOpTaggable && !resource.hasTrait(ArnTrait.class)) { + if (isServiceWideTaggable && !isInstanceOpTaggable && !resource.hasTrait(ArnTrait.ID)) { events.add(error(resource, "Resource is taggable only via service-wide tag operations." + " It must use the `aws.api@arn` trait.")); diff --git a/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformerTest.java b/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformerTest.java index eee413eee8c..480ecdf61bf 100644 --- a/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformerTest.java +++ b/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/CleanClientDiscoveryTraitTransformerTest.java @@ -50,11 +50,11 @@ public void removesTraitsWhenOperationRemoved() { .flatMap(Shape::asMemberShape) .get(); - assertFalse(service.hasTrait(ClientEndpointDiscoveryTrait.class)); + assertFalse(service.hasTrait(ClientEndpointDiscoveryTrait.ID)); // discovery is required for this operation, so it keeps the trait - assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); - assertFalse(putOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); - assertFalse(putId.hasTrait(ClientEndpointDiscoveryIdTrait.class)); + assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); + assertFalse(putOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); + assertFalse(putId.hasTrait(ClientEndpointDiscoveryIdTrait.ID)); } @Test @@ -89,10 +89,10 @@ public void doesntRemoveTraitsWhenErrorRemoved() { .flatMap(Shape::asMemberShape) .get(); - assertTrue(service.hasTrait(ClientEndpointDiscoveryTrait.class)); - assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); - assertTrue(putOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); - assertTrue(putId.hasTrait(ClientEndpointDiscoveryIdTrait.class)); + assertTrue(service.hasTrait(ClientEndpointDiscoveryTrait.ID)); + assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); + assertTrue(putOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); + assertTrue(putId.hasTrait(ClientEndpointDiscoveryIdTrait.ID)); } @Test @@ -117,8 +117,8 @@ public void doesntRemoveOptionalOperationTraitIfStillBoundToDiscoveryService() { .flatMap(Shape::asOperationShape) .get(); - assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); - assertTrue(putOperation.hasTrait(ClientDiscoveredEndpointTrait.class)); + assertTrue(getOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); + assertTrue(putOperation.hasTrait(ClientDiscoveredEndpointTrait.ID)); } @Test @@ -138,7 +138,7 @@ public void keepsDiscoveryIdTraitIfStillBound() { .flatMap(Shape::asMemberShape) .get(); - assertTrue(id.hasTrait(ClientEndpointDiscoveryIdTrait.class)); + assertTrue(id.hasTrait(ClientEndpointDiscoveryIdTrait.ID)); } } diff --git a/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIdTraitTest.java b/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIdTraitTest.java index 1ff86e9e4f4..ac1a290464c 100644 --- a/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIdTraitTest.java +++ b/smithy-aws-traits/src/test/java/software/amazon/smithy/aws/traits/clientendpointdiscovery/ClientEndpointDiscoveryIdTraitTest.java @@ -41,7 +41,7 @@ public void loadsFromModel() { .getMember("Id") .get(); - assertTrue(member.getTrait(ClientEndpointDiscoveryIdTrait.class).isPresent()); + assertTrue(member.hasTrait(ClientEndpointDiscoveryIdTrait.ID)); } @Test diff --git a/smithy-build/src/main/java/software/amazon/smithy/build/transforms/ExcludeTraitsByTag.java b/smithy-build/src/main/java/software/amazon/smithy/build/transforms/ExcludeTraitsByTag.java index 49907ce2ce8..a547f6d2277 100644 --- a/smithy-build/src/main/java/software/amazon/smithy/build/transforms/ExcludeTraitsByTag.java +++ b/smithy-build/src/main/java/software/amazon/smithy/build/transforms/ExcludeTraitsByTag.java @@ -72,7 +72,7 @@ protected Model transformWithConfig(TransformContext context, Config config) { private boolean removeIfPredicate(Shape shape, Collection tags) { return !Prelude.isPreludeShape(shape) - && shape.hasTrait(TraitDefinition.class) + && shape.hasTrait(TraitDefinition.ID) && hasAnyTag(shape, tags); } diff --git a/smithy-build/src/main/java/software/amazon/smithy/build/transforms/IncludeTraitsByTag.java b/smithy-build/src/main/java/software/amazon/smithy/build/transforms/IncludeTraitsByTag.java index 413d6138d11..3981df80503 100644 --- a/smithy-build/src/main/java/software/amazon/smithy/build/transforms/IncludeTraitsByTag.java +++ b/smithy-build/src/main/java/software/amazon/smithy/build/transforms/IncludeTraitsByTag.java @@ -72,7 +72,7 @@ protected Model transformWithConfig(TransformContext context, Config config) { private boolean removeIfPredicate(Shape shape, Collection tags) { return !Prelude.isPreludeShape(shape) - && shape.hasTrait(TraitDefinition.class) + && shape.hasTrait(TraitDefinition.ID) && !hasAnyTag(shape, tags); } diff --git a/smithy-cli/src/main/java/software/amazon/smithy/cli/commands/MigrateCommand.java b/smithy-cli/src/main/java/software/amazon/smithy/cli/commands/MigrateCommand.java index 3da1f968106..fd1b29dbfcb 100644 --- a/smithy-cli/src/main/java/software/amazon/smithy/cli/commands/MigrateCommand.java +++ b/smithy-cli/src/main/java/software/amazon/smithy/cli/commands/MigrateCommand.java @@ -296,7 +296,7 @@ String getModelString() { @Override protected Void getDefault(Shape shape) { - if (shape.hasTrait(BoxTrait.class)) { + if (shape.hasTrait(BoxTrait.ID)) { writer.eraseTrait(shape, shape.expectTrait(BoxTrait.class)); } else if (hasSyntheticDefault(shape)) { addDefault(shape, shape.getType()); @@ -314,7 +314,7 @@ private void handleMemberShape(MemberShape shape) { addDefault(shape, completeModel.expectShape(shape.getTarget()).getType()); } - if (shape.hasTrait(BoxTrait.class)) { + if (shape.hasTrait(BoxTrait.ID)) { writer.eraseTrait(shape, shape.expectTrait(BoxTrait.class)); } } @@ -337,7 +337,7 @@ private void addDefault(Shape shape, ShapeType targetType) { } String defaultValue = ""; // Boxed members get a null default. - if (shape.hasTrait(BoxTrait.class)) { + if (shape.hasTrait(BoxTrait.ID)) { defaultValue = "null"; } else { switch (targetType) { diff --git a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/CodegenDirector.java b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/CodegenDirector.java index 816f761079a..22ff58d1e05 100644 --- a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/CodegenDirector.java +++ b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/CodegenDirector.java @@ -587,7 +587,7 @@ public Void operationShape(OperationShape shape) { @Override public Void structureShape(StructureShape shape) { - if (shape.hasTrait(ErrorTrait.class)) { + if (shape.hasTrait(ErrorTrait.ID)) { LOGGER.finest(() -> "Generating error " + shape.getId()); directedCodegen.generateError(new GenerateErrorDirective<>(context, serviceShape, shape)); } else { diff --git a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateStructureDirective.java b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateStructureDirective.java index 0921bb0658f..9c071d0d059 100644 --- a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateStructureDirective.java +++ b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateStructureDirective.java @@ -28,7 +28,7 @@ public final class GenerateStructureDirective, /** * Check if this is a shape used exclusively for input. * - *

This is equivalent to calling {@code shape().hasTrait(InputTrait.class)}. + *

This is equivalent to calling {@code shape().hasTrait(InputTrait.ID)}. * *

Use the {@link CodegenDirector#createDedicatedInputsAndOutputs()} method * to ensure that every operation has a unique input shape marked with the @@ -38,13 +38,13 @@ public final class GenerateStructureDirective, * @see ModelTransformer#createDedicatedInputAndOutput */ public boolean isInputShape() { - return shape().hasTrait(InputTrait.class); + return shape().hasTrait(InputTrait.ID); } /** * Check if this is a shape used exclusively for output. * - *

This is equivalent to calling {@code shape().hasTrait(OutputTrait.class)}. + *

This is equivalent to calling {@code shape().hasTrait(OutputTrait.ID)}. * *

Use the {@link CodegenDirector#createDedicatedInputsAndOutputs()} method * to ensure that every operation has a unique output shape marked with the @@ -54,6 +54,6 @@ public boolean isInputShape() { * @see ModelTransformer#createDedicatedInputAndOutput */ public boolean isOutputShape() { - return shape().hasTrait(OutputTrait.class); + return shape().hasTrait(OutputTrait.ID); } } diff --git a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateUnionDirective.java b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateUnionDirective.java index e28b8c0f235..63185d52686 100644 --- a/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateUnionDirective.java +++ b/smithy-codegen-core/src/main/java/software/amazon/smithy/codegen/core/directed/GenerateUnionDirective.java @@ -29,6 +29,6 @@ public final class GenerateUnionDirective, S> * @return Returns true if this is an event stream. */ public boolean isEventStream() { - return shape().hasTrait(StreamingTrait.class); + return shape().hasTrait(StreamingTrait.ID); } } diff --git a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/AddedTraitDefinition.java b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/AddedTraitDefinition.java index e4a22cf7ce8..debb7c50dd9 100644 --- a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/AddedTraitDefinition.java +++ b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/AddedTraitDefinition.java @@ -18,7 +18,7 @@ public final class AddedTraitDefinition extends AbstractDiffEvaluator { @Override public List evaluate(Differences differences) { return differences.addedShapes() - .filter(shape -> shape.hasTrait(TraitDefinition.class)) + .filter(shape -> shape.hasTrait(TraitDefinition.ID)) .map(shape -> ValidationEvent.builder() .id(getEventId()) .severity(Severity.NOTE) diff --git a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedDefault.java b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedDefault.java index f57268365cf..8d42c948e55 100644 --- a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedDefault.java +++ b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedDefault.java @@ -62,7 +62,7 @@ private void validateChange( newTrait, "Adding the @default trait to a root-level shape will break previously generated " + "code. Added @default: " + Node.printJson(newTrait.toNode()))); - } else if (!change.getNewShape().hasTrait(AddedDefaultTrait.class)) { + } else if (!change.getNewShape().hasTrait(AddedDefaultTrait.ID)) { if (!newTrait.toNode().isNullNode()) { events.add(error(change.getNewShape(), newTrait, diff --git a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedShapeType.java b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedShapeType.java index 6cc1ee7c452..88eb75a5419 100644 --- a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedShapeType.java +++ b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/ChangedShapeType.java @@ -46,7 +46,7 @@ private boolean expectedSetToListChange(ChangedShape diff) { // Smithy diff doesn't raise an issue if a set is changed to a list and the list // has the uniqueItems trait. Set is deprecated and this is a recommended change. if (oldType == ShapeType.SET && newType == ShapeType.LIST) { - return diff.getNewShape().hasTrait(UniqueItemsTrait.class); + return diff.getNewShape().hasTrait(UniqueItemsTrait.ID); } return false; diff --git a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedShape.java b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedShape.java index a8fa37ad1d1..42b1c9f33e6 100644 --- a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedShape.java +++ b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedShape.java @@ -22,7 +22,7 @@ public final class RemovedShape extends AbstractDiffEvaluator { @Override public List evaluate(Differences differences) { return differences.removedShapes() - .filter(shape -> !shape.hasTrait(PrivateTrait.class)) + .filter(shape -> !shape.hasTrait(PrivateTrait.ID)) .filter(shape -> !isMemberOfRemovedShape(shape, differences)) .map(shape -> isInconsequentialType(shape) ? ValidationEvent.builder() diff --git a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedTraitDefinition.java b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedTraitDefinition.java index 1ec56bd8276..48ceb5657dd 100644 --- a/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedTraitDefinition.java +++ b/smithy-diff/src/main/java/software/amazon/smithy/diff/evaluators/RemovedTraitDefinition.java @@ -18,7 +18,7 @@ public final class RemovedTraitDefinition extends AbstractDiffEvaluator { @Override public List evaluate(Differences differences) { return differences.removedShapes() - .filter(shape -> shape.hasTrait(TraitDefinition.class)) + .filter(shape -> shape.hasTrait(TraitDefinition.ID)) .map(shape -> ValidationEvent.builder() .id(getEventId()) .severity(Severity.ERROR) diff --git a/smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedNullabilityTest.java b/smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedNullabilityTest.java index 89ee2139d10..fb728787866 100644 --- a/smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedNullabilityTest.java +++ b/smithy-diff/src/test/java/software/amazon/smithy/diff/evaluators/ChangedNullabilityTest.java @@ -308,10 +308,10 @@ public void doesNotEmitForBackwardCompatibleBoxTraitChanges() { }); // First, spot check that the transform worked and the models are different. - assertThat(old.expectShape(bazId).hasTrait(BoxTrait.class), is(false)); - assertThat(newModel.expectShape(bazId).hasTrait(BoxTrait.class), is(true)); - assertThat(old.expectShape(bamId).hasTrait(BoxTrait.class), is(false)); - assertThat(newModel.expectShape(bamId).hasTrait(BoxTrait.class), is(true)); + assertThat(old.expectShape(bazId).hasTrait(BoxTrait.ID), is(false)); + assertThat(newModel.expectShape(bazId).hasTrait(BoxTrait.ID), is(true)); + assertThat(old.expectShape(bamId).hasTrait(BoxTrait.ID), is(false)); + assertThat(newModel.expectShape(bamId).hasTrait(BoxTrait.ID), is(true)); List events = ModelDiff.compare(old, newModel); diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DirectedDocGen.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DirectedDocGen.java index 2fad4b9ed0f..0fc0637fbbc 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DirectedDocGen.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DirectedDocGen.java @@ -55,7 +55,7 @@ public void generateService(GenerateServiceDirective directive) { // Input and output structures are documented alongside the relevant operations. - if (directive.shape().hasTrait(InputTrait.class) || directive.shape().hasTrait(OutputTrait.class)) { + if (directive.shape().hasTrait(InputTrait.ID) || directive.shape().hasTrait(OutputTrait.ID)) { return; } new StructuredShapeGenerator(directive.context()).accept(directive.shape(), MemberListingType.MEMBERS); diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DocSymbolProvider.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DocSymbolProvider.java index c72050b24b9..2303faa76fc 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DocSymbolProvider.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/DocSymbolProvider.java @@ -160,10 +160,10 @@ private Map mapIoShapesToOperations(Model model) { var operationIndex = OperationIndex.of(model); for (var operation : model.getOperationShapes()) { operationIndex.getInputShape(operation) - .filter(i -> i.hasTrait(InputTrait.class)) + .filter(i -> i.hasTrait(InputTrait.ID)) .ifPresent(i -> operationIoMap.put(i.getId(), operation)); operationIndex.getOutputShape(operation) - .filter(i -> i.hasTrait(OutputTrait.class)) + .filter(i -> i.hasTrait(OutputTrait.ID)) .ifPresent(i -> operationIoMap.put(i.getId(), operation)); } return Map.copyOf(operationIoMap); @@ -196,8 +196,8 @@ public Symbol operationShape(OperationShape shape) { @Override public Symbol structureShape(StructureShape shape) { var builder = getSymbolBuilder(shape); - if (shape.hasTrait(TraitDefinition.class)) { - if (shape.hasTrait(AuthDefinitionTrait.class)) { + if (shape.hasTrait(TraitDefinition.ID)) { + if (shape.hasTrait(AuthDefinitionTrait.ID)) { builder.definitionFile(getDefinitionFile(SERVICE_FILE)); } return builder.build(); diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/generators/MemberGenerator.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/generators/MemberGenerator.java index 169e232a71c..48dcddf65bf 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/generators/MemberGenerator.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/generators/MemberGenerator.java @@ -353,7 +353,7 @@ public Void mapShape(MapShape shape) { @Override public Void structureShape(StructureShape shape) { - if (member.hasTrait(EnumValueTrait.class)) { + if (member.hasTrait(EnumValueTrait.ID)) { var trait = member.expectTrait(EnumValueTrait.class); if (trait.getIntValue().isPresent()) { writer.writeInline("$`", trait.expectIntValue()); diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/ErrorFaultInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/ErrorFaultInterceptor.java index a97e86f4472..a9b2115c881 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/ErrorFaultInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/ErrorFaultInterceptor.java @@ -23,7 +23,7 @@ public Class sectionType() { @Override public boolean isIntercepted(ShapeSubheadingSection section) { - return section.shape().hasTrait(ErrorTrait.class); + return section.shape().hasTrait(ErrorTrait.ID); } @Override diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/HttpPayloadInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/HttpPayloadInterceptor.java index 5df8dc62e1f..c23cb83e920 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/HttpPayloadInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/HttpPayloadInterceptor.java @@ -32,7 +32,7 @@ protected ShapeId getTraitId() { void write(DocWriter writer, String previousText, ProtocolSection section, HttpPayloadTrait trait) { var target = section.context().model().expectShape(section.shape().asMemberShape().get().getTarget()); writer.pushState(); - writer.putContext("requiresLength", target.hasTrait(RequiresLengthTrait.class)); + writer.putContext("requiresLength", target.hasTrait(RequiresLengthTrait.ID)); writer.write(""" This is bound directly to the HTTP message body without wrapping.${?requiresLength} \ Its size must be sent as the value of the $` header.${/requiresLength} diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/IdempotencyInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/IdempotencyInterceptor.java index 2aff0579aa5..7ce5615fb51 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/IdempotencyInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/IdempotencyInterceptor.java @@ -43,7 +43,7 @@ public boolean isIntercepted(ShapeDetailsSection section) { var model = section.context().model(); var operationIndex = OperationIndex.of(model); - if (shape.hasTrait(IdempotencyTokenTrait.class) + if (shape.hasTrait(IdempotencyTokenTrait.ID) && operationIndex.isInputStructure(shape.asMemberShape().get().getContainer())) { return true; } @@ -64,7 +64,7 @@ public boolean isIntercepted(ShapeDetailsSection section) { private Optional getIdempotencyToken(Model model, OperationShape operation) { var input = model.expectShape(operation.getInputShape()); for (var member : input.members()) { - if (member.hasTrait(IdempotencyTokenTrait.class)) { + if (member.hasTrait(IdempotencyTokenTrait.ID)) { return Optional.of(member); } } diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/NoReplaceInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/NoReplaceInterceptor.java index 8699b845acb..3b024216aba 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/NoReplaceInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/NoReplaceInterceptor.java @@ -29,7 +29,7 @@ public boolean isIntercepted(S section) { var shape = getShape(section); var resource = getResource(getContext(section), shape); return resource.isPresent() - && resource.get().hasTrait(NoReplaceTrait.class) + && resource.get().hasTrait(NoReplaceTrait.ID) && resource.get().getPut().map(put -> put.equals(shape.getId())).orElse(false); } diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/PaginationInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/PaginationInterceptor.java index 6e4861909a5..1f5baa43b25 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/PaginationInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/PaginationInterceptor.java @@ -25,7 +25,7 @@ public Class sectionType() { @Override public boolean isIntercepted(ShapeDetailsSection section) { - return section.shape().isOperationShape() && section.shape().hasTrait(PaginatedTrait.class); + return section.shape().isOperationShape() && section.shape().hasTrait(PaginatedTrait.ID); } @Override diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RecommendedInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RecommendedInterceptor.java index d5d10636aa6..d10734f0690 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RecommendedInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RecommendedInterceptor.java @@ -25,7 +25,7 @@ public Class sectionType() { @Override public boolean isIntercepted(ShapeSubheadingSection section) { - return section.shape().hasTrait(RecommendedTrait.class); + return section.shape().hasTrait(RecommendedTrait.ID); } @Override diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RequestCompressionInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RequestCompressionInterceptor.java index 163a75dbf8d..c353001ac85 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RequestCompressionInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RequestCompressionInterceptor.java @@ -26,7 +26,7 @@ public Class sectionType() { @Override public boolean isIntercepted(ShapeDetailsSection section) { - return section.shape().hasTrait(RequestCompressionTrait.class); + return section.shape().hasTrait(RequestCompressionTrait.ID); } @Override diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RetryableInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RetryableInterceptor.java index 92146a6312e..3106cac9194 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RetryableInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/RetryableInterceptor.java @@ -23,7 +23,7 @@ public Class sectionType() { @Override public boolean isIntercepted(ShapeSubheadingSection section) { - return section.shape().hasTrait(RetryableTrait.class); + return section.shape().hasTrait(RetryableTrait.ID); } @Override diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/StreamingInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/StreamingInterceptor.java index b68361ab0c3..337208f71a0 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/StreamingInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/StreamingInterceptor.java @@ -35,7 +35,7 @@ public void append(DocWriter writer, ShapeDetailsSection section) { .orElse(section.shape()); if (target.isBlobShape()) { writer.pushState(); - writer.putContext("requiresLength", target.hasTrait(RequiresLengthTrait.class)); + writer.putContext("requiresLength", target.hasTrait(RequiresLengthTrait.ID)); writer.openAdmonition(NoticeType.IMPORTANT); writer.write(""" The data in this member is potentially very large and therefore must be streamed and not \ diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlFlattenedInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlFlattenedInterceptor.java index 2e213a70bd7..c1e27da0de5 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlFlattenedInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlFlattenedInterceptor.java @@ -68,13 +68,13 @@ public void write(DocWriter writer, String previousText, ProtocolSection section private Pair getRef(DocGenerationContext context, Shape shape) { var target = context.model().expectShape(shape.asMemberShape().get().getTarget()); if (target.isMapShape()) { - if (shape.hasTrait(XmlFlattenedTrait.class)) { + if (shape.hasTrait(XmlFlattenedTrait.ID)) { return FLAT_MAP_REF; } return WRAPPED_MAP_REF; } - if (shape.hasTrait(XmlFlattenedTrait.class)) { + if (shape.hasTrait(XmlFlattenedTrait.ID)) { return FLAT_LIST_REF; } return WRAPPED_LIST_REF; diff --git a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlNameInterceptor.java b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlNameInterceptor.java index 0fd16263ba2..0e3e870092f 100644 --- a/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlNameInterceptor.java +++ b/smithy-docgen/src/main/java/software/amazon/smithy/docgen/interceptors/XmlNameInterceptor.java @@ -29,7 +29,7 @@ protected ShapeId getTraitId() { @Override public boolean isIntercepted(ProtocolSection section) { // The xmlName trait uniquely doesn't inherit values from the target as a member. - return super.isIntercepted(section) && section.shape().hasTrait(XmlNameTrait.class); + return super.isIntercepted(section) && section.shape().hasTrait(XmlNameTrait.ID); } @Override diff --git a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/DeconflictingStrategy.java b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/DeconflictingStrategy.java index 1824577f77e..ae266d2f660 100644 --- a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/DeconflictingStrategy.java +++ b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/DeconflictingStrategy.java @@ -86,7 +86,7 @@ private boolean isIgnoredShape(Shape shape) { || shape.isServiceShape() || shape.isOperationShape() || shape.isMemberShape() - || (Prelude.isPreludeShape(shape) && shape.hasTrait(PrivateTrait.class)); + || (Prelude.isPreludeShape(shape) && shape.hasTrait(PrivateTrait.ID)); } private String deconflict(Shape shape, String pointer, Map reversePointers) { diff --git a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaConfig.java b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaConfig.java index 4f034610dd7..db2d5cee379 100644 --- a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaConfig.java +++ b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaConfig.java @@ -380,7 +380,7 @@ public void setService(ShapeId service) { * @return Returns the optionally detected format. */ public Optional detectJsonTimestampFormat(Shape shape) { - if (shape.isTimestampShape() || shape.hasTrait(TimestampFormatTrait.class)) { + if (shape.isTimestampShape() || shape.hasTrait(TimestampFormatTrait.ID)) { return Optional.of(shape.getTrait(TimestampFormatTrait.class) .map(TimestampFormatTrait::getValue) .orElseGet(() -> getDefaultTimestampFormat().toString())); diff --git a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaShapeVisitor.java b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaShapeVisitor.java index 1c4276d5e53..5b590cf9be2 100644 --- a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaShapeVisitor.java +++ b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/JsonSchemaShapeVisitor.java @@ -84,7 +84,7 @@ public Schema booleanShape(BooleanShape shape) { @Override public Schema listShape(ListShape shape) { Schema.Builder builder = createBuilder(shape, "array").items(createRef(shape.getMember())); - if (shape.hasTrait(UniqueItemsTrait.class)) { + if (shape.hasTrait(UniqueItemsTrait.ID)) { builder.uniqueItems(true); } return buildSchema(shape, builder); @@ -95,7 +95,7 @@ private Schema createRef(MemberShape member) { return member.accept(this); } else { Schema.Builder refBuilder = Schema.builder().ref(converter.toPointer(member.getTarget())); - if (member.hasTrait(DeprecatedTrait.class) && getJsonSchemaVersion() != JsonSchemaVersion.DRAFT07) { + if (member.hasTrait(DeprecatedTrait.ID) && getJsonSchemaVersion() != JsonSchemaVersion.DRAFT07) { refBuilder.deprecated(true); } @@ -104,7 +104,7 @@ private Schema createRef(MemberShape member) { } // Wrap the ref and default in an allOf if disableDefaultValues has been not been disabled on config. - if (member.hasTrait(DefaultTrait.class) && !converter.getConfig().getDisableDefaultValues()) { + if (member.hasTrait(DefaultTrait.ID) && !converter.getConfig().getDisableDefaultValues()) { Schema def = Schema.builder().defaultValue(member.expectTrait(DefaultTrait.class).toNode()).build(); return Schema.builder().allOf(ListUtils.of(refBuilder.build(), def)).build(); } @@ -353,7 +353,7 @@ private Schema.Builder updateBuilder(Shape shape, Schema.Builder builder) { } }); - if (shape.hasTrait(UniqueItemsTrait.class)) { + if (shape.hasTrait(UniqueItemsTrait.ID)) { builder.uniqueItems(true); } @@ -365,11 +365,11 @@ private Schema.Builder updateBuilder(Shape shape, Schema.Builder builder) { builder.intEnumValues(shape.asIntEnumShape().get().getEnumValues().values()); } - if (shape.hasTrait(DefaultTrait.class) && !converter.getConfig().getDisableDefaultValues()) { + if (shape.hasTrait(DefaultTrait.ID) && !converter.getConfig().getDisableDefaultValues()) { builder.defaultValue(shape.expectTrait(DefaultTrait.class).toNode()); } - if (shape.hasTrait(DeprecatedTrait.class) && getJsonSchemaVersion() != JsonSchemaVersion.DRAFT07) { + if (shape.hasTrait(DeprecatedTrait.ID) && getJsonSchemaVersion() != JsonSchemaVersion.DRAFT07) { builder.deprecated(true); } diff --git a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/PropertyNamingStrategy.java b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/PropertyNamingStrategy.java index 1724d640833..ddd6fcf7427 100644 --- a/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/PropertyNamingStrategy.java +++ b/smithy-jsonschema/src/main/java/software/amazon/smithy/jsonschema/PropertyNamingStrategy.java @@ -41,7 +41,7 @@ static PropertyNamingStrategy createMemberNameStrategy() { static PropertyNamingStrategy createDefaultStrategy() { return (containingShape, member, config) -> { // Use the jsonName trait if configured to do so. - if (config.getUseJsonName() && member.hasTrait(JsonNameTrait.class)) { + if (config.getUseJsonName() && member.hasTrait(JsonNameTrait.ID)) { return member.expectTrait(JsonNameTrait.class).getValue(); } diff --git a/smithy-linters/src/main/java/software/amazon/smithy/linters/CamelCaseValidator.java b/smithy-linters/src/main/java/software/amazon/smithy/linters/CamelCaseValidator.java index e8a9e3deb9a..6a71cc9e258 100644 --- a/smithy-linters/src/main/java/software/amazon/smithy/linters/CamelCaseValidator.java +++ b/smithy-linters/src/main/java/software/amazon/smithy/linters/CamelCaseValidator.java @@ -127,7 +127,7 @@ public List validate(Model model) { // Normal shapes are expected to be upper camel. model.shapes() .filter(FunctionalUtils.not(Shape::isMemberShape)) - .filter(shape -> !shape.hasTrait(TraitDefinition.class)) + .filter(shape -> !shape.hasTrait(TraitDefinition.ID)) .filter(shape -> !MemberNameHandling.UPPER.getRegex().matcher(shape.getId().getName()).find()) .map(shape -> danger(shape, format( @@ -139,9 +139,9 @@ public List validate(Model model) { // Trait shapes are expected to be lower camel. model.shapes() - .filter(shape -> shape.hasTrait(TraitDefinition.class)) - .filter(shape -> !shape.hasTrait(AuthDefinitionTrait.class)) - .filter(shape -> !shape.hasTrait(ProtocolDefinitionTrait.class)) + .filter(shape -> shape.hasTrait(TraitDefinition.ID)) + .filter(shape -> !shape.hasTrait(AuthDefinitionTrait.ID)) + .filter(shape -> !shape.hasTrait(ProtocolDefinitionTrait.ID)) .filter(shape -> !MemberNameHandling.LOWER.getRegex().matcher(shape.getId().getName()).find()) .map(shape -> danger(shape, format( diff --git a/smithy-linters/src/main/java/software/amazon/smithy/linters/InputOutputStructureReuseValidator.java b/smithy-linters/src/main/java/software/amazon/smithy/linters/InputOutputStructureReuseValidator.java index 8c1f4571393..63aeee04603 100644 --- a/smithy-linters/src/main/java/software/amazon/smithy/linters/InputOutputStructureReuseValidator.java +++ b/smithy-linters/src/main/java/software/amazon/smithy/linters/InputOutputStructureReuseValidator.java @@ -49,7 +49,7 @@ private void validateInputOutputSet( StructureShape output, List events ) { - if (!input.hasTrait(InputTrait.class)) { + if (!input.hasTrait(InputTrait.ID)) { events.add(warning(input, String.format( "This structure is the input of `%s`, but it is not marked with the " @@ -61,7 +61,7 @@ private void validateInputOutputSet( operation.getId().getName())); } - if (!output.hasTrait(OutputTrait.class)) { + if (!output.hasTrait(OutputTrait.ID)) { events.add(warning(output, String.format( "This structure is the output of `%s`, but it is not marked with " diff --git a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingClientOptionalTrait.java b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingClientOptionalTrait.java index ab836e5de89..fa920618e05 100644 --- a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingClientOptionalTrait.java +++ b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingClientOptionalTrait.java @@ -80,13 +80,13 @@ public MissingClientOptionalTrait(Config config) { public List validate(Model model) { List events = new ArrayList<>(); for (MemberShape member : model.getMemberShapes()) { - if (member.hasTrait(ClientOptionalTrait.class)) { + if (member.hasTrait(ClientOptionalTrait.ID)) { continue; } - if (member.hasTrait(DefaultTrait.class) && config.onRequiredOrDefault) { + if (member.hasTrait(DefaultTrait.ID) && config.onRequiredOrDefault) { events.add(danger(member, "@default members must also be marked with the @clientOptional trait")); } - if (member.hasTrait(RequiredTrait.class)) { + if (member.hasTrait(RequiredTrait.ID)) { if (config.onRequiredOrDefault) { events.add(danger(member, "@required members must also be marked with the @clientOptional trait")); } else if (config.onRequiredStructureOrUnion && isTargetingStructureOrUnion(model, member)) { diff --git a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingPaginatedTraitValidator.java b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingPaginatedTraitValidator.java index 566602fa5ff..6c8d2c25900 100644 --- a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingPaginatedTraitValidator.java +++ b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingPaginatedTraitValidator.java @@ -168,7 +168,7 @@ private static Optional findMember(Collection haystack, Collecti public List validate(Model model) { OperationIndex operationIndex = OperationIndex.of(model); return model.shapes(OperationShape.class) - .filter(shape -> !shape.getTrait(PaginatedTrait.class).isPresent()) + .filter(shape -> !shape.hasTrait(PaginatedTrait.ID)) .flatMap(shape -> validateShape(model, operationIndex, shape)) .collect(Collectors.toList()); } diff --git a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingSensitiveTraitValidator.java b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingSensitiveTraitValidator.java index 441f21b6ec8..d0994c7ceb6 100644 --- a/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingSensitiveTraitValidator.java +++ b/smithy-linters/src/main/java/software/amazon/smithy/linters/MissingSensitiveTraitValidator.java @@ -131,9 +131,9 @@ private List scanShapes(Model model) { Shape containingShape = model.expectShape(memberShape.getContainer()); Shape targetShape = model.expectShape(memberShape.getTarget()); - if (!containingShape.hasTrait(SensitiveTrait.class) + if (!containingShape.hasTrait(SensitiveTrait.ID) && !containingShape.isEnumShape() - && !targetShape.hasTrait(SensitiveTrait.class)) { + && !targetShape.hasTrait(SensitiveTrait.ID)) { Optional optionalValidationEvent = detectSensitiveTerms(memberShape.getMemberName(), memberShape); optionalValidationEvent.ifPresent(validationEvents::add); @@ -141,7 +141,7 @@ private List scanShapes(Model model) { } else if (!shape.isOperationShape() && !shape.isServiceShape() && !shape.isResourceShape() - && !shape.hasTrait(SensitiveTrait.class)) { + && !shape.hasTrait(SensitiveTrait.ID)) { Optional optionalValidationEvent = detectSensitiveTerms(shape.toShapeId().getName(), shape); optionalValidationEvent.ifPresent(validationEvents::add); diff --git a/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/Selectors.java b/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/Selectors.java index 33811ea8ffc..bd966dac538 100644 --- a/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/Selectors.java +++ b/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/Selectors.java @@ -121,10 +121,10 @@ public Set evaluateHttpBindingManually(SelectorState state) { return model.shapes(ServiceShape.class).flatMap(service -> { Set operations = topDownIndex.getContainedOperations(service); // Stop early if there are no bindings at all in the model for any operation. - if (operations.stream().noneMatch(o -> o.hasTrait(HttpTrait.class))) { + if (operations.stream().noneMatch(o -> o.hasTrait(HttpTrait.ID))) { return Stream.empty(); } - return operations.stream().filter(shape -> !shape.hasTrait(HttpTrait.class)); + return operations.stream().filter(shape -> !shape.hasTrait(HttpTrait.ID)); }) .collect(Collectors.toSet()); } diff --git a/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/TraitLookups.java b/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/TraitLookups.java new file mode 100644 index 00000000000..6f98ebcc675 --- /dev/null +++ b/smithy-model/src/jmh/java/software/amazon/smithy/model/jmh/TraitLookups.java @@ -0,0 +1,110 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ +package software.amazon.smithy.model.jmh; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import software.amazon.smithy.model.Model; +import software.amazon.smithy.model.loader.ModelAssembler; +import software.amazon.smithy.model.shapes.ShapeId; +import software.amazon.smithy.model.shapes.StructureShape; +import software.amazon.smithy.model.traits.ErrorTrait; +import software.amazon.smithy.model.traits.HttpErrorTrait; +import software.amazon.smithy.model.traits.InputTrait; +import software.amazon.smithy.model.traits.OutputTrait; +import software.amazon.smithy.utils.ListUtils; + +@Warmup(iterations = 3) +@Measurement(iterations = 3, timeUnit = TimeUnit.MICROSECONDS) +@BenchmarkMode(Mode.AverageTime) +@Fork(1) +public class TraitLookups { + @State(Scope.Thread) + public static class TraitLookupState { + public List shapeIds = new ArrayList<>(); + public Model model; + + @Setup + public void prepare() { + ModelAssembler assembler = new ModelAssembler(); + + for (String prefix : ListUtils.of("one", "two", "three", "four")) { + for (int i = 0; i < 100; i++) { + ShapeId id = ShapeId.fromParts("ns.foo", prefix + i); + shapeIds.add(id); + StructureShape.Builder builder = StructureShape.builder() + .id(id); + switch (prefix) { + case "four": + builder.addTrait(new InputTrait()); + case "three": + builder.addTrait(new OutputTrait()); + case "two": + builder.addTrait(new ErrorTrait("client")); + case "one": + builder.addTrait(new HttpErrorTrait(400)); + } + assembler.addShape(builder.build()); + } + } + + model = assembler + .disableValidation() + .assemble() + .getResult() + .get(); + } + } + + @Benchmark + public void hasTraitByShapeId(TraitLookupState state) { + for (ShapeId shapeId : state.shapeIds) { + state.model.expectShape(shapeId).hasTrait(InputTrait.ID); + state.model.expectShape(shapeId).hasTrait(OutputTrait.ID); + state.model.expectShape(shapeId).hasTrait(ErrorTrait.ID); + state.model.expectShape(shapeId).hasTrait(HttpErrorTrait.ID); + } + } + + @Benchmark + public void hasTraitByShapeIdOld(TraitLookupState state) { + for (ShapeId shapeId : state.shapeIds) { + state.model.expectShape(shapeId).findTrait(InputTrait.ID).isPresent(); + state.model.expectShape(shapeId).findTrait(OutputTrait.ID).isPresent(); + state.model.expectShape(shapeId).findTrait(ErrorTrait.ID).isPresent(); + state.model.expectShape(shapeId).findTrait(HttpErrorTrait.ID).isPresent(); + } + } + + @Benchmark + public void hasTraitByString(TraitLookupState state) { + for (ShapeId shapeId : state.shapeIds) { + state.model.expectShape(shapeId).hasTrait(InputTrait.ID.toString()); + state.model.expectShape(shapeId).hasTrait(OutputTrait.ID.toString()); + state.model.expectShape(shapeId).hasTrait(ErrorTrait.ID.toString()); + state.model.expectShape(shapeId).hasTrait(HttpErrorTrait.ID.toString()); + } + } + + @Benchmark + public void hasTraitByClass(TraitLookupState state) { + for (ShapeId shapeId : state.shapeIds) { + state.model.expectShape(shapeId).hasTrait(InputTrait.class); + state.model.expectShape(shapeId).hasTrait(OutputTrait.class); + state.model.expectShape(shapeId).hasTrait(ErrorTrait.class); + state.model.expectShape(shapeId).hasTrait(HttpErrorTrait.class); + } + } +} diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/EventStreamIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/EventStreamIndex.java index 4661b7d318e..1d99b4940c4 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/EventStreamIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/EventStreamIndex.java @@ -52,7 +52,7 @@ private void computeEvents( ) { for (MemberShape member : shape.getAllMembers().values()) { Shape target = model.expectShape(member.getTarget()); - if (target.hasTrait(StreamingTrait.class) && target.isUnionShape()) { + if (target.hasTrait(StreamingTrait.ID) && target.isUnionShape()) { createEventStreamInfo(model, operation, shape, member).ifPresent(info -> { infoMap.put(operation.getId(), info); }); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/HttpBindingIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/HttpBindingIndex.java index 6d566dc164d..c0ef579c01c 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/HttpBindingIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/HttpBindingIndex.java @@ -79,12 +79,12 @@ public static HttpBindingIndex of(Model model) { * payload, prefix headers, query string, or label. */ public static boolean hasHttpRequestBindings(Shape shape) { - return shape.hasTrait(HttpHeaderTrait.class) - || shape.hasTrait(HttpPrefixHeadersTrait.class) - || shape.hasTrait(HttpPayloadTrait.class) - || shape.hasTrait(HttpQueryTrait.class) - || shape.hasTrait(HttpQueryParamsTrait.class) - || shape.hasTrait(HttpLabelTrait.class); + return shape.hasTrait(HttpHeaderTrait.ID) + || shape.hasTrait(HttpPrefixHeadersTrait.ID) + || shape.hasTrait(HttpPayloadTrait.ID) + || shape.hasTrait(HttpQueryTrait.ID) + || shape.hasTrait(HttpQueryParamsTrait.ID) + || shape.hasTrait(HttpLabelTrait.ID); } /** @@ -95,10 +95,10 @@ public static boolean hasHttpRequestBindings(Shape shape) { * payload, of prefix headers. */ public static boolean hasHttpResponseBindings(Shape shape) { - return shape.hasTrait(HttpHeaderTrait.class) - || shape.hasTrait(HttpPrefixHeadersTrait.class) - || shape.hasTrait(HttpPayloadTrait.class) - || shape.hasTrait(HttpResponseCodeTrait.class); + return shape.hasTrait(HttpHeaderTrait.ID) + || shape.hasTrait(HttpPrefixHeadersTrait.ID) + || shape.hasTrait(HttpPayloadTrait.ID) + || shape.hasTrait(HttpResponseCodeTrait.ID); } private HttpTrait getHttpTrait(ToShapeId operation) { @@ -129,9 +129,9 @@ public int getResponseCode(ToShapeId shapeOrId) { if (shape.isOperationShape()) { return getHttpTrait(id).getCode(); - } else if (shape.getTrait(HttpErrorTrait.class).isPresent()) { + } else if (shape.hasTrait(HttpErrorTrait.ID)) { return shape.getTrait(HttpErrorTrait.class).get().getCode(); - } else if (shape.getTrait(ErrorTrait.class).isPresent()) { + } else if (shape.hasTrait(ErrorTrait.ID)) { return shape.getTrait(ErrorTrait.class).get().getDefaultHttpStatusCode(); } @@ -364,7 +364,7 @@ private String determineContentType( || target.isMapShape()) { // Document type and structure targets are always the document content-type. return documentContentType; - } else if (target.getTrait(MediaTypeTrait.class).isPresent()) { + } else if (target.hasTrait(MediaTypeTrait.ID)) { // Use the @mediaType trait if available. return target.getTrait(MediaTypeTrait.class).get().getValue(); } else if (target.isBlobShape()) { @@ -422,27 +422,27 @@ private List createStructureBindings(StructureShape struct, boolean boolean foundPayload = false; for (MemberShape member : struct.getAllMembers().values()) { - if (member.getTrait(HttpHeaderTrait.class).isPresent()) { - HttpHeaderTrait trait = member.getTrait(HttpHeaderTrait.class).get(); + if (member.hasTrait(HttpHeaderTrait.ID)) { + HttpHeaderTrait trait = member.expectTrait(HttpHeaderTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.HEADER, trait.getValue(), trait)); - } else if (member.getTrait(HttpPrefixHeadersTrait.class).isPresent()) { - HttpPrefixHeadersTrait trait = member.getTrait(HttpPrefixHeadersTrait.class).get(); + } else if (member.hasTrait(HttpPrefixHeadersTrait.ID)) { + HttpPrefixHeadersTrait trait = member.expectTrait(HttpPrefixHeadersTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.PREFIX_HEADERS, trait.getValue(), trait)); - } else if (isRequest && member.getTrait(HttpQueryTrait.class).isPresent()) { - HttpQueryTrait trait = member.getTrait(HttpQueryTrait.class).get(); + } else if (isRequest && member.hasTrait(HttpQueryTrait.ID)) { + HttpQueryTrait trait = member.expectTrait(HttpQueryTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.QUERY, trait.getValue(), trait)); - } else if (isRequest && member.getTrait(HttpQueryParamsTrait.class).isPresent()) { - HttpQueryParamsTrait trait = member.getTrait(HttpQueryParamsTrait.class).get(); + } else if (isRequest && member.hasTrait(HttpQueryParamsTrait.ID)) { + HttpQueryParamsTrait trait = member.expectTrait(HttpQueryParamsTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.QUERY_PARAMS, member.getMemberName(), trait)); - } else if (member.getTrait(HttpPayloadTrait.class).isPresent()) { + } else if (member.hasTrait(HttpPayloadTrait.ID)) { foundPayload = true; - HttpPayloadTrait trait = member.getTrait(HttpPayloadTrait.class).get(); + HttpPayloadTrait trait = member.expectTrait(HttpPayloadTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.PAYLOAD, member.getMemberName(), trait)); - } else if (isRequest && member.getTrait(HttpLabelTrait.class).isPresent()) { - HttpLabelTrait trait = member.getTrait(HttpLabelTrait.class).get(); + } else if (isRequest && member.hasTrait(HttpLabelTrait.ID)) { + HttpLabelTrait trait = member.expectTrait(HttpLabelTrait.class); bindings.add(new HttpBinding(member, HttpBinding.Location.LABEL, member.getMemberName(), trait)); - } else if (!isRequest && member.getTrait(HttpResponseCodeTrait.class).isPresent()) { - HttpResponseCodeTrait trait = member.getTrait(HttpResponseCodeTrait.class).get(); + } else if (!isRequest && member.hasTrait(HttpResponseCodeTrait.ID)) { + HttpResponseCodeTrait trait = member.expectTrait(HttpResponseCodeTrait.class); bindings.add(new HttpBinding( member, HttpBinding.Location.RESPONSE_CODE, diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/IdentifierBindingIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/IdentifierBindingIndex.java index 6740fb36dd4..89d84b0793e 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/IdentifierBindingIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/IdentifierBindingIndex.java @@ -150,14 +150,14 @@ private boolean isCollection(ResourceShape resource, ToShapeId operationId) { private boolean isImplicitIdentifierBinding(MemberShape member, ResourceShape resource) { return resource.getIdentifiers().containsKey(member.getMemberName()) - && member.getTrait(RequiredTrait.class).isPresent() + && member.hasTrait(RequiredTrait.ID) && member.getTarget().equals(resource.getIdentifiers().get(member.getMemberName())); } private Map computeBindings(ResourceShape resource, StructureShape shape) { Map bindings = new HashMap<>(); for (MemberShape member : shape.getAllMembers().values()) { - if (member.hasTrait(ResourceIdentifierTrait.class)) { + if (member.hasTrait(ResourceIdentifierTrait.ID)) { // Mark as a binding if the member has an explicit @resourceIdentifier trait. String bindingName = member.expectTrait(ResourceIdentifierTrait.class).getValue(); // Override any implicit bindings with explicit trait bindings. diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/NullableIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/NullableIndex.java index 2fcdeb98534..3d675a8e16b 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/NullableIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/NullableIndex.java @@ -52,7 +52,7 @@ public enum CheckMode { CLIENT { @Override boolean isStructureMemberOptional(StructureShape container, MemberShape member, Shape target) { - if (member.hasTrait(ClientOptionalTrait.class) || container.hasTrait(InputTrait.class)) { + if (member.hasTrait(ClientOptionalTrait.ID) || container.hasTrait(InputTrait.ID)) { return true; } @@ -86,7 +86,7 @@ boolean isStructureMemberOptional(StructureShape container, MemberShape member, CLIENT_ZERO_VALUE_V1 { @Override boolean isStructureMemberOptional(StructureShape container, MemberShape member, Shape target) { - return container.hasTrait(InputTrait.class) + return container.hasTrait(InputTrait.ID) || CLIENT_ZERO_VALUE_V1_NO_INPUT.isStructureMemberOptional(container, member, target); } }, @@ -101,7 +101,7 @@ boolean isStructureMemberOptional(StructureShape container, MemberShape member, CLIENT_ZERO_VALUE_V1_NO_INPUT { @Override boolean isStructureMemberOptional(StructureShape container, MemberShape member, Shape target) { - if (member.hasTrait(AddedDefaultTrait.class) || member.hasTrait(ClientOptionalTrait.class)) { + if (member.hasTrait(AddedDefaultTrait.ID) || member.hasTrait(ClientOptionalTrait.ID)) { return true; } @@ -128,7 +128,7 @@ boolean isStructureMemberOptional(StructureShape container, MemberShape member, // 1. Does the member have the required trait? Stop further checks, it's non-optional. // 2. Does the member have a default trait set to null? Stop further checks, it's optional. // 3. Does the member have a default trait not set to null? Stop further checks, it's non-optional. - return !member.hasTrait(RequiredTrait.class) && !member.hasNonNullDefault(); + return !member.hasTrait(RequiredTrait.ID) && !member.hasNonNullDefault(); } }; @@ -180,7 +180,7 @@ public boolean isMemberNullable(MemberShape member, CheckMode checkMode) { // fall-through. case LIST: // Map values and list members are only null if they have the @sparse trait. - return container.hasTrait(SparseTrait.class); + return container.hasTrait(SparseTrait.ID); default: return false; } @@ -221,7 +221,7 @@ public final boolean isNullable(ToShapeId shapeId) { case LONG: case FLOAT: case DOUBLE: - return shape.hasTrait(BoxTrait.class); + return shape.hasTrait(BoxTrait.ID); default: return true; } @@ -246,7 +246,7 @@ private boolean isMemberNullableInV1(Model model, MemberShape member) { } // fall-through case LIST: // Sparse lists and maps are considered nullable. - return container.hasTrait(SparseTrait.class); + return container.hasTrait(SparseTrait.ID); default: return false; } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/OperationIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/OperationIndex.java index 1ec45914ce0..84be7027627 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/OperationIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/OperationIndex.java @@ -145,7 +145,7 @@ public Map getInputMembers(ToShapeId operation) { * @return Returns true if the structure is used as input. */ public boolean isInputStructure(ToShapeId structureId) { - if (structureId instanceof Shape && ((Shape) structureId).hasTrait(InputTrait.class)) { + if (structureId instanceof Shape && ((Shape) structureId).hasTrait(InputTrait.ID)) { return true; } @@ -238,7 +238,7 @@ public Map getOutputMembers(ToShapeId operation) { * @return Returns true if the structure is used as output. */ public boolean isOutputStructure(ToShapeId structureId) { - if (structureId instanceof Shape && ((Shape) structureId).hasTrait(OutputTrait.class)) { + if (structureId instanceof Shape && ((Shape) structureId).hasTrait(OutputTrait.ID)) { return true; } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PaginatedIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PaginatedIndex.java index 25168d3206c..eb0fd544b47 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PaginatedIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PaginatedIndex.java @@ -42,7 +42,7 @@ public PaginatedIndex(Model model) { PaginatedTrait serviceTrait = service.getTrait(PaginatedTrait.class).orElse(null); Map mappings = new HashMap<>(); for (OperationShape operation : topDownIndex.getContainedOperations(service)) { - if (operation.hasTrait(PaginatedTrait.class)) { + if (operation.hasTrait(PaginatedTrait.ID)) { PaginatedTrait merged = operation.expectTrait(PaginatedTrait.class).merge(serviceTrait); create(model, service, opIndex, operation, merged).ifPresent(info -> { mappings.put(info.getOperation().getId(), info); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PropertyBindingIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PropertyBindingIndex.java index ff56ff30ae6..83191be75bb 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PropertyBindingIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/PropertyBindingIndex.java @@ -178,8 +178,8 @@ private Set computeNotPropertyTraits() { Model model = getModel(); return model.getShapesWithTrait(NotPropertyTrait.class) .stream() - .filter(shape -> shape.hasTrait(TraitDefinition.class)) - .map(shape -> shape.toShapeId()) + .filter(shape -> shape.hasTrait(TraitDefinition.ID)) + .map(Shape::toShapeId) .collect(Collectors.toSet()); } @@ -188,13 +188,13 @@ private Optional getPropertyTraitName(MemberShape memberShape) { } private boolean doesNotRequireProperty(MemberShape memberShape) { - return notPropertyMetaTraitSet.stream().anyMatch(traitId -> memberShape.hasTrait(traitId)); + return notPropertyMetaTraitSet.stream().anyMatch(memberShape::hasTrait); } private StructureShape getPropertiesShape(Collection members, StructureShape presumedShape) { Model model = getModel(); for (MemberShape member : members) { - if (member.hasTrait(NestedPropertiesTrait.class)) { + if (member.hasTrait(NestedPropertiesTrait.ID)) { Shape shape = model.expectShape(member.getTarget()); if (shape.isStructureShape()) { return shape.asStructureShape().get(); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/ServiceIndex.java b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/ServiceIndex.java index 061a9749108..cbee7384709 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/ServiceIndex.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/knowledge/ServiceIndex.java @@ -275,12 +275,12 @@ public Map getEffectiveAuthSchemes( private boolean hasOptionalAuth(ToShapeId operation) { return getModel() .getShape(operation.toShapeId()) - .filter(shape -> shape.hasTrait(OptionalAuthTrait.class)) + .filter(shape -> shape.hasTrait(OptionalAuthTrait.ID)) .isPresent(); } private static Map getAuthTraitValues(Shape service, Shape subject) { - if (!subject.hasTrait(AuthTrait.class)) { + if (!subject.hasTrait(AuthTrait.ID)) { return null; } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelInteropTransformer.java b/smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelInteropTransformer.java index 675283e354a..48ac68097c3 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelInteropTransformer.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelInteropTransformer.java @@ -106,7 +106,7 @@ private void upgradeV1Member(MemberShape member, Shape target) { Node defaultValue = getDefaultValueOfType(member, target.getType()); builder.addTrait(new DefaultTrait(defaultValue)); shapeUpgrades.add(builder.build()); - } else if (member.hasTrait(BoxTrait.class)) { + } else if (member.hasTrait(BoxTrait.ID)) { // Add a default trait to the member set to null to indicate it was boxed in v1. MemberShape.Builder builder = member.toBuilder(); builder.addTrait(new DefaultTrait(new NullNode(member.getSourceLocation()))); @@ -169,7 +169,7 @@ private boolean memberAndTargetAreNotAlreadyExplicitlyBoxed(MemberShape member, // The addedDefault trait implies that a member did not previously have a default, and a default value // was added later. In this case, naive box implementation can assume the member is boxed. private boolean isMemberInherentlyBoxedInV1(MemberShape member) { - return member.hasTrait(AddedDefaultTrait.class); + return member.hasTrait(AddedDefaultTrait.ID); } // If the member has a default trait set to the zero value, then consider the member diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/loader/Prelude.java b/smithy-model/src/main/java/software/amazon/smithy/model/loader/Prelude.java index cad71d20921..38b08944a33 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/loader/Prelude.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/loader/Prelude.java @@ -50,7 +50,7 @@ public static boolean isPreludeShape(ToShapeId id) { */ public static boolean isPublicPreludeShape(ToShapeId id) { return getPreludeModel().getShape(id.toShapeId()) - .filter(shape -> !shape.hasTrait(PrivateTrait.class)) + .filter(shape -> !shape.hasTrait(PrivateTrait.ID)) .isPresent(); } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/neighbor/IdRefShapeRelationships.java b/smithy-model/src/main/java/software/amazon/smithy/model/neighbor/IdRefShapeRelationships.java index 252281313e7..d67bf053ea0 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/neighbor/IdRefShapeRelationships.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/neighbor/IdRefShapeRelationships.java @@ -43,7 +43,7 @@ final class IdRefShapeRelationships { Map> getRelationships() { PathFinder finder = PathFinder.create(model); for (Shape traitDef : model.getShapesWithTrait(TraitDefinition.class)) { - if (traitDef.hasTrait(IdRefTrait.class)) { + if (traitDef.hasTrait(IdRefTrait.ID)) { // PathFinder doesn't handle the case where the trait def has the idRef NodeQuery query = new NodeQuery().self(); addRelationships(traitDef, query); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java index 2e770c5a6c0..3c027ed1273 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/EnumShape.java @@ -285,7 +285,7 @@ static EnumDefinition enumDefinitionFromMember(MemberShape member) { .orElse(Collections.emptyList()); builder.tags(tags); - if (member.hasTrait(InternalTrait.class) && !tags.contains("internal")) { + if (member.hasTrait(InternalTrait.ID) && !tags.contains("internal")) { builder.addTag("internal"); } return builder.build(); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/MemberShape.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/MemberShape.java index e51dd28e8eb..d416910961d 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/MemberShape.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/MemberShape.java @@ -7,6 +7,7 @@ import java.util.Optional; import software.amazon.smithy.model.Model; import software.amazon.smithy.model.traits.DefaultTrait; +import software.amazon.smithy.model.traits.RequiredTrait; import software.amazon.smithy.model.traits.Trait; import software.amazon.smithy.utils.OptionalUtils; import software.amazon.smithy.utils.SmithyBuilder; @@ -81,7 +82,7 @@ public String getMemberName() { * @return Returns true if the member has the required trait. */ public boolean isRequired() { - return findTrait("required").isPresent(); + return hasTrait(RequiredTrait.ID); } /** diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/Shape.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/Shape.java index 866bdb6da5f..ae6429e909f 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/Shape.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/Shape.java @@ -262,7 +262,7 @@ public boolean hasTrait(String id) { * @return Returns true if the shape has the given trait. */ public boolean hasTrait(ShapeId id) { - return findTrait(id).isPresent(); + return traits.containsKey(id); } /** diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlComponentOrder.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlComponentOrder.java index 511636ecf32..9c10d947471 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlComponentOrder.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlComponentOrder.java @@ -118,11 +118,11 @@ private static final class PreferredShapeComparator implements Comparator @Override public int compare(Shape s1, Shape s2) { // Traits go first - if (s1.hasTrait(TraitDefinition.class) || s2.hasTrait(TraitDefinition.class)) { - if (!s1.hasTrait(TraitDefinition.class)) { + if (s1.hasTrait(TraitDefinition.ID) || s2.hasTrait(TraitDefinition.ID)) { + if (!s1.hasTrait(TraitDefinition.ID)) { return 1; } - if (!s2.hasTrait(TraitDefinition.class)) { + if (!s2.hasTrait(TraitDefinition.ID)) { return -1; } // The other sorting rules don't matter for traits. diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlModelSerializer.java b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlModelSerializer.java index d84d6a73e04..e98507b2e4c 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlModelSerializer.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/shapes/SmithyIdlModelSerializer.java @@ -635,7 +635,7 @@ private void writeShapeMembers(Collection members) { for (MemberShape member : members) { serializeTraits(member.getAllTraits(), TraitFeature.MEMBER); String assignment = ""; - if (member.hasTrait(DefaultTrait.class)) { + if (member.hasTrait(DefaultTrait.ID)) { assignment = " = " + Node.printJson(member.expectTrait(DefaultTrait.class).toNode()); } codeWriter.write("$L: $I$L", member.getMemberName(), member.getTarget(), assignment); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/AddClientOptional.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/AddClientOptional.java index 90a2a516a38..4b962023c28 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/AddClientOptional.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/AddClientOptional.java @@ -33,17 +33,17 @@ Model transform(ModelTransformer transformer, Model model) { MemberShape member = (MemberShape) shape; // Don't do anything if it's already marked with clientOptional. - if (member.hasTrait(ClientOptionalTrait.class)) { + if (member.hasTrait(ClientOptionalTrait.ID)) { return member; } Shape container = model.expectShape(member.getContainer()); Shape target = model.expectShape(member.getTarget()); - boolean hasInputTrait = container.hasTrait(InputTrait.class); + boolean hasInputTrait = container.hasTrait(InputTrait.ID); boolean targetsShapeWithNoZeroValue = target.isStructureShape() || target.isUnionShape(); boolean isEffectivelyClientOptional = hasInputTrait - || !(member.hasTrait(RequiredTrait.class) || member.hasTrait(DefaultTrait.class)) + || !(member.hasTrait(RequiredTrait.ID) || member.hasTrait(DefaultTrait.ID)) || (targetsShapeWithNoZeroValue && applyWhenNoDefaultValue); if (isEffectivelyClientOptional) { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/CreateDedicatedInputAndOutput.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/CreateDedicatedInputAndOutput.java index b894ec839ae..c59a83e2cfc 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/CreateDedicatedInputAndOutput.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/CreateDedicatedInputAndOutput.java @@ -99,7 +99,7 @@ private StructureShape createdUpdatedInput( StructureShape input, NeighborProvider reverse ) { - if (input.hasTrait(InputTrait.class)) { + if (input.hasTrait(InputTrait.ID)) { return renameShapeIfNeeded(model, input, operation, inputSuffix); } else if (isDedicatedHeuristic(operation, input, reverse)) { LOGGER.fine(() -> "Attaching the @input trait to " + input.getId()); @@ -116,7 +116,7 @@ private StructureShape createdUpdatedOutput( StructureShape output, NeighborProvider reverse ) { - if (output.hasTrait(OutputTrait.class)) { + if (output.hasTrait(OutputTrait.ID)) { return renameShapeIfNeeded(model, output, operation, outputSuffix); } else if (isDedicatedHeuristic(operation, output, reverse)) { LOGGER.fine(() -> "Attaching the @output trait to " + output.getId()); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/DowngradeToV1.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/DowngradeToV1.java index 7263da60783..3b0f82d7c31 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/DowngradeToV1.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/DowngradeToV1.java @@ -126,7 +126,7 @@ private Model removeOtherV2Traits(ModelTransformer transformer, Model model) { for (StructureShape structure : model.getStructureShapes()) { for (MemberShape member : structure.getAllMembers().values()) { - if (member.hasTrait(ClientOptionalTrait.class)) { + if (member.hasTrait(ClientOptionalTrait.ID)) { updates.add(member.toBuilder().removeTrait(ClientOptionalTrait.ID).build()); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/FlattenAndRemoveMixins.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/FlattenAndRemoveMixins.java index a06dec58174..c08703b54c0 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/FlattenAndRemoveMixins.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/FlattenAndRemoveMixins.java @@ -20,7 +20,7 @@ Model transform(ModelTransformer transformer, Model model) { List toRemove = new ArrayList<>(); for (Shape shape : model.toSet()) { - if (shape.hasTrait(MixinTrait.class)) { + if (shape.hasTrait(MixinTrait.ID)) { toRemove.add(shape.getId()); } else if (!shape.getMixins().isEmpty()) { updatedShapes.add(Shape.shapeToBuilder(shape).flattenMixins().build()); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptional.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptional.java index f60a036dad6..22e62b9a529 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptional.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptional.java @@ -19,9 +19,9 @@ private MakeIdempotencyTokenClientOptional() {} public static Model transform(Model model) { return ModelTransformer.create().mapShapes(model, shape -> { if (shape.isMemberShape() - && shape.hasTrait(RequiredTrait.class) - && shape.hasTrait(IdempotencyTokenTrait.class) - && !shape.hasTrait(ClientOptionalTrait.class)) { + && shape.hasTrait(RequiredTrait.ID) + && shape.hasTrait(IdempotencyTokenTrait.ID) + && !shape.hasTrait(ClientOptionalTrait.ID)) { return Shape.shapeToBuilder(shape).addTrait(new ClientOptionalTrait()).build(); } return shape; diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/RemoveInvalidDefaults.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/RemoveInvalidDefaults.java index e75f7b88fef..601be4c2a22 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/RemoveInvalidDefaults.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/RemoveInvalidDefaults.java @@ -62,7 +62,7 @@ private Shape modify(Shape shape, Model model, Set otherShapes) { MemberShape member = shape.asMemberShape().get(); boolean targetHasDefault = model.getShape(member.getTarget()) // Treat target shapes that will have their default removed as if it doesn't have a default. - .filter(target -> !otherShapes.contains(target) && target.hasTrait(DefaultTrait.class)) + .filter(target -> !otherShapes.contains(target) && target.hasTrait(DefaultTrait.ID)) .isPresent(); if (targetHasDefault) { return member.toBuilder().addTrait(new DefaultTrait(Node.nullNode())).build(); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ReplaceShapes.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ReplaceShapes.java index 0dfa7b89977..12f094b9c86 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ReplaceShapes.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ReplaceShapes.java @@ -165,7 +165,7 @@ private void updateMixins(Model model, Model.Builder builder, Collection // Add shapes that are mixins or use mixins. for (Shape shape : model.toSet()) { - if (!shape.isMemberShape() && (shape.hasTrait(MixinTrait.class) || !shape.getMixins().isEmpty())) { + if (!shape.isMemberShape() && (shape.hasTrait(MixinTrait.ID) || !shape.getMixins().isEmpty())) { sorter.enqueue(shape); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ScrubTraitDefinitions.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ScrubTraitDefinitions.java index 9ed93d62517..a440573b702 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/ScrubTraitDefinitions.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/ScrubTraitDefinitions.java @@ -41,7 +41,7 @@ Model transform(ModelTransformer transformer, Model model, Predicate keep // Find all trait definition shapes, excluding those to be kept, and private shapes in the prelude. Set toMark = Stream.concat( model.shapes().filter(shape -> isTraitDefinitionToRemove(shape, keepFilter)), - model.shapes().filter(shape -> Prelude.isPreludeShape(shape) && shape.hasTrait(PrivateTrait.class))) + model.shapes().filter(shape -> Prelude.isPreludeShape(shape) && shape.hasTrait(PrivateTrait.ID))) .collect(Collectors.toSet()); MarkAndSweep markAndSweep = new MarkAndSweep( @@ -58,10 +58,10 @@ Model transform(ModelTransformer transformer, Model model, Predicate keep } private static boolean notPublicPreludeShape(Shape shape) { - return !(Prelude.isPublicPreludeShape(shape.getId()) && !shape.hasTrait(TraitDefinition.class)); + return !(Prelude.isPublicPreludeShape(shape.getId()) && !shape.hasTrait(TraitDefinition.ID)); } private static boolean isTraitDefinitionToRemove(Shape shape, Predicate keepFilter) { - return shape.hasTrait(TraitDefinition.class) && keepFilter.test(shape); + return shape.hasTrait(TraitDefinition.ID) && keepFilter.test(shape); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveMixins.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveMixins.java index b732b103c26..365d28555bb 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveMixins.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveMixins.java @@ -32,7 +32,7 @@ public Model onRemove(ModelTransformer transformer, Collection shapes, Mo Map> mixinShapesToRemove = new HashMap<>(); for (Shape removedShape : shapes) { - if (removedShape.hasTrait(MixinTrait.class) && !removedShape.isMemberShape()) { + if (removedShape.hasTrait(MixinTrait.ID) && !removedShape.isMemberShape()) { // Remove the mixin from any shape that uses it. Stream.concat(model.shapes(StructureShape.class), model.shapes(UnionShape.class)).forEach(shape -> { if (shape.getMixins().contains(removedShape.getId())) { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveTraits.java b/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveTraits.java index ef925c9b95b..b9e555a6477 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveTraits.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/transform/plugins/RemoveTraits.java @@ -28,7 +28,7 @@ public Model onRemove(ModelTransformer transformer, Collection shapes, Mo // Find all shapes with the "@trait" trait to ensure references to it are removed // from other shapes. Set removedTraits = shapes.stream() - .filter(shape -> shape.hasTrait(TraitDefinition.class)) + .filter(shape -> shape.hasTrait(TraitDefinition.ID)) .map(Shape::getId) .collect(Collectors.toSet()); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/RangeTraitPlugin.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/RangeTraitPlugin.java index 4182383f0f1..3acd690e02e 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/RangeTraitPlugin.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/RangeTraitPlugin.java @@ -23,7 +23,7 @@ class RangeTraitPlugin implements NodeValidatorPlugin { @Override public final void apply(Shape shape, Node value, Context context, Emitter emitter) { - if (shape.hasTrait(RangeTrait.class)) { + if (shape.hasTrait(RangeTrait.ID)) { if (value.isNumberNode()) { check(shape, context, shape.expectTrait(RangeTrait.class), value.expectNumberNode(), emitter); } else if (value.isStringNode()) { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/TimestampFormatPlugin.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/TimestampFormatPlugin.java index a1f002b2474..d8055c8871c 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/TimestampFormatPlugin.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/node/TimestampFormatPlugin.java @@ -30,15 +30,15 @@ public void apply(Shape shape, Node value, Context context, Emitter emitter) { if (shape instanceof TimestampShape) { // Don't validate the timestamp target if a referring member had the timestampFormat trait. boolean fromMemberWithTrait = context.getReferringMember() - .filter(member -> member.hasTrait(TimestampFormatTrait.class)) + .filter(member -> member.hasTrait(TimestampFormatTrait.ID)) .isPresent(); if (!fromMemberWithTrait) { validate(shape, shape.getTrait(TimestampFormatTrait.class).orElse(null), value, emitter); } - } else if (shape instanceof MemberShape && shape.getTrait(TimestampFormatTrait.class).isPresent()) { + } else if (shape instanceof MemberShape && shape.hasTrait(TimestampFormatTrait.ID)) { // Only perform timestamp format validation on a member when it references // a timestamp shape and the member has an explicit timestampFormat trait. - validate(shape, shape.getTrait(TimestampFormatTrait.class).get(), value, emitter); + validate(shape, shape.expectTrait(TimestampFormatTrait.class), value, emitter); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/suppressions/ModelBasedEventDecorator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/suppressions/ModelBasedEventDecorator.java index 3411e0682e0..d7ad5f04b89 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/suppressions/ModelBasedEventDecorator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/suppressions/ModelBasedEventDecorator.java @@ -150,7 +150,7 @@ private static ValidationEvent modifyEventSeverity( ShapeId target = event.getShapeId().get(); Shape shape = model.getShape(target).orElse(null); if (shape != null) { - if (shape.hasTrait(SuppressTrait.class)) { + if (shape.hasTrait(SuppressTrait.ID)) { Suppression suppression = Suppression.fromSuppressTrait(shape); if (suppression.test(event)) { return changeSeverity(event, Severity.SUPPRESSED, suppression.getReason().orElse(null)); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/AuthTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/AuthTraitValidator.java index b1ad92cbde1..a907a4064cf 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/AuthTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/AuthTraitValidator.java @@ -52,8 +52,8 @@ private void validateShape( Shape shape, List events ) { - if (shape.getTrait(AuthTrait.class).isPresent()) { - AuthTrait authTrait = shape.getTrait(AuthTrait.class).get(); + if (shape.hasTrait(AuthTrait.ID)) { + AuthTrait authTrait = shape.expectTrait(AuthTrait.class); Set appliedAuthTraitValue = new TreeSet<>(authTrait.getValueSet()); appliedAuthTraitValue.removeAll(serviceAuth); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DefaultValueInUpdateValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DefaultValueInUpdateValidator.java index f710a7a5ee8..c8e95c8cb40 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DefaultValueInUpdateValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DefaultValueInUpdateValidator.java @@ -39,7 +39,7 @@ public List validate(Model model) { StructureShape input = model.expectShape(operation.getInputShape(), StructureShape.class); for (MemberShape member : input.getAllMembers().values()) { - if (member.hasTrait(DefaultTrait.class)) { + if (member.hasTrait(DefaultTrait.ID)) { defaultedMembers.add(member.getMemberName()); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DeprecatedTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DeprecatedTraitValidator.java index e0e308d2e00..d20fe82768a 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DeprecatedTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/DeprecatedTraitValidator.java @@ -34,7 +34,7 @@ public List validate(Model model) { List events = new ArrayList<>(); for (Shape trait : model.getShapesWithTrait(TraitDefinition.class)) { - if (trait.hasTrait(DeprecatedTrait.class)) { + if (trait.hasTrait(DeprecatedTrait.ID)) { // Don't emit for deprecation warnings that are handled by some other validation. if (HANDLED_ELSEWHERE.contains(trait.toShapeId())) { continue; diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/EventPayloadTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/EventPayloadTraitValidator.java index 26e4a54b574..49e4687b5aa 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/EventPayloadTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/EventPayloadTraitValidator.java @@ -61,6 +61,6 @@ private Optional validateEvent(StructureShape shape, MemberShap } private boolean isMarked(Shape s) { - return s.getTrait(EventHeaderTrait.class).isPresent() || s.getTrait(EventPayloadTrait.class).isPresent(); + return s.hasTrait(EventHeaderTrait.ID) || s.hasTrait(EventPayloadTrait.ID); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HostLabelTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HostLabelTraitValidator.java index 320b944f2a3..bc829746815 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HostLabelTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HostLabelTraitValidator.java @@ -103,7 +103,7 @@ private List validateBindings( .collect(Collectors.toSet()); for (MemberShape member : input.getAllMembers().values()) { - if (member.hasTrait(HostLabelTrait.class)) { + if (member.hasTrait(HostLabelTrait.ID)) { HostLabelTrait trait = member.expectTrait(HostLabelTrait.class); labels.remove(member.getMemberName()); if (!hostPrefix.getLabel(member.getMemberName()).isPresent()) { diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingTraitIgnoredValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingTraitIgnoredValidator.java index 7c181db66cd..330602422e9 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingTraitIgnoredValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingTraitIgnoredValidator.java @@ -73,7 +73,7 @@ public List validate(Model model) { for (MemberShape memberShape : model.getMemberShapes()) { Shape container = model.expectShape(memberShape.getContainer()); // Skip non-structures (invalid) and mixins (handled at mixed site). - if (!container.isStructureShape() || container.hasTrait(MixinTrait.class)) { + if (!container.isStructureShape() || container.hasTrait(MixinTrait.ID)) { continue; } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingsMissingValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingsMissingValidator.java index 0f40ff23fca..e23bc1f5ba0 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingsMissingValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpBindingsMissingValidator.java @@ -71,7 +71,7 @@ private ShapeId protocolWithBindings(ServiceShape service, Model model) { } private boolean hasBindings(OperationShape op) { - return op.getTrait(HttpTrait.class).isPresent(); + return op.hasTrait(HttpTrait.ID); } private List validateOperations( @@ -81,7 +81,7 @@ private List validateOperations( String reason ) { return operations.stream() - .filter(operation -> !operation.getTrait(HttpTrait.class).isPresent()) + .filter(operation -> !operation.hasTrait(HttpTrait.ID)) .map(operation -> createEvent(severity, operation, operation.getSourceLocation(), diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpHeaderTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpHeaderTraitValidator.java index 9665d8d81d5..cb547821740 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpHeaderTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpHeaderTraitValidator.java @@ -177,7 +177,7 @@ private List validateStructure(StructureShape structure) { return structure.getAllMembers() .values() .stream() - .filter(member -> member.hasTrait(HttpHeaderTrait.class)) + .filter(member -> member.hasTrait(HttpHeaderTrait.ID)) .collect(groupingBy(shape -> shape.expectTrait(HttpHeaderTrait.class).getValue().toLowerCase(Locale.US), mapping(MemberShape::getMemberName, toList()))) .entrySet() diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpMethodSemanticsValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpMethodSemanticsValidator.java index a76c3a69f76..9d9ced4dd34 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpMethodSemanticsValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpMethodSemanticsValidator.java @@ -118,7 +118,7 @@ private List validateOperation( events.add(warning(shape, trait, semantics.warningWhenModeled, method)); } - boolean isReadonly = shape.getTrait(ReadonlyTrait.class).isPresent(); + boolean isReadonly = shape.hasTrait(ReadonlyTrait.ID); if (semantics.isReadonly != null && semantics.isReadonly != isReadonly) { events.add(warning(shape, trait, @@ -129,7 +129,7 @@ private List validateOperation( isReadonly ? UNNECESSARY_READONLY_TRAIT : MISSING_READONLY_TRAIT)); } - boolean isIdempotent = shape.getTrait(IdempotentTrait.class).isPresent(); + boolean isIdempotent = shape.hasTrait(IdempotentTrait.ID); if (semantics.isIdempotent != null && semantics.isIdempotent != isIdempotent) { events.add(warning(shape, trait, diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpUriConflictValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpUriConflictValidator.java index 447440d2a6f..9396ef47a63 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpUriConflictValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/HttpUriConflictValidator.java @@ -52,7 +52,7 @@ public List validate(Model model) { private List validateService(Model model, ServiceShape service) { List operations = new ArrayList<>(); for (OperationShape operation : TopDownIndex.of(model).getContainedOperations(service)) { - if (operation.hasTrait(HttpTrait.class)) { + if (operation.hasTrait(HttpTrait.ID)) { operations.add(operation); } } @@ -79,7 +79,7 @@ private List checkConflicts( List> allowableConflicts = new ArrayList<>(); for (OperationShape other : operations) { - if (other != operation && other.hasTrait(HttpTrait.class)) { + if (other != operation && other.hasTrait(HttpTrait.ID)) { HttpTrait otherHttpTrait = other.expectTrait(HttpTrait.class); if (otherHttpTrait.getMethod().equals(method) && otherHttpTrait.getUri().conflictsWith(pattern) @@ -210,7 +210,7 @@ private Map getHttpLabelPatterns(Model model, OperationShape op private Map getHostLabelPatterns(Model model, OperationShape operation) { Map result = new HashMap<>(); for (MemberShape member : OperationIndex.of(model).expectInputShape(operation).getAllMembers().values()) { - if (member.hasTrait(HostLabelTrait.class) && member.hasTrait(PatternTrait.class)) { + if (member.hasTrait(HostLabelTrait.ID) && member.hasTrait(PatternTrait.ID)) { result.put(member.getMemberName(), member.expectTrait(PatternTrait.class).getPattern()); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/IdempotencyTokenIgnoredValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/IdempotencyTokenIgnoredValidator.java index 0c7e8a5848c..106776bb519 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/IdempotencyTokenIgnoredValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/IdempotencyTokenIgnoredValidator.java @@ -43,7 +43,7 @@ public List validate(Model model) { for (MemberShape memberShape : model.getMemberShapesWithTrait(IdempotencyTokenTrait.class)) { Shape container = model.expectShape(memberShape.getContainer()); // Skip non-structures (invalid) and mixins (handled at mixed site). - if (!container.isStructureShape() || container.hasTrait(MixinTrait.class)) { + if (!container.isStructureShape() || container.hasTrait(MixinTrait.ID)) { continue; } Trait trait = memberShape.expectTrait(IdempotencyTokenTrait.class); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/MemberShouldReferenceResourceValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/MemberShouldReferenceResourceValidator.java index fa7e0ab88c6..6f9d380045c 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/MemberShouldReferenceResourceValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/MemberShouldReferenceResourceValidator.java @@ -125,7 +125,7 @@ private void computeResourcesToIgnore( } private void ignoreReferencedResources(Shape shape, Set resourcesToIgnore) { - if (shape.hasTrait(ReferencesTrait.class)) { + if (shape.hasTrait(ReferencesTrait.ID)) { for (ReferencesTrait.Reference reference : shape.expectTrait(ReferencesTrait.class) .getReferences()) { resourcesToIgnore.add(reference.getResource()); diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/RequestCompressionTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/RequestCompressionTraitValidator.java index 87c9cba7735..f16316ad985 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/RequestCompressionTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/RequestCompressionTraitValidator.java @@ -50,7 +50,7 @@ private void validateOperationInput(Model model, OperationShape operationShape, StructureShape inputShape = model.expectShape(operationShape.getInputShape(), StructureShape.class); for (MemberShape memberShape : inputShape.members()) { Shape targetShape = model.expectShape(memberShape.getTarget()); - if (targetShape.hasTrait(StreamingTrait.class) && targetShape.hasTrait(RequiresLengthTrait.class)) { + if (targetShape.hasTrait(StreamingTrait.ID) && targetShape.hasTrait(RequiresLengthTrait.ID)) { events.add(error(operationShape, String.format( "The `requestCompression` trait can only be applied to operations which do not have " diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java index 3bbbfaa427b..f426ea29fed 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceIdentifierBindingValidator.java @@ -102,7 +102,7 @@ private void validateResourceIdentifierTraitConflicts(Shape structure, List new HashSet<>()).add(member.getMemberName()); } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceLifecycleValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceLifecycleValidator.java index e31a2dd47fc..51fa5120762 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceLifecycleValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ResourceLifecycleValidator.java @@ -70,7 +70,7 @@ private Optional validateReadonly( String lifecycle, boolean requireReadOnly ) { - if (requireReadOnly == operation.hasTrait(ReadonlyTrait.class)) { + if (requireReadOnly == operation.hasTrait(ReadonlyTrait.ID)) { return Optional.empty(); } @@ -89,7 +89,7 @@ private Optional validateIdempotent( String lifecycle, String additionalMessage ) { - if (operation.hasTrait(IdempotentTrait.class)) { + if (operation.hasTrait(IdempotentTrait.ID)) { return Optional.empty(); } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ServiceBoundResourceOperationValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ServiceBoundResourceOperationValidator.java index 56b63c96090..d951fad1c32 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ServiceBoundResourceOperationValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ServiceBoundResourceOperationValidator.java @@ -81,7 +81,7 @@ public List validate(Model model) { private boolean isImplicitIdentifierBinding(MemberShape member, ResourceShape resource) { return resource.getIdentifiers().containsKey(member.getMemberName()) - && member.getTrait(RequiredTrait.class).isPresent() + && member.hasTrait(RequiredTrait.ID) && member.getTarget().equals(resource.getIdentifiers().get(member.getMemberName())); } } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ShapeRecursionValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ShapeRecursionValidator.java index 37fe9f82aa5..2a458732656 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ShapeRecursionValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/ShapeRecursionValidator.java @@ -79,7 +79,7 @@ private void validateListMapSetShapes(Shape shape, PathFinder finder, List events) { finder.relationshipFilter(rel -> { if (rel.getShape().isStructureShape()) { - return rel.getNeighborShape().get().hasTrait(RequiredTrait.class); + return rel.getNeighborShape().get().hasTrait(RequiredTrait.ID); } else { return rel.getShape().isMemberShape(); } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/StreamingTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/StreamingTraitValidator.java index 10b931b67e0..d1a3238ada2 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/StreamingTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/StreamingTraitValidator.java @@ -61,8 +61,8 @@ public List validate(Model model) { private void validateBlobTargetsAreNonOptional(Model model, List events) { for (MemberShape member : model.toSet(MemberShape.class)) { Shape target = model.expectShape(member.getTarget()); - if (target.isBlobShape() && target.hasTrait(StreamingTrait.class) - && !(member.hasTrait(RequiredTrait.class) || member.hasTrait(DefaultTrait.class))) { + if (target.isBlobShape() && target.hasTrait(StreamingTrait.ID) + && !(member.hasTrait(RequiredTrait.ID) || member.hasTrait(DefaultTrait.ID))) { events.add(error(member, "Members that target blobs marked with the `streaming` trait MUST also be " + "marked with the `required` or `default` trait.")); @@ -85,10 +85,10 @@ private void validateBlobTargetsArePayloads(Model model, List e Walker walker = new Walker(model); for (ServiceShape service : servicesWithPayloadSupportingProtocols) { walker.iterateShapes(service).forEachRemaining(shape -> { - if (shape.isMemberShape() && !shape.hasTrait(HttpPayloadTrait.class)) { + if (shape.isMemberShape() && !shape.hasTrait(HttpPayloadTrait.ID)) { MemberShape member = shape.asMemberShape().get(); Shape target = model.expectShape(member.getTarget()); - if (target.hasTrait(StreamingTrait.class)) { + if (target.hasTrait(StreamingTrait.ID)) { events.add(error(member, String.format( "Member `%s` referencing @streaming shape `%s` must have the @httpPayload trait, " @@ -132,7 +132,7 @@ private void validateRef(Model model, MemberShape member, NeighborProvider rever case MIXIN: break; case OUTPUT: - if (target.hasTrait(RequiresLengthTrait.class)) { + if (target.hasTrait(RequiresLengthTrait.ID)) { events.add(error(rel.getNeighborShape().get(), String.format( "Structures that contain a reference to a stream marked with the " diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TargetValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TargetValidator.java index 0e894171056..1d465d23bc5 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TargetValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TargetValidator.java @@ -23,6 +23,7 @@ import software.amazon.smithy.model.shapes.ShapeId; import software.amazon.smithy.model.shapes.ShapeType; import software.amazon.smithy.model.traits.DeprecatedTrait; +import software.amazon.smithy.model.traits.ErrorTrait; import software.amazon.smithy.model.traits.MixinTrait; import software.amazon.smithy.model.traits.TraitDefinition; import software.amazon.smithy.model.validation.AbstractValidator; @@ -103,7 +104,7 @@ private void validateTarget( RelationshipType relType = rel.getRelationshipType(); if (relType != RelationshipType.MIXIN && relType.getDirection() == RelationshipDirection.DIRECTED) { - if (target.hasTrait(TraitDefinition.class)) { + if (target.hasTrait(TraitDefinition.ID)) { events.add(error(shape, format( "Found a %s reference to trait definition `%s`. Trait definitions cannot be targeted by " @@ -115,7 +116,7 @@ private void validateTarget( } // Ignoring members with the mixin trait, forbid shapes to reference mixins except as mixins. - if (!target.isMemberShape() && target.hasTrait(MixinTrait.class)) { + if (!target.isMemberShape() && target.hasTrait(MixinTrait.ID)) { events.add(error(shape, format( "Illegal %s reference to mixin `%s`; shapes marked with the mixin trait can only be " @@ -158,7 +159,7 @@ private void validateTarget( // Input/output must target structures and cannot have the error trait. if (target.getType() != ShapeType.STRUCTURE) { events.add(badType(shape, target, relType, ShapeType.STRUCTURE)); - } else if (target.findTrait("error").isPresent()) { + } else if (target.hasTrait(ErrorTrait.ID)) { events.add(inputOutputWithErrorTrait(shape, target, rel.getRelationshipType())); } break; @@ -166,7 +167,7 @@ private void validateTarget( // Errors must target a structure with the error trait. if (target.getType() != ShapeType.STRUCTURE) { events.add(badType(shape, target, relType, ShapeType.STRUCTURE)); - } else if (!target.findTrait("error").isPresent()) { + } else if (!target.hasTrait(ErrorTrait.ID)) { events.add(errorNoTrait(shape, target.getId())); } break; @@ -187,7 +188,7 @@ private void validateTarget( } break; case MIXIN: - if (!target.hasTrait(MixinTrait.class)) { + if (!target.hasTrait(MixinTrait.ID)) { events.add(error(shape, format( "Attempted to use %s as a mixin, but it is not marked with the mixin trait", @@ -205,7 +206,7 @@ private void validateDeprecatedTargets( RelationshipType relType, List events ) { - if (!target.hasTrait(DeprecatedTrait.class)) { + if (!target.hasTrait(DeprecatedTrait.ID)) { return; } diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TraitTargetValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TraitTargetValidator.java index 628a35c36f4..69a7af94dc4 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TraitTargetValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/TraitTargetValidator.java @@ -66,7 +66,7 @@ public List validate(Model model) { } private void validateMixinsUsedAsTraits(Shape traitShape, Set appliedTo, List events) { - if (traitShape.hasTrait(MixinTrait.class)) { + if (traitShape.hasTrait(MixinTrait.ID)) { for (Shape shape : appliedTo) { events.add(error(shape, String.format( diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/UnionValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/UnionValidator.java index 5b8e17a8621..2c0447b3852 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/UnionValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/UnionValidator.java @@ -37,7 +37,7 @@ public List validate(Model model) { } private void validateUnionMemberTarget(MemberShape member, Shape target, List events) { - if (target.hasTrait(DefaultTrait.class)) { + if (target.hasTrait(DefaultTrait.ID)) { events.add(note(member, String.format( "This union member targets `%s`, a shape with a default value of `%s`. Note that " @@ -50,7 +50,7 @@ private void validateUnionMemberTarget(MemberShape member, Shape target, List events) { - if (member.hasTrait(BoxTrait.class)) { + if (member.hasTrait(BoxTrait.ID)) { events.add(warning(member, member.expectTrait(BoxTrait.class), "Invalid box trait found on a union member. The box trait on union members " diff --git a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/XmlFlattenedTraitValidator.java b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/XmlFlattenedTraitValidator.java index d1c18a56596..395c8a8e907 100644 --- a/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/XmlFlattenedTraitValidator.java +++ b/smithy-model/src/main/java/software/amazon/smithy/model/validation/validators/XmlFlattenedTraitValidator.java @@ -25,7 +25,7 @@ public List validate(Model model) { List events = new ArrayList<>(); for (MemberShape member : model.getMemberShapesWithTrait(XmlFlattenedTrait.class)) { // Don't emit the event if they're being explicit about the xmlName on this member - if (member.hasTrait(XmlNameTrait.class)) { + if (member.hasTrait(XmlNameTrait.ID)) { continue; } @@ -39,7 +39,7 @@ public List validate(Model model) { } private void validateMemberTargetingList(MemberShape member, ListShape targetList, List events) { - if (targetList.getMember().hasTrait(XmlNameTrait.class)) { + if (targetList.getMember().hasTrait(XmlNameTrait.ID)) { XmlNameTrait xmlName = targetList.getMember().expectTrait(XmlNameTrait.class); if (!member.getMemberName().equals(xmlName.getValue())) { events.add(warning(member, diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/ShapeMatcher.java b/smithy-model/src/test/java/software/amazon/smithy/model/ShapeMatcher.java index 833e5ceb2b8..7ddb6687c67 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/ShapeMatcher.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/ShapeMatcher.java @@ -86,7 +86,7 @@ public static ShapeMatcher hasEvent( public static ShapeMatcher memberIsNullable(ValidatedResult result) { return ShapeMatcher.builderFor(MemberShape.class, result) .description("Member is marked with @required or @default trait") - .addAssertion(member -> !member.hasTrait(RequiredTrait.class), + .addAssertion(member -> !member.hasTrait(RequiredTrait.ID), member -> "Member is marked with the @required trait") .addAssertion(member -> { DefaultTrait trait = member.getTrait(DefaultTrait.class).orElse(null); diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/loader/IdlModelLoaderTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/loader/IdlModelLoaderTest.java index eaabaeedab9..9a5798c3302 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/loader/IdlModelLoaderTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/loader/IdlModelLoaderTest.java @@ -386,7 +386,7 @@ public void doesBasicErrorRecoveryToDocs() { ShapeId myInteger = ShapeId.from("smithy.example#MyInteger"); assertThat(model.getShape(myInteger).isPresent(), is(true)); // Ensure recovery happened on the docs trait, capturing it on the shape. - assertThat(model.expectShape(myInteger).hasTrait(DocumentationTrait.class), is(true)); + assertThat(model.expectShape(myInteger).hasTrait(DocumentationTrait.ID), is(true)); boolean foundSyntax = false; boolean foundTrait = false; @@ -416,7 +416,7 @@ public void doesBasicErrorRecoveryToIdentifier() { ShapeId myString = ShapeId.from("smithy.example#MyString"); assertThat(model.getShape(myString).isPresent(), is(true)); - assertThat(model.expectShape(myString).hasTrait(ExternalDocumentationTrait.class), is(false)); + assertThat(model.expectShape(myString).hasTrait(ExternalDocumentationTrait.ID), is(false)); boolean foundSyntax = result.getValidationEvents() .stream() diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java index adf7e9f1fe4..b8518dc2059 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java @@ -118,7 +118,7 @@ public void addsExplicitTraits() { assertThat(result.getValidationEvents(), empty()); Shape resultShape = result.unwrap().getShape(ShapeId.from("ns.foo#Bar")).get(); - assertTrue(resultShape.findTrait("smithy.api#suppress").isPresent()); + assertTrue(resultShape.hasTrait(SuppressTrait.ID)); assertTrue(resultShape.getTrait(SuppressTrait.class).isPresent()); } @@ -133,7 +133,7 @@ public void addsExplicitTraitsToBuiltModel() { assertThat(result.getValidationEvents(), empty()); Shape resultShape = result.unwrap().getShape(ShapeId.from("ns.foo#Bar")).get(); - assertTrue(resultShape.findTrait("smithy.api#suppress").isPresent()); + assertTrue(resultShape.hasTrait(SuppressTrait.ID)); assertTrue(resultShape.getTrait(SuppressTrait.class).isPresent()); } @@ -149,7 +149,7 @@ public void addsExplicitTraitsToUnparsedModel() { assertThat(result.getValidationEvents(), empty()); Shape resultShape = result.unwrap().getShape(ShapeId.from("ns.foo#Bar")).get(); - assertTrue(resultShape.findTrait("smithy.api#suppress").isPresent()); + assertTrue(resultShape.hasTrait(SuppressTrait.ID)); assertTrue(resultShape.getTrait(SuppressTrait.class).isPresent()); } @@ -165,7 +165,7 @@ public void addsExplicitTraitsToParsedDocumentNode() { assertThat(result.getValidationEvents(), empty()); Shape resultShape = result.unwrap().getShape(ShapeId.from("ns.foo#Bar")).get(); - assertTrue(resultShape.findTrait("smithy.api#suppress").isPresent()); + assertTrue(resultShape.hasTrait(SuppressTrait.ID)); assertTrue(resultShape.getTrait(SuppressTrait.class).isPresent()); } @@ -713,9 +713,9 @@ public void allowsConflictingShapesThatAreEqual() { // Ensure that traits across each duplicate are all merged together. StructureShape shape = result.unwrap().expectShape(ShapeId.from("foo.baz#Foo"), StructureShape.class); - assertTrue(shape.hasTrait(DeprecatedTrait.class)); + assertTrue(shape.hasTrait(DeprecatedTrait.ID)); assertTrue(shape.getMember("foo").isPresent()); - assertTrue(shape.getMember("foo").get().hasTrait(InternalTrait.class)); + assertTrue(shape.getMember("foo").get().hasTrait(InternalTrait.ID)); } @Test @@ -778,7 +778,7 @@ public void createsDynamicTraitWhenTraitFactoryReturnsEmpty() { .assemble() .unwrap(); - assertTrue(model.expectShape(id).findTrait(traitId).isPresent()); + assertTrue(model.expectShape(id).hasTrait(traitId)); assertThat(model.expectShape(id).findTrait(traitId).get(), instanceOf(DynamicTrait.class)); } @@ -890,7 +890,7 @@ public void loadsMixinMembersInCorrectOrderAndWithTraits() { assertThat(f.getMemberNames(), contains("a", "b", "c", "d", "e", "f")); assertThat(f.getMember("a").get().expectTrait(DocumentationTrait.class).getValue(), equalTo("I've changed")); assertThat(f.getMember("c").get().expectTrait(DocumentationTrait.class).getValue(), equalTo("I've changed")); - assertTrue(f.getMember("c").get().hasTrait(InternalTrait.class)); + assertTrue(f.getMember("c").get().hasTrait(InternalTrait.ID)); } @Test @@ -1072,13 +1072,13 @@ public void canResolveTargetsWithoutPrelude() { public void findsBoxTraitOnPreludeShapes() { Model model = Model.assembler().assemble().unwrap(); - assertThat(model.expectShape(ShapeId.from("smithy.api#Boolean")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Byte")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Short")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Integer")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Long")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Float")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Double")).hasTrait(BoxTrait.class), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Boolean")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Byte")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Short")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Integer")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Long")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Float")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Double")).hasTrait(BoxTrait.ID), is(true)); } @Test @@ -1149,13 +1149,13 @@ private void assertionChecksFor_upgradesAndDowngrades(Model model) { ShapeId fooMember = ShapeId.from("smithy.example#Struct$foo"); ShapeId barMember = ShapeId.from("smithy.example#Struct$bar"); ShapeId boxedMember = ShapeId.from("smithy.example#Struct$boxed"); - assertThat(model.expectShape(boxDouble).hasTrait(DefaultTrait.class), is(false)); - assertThat(model.expectShape(primitiveDouble).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(fooMember).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(barMember).hasTrait(DefaultTrait.class), is(false)); - assertThat(model.expectShape(boxedMember).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(boxDouble).hasTrait(DefaultTrait.ID), is(false)); + assertThat(model.expectShape(primitiveDouble).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(fooMember).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(barMember).hasTrait(DefaultTrait.ID), is(false)); + assertThat(model.expectShape(boxedMember).hasTrait(DefaultTrait.ID), is(true)); assertThat(model.expectShape(boxedMember).expectTrait(DefaultTrait.class).toNode(), equalTo(Node.nullNode())); - assertThat(model.expectShape(boxedMember).hasTrait(BoxTrait.class), is(true)); + assertThat(model.expectShape(boxedMember).hasTrait(BoxTrait.ID), is(true)); } @Test @@ -1235,18 +1235,18 @@ public void appliesBoxTraitsToMixinsToo() { .unwrap(); // MixedInteger and MixinInteger have synthetic box traits. - assertThat(model1.expectShape(ShapeId.from("smithy.example#MixinInteger")).hasTrait(BoxTrait.class), is(true)); - assertThat(model1.expectShape(ShapeId.from("smithy.example#MixedInteger")).hasTrait(BoxTrait.class), is(true)); + assertThat(model1.expectShape(ShapeId.from("smithy.example#MixinInteger")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model1.expectShape(ShapeId.from("smithy.example#MixedInteger")).hasTrait(BoxTrait.ID), is(true)); // MixinStruct$bar and MixedStruct$bar have synthetic box traits. StructureShape mixinStruct = model1.expectShape(ShapeId.from("smithy.example#MixinStruct"), StructureShape.class); StructureShape mixedStruct = model1.expectShape(ShapeId.from("smithy.example#MixedStruct"), StructureShape.class); - assertThat(mixinStruct.getAllMembers().get("bar").hasTrait(BoxTrait.class), is(true)); - assertThat(mixinStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.class), is(true)); - assertThat(mixedStruct.getAllMembers().get("bar").hasTrait(BoxTrait.class), is(true)); - assertThat(mixedStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.class), is(true)); + assertThat(mixinStruct.getAllMembers().get("bar").hasTrait(BoxTrait.ID), is(true)); + assertThat(mixinStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.ID), is(true)); + assertThat(mixedStruct.getAllMembers().get("bar").hasTrait(BoxTrait.ID), is(true)); + assertThat(mixedStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.ID), is(true)); // Now ensure round-tripping results in the same model. Node serialized = ModelSerializer.builder().build().serialize(model1); diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelInteropTransformerTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelInteropTransformerTest.java index 29f542c96a1..0ac97db9b29 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelInteropTransformerTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelInteropTransformerTest.java @@ -96,8 +96,8 @@ public void doesNotIntroduceConflictsDuringUpgrade() { assertThat(ShapeId.from("smithy.example#Foo$boxedMember"), targetsShape(result, "PrimitiveInteger")); Shape shape = result.getResult().get().expectShape(ShapeId.from("smithy.example#Foo$boxedMember")); - assertThat(shape.hasTrait(BoxTrait.class), is(true)); - assertThat(shape.hasTrait(DefaultTrait.class), is(true)); + assertThat(shape.hasTrait(BoxTrait.ID), is(true)); + assertThat(shape.hasTrait(DefaultTrait.ID), is(true)); assertThat(shape.expectTrait(DefaultTrait.class).toNode().isNullNode(), is(true)); assertThat(ShapeId.from("smithy.example#Foo$previouslyBoxedTarget"), not(addedDefaultTrait(result))); @@ -180,7 +180,7 @@ private static Matcher targetsShape(ValidatedResult result, Stri private static Matcher addedDefaultTrait(ValidatedResult result) { return ShapeMatcher.builderFor(MemberShape.class, result) .description("member to have a default trait") - .addAssertion(member -> member.hasTrait(DefaultTrait.class), + .addAssertion(member -> member.hasTrait(DefaultTrait.ID), member -> "no @default trait") .build(); } @@ -320,9 +320,9 @@ private void boxTraitRootAssertionsV1(Model model, int roundTrip) { ShapeId primitiveInteger = ShapeId.from("smithy.example#PrimitiveInteger"); ShapeId fooBam = ShapeId.from("smithy.example#Foo$bam"); - assertThat(model.expectShape(myInteger).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(foo).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(fooBaz).hasTrait(BoxTrait.class), is(true)); + assertThat(model.expectShape(myInteger).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(foo).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(fooBaz).hasTrait(BoxTrait.ID), is(true)); Node serialized = ModelSerializer.builder().build().serialize(model); String raw = Node.prettyPrintJson(serialized); @@ -331,22 +331,22 @@ private void boxTraitRootAssertionsV1(Model model, int roundTrip) { .assemble() .unwrap(); - assertThat(model2.expectShape(myInteger).hasTrait(BoxTrait.class), is(true)); - assertThat(model2.expectShape(myInteger).hasTrait(DefaultTrait.class), is(false)); - assertThat(model2.expectShape(foo).hasTrait(BoxTrait.class), is(false)); - assertThat(model2.expectShape(fooBaz).hasTrait(DefaultTrait.class), is(true)); + assertThat(model2.expectShape(myInteger).hasTrait(BoxTrait.ID), is(true)); + assertThat(model2.expectShape(myInteger).hasTrait(DefaultTrait.ID), is(false)); + assertThat(model2.expectShape(foo).hasTrait(BoxTrait.ID), is(false)); + assertThat(model2.expectShape(fooBaz).hasTrait(DefaultTrait.ID), is(true)); assertThat(model2.expectShape(fooBaz).expectTrait(DefaultTrait.class).toNode(), equalTo(Node.nullNode())); // This member gets a synthetic box trait because the default value is set to null. - assertThat(model2.expectShape(fooBaz).hasTrait(BoxTrait.class), is(true)); + assertThat(model2.expectShape(fooBaz).hasTrait(BoxTrait.ID), is(true)); // Primitive integer gets a synthetic default trait and no box trait. - assertThat(model2.expectShape(primitiveInteger).hasTrait(DefaultTrait.class), is(true)); - assertThat(model2.expectShape(primitiveInteger).hasTrait(BoxTrait.class), is(false)); + assertThat(model2.expectShape(primitiveInteger).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model2.expectShape(primitiveInteger).hasTrait(BoxTrait.ID), is(false)); // The member referring to PrimitiveInteger gets a synthetic default trait and no box trait. - assertThat(model2.expectShape(fooBam).hasTrait(DefaultTrait.class), is(true)); - assertThat(model2.expectShape(fooBam).hasTrait(BoxTrait.class), is(false)); + assertThat(model2.expectShape(fooBam).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model2.expectShape(fooBam).hasTrait(BoxTrait.ID), is(false)); } @Test @@ -424,46 +424,46 @@ private void boxTraitRootAssertionsV2(Model model, int roundTrip) { ShapeId fooPrimitiveIntEnum = ShapeId.from("smithy.example#Foo$PrimitiveIntEnum"); // Do not box strings for v1 compatibility. - assertThat(model.expectShape(defaultString).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(fooDefaultString).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(fooDefaultString).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(defaultString).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(defaultString).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(fooDefaultString).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(fooDefaultString).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(defaultString).hasTrait(DefaultTrait.ID), is(true)); // Add box to BoxedInteger because it has no default trait. - assertThat(model.expectShape(boxedInteger).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedInteger).hasTrait(BoxTrait.class), is(false)); // no need to box member too - assertThat(model.expectShape(boxedInteger).hasTrait(DefaultTrait.class), is(false)); - assertThat(model.expectShape(fooBoxedInteger).hasTrait(DefaultTrait.class), is(false)); + assertThat(model.expectShape(boxedInteger).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedInteger).hasTrait(BoxTrait.ID), is(false)); // no need to box member too + assertThat(model.expectShape(boxedInteger).hasTrait(DefaultTrait.ID), is(false)); + assertThat(model.expectShape(fooBoxedInteger).hasTrait(DefaultTrait.ID), is(false)); // Add box to BoxedIntegerWithDefault because it has a default that isn't the v1 zero value. - assertThat(model.expectShape(boxedIntegerWithDefault).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedIntegerWithDefault).hasTrait(BoxTrait.class), is(false)); // no need to box the member too - assertThat(model.expectShape(boxedIntegerWithDefault).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedIntegerWithDefault).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(boxedIntegerWithDefault).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedIntegerWithDefault).hasTrait(BoxTrait.ID), is(false)); // no need to box the member too + assertThat(model.expectShape(boxedIntegerWithDefault).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedIntegerWithDefault).hasTrait(DefaultTrait.ID), is(true)); // No box trait on PrimitiveInteger because it has a zero value default. - assertThat(model.expectShape(primitiveInteger).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(fooPrimitiveInteger).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(primitiveInteger).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(fooPrimitiveInteger).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(primitiveInteger).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(fooPrimitiveInteger).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(primitiveInteger).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(fooPrimitiveInteger).hasTrait(DefaultTrait.ID), is(true)); // Add box to BoxedIntEnum because it has no default trait. - assertThat(model.expectShape(boxedIntEnum).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedIntEnum).hasTrait(BoxTrait.class), is(false)); // no need to box the member too - assertThat(model.expectShape(boxedIntEnum).hasTrait(DefaultTrait.class), is(false)); - assertThat(model.expectShape(fooBoxedIntEnum).hasTrait(DefaultTrait.class), is(false)); + assertThat(model.expectShape(boxedIntEnum).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedIntEnum).hasTrait(BoxTrait.ID), is(false)); // no need to box the member too + assertThat(model.expectShape(boxedIntEnum).hasTrait(DefaultTrait.ID), is(false)); + assertThat(model.expectShape(fooBoxedIntEnum).hasTrait(DefaultTrait.ID), is(false)); // Add box to BoxedIntEnumWithDefault because it has a default that isn't the v1 zero value. - assertThat(model.expectShape(boxedIntEnumWithDefault).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedIntEnumWithDefault).hasTrait(BoxTrait.class), is(false)); // no need to box the member too - assertThat(model.expectShape(boxedIntEnumWithDefault).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(fooBoxedIntEnumWithDefault).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(boxedIntEnumWithDefault).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedIntEnumWithDefault).hasTrait(BoxTrait.ID), is(false)); // no need to box the member too + assertThat(model.expectShape(boxedIntEnumWithDefault).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(fooBoxedIntEnumWithDefault).hasTrait(DefaultTrait.ID), is(true)); // No box trait on PrimitiveIntEnum because it has a zero value default. - assertThat(model.expectShape(primitiveIntEnum).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(fooPrimitiveIntEnum).hasTrait(BoxTrait.class), is(false)); - assertThat(model.expectShape(primitiveIntEnum).hasTrait(DefaultTrait.class), is(true)); - assertThat(model.expectShape(fooPrimitiveIntEnum).hasTrait(DefaultTrait.class), is(true)); + assertThat(model.expectShape(primitiveIntEnum).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(fooPrimitiveIntEnum).hasTrait(BoxTrait.ID), is(false)); + assertThat(model.expectShape(primitiveIntEnum).hasTrait(DefaultTrait.ID), is(true)); + assertThat(model.expectShape(fooPrimitiveIntEnum).hasTrait(DefaultTrait.ID), is(true)); } @Test @@ -478,7 +478,7 @@ public void doesNotFailWhenUpgradingWhenZeroValueIncompatibleWithRangeTrait() { ShapeId shapeId1 = ShapeId.from("smithy.example#MyLong1"); Shape shape1 = model1.expectShape(shapeId1); - assertThat(shape1.hasTrait(RangeTrait.class), is(true)); + assertThat(shape1.hasTrait(RangeTrait.ID), is(true)); // Make sure the range trait wasn't modified. assertThat(shape1.expectTrait(RangeTrait.class).getMin().get().toString(), equalTo("1")); assertThat(result.getValidationEvents() diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/loader/PreludeTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/loader/PreludeTest.java index 77349177a5b..2a8c0b5ea4f 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/loader/PreludeTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/loader/PreludeTest.java @@ -46,7 +46,7 @@ public void checkIfPrivateShapesAreReferenced() { ModelTransformer transformer = ModelTransformer.create(); Model result = transformer.scrubTraitDefinitions(model); Set unreferencedPrivateShapes = result.shapes() - .filter(shape -> shape.hasTrait(PrivateTrait.class)) + .filter(shape -> shape.hasTrait(PrivateTrait.ID)) .map(Shape::getId) .collect(Collectors.toSet()); @@ -76,13 +76,13 @@ public void ensurePreludeIsValid() { public void preludeShapesAreAlwaysBoxed() { Model model = Model.assembler().assemble().unwrap(); - assertThat(model.expectShape(ShapeId.from("smithy.api#Boolean")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Byte")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Short")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Integer")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Long")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Float")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#Double")).hasTrait(BoxTrait.class), is(true)); - assertThat(model.expectShape(ShapeId.from("smithy.api#PrimitiveBoolean")).hasTrait(BoxTrait.class), is(false)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Boolean")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Byte")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Short")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Integer")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Long")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Float")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#Double")).hasTrait(BoxTrait.ID), is(true)); + assertThat(model.expectShape(ShapeId.from("smithy.api#PrimitiveBoolean")).hasTrait(BoxTrait.ID), is(false)); } } diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/ShapeTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/ShapeTest.java index 1f4ae715973..2ee46293221 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/ShapeTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/ShapeTest.java @@ -131,7 +131,7 @@ public void hasTraits() { assertFalse(shape.hasTrait("notThere")); assertTrue(shape.getTrait(DocumentationTrait.class).isPresent()); - assertTrue(shape.hasTrait(DocumentationTrait.class)); + assertTrue(shape.hasTrait(DocumentationTrait.ID)); assertTrue(shape.findTrait("documentation").isPresent()); assertTrue(shape.findTrait("smithy.api#documentation").isPresent()); assertTrue(shape.findTrait("documentation").get() instanceof DocumentationTrait); diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/StructureShapeTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/StructureShapeTest.java index 463afcd36d7..482675521dd 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/shapes/StructureShapeTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/shapes/StructureShapeTest.java @@ -133,9 +133,9 @@ public void supportsMixinTraits() { .addTrait(new DocumentationTrait("hi")) .build(); - assertTrue(concrete.hasTrait(SensitiveTrait.class)); - assertTrue(concrete.hasTrait(DeprecatedTrait.class)); - assertTrue(concrete.hasTrait(DocumentationTrait.class)); + assertTrue(concrete.hasTrait(SensitiveTrait.ID)); + assertTrue(concrete.hasTrait(DeprecatedTrait.ID)); + assertTrue(concrete.hasTrait(DocumentationTrait.ID)); } @Test @@ -194,7 +194,7 @@ public void mixinMembersCanBeModifiedJustLikeNormalMembers() { StructureShape updated = concrete.toBuilder().addMember(updatedA).build(); assertThat(updated.getMemberNames(), contains("a")); - assertTrue(updated.getMember("a").get().hasTrait(SensitiveTrait.class)); + assertTrue(updated.getMember("a").get().hasTrait(SensitiveTrait.ID)); assertThat(updated.getMember("a").get().getMixins(), contains(mixin1.getMember("a").get().getId())); } @@ -218,10 +218,10 @@ public void structuresAccountForMissingMixinsOnLocalMembers() { .addMixin(mixin1) .build(); - assertTrue(concrete.getMember("a").get().hasTrait(SensitiveTrait.class)); + assertTrue(concrete.getMember("a").get().hasTrait(SensitiveTrait.ID)); assertThat(concrete.getMember("a").get().getMixins(), contains(mixin1.getMember("a").get().getId())); - assertTrue(concrete.getMember("b").get().hasTrait(SensitiveTrait.class)); + assertTrue(concrete.getMember("b").get().hasTrait(SensitiveTrait.ID)); assertThat(concrete.getMember("b").get().getMixins(), contains(mixin1.getMember("b").get().getId())); } diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/AddClientOptionalTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/AddClientOptionalTest.java index 2d5876002c2..2333330859d 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/AddClientOptionalTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/AddClientOptionalTest.java @@ -28,8 +28,8 @@ public void addsClientOptionalToInputStructures() { Model model2 = ModelTransformer.create().addClientOptional(model, false); StructureShape struct2 = model2.expectShape(structure.getId(), StructureShape.class); - assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.class)); - assertTrue(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.class)); + assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.ID)); + assertTrue(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.ID)); } @Test @@ -43,8 +43,8 @@ public void addsClientOptionalToImplicitNulls() { Model model2 = ModelTransformer.create().addClientOptional(model, false); StructureShape struct2 = model2.expectShape(structure.getId(), StructureShape.class); - assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.class)); - assertFalse(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.class)); + assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.ID)); + assertFalse(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.ID)); } @Test @@ -60,8 +60,8 @@ public void addsClientOptionalWhenNoZeroValue() { Model model2 = ModelTransformer.create().addClientOptional(model, true); StructureShape struct2 = model2.expectShape(structure.getId(), StructureShape.class); - assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.class)); - assertFalse(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.class)); - assertTrue(struct2.getMember("baz").get().hasTrait(ClientOptionalTrait.class)); + assertTrue(struct2.getMember("foo").get().hasTrait(ClientOptionalTrait.ID)); + assertFalse(struct2.getMember("bar").get().hasTrait(ClientOptionalTrait.ID)); + assertTrue(struct2.getMember("baz").get().hasTrait(ClientOptionalTrait.ID)); } } diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/DowngradeToV1Test.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/DowngradeToV1Test.java index 9e0b5fe75cf..ca25f9328db 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/DowngradeToV1Test.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/DowngradeToV1Test.java @@ -114,9 +114,9 @@ public void removesResourceProperties() { assertThat(downgraded.expectShape(resource.getId(), ResourceShape.class).getProperties(), Matchers.anEmptyMap()); - assertThat(downgraded.expectShape(input.getMember("foo").get().getId()).hasTrait(PropertyTrait.class), + assertThat(downgraded.expectShape(input.getMember("foo").get().getId()).hasTrait(PropertyTrait.ID), Matchers.is(false)); - assertThat(downgraded.expectShape(input.getMember("baz").get().getId()).hasTrait(NotPropertyTrait.class), + assertThat(downgraded.expectShape(input.getMember("baz").get().getId()).hasTrait(NotPropertyTrait.ID), Matchers.is(false)); } @@ -185,38 +185,38 @@ public void removesUnnecessaryDefaults() { // A Root level shape with a 1.0 non-zero value drops the default value and is boxed ShapeId integerShape = ShapeId.from("smithy.example#MyInteger"); - assertThat(downgraded.expectShape(integerShape).hasTrait(DefaultTrait.class), Matchers.is(false)); - assertThat(downgraded.expectShape(integerShape).hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(downgraded.expectShape(integerShape).hasTrait(BoxTrait.class), Matchers.is(true)); + assertThat(downgraded.expectShape(integerShape).hasTrait(DefaultTrait.ID), Matchers.is(false)); + assertThat(downgraded.expectShape(integerShape).hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(downgraded.expectShape(integerShape).hasTrait(BoxTrait.ID), Matchers.is(true)); // A Root level shape with a 1.0 zero value keeps the default value ShapeId zeroIntegerShape = ShapeId.from("smithy.example#ZeroInteger"); - assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(DefaultTrait.class), Matchers.is(true)); + assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(DefaultTrait.ID), Matchers.is(true)); assertThat(downgraded.expectShape(zeroIntegerShape) .expectTrait(DefaultTrait.class) .toNode() .expectNumberNode() .getValue(), Matchers.is(0L)); - assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(BoxTrait.class), Matchers.is(false)); + assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(downgraded.expectShape(zeroIntegerShape).hasTrait(BoxTrait.ID), Matchers.is(false)); // A Root level shape with no default value is boxed ShapeId boxedIntegerShape = ShapeId.from("smithy.example#BoxedInteger"); - assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(DefaultTrait.class), Matchers.is(false)); - assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(BoxTrait.class), Matchers.is(true)); + assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(DefaultTrait.ID), Matchers.is(false)); + assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(downgraded.expectShape(boxedIntegerShape).hasTrait(BoxTrait.ID), Matchers.is(true)); // StructureShape still exists StructureShape dStruct = downgraded.expectShape(ShapeId.from("smithy.example#Struct"), StructureShape.class); // A Member that targets a shape with a 1.0 non-zero value drops the default value and is not boxed - assertThat(dStruct.getAllMembers().get("foo").hasTrait(DefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("foo").hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("foo").hasTrait(BoxTrait.class), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("foo").hasTrait(DefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("foo").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("foo").hasTrait(BoxTrait.ID), Matchers.is(false)); // A Member that targets a shape with a matching default 1.0 zero value keeps the default value - assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(DefaultTrait.class), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(DefaultTrait.ID), Matchers.is(true)); assertThat(dStruct.getAllMembers() .get("zeroTargetZeroMember") .expectTrait(DefaultTrait.class) @@ -224,12 +224,12 @@ public void removesUnnecessaryDefaults() { .expectNumberNode() .getValue(), Matchers.is(0L)); - assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(BoxTrait.class), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("zeroTargetZeroMember").hasTrait(BoxTrait.ID), Matchers.is(false)); // A Member that has a default value of null keeps the default value of null and is boxed - assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(DefaultTrait.class), + assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(DefaultTrait.ID), Matchers.is(true)); assertThat( dStruct.getAllMembers() @@ -238,27 +238,27 @@ public void removesUnnecessaryDefaults() { .toNode() .isNullNode(), Matchers.is(true)); - assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(BoxTrait.class), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("zeroTargetBoxedMember").hasTrait(BoxTrait.ID), Matchers.is(true)); // A Member that has a target shape with no default value drops the default value - assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(DefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(DefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(BoxTrait.class), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("boxedTargetZeroMember").hasTrait(BoxTrait.ID), Matchers.is(false)); // A Member that has a target shape with no default value drops the default value - assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(DefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(DefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(BoxTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetNonzeroMember").hasTrait(BoxTrait.ID), Matchers.is(false)); // A Member that has a default value of null keeps the default value of null and is boxed - assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(DefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(DefaultTrait.ID), Matchers.is(true)); assertThat( dStruct.getAllMembers() @@ -267,33 +267,33 @@ public void removesUnnecessaryDefaults() { .toNode() .isNullNode(), Matchers.is(true)); - assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(BoxTrait.class), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("boxedTargetBoxedMember").hasTrait(BoxTrait.ID), Matchers.is(true)); // A Member that has no default value has no default trait and the member is not boxed - assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(DefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(DefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(AddedDefaultTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(BoxTrait.class), + assertThat(dStruct.getAllMembers().get("boxedTargetImplicitBoxedMember").hasTrait(BoxTrait.ID), Matchers.is(false)); // A Member that has a default value of null keeps the default value of null and is boxed - assertThat(dStruct.getAllMembers().get("baz").hasTrait(DefaultTrait.class), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("baz").hasTrait(DefaultTrait.ID), Matchers.is(true)); assertThat(dStruct.getAllMembers().get("baz").expectTrait(DefaultTrait.class).toNode().isNullNode(), Matchers.is(true)); - assertThat(dStruct.getAllMembers().get("baz").hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("baz").hasTrait(BoxTrait.class), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("baz").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("baz").hasTrait(BoxTrait.ID), Matchers.is(true)); // A Member with the addedDefault trait drops both the default and addedDefault trait - assertThat(dStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("bar").hasTrait(AddedDefaultTrait.class), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("bar").hasTrait(DefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("bar").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); // A Member keeps the required trait and drops the clientOptional trait - assertThat(dStruct.getAllMembers().get("bam").hasTrait(DefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("bam").hasTrait(AddedDefaultTrait.class), Matchers.is(false)); - assertThat(dStruct.getAllMembers().get("bam").hasTrait(RequiredTrait.class), Matchers.is(true)); - assertThat(dStruct.getAllMembers().get("bam").hasTrait(ClientOptionalTrait.class), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("bam").hasTrait(DefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("bam").hasTrait(AddedDefaultTrait.ID), Matchers.is(false)); + assertThat(dStruct.getAllMembers().get("bam").hasTrait(RequiredTrait.ID), Matchers.is(true)); + assertThat(dStruct.getAllMembers().get("bam").hasTrait(ClientOptionalTrait.ID), Matchers.is(false)); } } diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/FilterShapesTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/FilterShapesTest.java index 4e2dd84d8e1..9f465ec3546 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/FilterShapesTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/FilterShapesTest.java @@ -37,7 +37,7 @@ public void removesShapesThatMatchPredicate() { StringShape b = StringShape.builder().id(bId).build(); Model model = Model.builder().addShapes(a, b).build(); Model result = ModelTransformer.create() - .filterShapes(model, shape -> !shape.getTrait(SensitiveTrait.class).isPresent()); + .filterShapes(model, shape -> !shape.hasTrait(SensitiveTrait.class)); assertThat(result.shapes().count(), Matchers.is(1L)); assertThat(result.getShape(bId), Matchers.not(Optional.empty())); diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/FlattenPaginationInfoTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/FlattenPaginationInfoTest.java index c29853b61ba..66cf6e84e10 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/FlattenPaginationInfoTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/FlattenPaginationInfoTest.java @@ -28,7 +28,7 @@ void compareTransform() { Model result = ModelTransformer.create().flattenPaginationInfoIntoOperations(before, service); Shape resultService = result.expectShape(serviceId); - assertFalse(resultService.hasTrait(PaginatedTrait.class)); + assertFalse(resultService.hasTrait(PaginatedTrait.ID)); Shape resultOperation = result.expectShape(operationId); PaginatedTrait resultTrait = resultOperation.expectTrait(PaginatedTrait.class); diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptionalTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptionalTest.java index 68db5845e5c..04c37a608d4 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptionalTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/MakeIdempotencyTokenClientOptionalTest.java @@ -28,8 +28,8 @@ void compareTransform() { Shape input = result.expectShape(operationInput); Shape member = result.expectShape(input.getMember("token").get().getId()); - assertTrue(member.hasTrait(ClientOptionalTrait.class)); - assertTrue(member.hasTrait(RequiredTrait.class)); - assertTrue(member.hasTrait(IdempotencyTokenTrait.class)); + assertTrue(member.hasTrait(ClientOptionalTrait.ID)); + assertTrue(member.hasTrait(RequiredTrait.ID)); + assertTrue(member.hasTrait(IdempotencyTokenTrait.ID)); } } diff --git a/smithy-model/src/test/java/software/amazon/smithy/model/transform/ReplaceShapesTest.java b/smithy-model/src/test/java/software/amazon/smithy/model/transform/ReplaceShapesTest.java index cb72bb6f5de..63905497b4f 100644 --- a/smithy-model/src/test/java/software/amazon/smithy/model/transform/ReplaceShapesTest.java +++ b/smithy-model/src/test/java/software/amazon/smithy/model/transform/ReplaceShapesTest.java @@ -319,14 +319,14 @@ public void canReplaceMultipleMembersOfSameShape() { .get() .getMember("a") .get() - .hasTrait(RequiredTrait.class)); + .hasTrait(RequiredTrait.ID)); assertTrue(result.getShape(containerId) .get() .asStructureShape() .get() .getMember("b") .get() - .hasTrait(RequiredTrait.class)); + .hasTrait(RequiredTrait.ID)); } @Test diff --git a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/ResolvedTopicIndex.java b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/ResolvedTopicIndex.java index 12a8fd940e6..1691ae2160d 100644 --- a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/ResolvedTopicIndex.java +++ b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/ResolvedTopicIndex.java @@ -52,11 +52,11 @@ public ResolvedTopicIndex(Model model) { OperationIndex operationIndex = OperationIndex.of(model); model.shapes(OperationShape.class).forEach(operation -> { - if (operation.hasTrait(PublishTrait.class)) { - PublishTrait trait = operation.getTrait(PublishTrait.class).get(); + if (operation.hasTrait(PublishTrait.ID)) { + PublishTrait trait = operation.expectTrait(PublishTrait.class); createPublishBindings(operationIndex, operation, trait); - } else if (operation.hasTrait(SubscribeTrait.class)) { - SubscribeTrait trait = operation.getTrait(SubscribeTrait.class).get(); + } else if (operation.hasTrait(SubscribeTrait.ID)) { + SubscribeTrait trait = operation.expectTrait(SubscribeTrait.class); StructureShape input = operationIndex.expectInputShape(operation); createSubscribeBinding(input, eventStreamIndex, operation, trait); } diff --git a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/TopicBinding.java b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/TopicBinding.java index 1a69b26af09..9c4e3dca338 100644 --- a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/TopicBinding.java +++ b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/TopicBinding.java @@ -78,9 +78,9 @@ public final class TopicBinding { * @return Returns the optionally found MQTT binding trait. */ public static Optional getOperationMqttTrait(Shape operation) { - if (operation.hasTrait(PublishTrait.class)) { + if (operation.hasTrait(PublishTrait.ID)) { return operation.getTrait(PublishTrait.class); - } else if (operation.hasTrait(SubscribeTrait.class)) { + } else if (operation.hasTrait(SubscribeTrait.ID)) { return operation.getTrait(SubscribeTrait.class); } else { return Optional.empty(); diff --git a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/validators/MqttTopicLabelValidator.java b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/validators/MqttTopicLabelValidator.java index 2578ed1a799..493ee0ee515 100644 --- a/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/validators/MqttTopicLabelValidator.java +++ b/smithy-mqtt-traits/src/main/java/software/amazon/smithy/mqtt/traits/validators/MqttTopicLabelValidator.java @@ -51,11 +51,11 @@ public List validate(Model model) { } private static TopicCollection createTopics(OperationShape shape) { - if (shape.hasTrait(SubscribeTrait.class)) { + if (shape.hasTrait(SubscribeTrait.ID)) { SubscribeTrait trait = shape.expectTrait(SubscribeTrait.class); List bindings = Collections.singletonList(trait.getTopic()); return new TopicCollection(shape, trait, bindings); - } else if (shape.hasTrait(PublishTrait.class)) { + } else if (shape.hasTrait(PublishTrait.ID)) { PublishTrait trait = shape.expectTrait(PublishTrait.class); List bindings = Collections.singletonList(trait.getTopic()); return new TopicCollection(shape, trait, bindings); @@ -70,7 +70,7 @@ private List validateMqtt(OperationIndex index, TopicCollection List events = new ArrayList<>(); for (MemberShape member : input.getAllMembers().values()) { - if (member.hasTrait(TopicLabelTrait.class)) { + if (member.hasTrait(TopicLabelTrait.ID)) { if (labels.contains(member.getMemberName())) { labels.remove(member.getMemberName()); } else { diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiConverter.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiConverter.java index a5a2ccee2a9..bad2cad8b62 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiConverter.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiConverter.java @@ -451,7 +451,7 @@ private void addPaths( PathItem.Builder pathItem = paths.computeIfAbsent(result.getUri(), (uri) -> PathItem.builder()); // Mark the operation deprecated if the trait's present. - if (shape.hasTrait(DeprecatedTrait.class)) { + if (shape.hasTrait(DeprecatedTrait.ID)) { result.getOperation().deprecated(true); } diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiJsonSchemaMapper.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiJsonSchemaMapper.java index 9addaa81fcd..7052ff80af3 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiJsonSchemaMapper.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/OpenApiJsonSchemaMapper.java @@ -47,7 +47,7 @@ public Schema.Builder updateSchema(JsonSchemaMapperContext context, Schema.Build .map(ExternalDocumentation::toNode) .ifPresent(docs -> builder.putExtension("externalDocs", docs)); - if (shape.hasTrait(DeprecatedTrait.class)) { + if (shape.hasTrait(DeprecatedTrait.ID)) { builder.putExtension("deprecated", Node.from(true)); } @@ -77,7 +77,7 @@ public Schema.Builder updateSchema(JsonSchemaMapperContext context, Schema.Build config.detectJsonTimestampFormat(shape) .filter(format -> format.equals(TimestampFormatTrait.EPOCH_SECONDS)) .ifPresent(format -> builder.format("double")); - } else if (shape.hasTrait(SensitiveTrait.class)) { + } else if (shape.hasTrait(SensitiveTrait.ID)) { builder.format("password"); } } diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AbstractRestProtocol.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AbstractRestProtocol.java index 1511234db79..dcd550617ad 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AbstractRestProtocol.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AbstractRestProtocol.java @@ -138,7 +138,7 @@ public Set getProtocolRequestHeaders(Context context, OperationShape bindingIndex.determineRequestContentType(operationShape, documentMediaType) .ifPresent(c -> headers.addAll(ProtocolUtils.CONTENT_HEADERS)); - if (operationShape.hasTrait(HttpChecksumRequiredTrait.class)) { + if (operationShape.hasTrait(HttpChecksumRequiredTrait.ID)) { headers.add("Content-Md5"); } return headers; @@ -653,7 +653,7 @@ private void updateResponsesMapWithResponseStatusAndObject( StructureShape shape, Map responses ) { - Shape operationOrError = shape.hasTrait(ErrorTrait.class) ? shape : operation; + Shape operationOrError = shape.hasTrait(ErrorTrait.ID) ? shape : operation; String statusCode = context.getOpenApiProtocol().getOperationResponseStatusCode(context, operationOrError); ResponseObject response = createResponse( context, @@ -690,7 +690,7 @@ private Map createResponseHeaderParameters( ) { List bindings = HttpBindingIndex.of(context.getModel()) .getResponseBindings(operationOrError, HttpBinding.Location.HEADER); - MessageType type = !operationOrError.hasTrait(ErrorTrait.class) ? MessageType.RESPONSE : MessageType.ERROR; + MessageType type = !operationOrError.hasTrait(ErrorTrait.ID) ? MessageType.RESPONSE : MessageType.ERROR; return createHeaderParameters(context, bindings, type, operationOrError, operation); } @@ -749,7 +749,7 @@ private void createResponsePayload( // or arrays. These schemas are synthesized as references so that // any schemas with string types will pass validation. Schema schema = context.inlineOrReferenceSchema(binding.getMember()); - MessageType type = !operationOrError.hasTrait(ErrorTrait.class) ? MessageType.RESPONSE : MessageType.ERROR; + MessageType type = !operationOrError.hasTrait(ErrorTrait.ID) ? MessageType.RESPONSE : MessageType.ERROR; MediaTypeObject mediaTypeObject = getMediaTypeObject(context, schema, operationOrError, shape -> { String shapeName = context.getService().getContextualName(shape.getId()); return shape instanceof OperationShape diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AwsRestJson1Protocol.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AwsRestJson1Protocol.java index ed625b92baf..bbde5e40444 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AwsRestJson1Protocol.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/AwsRestJson1Protocol.java @@ -60,7 +60,7 @@ public Set getProtocolRequestHeaders(Context context, Op Set headers = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); headers.addAll(super.getProtocolRequestHeaders(context, operationShape)); headers.addAll(AWS_REQUEST_HEADERS); - if (operationShape.hasTrait(ClientDiscoveredEndpointTrait.class)) { + if (operationShape.hasTrait(ClientDiscoveredEndpointTrait.ID)) { headers.add("X-Amz-Api-Version"); } return headers; diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/HeaderSchemaVisitor.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/HeaderSchemaVisitor.java index 866c0bab63a..130778882d5 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/HeaderSchemaVisitor.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/HeaderSchemaVisitor.java @@ -59,7 +59,7 @@ public Schema listShape(ListShape shape) { // created if the format was not explicitly set. @Override public Schema timestampShape(TimestampShape shape) { - if (member.hasTrait(TimestampFormatTrait.class)) { + if (member.hasTrait(TimestampFormatTrait.ID)) { return schema; } @@ -72,7 +72,7 @@ public Schema timestampShape(TimestampShape shape) { @Override public Schema stringShape(StringShape shape) { // String shapes with the mediaType trait must be base64 encoded. - return shape.hasTrait(MediaTypeTrait.class) + return shape.hasTrait(MediaTypeTrait.ID) ? schema.toBuilder().ref(null).type("string").format("byte").build() : schema; } diff --git a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/QuerySchemaVisitor.java b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/QuerySchemaVisitor.java index 1c3646f363c..954751b6a31 100644 --- a/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/QuerySchemaVisitor.java +++ b/smithy-openapi/src/main/java/software/amazon/smithy/openapi/fromsmithy/protocols/QuerySchemaVisitor.java @@ -59,7 +59,7 @@ public Schema listShape(ListShape shape) { @Override public Schema timestampShape(TimestampShape shape) { // Use the referenced shape as-is since it defines an explicit format. - if (member.hasTrait(TimestampFormatTrait.class)) { + if (member.hasTrait(TimestampFormatTrait.ID)) { return schema; } diff --git a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/analysis/OperationContextParamsChecker.java b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/analysis/OperationContextParamsChecker.java index 599b9b12895..759bab74689 100644 --- a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/analysis/OperationContextParamsChecker.java +++ b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/analysis/OperationContextParamsChecker.java @@ -267,7 +267,7 @@ private int computeLength(Shape shape) { // Create a random string that does not exceed or go under the length trait. int chars = 2; - if (shape.hasTrait(LengthTrait.class)) { + if (shape.hasTrait(LengthTrait.ID)) { LengthTrait trait = shape.expectTrait(LengthTrait.class); if (trait.getMin().isPresent()) { chars = Math.max(chars, trait.getMin().get().intValue()); @@ -284,7 +284,7 @@ private double computeRange(Shape shape) { // Create a random string that does not exceed or go under the range trait. double i = 8; - if (shape.hasTrait(RangeTrait.class)) { + if (shape.hasTrait(RangeTrait.ID)) { RangeTrait trait = shape.expectTrait(RangeTrait.class); if (trait.getMin().isPresent()) { i = Math.max(i, trait.getMin().get().doubleValue()); diff --git a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetParameterValidator.java b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetParameterValidator.java index a7f530df675..9592cdcc01b 100644 --- a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetParameterValidator.java +++ b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetParameterValidator.java @@ -66,7 +66,7 @@ public List validate(Model model) { errorsParamsPair.getRight())); // Check that tests declare required parameters, only defined parameters, etc. - if (serviceShape.hasTrait(EndpointTestsTrait.class)) { + if (serviceShape.hasTrait(EndpointTestsTrait.ID)) { errors.addAll(validateTestsParameters(model, topDownIndex, serviceShape, @@ -86,7 +86,7 @@ private Pair, Map> validateAndExtractPa List errors = new ArrayList<>(); Map endpointParams = new HashMap<>(); - if (serviceShape.hasTrait(ClientContextParamsTrait.class)) { + if (serviceShape.hasTrait(ClientContextParamsTrait.ID)) { ClientContextParamsTrait trait = serviceShape.expectTrait(ClientContextParamsTrait.class); for (Map.Entry entry : trait.getParameters().entrySet()) { endpointParams.put(entry.getKey(), @@ -144,7 +144,7 @@ private Pair, Map> validateAndExtractPa StructureShape input = model.expectShape(operationShape.getInputShape(), StructureShape.class); for (MemberShape memberShape : input.members()) { - if (memberShape.hasTrait(ContextParamTrait.class)) { + if (memberShape.hasTrait(ContextParamTrait.ID)) { ContextParamTrait trait = memberShape.expectTrait(ContextParamTrait.class); String name = trait.getName(); Shape targetType = model.expectShape(memberShape.getTarget()); @@ -329,7 +329,7 @@ private Map> extractTestSuiteParameters( for (String name : inputShape.getMemberNames()) { MemberShape memberShape = inputShape.getMember(name).get(); if (input.getOperationParams().containsMember(name) - && memberShape.hasTrait(ContextParamTrait.class)) { + && memberShape.hasTrait(ContextParamTrait.ID)) { String paramName = memberShape.expectTrait(ContextParamTrait.class).getName(); testParams.add(buildParameter(paramName, input.getOperationParams().expectMember(name))); diff --git a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetTestCaseValidator.java b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetTestCaseValidator.java index 7d6df4a8428..bfccecaf19c 100644 --- a/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetTestCaseValidator.java +++ b/smithy-rules-engine/src/main/java/software/amazon/smithy/rulesengine/validators/RuleSetTestCaseValidator.java @@ -24,7 +24,7 @@ public class RuleSetTestCaseValidator extends AbstractValidator { public List validate(Model model) { List events = new ArrayList<>(); for (ServiceShape serviceShape : model.getServiceShapesWithTrait(EndpointRuleSetTrait.class)) { - if (serviceShape.hasTrait(EndpointTestsTrait.class)) { + if (serviceShape.hasTrait(EndpointTestsTrait.ID)) { EndpointRuleSet ruleSet = serviceShape.expectTrait(EndpointRuleSetTrait.class).getEndpointRuleSet(); EndpointTestsTrait testsTrait = serviceShape.expectTrait(EndpointTestsTrait.class); diff --git a/smithy-rules-engine/src/test/java/software/amazon/smithy/rulesengine/traits/CleanEndpointTestOperationInputTest.java b/smithy-rules-engine/src/test/java/software/amazon/smithy/rulesengine/traits/CleanEndpointTestOperationInputTest.java index 7c05f6e1725..07e57251d2f 100644 --- a/smithy-rules-engine/src/test/java/software/amazon/smithy/rulesengine/traits/CleanEndpointTestOperationInputTest.java +++ b/smithy-rules-engine/src/test/java/software/amazon/smithy/rulesengine/traits/CleanEndpointTestOperationInputTest.java @@ -40,9 +40,9 @@ public void retainsTestsIfOperationRemains() { assertTrue(transformed.getShape(SERVICE_ID).isPresent()); ServiceShape mainService = model.expectShape(SERVICE_ID, ServiceShape.class); - assertTrue(mainService.hasTrait(EndpointTestsTrait.class)); + assertTrue(mainService.hasTrait(EndpointTestsTrait.ID)); ServiceShape transformedService = transformed.expectShape(SERVICE_ID, ServiceShape.class); - assertTrue(transformedService.hasTrait(EndpointTestsTrait.class)); + assertTrue(transformedService.hasTrait(EndpointTestsTrait.ID)); Node.assertEquals(transformedService.expectTrait(EndpointTestsTrait.class).toNode(), mainService.expectTrait(EndpointTestsTrait.class).toNode()); @@ -56,7 +56,7 @@ public void removesTestsIfOperationRemoved() { assertTrue(transformed.getShape(SERVICE_ID).isPresent()); ServiceShape transformedService = transformed.expectShape(SERVICE_ID, ServiceShape.class); - assertTrue(transformedService.hasTrait(EndpointTestsTrait.class)); + assertTrue(transformedService.hasTrait(EndpointTestsTrait.ID)); EndpointTestsTrait trait = transformedService.expectTrait(EndpointTestsTrait.class); assertEquals(1, trait.getTestCases().size()); @@ -82,7 +82,7 @@ public void retainsTraitIfAllTestsRemoved() { assertTrue(transformed.getShape(SERVICE_ID).isPresent()); ServiceShape transformedService = transformed.expectShape(SERVICE_ID, ServiceShape.class); - assertTrue(transformedService.hasTrait(EndpointTestsTrait.class)); + assertTrue(transformedService.hasTrait(EndpointTestsTrait.ID)); EndpointTestsTrait trait = transformedService.expectTrait(EndpointTestsTrait.class); assertEquals(0, trait.getTestCases().size()); diff --git a/smithy-smoke-test-traits/src/main/java/software/amazon/smithy/smoketests/traits/UniqueSmokeTestCaseIdValidator.java b/smithy-smoke-test-traits/src/main/java/software/amazon/smithy/smoketests/traits/UniqueSmokeTestCaseIdValidator.java index d2f102cb47c..6023229c8ef 100644 --- a/smithy-smoke-test-traits/src/main/java/software/amazon/smithy/smoketests/traits/UniqueSmokeTestCaseIdValidator.java +++ b/smithy-smoke-test-traits/src/main/java/software/amazon/smithy/smoketests/traits/UniqueSmokeTestCaseIdValidator.java @@ -55,7 +55,7 @@ public List validate(Model model) { private void addValidationEventsForShapes(Set shapes, List events) { Map> testCaseIdsToOperations = new HashMap<>(); for (Shape shape : shapes) { - if (!shape.isOperationShape() || !shape.hasTrait(SmokeTestsTrait.class)) { + if (!shape.isOperationShape() || !shape.hasTrait(SmokeTestsTrait.ID)) { continue; } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenSymbolProvider.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenSymbolProvider.java index ec990bc94a8..8d9cd6309b7 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenSymbolProvider.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenSymbolProvider.java @@ -130,7 +130,7 @@ public Symbol bigDecimalShape(BigDecimalShape shape) { @Override public Symbol listShape(ListShape shape) { - if (shape.hasTrait(UniqueItemsTrait.class)) { + if (shape.hasTrait(UniqueItemsTrait.ID)) { return TraitCodegenUtils.fromClass(Set.class) .toBuilder() .addReference(toSymbol(shape.getMember())) diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenUtils.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenUtils.java index 353ec50ddd4..16a3f575e34 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenUtils.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/TraitCodegenUtils.java @@ -112,7 +112,7 @@ public static boolean isJavaString(Symbol symbol) { */ public static boolean isJavaStringList(Shape shape, SymbolProvider symbolProvider) { return shape.isListShape() - && !shape.hasTrait(UniqueItemsTrait.class) + && !shape.hasTrait(UniqueItemsTrait.ID) && TraitCodegenUtils.isJavaString(symbolProvider.toSymbol( shape.asListShape().get().getMember())); } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/BuilderGenerator.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/BuilderGenerator.java index 3a63f94e9fc..c6ea8d84b2d 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/BuilderGenerator.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/BuilderGenerator.java @@ -102,7 +102,7 @@ private void writeBuilderClass() { } private void writeBuilderInterface() { - if (baseShape.hasTrait(TraitDefinition.class)) { + if (baseShape.hasTrait(TraitDefinition.ID)) { if (TraitCodegenUtils.isJavaStringList(baseShape, symbolProvider)) { writer.write("extends $T.Builder<$T, Builder> {", StringListTrait.class, symbol); } else { @@ -131,7 +131,7 @@ private void writeToBuilderMethod() { () -> { writer.writeInlineWithNoFormatting("return builder()"); writer.indent(); - if (baseShape.hasTrait(TraitDefinition.class)) { + if (baseShape.hasTrait(TraitDefinition.ID)) { writer.writeInlineWithNoFormatting(".sourceLocation(getSourceLocation())"); } if (baseShape.members().isEmpty()) { @@ -503,7 +503,7 @@ public Void memberShape(MemberShape memberShape) { @Override public Void timestampShape(TimestampShape timestampShape) { - if (member.hasTrait(TimestampFormatTrait.class)) { + if (member.hasTrait(TimestampFormatTrait.ID)) { switch (member.expectTrait(TimestampFormatTrait.class).getFormat()) { case EPOCH_SECONDS: writer.writeInline( diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ConstructorGenerator.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ConstructorGenerator.java index 4d77213890f..f2e4d645773 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ConstructorGenerator.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ConstructorGenerator.java @@ -67,7 +67,7 @@ public void run() { @Override public Void listShape(ListShape shape) { - if (!shape.hasTrait(UniqueItemsTrait.class) + if (!shape.hasTrait(UniqueItemsTrait.ID) && TraitCodegenUtils.isJavaString(symbolProvider.toSymbol(shape.getMember()))) { writer.openBlock("public $1T($1B values, $2T sourceLocation) {", "}", @@ -170,7 +170,7 @@ protected Void numberShape(NumberShape shape) { private void writeConstructorWithBuilder() { writer.openBlock("private $T(Builder builder) {", "}", symbol, () -> { // If the shape is a trait include the source location. Nested shapes don't have a separate source location. - if (shape.hasTrait(TraitDefinition.class)) { + if (shape.hasTrait(TraitDefinition.ID)) { writer.writeWithNoFormatting("super(ID, builder.getSourceLocation());"); } shape.accept(new InitializerVisitor()); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeGenerator.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeGenerator.java index 8c714c7650c..21a647cebea 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeGenerator.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeGenerator.java @@ -197,7 +197,7 @@ private void writeTimestampDeser() { // If the trait has the timestamp format trait then we only need a single // way to deserialize the input node. Without the timestamp format trait // timestamp should be able to handle both epoch seconds and date time formats. - if (shape.hasTrait(TimestampFormatTrait.class)) { + if (shape.hasTrait(TimestampFormatTrait.ID)) { writer.write("return new $T($C, node.getSourceLocation());", symbol, (Runnable) () -> shape.accept(new FromNodeMapperVisitor(writer, model, "node"))); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeMapperVisitor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeMapperVisitor.java index 2bc1ea886c4..09f28fb80f1 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeMapperVisitor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/FromNodeMapperVisitor.java @@ -134,7 +134,7 @@ public Void bigDecimalShape(BigDecimalShape shape) { @Override public Void stringShape(StringShape shape) { - if (shape.hasTrait(IdRefTrait.class)) { + if (shape.hasTrait(IdRefTrait.ID)) { writer.write("$T.fromNode($L)", ShapeId.class, varName); } else { writer.write("$L.expectStringNode().getValue()", varName); @@ -150,7 +150,7 @@ public Void structureShape(StructureShape shape) { @Override public Void timestampShape(TimestampShape shape) { - if (shape.hasTrait(TimestampFormatTrait.class)) { + if (shape.hasTrait(TimestampFormatTrait.ID)) { switch (shape.expectTrait(TimestampFormatTrait.class).getFormat()) { case EPOCH_SECONDS: writer.writeInline("$2T.ofEpochSecond($1L.expectNumberNode().getValue().longValue())", @@ -184,7 +184,7 @@ public Void blobShape(BlobShape shape) { @Override public Void memberShape(MemberShape shape) { - if (shape.hasTrait(IdRefTrait.class)) { + if (shape.hasTrait(IdRefTrait.ID)) { writer.write("$T.fromNode($L)", ShapeId.class, varName); } else { model.expectShape(shape.getTarget()).accept(this); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ShapeGenerator.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ShapeGenerator.java index 51df563332d..c815f4166d5 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ShapeGenerator.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ShapeGenerator.java @@ -26,7 +26,7 @@ public final class ShapeGenerator implements Consumer { @Override public void accept(GenerateTraitDirective directive) { - if (directive.shape().hasTrait(TraitDefinition.class)) { + if (directive.shape().hasTrait(TraitDefinition.ID)) { new TraitGenerator().accept(directive); } else { directive.shape().accept(new NestedShapeGenerator(directive)); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ToNodeGenerator.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ToNodeGenerator.java index baf064fa594..e4425ad7df2 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ToNodeGenerator.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/generators/ToNodeGenerator.java @@ -59,7 +59,7 @@ final class ToNodeGenerator implements Runnable { @Override public void run() { writer.override(); - writer.openBlock(shape.hasTrait(TraitDefinition.class) ? "protected $T createNode() {" : "public $T toNode() {", + writer.openBlock(shape.hasTrait(TraitDefinition.ID) ? "protected $T createNode() {" : "public $T toNode() {", "}", Node.class, () -> shape.accept(new CreateNodeBodyGenerator())); @@ -125,7 +125,7 @@ public Void stringShape(StringShape shape) { @Override public Void enumShape(EnumShape shape) { - if (shape.hasTrait(TraitDefinition.class)) { + if (shape.hasTrait(TraitDefinition.ID)) { writer.write("return $T.from(value);", Node.class); } else { toStringCreator(); @@ -136,7 +136,7 @@ public Void enumShape(EnumShape shape) { @Override public Void structureShape(StructureShape shape) { writer.write("return $T.objectNodeBuilder()", Node.class).indent(); - if (shape.hasTrait(TraitDefinition.class)) { + if (shape.hasTrait(TraitDefinition.ID)) { // If the shape is a trait we need to add the source location of trait to the // generated node. writer.writeInline(".sourceLocation(getSourceLocation())"); @@ -166,7 +166,7 @@ protected Void numberShape(NumberShape shape) { @Override public Void timestampShape(TimestampShape shape) { - if (shape.hasTrait(TimestampFormatTrait.class)) { + if (shape.hasTrait(TimestampFormatTrait.ID)) { switch (shape.expectTrait(TimestampFormatTrait.class).getFormat()) { case EPOCH_SECONDS: writer.write("return new $T(value.getEpochSecond(), getSourceLocation());", @@ -210,7 +210,7 @@ private final class ToNodeMapperVisitor extends TraitVisitor { @Override public Void stringShape(StringShape shape) { - if (shape.hasTrait(IdRefTrait.class)) { + if (shape.hasTrait(IdRefTrait.ID)) { toStringMapper(); } else { fromNodeMapper(); @@ -256,7 +256,7 @@ public Void mapShape(MapShape shape) { @Override public Void memberShape(MemberShape shape) { - if (shape.hasTrait(IdRefTrait.class)) { + if (shape.hasTrait(IdRefTrait.ID)) { toStringMapper(); } else { model.expectShape(shape.getTarget()).accept(this); @@ -296,7 +296,7 @@ public Void structureShape(StructureShape shape) { @Override public Void timestampShape(TimestampShape shape) { - if (shape.hasTrait(TimestampFormatTrait.class)) { + if (shape.hasTrait(TimestampFormatTrait.ID)) { switch (shape.expectTrait(TimestampFormatTrait.class).getFormat()) { case EPOCH_SECONDS: writer.write("$T.from($L.getEpochSecond())", Node.class, varName); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/DeprecatedAnnotationInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/DeprecatedAnnotationInterceptor.java index d5d5edefedd..ec79c2cee15 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/DeprecatedAnnotationInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/DeprecatedAnnotationInterceptor.java @@ -25,11 +25,11 @@ public Class sectionType() { @Override public boolean isIntercepted(CodeSection section) { if (section instanceof ClassSection) { - return ((ClassSection) section).shape().hasTrait(DeprecatedTrait.class); + return ((ClassSection) section).shape().hasTrait(DeprecatedTrait.ID); } else if (section instanceof GetterSection) { - return ((GetterSection) section).shape().hasTrait(DeprecatedTrait.class); + return ((GetterSection) section).shape().hasTrait(DeprecatedTrait.ID); } else if (section instanceof EnumVariantSection) { - return ((EnumVariantSection) section).memberShape().hasTrait(DeprecatedTrait.class); + return ((EnumVariantSection) section).memberShape().hasTrait(DeprecatedTrait.ID); } return false; } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/UnstableAnnotationInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/UnstableAnnotationInterceptor.java index 905302fc4ba..8317594ca28 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/UnstableAnnotationInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/annotations/UnstableAnnotationInterceptor.java @@ -26,11 +26,11 @@ public Class sectionType() { @Override public boolean isIntercepted(CodeSection section) { if (section instanceof ClassSection) { - return ((ClassSection) section).shape().hasTrait(UnstableTrait.class); + return ((ClassSection) section).shape().hasTrait(UnstableTrait.ID); } else if (section instanceof GetterSection) { - return ((GetterSection) section).shape().hasTrait(UnstableTrait.class); + return ((GetterSection) section).shape().hasTrait(UnstableTrait.ID); } else if (section instanceof EnumVariantSection) { - return ((EnumVariantSection) section).memberShape().hasTrait(UnstableTrait.class); + return ((EnumVariantSection) section).memberShape().hasTrait(UnstableTrait.ID); } return false; } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/core/CoreIntegration.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/core/CoreIntegration.java index d5e3e535c5a..b20e1dd04cf 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/core/CoreIntegration.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/core/CoreIntegration.java @@ -57,7 +57,7 @@ public SymbolProvider decorateSymbolProvider( return new SymbolProvider() { @Override public Symbol toSymbol(Shape shape) { - if (shape.hasTrait(TraitDefinition.class)) { + if (shape.hasTrait(TraitDefinition.ID)) { return getTraitSymbol(settings, shape, symbolProvider.toSymbol(shape)); } return symbolProvider.toSymbol(shape); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/idref/IdRefDecoratorIntegration.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/idref/IdRefDecoratorIntegration.java index 89e44b37b94..5d0b6b6083b 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/idref/IdRefDecoratorIntegration.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/idref/IdRefDecoratorIntegration.java @@ -62,7 +62,7 @@ public String toMemberName(MemberShape shape) { } private Symbol provideSymbol(Shape shape, SymbolProvider symbolProvider, Model model) { - if (shape.hasTrait(IdRefTrait.class)) { + if (shape.hasTrait(IdRefTrait.ID)) { return SHAPE_ID_SYMBOL; } else if (shape.isMemberShape()) { Shape target = model.expectShape(shape.asMemberShape().orElseThrow(RuntimeException::new).getTarget()); diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DeprecatedInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DeprecatedInterceptor.java index 9633df48ddc..9886707b43d 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DeprecatedInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DeprecatedInterceptor.java @@ -36,6 +36,6 @@ public Class sectionType() { @Override public boolean isIntercepted(JavaDocSection section) { - return section.shape().hasTrait(DeprecatedTrait.class); + return section.shape().hasTrait(DeprecatedTrait.ID); } } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DocumentationTraitInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DocumentationTraitInterceptor.java index ba959ac9842..c92c155afc2 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DocumentationTraitInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/DocumentationTraitInterceptor.java @@ -34,6 +34,6 @@ public Class sectionType() { @Override public boolean isIntercepted(JavaDocSection section) { - return section.shape().hasTrait(DocumentationTrait.class); + return section.shape().hasTrait(DocumentationTrait.ID); } } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/ExternalDocumentationInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/ExternalDocumentationInterceptor.java index 51963e48bca..2263b81bf80 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/ExternalDocumentationInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/ExternalDocumentationInterceptor.java @@ -34,6 +34,6 @@ public Class sectionType() { @Override public boolean isIntercepted(JavaDocSection section) { - return section.shape().hasTrait(ExternalDocumentationTrait.class); + return section.shape().hasTrait(ExternalDocumentationTrait.ID); } } diff --git a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/SinceInterceptor.java b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/SinceInterceptor.java index 22c679ced1e..7891fdb5d4e 100644 --- a/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/SinceInterceptor.java +++ b/smithy-trait-codegen/src/main/java/software/amazon/smithy/traitcodegen/integrations/javadoc/SinceInterceptor.java @@ -30,6 +30,6 @@ public Class sectionType() { @Override public boolean isIntercepted(JavaDocSection section) { - return section.shape().hasTrait(SinceTrait.class); + return section.shape().hasTrait(SinceTrait.ID); } } diff --git a/smithy-waiters/src/main/java/software/amazon/smithy/waiters/ModelRuntimeTypeGenerator.java b/smithy-waiters/src/main/java/software/amazon/smithy/waiters/ModelRuntimeTypeGenerator.java index 6587ee19894..e350fc535be 100644 --- a/smithy-waiters/src/main/java/software/amazon/smithy/waiters/ModelRuntimeTypeGenerator.java +++ b/smithy-waiters/src/main/java/software/amazon/smithy/waiters/ModelRuntimeTypeGenerator.java @@ -217,7 +217,7 @@ private int computeLength(Shape shape) { // Create a random string that does not exceed or go under the length trait. int chars = 2; - if (shape.hasTrait(LengthTrait.class)) { + if (shape.hasTrait(LengthTrait.ID)) { LengthTrait trait = shape.expectTrait(LengthTrait.class); if (trait.getMin().isPresent()) { chars = Math.max(chars, trait.getMin().get().intValue()); @@ -234,7 +234,7 @@ private double computeRange(Shape shape) { // Create a random string that does not exceed or go under the range trait. double i = 8; - if (shape.hasTrait(RangeTrait.class)) { + if (shape.hasTrait(RangeTrait.ID)) { RangeTrait trait = shape.expectTrait(RangeTrait.class); if (trait.getMin().isPresent()) { i = Math.max(i, trait.getMin().get().doubleValue()); diff --git a/smithy-waiters/src/main/java/software/amazon/smithy/waiters/WaitableTraitValidator.java b/smithy-waiters/src/main/java/software/amazon/smithy/waiters/WaitableTraitValidator.java index 8b8167c6a3e..2cab003de53 100644 --- a/smithy-waiters/src/main/java/software/amazon/smithy/waiters/WaitableTraitValidator.java +++ b/smithy-waiters/src/main/java/software/amazon/smithy/waiters/WaitableTraitValidator.java @@ -19,7 +19,7 @@ public final class WaitableTraitValidator extends AbstractValidator { @Override public List validate(Model model) { return model.shapes(OperationShape.class) - .filter(operation -> operation.hasTrait(WaitableTrait.class)) + .filter(operation -> operation.hasTrait(WaitableTrait.ID)) .flatMap(operation -> validateOperation(model, operation).stream()) .collect(Collectors.toList()); }