private <T extends PropertyContainer> void deleteFromTrackers( Primitive primitive, List<PropertyTracker<T>> trackers) { if (!trackers.isEmpty()) { Iterable<String> propertyKeys = primitive.getPropertyKeys(this); T proxy = (T) primitive.asProxy(this); for (String key : propertyKeys) { Object value = primitive.getProperty(this, key); for (PropertyTracker<T> tracker : trackers) { tracker.propertyRemoved(proxy, key, value); } } } }