public void verifyAttributes(String actualStringRepresentation) {
    if (superAccessor != null) {
      superAccessor.verifyAttributes(actualStringRepresentation);
    }

    for (GraphAttributeAccessor attribute : attributeAccessors) {
      attribute.verify(actualStringRepresentation);
    }
  }
 public List<String> retrievePaths() {
   List<String> paths = new ArrayList<>();
   if (!path.isEmpty()) {
     paths.add(path);
   }
   for (GraphAttributeAccessor attributeAccessor : attributeAccessors) {
     paths.addAll(attributeAccessor.retrievePaths());
   }
   if (superAccessor != null) {
     paths.addAll(superAccessor.retrievePaths());
   }
   return paths;
 }
 private void removeAttributeAccessorsIfNeeded(
     List<String> pathsToRemove, List<String> pathsFound) {
   for (String path : pathsToRemove) {
     List<GraphAttributeAccessor> attributeAccessorsToRemove = new ArrayList<>();
     for (GraphAttributeAccessor attributeAccessor : attributeAccessors) {
       if (path.equals(attributeAccessor.getPath())) {
         attributeAccessorsToRemove.add(attributeAccessor);
         pathsFound.add(path);
       }
     }
     for (GraphAttributeAccessor graphAttributeAccessor : attributeAccessorsToRemove) {
       attributeAccessors.remove(graphAttributeAccessor);
     }
   }
 }
 private List<String> removeFromAttributeAccessorGraphs(List<String> pathsToRemove) {
   for (GraphAttributeAccessor attributeAccessor : attributeAccessors) {
     pathsToRemove = attributeAccessor.remove(pathsToRemove);
   }
   return pathsToRemove;
 }
 private void inspectAttributes(GraphAccessorCreationContext context) {
   attributeAccessors.addAll(
       GraphAttributeAccessor.forAttributes(targetClass, value, path, context));
 }