private boolean affectOnNonIncrementalChange(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, ((JvmField)proto)) : utils.allSubclasses(owner)) {
        affectNodeSources(context, id, "Adding ", utils);
      }
    }

    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 : filter(context.getGraph().getRegisteredNodes(), id -> id instanceof JvmNodeReferenceID && packageName.equals(JvmClass.getPackageName(((JvmNodeReferenceID)id).getNodeName())))) {
      affectNodeSources(context, nodeWithinPackage, "Adding ", utils);
    }
    
    return true;
  }
private boolean affectOnNonIncrementalChange(DifferentiateContext context, JvmNodeReferenceID owner, Proto proto, Utils utils)