boolean (DifferentiateContext context, Iterable<Node<?, ?>> nodesBefore, Iterable<Node<?, ?>> nodesAfter) { Utils future = new Utils(context.getGraph(), context.getDelta()); Utils present = new Utils(context.getGraph(), null); Difference.Specifier<JvmClass, JvmClass.Diff> classesDiff = Difference.deepDiff( Graph.getNodesOfType(nodesBefore, JvmClass.class), Graph.getNodesOfType(nodesAfter, JvmClass.class) ); if (!Iterators.isEmpty(classesDiff.removed())) { debug("Processing removed classes:"); for (JvmClass removed : classesDiff.removed()) { debug("Adding usages of class ", removed.getName()); context.affectUsage(new ClassUsage(removed.getReferenceID())); } debug("End of removed classes processing."); } if (!processAddedClasses(context, classesDiff, future, present)) { return false; } Iterable<Difference.Change<JvmClass, JvmClass.Diff>> changed = classesDiff.changed(); if (!Iterators.isEmpty(changed)) { debug("Processing changed classes:"); try { for (Difference.Change<JvmClass, JvmClass.Diff> change : changed) { if (!processChangedClass(context, change, future, present)) { return false; } } } finally { debug("End of changed classes processing"); } } Difference.Specifier<JvmModule, JvmModule.Diff> modulesDiff = Difference.deepDiff( Graph.getNodesOfType(nodesBefore, JvmModule.class), Graph.getNodesOfType(nodesAfter, JvmModule.class) ); if (!processModules(context, modulesDiff, future, present)) { return false; } return true; }