Я знаю, что на макросы Scala нельзя ссылаться в коде, который компилируется в том же прогоне компиляции, что и сам макрос.
Я также знаю из эмпирического тестирования, что если у кого-то есть кодовая база, которая делает что (обратитесь к макросу в том же проекте), если ссылка на макрос удаляется, код компилируется, ссылка на макрос повторно вставляется, и код компилируется снова, вторая компиляция завершится успешно, и сгенерированный макросом код будет работать правильно. Я предполагаю, что это потому, что компилятор видит файл .class для макроса с первого запуска компиляции и использует его.
Есть ли способ написания кода (с использованием отражения или аналогичного), который определяет, будет ли код сгенерирован макрос существует, а если так его называет? Я думаю о чем-то похожем на Как вызвать метод на объекте-компаньоне с помощью отражения? , но вместо вызова обычного метода, вызова кода, сгенерированного макросом.
Моя цель состоит в том, чтобы код, который выполняет одно, когда компилируется в первый раз, и другое, когда компилируется каждый раз после первого, без каких-либо изменений в исходном коде между двумя запусками компиляции. Я понимаю, что это не очень хорошая практика. Сборки должны быть детерминированными c в большинстве случаев. Меня интересует, возможно ли создать Scala код, подобный этому, в качестве технического любопытства.