boolean (DifferentiateContext context, JvmNodeReferenceID owner, Proto proto, Utils utils) { if (proto.isPublic()) { debug("Public access, switching to a non-incremental mode"); return false; } if (proto.isProtected()) { debug("Protected access, softening non-incremental decision: adding all relevant subclasses for a recompilation"); debug("Root class: ", owner); for (ReferenceID id : proto instanceof JvmField? utils.collectSubclassesWithoutField(owner, proto.getName()) : utils.allSubclasses(owner)) { affectNodeSources(context, id, "Adding "); } } String packageName = JvmClass.getPackageName(owner.getNodeName()); debug("Softening non-incremental decision: adding all package classes for a recompilation"); debug("Package name: ", packageName); for (ReferenceID nodeWithinPackage : Iterators.filter(context.getGraph().getRegisteredNodes(), id -> id instanceof JvmNodeReferenceID && packageName.equals(JvmClass.getPackageName(((JvmNodeReferenceID)id).getNodeName())))) { affectNodeSources(context, nodeWithinPackage, "Adding "); } return true; }