Прям в жизни, да.
Писал Gradle таску, которая ищет самый длинный путь от корневого app-модуля до самого дальнего модуля, от которого он зависит по цепочке. Причём хотел не только длину этого критического пути получить, а ещё и модули, которые в этом пути участвуют.
Первая и основная сложность в этой задаче на самом деле не в обходе графа, а в том что в концепциях Gradle не дойдя до пика Балмера - не разобраться. У Project есть множество Configuration, у каждого Configuration есть множество Dependency, Dependency бывает типа ProjectDependency (прям можно кастануть), и у него в свою очередь можно достать Project. Отсюда уже можно уходить в рекурсию или складывать в очередь. Таким образом с двумя циклами получаем проекты от которых зависит текущий. И вот чтобы узнать всё это я задействовал все силы.
Интернет немногословен когда речь идёт про написание грэдл тасок, такое ощущение что этим занимаются два с половиной человека, которые ещё и не делятся своими знаниями. ChatGPT на голубом глазу нёс чепуху раз за разом, и даже мои попытки ему что-то объяснить так и не закончились работающим кодом. Copilot дал мне ещё меньше полезной инфы. Хотя, правды ради, какие-то идеи я у них подсмотрел, без них бы я закопался в документации надолго.
Вторая сложность это сам алгоритм. Вспомнил слово backtracking, написал функцию с таким названием и Copilot написал всю структуру за меня.
Красиво. Работает. Чувствую эмоциональный подъём 📈