/** * Check to ensure the class meets all the conditions necessary to enable change tracking * This could occur either if the class already has change tracking implemented or if the * class is capable of having change tracking woven based on the descriptor. */ protected boolean canChangeTrackingBeEnabled(ClassDescriptor descriptor, MetadataClass clz, boolean globalWeaveChangeTracking) { if (!globalWeaveChangeTracking) { return false; } // If the descriptor was configured to not use change tracking then disable it, also enable if configure explictly. if (descriptor.getObjectChangePolicyInternal() != null) { if (descriptor.getObjectChangePolicyInternal().isDeferredChangeDetectionPolicy()) { return false; } else if (descriptor.getObjectChangePolicyInternal().isObjectChangeTrackingPolicy()) { // Include object and attribute. return true; } } boolean canWeaveChangeTracking = descriptor.supportsChangeTracking(session.getProject()); if (!canWeaveChangeTracking) { log(SessionLog.CONFIG, CANNOT_WEAVE_CHANGETRACKING, new Object[]{descriptor.getJavaClassName()}); } return canWeaveChangeTracking; }