Я пытаюсь написать макрос, который зависит от некоторой информации в конфигурации моего приложения Play. Я хотел бы использовать некоторую конфигурацию для генерации дерева в реализации макроса.
Когда я пытаюсь загрузить эту конфигурацию в макрос, я вижу ошибку, что параметр конфигурации не найден:
Error:(80, 16) exception during macro expansion:
com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'auth-service'
at com.typesafe.config.impl.SimpleConfig.findKeyOrNull(SimpleConfig.java:156)
at com.typesafe.config.impl.SimpleConfig.findOrNull(SimpleConfig.java:174)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:188)
at com.typesafe.config.impl.SimpleConfig.find(SimpleConfig.java:193)
at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:268)
at com.typesafe.config.impl.SimpleConfig.getObject(SimpleConfig.java:41)
at mac.MyMacro$.mImpl(MyMacro.scala:16)
MyMacro.m()
При использовании одного и того же кода загрузки конфигурации в тестовом примере все загружается нормально.
Мой макрос выглядит так:
object MyMacro {
def m(): List[Int] = macro MyMacro.mImpl
def mImpl(c: Context)() = {
import c.universe._
ConfigFactory.load().getObject("auth-service") // this fails
q"""
List(1, 2)
"""
}
}
И тест, который пытается выполнить, выглядит следующим образом this:
"test macro" in {
ConfigFactory.load().getObject("auth-service") // this succeeds
MyMacro.m()
}
Не могли бы вы помочь мне понять, почему конфигурация приложения не загружается или недоступна в макросе? Если невозможно загрузить конфигурацию таким образом, каков общий способ решения такой проблемы, когда макрос зависит от объявленной конфигурации?