private void computeResourceTagLocations(Model model, ResourceShape resource) {
        // Check if tag property is specified on create.
        if (TaggingShapeUtils.isTagPropertyInInput(resource.getCreate(), model, resource)) {
            resourceIsTagOnCreate.add(resource.getId());
        }
        // Check if tag property is specified on update.
        if (TaggingShapeUtils.isTagPropertyInInput(resource.getUpdate(), model, resource)) {
            resourceIsTagOnUpdate.add(resource.getId());
        }

        // Check if tag property is specified on put.
        if (TaggingShapeUtils.isTagPropertyInInput(resource.getPut(), model, 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.ID)) {
                resourceIsTagOnUpdate.add(resource.getId());
            }
        }
    }
Gets the verification result of whether or not the service has a named ListTagsForResource operation that meets
the expected critiera for ListTagsForResource.

@param serviceId the ShapeID of the service shape the ListTagsForResource operation should be bound to.
@return True iff the service shape has a service bound operation named 'ListTagsForResource' that also satisfies
  the criteria for a valid ListTagsForResource operation.
smithy-aws-traits/src/main/java/software/amazon/smithy/aws/traits/tagging/AwsTagIndex.java