Есть ли хорошая библиотека отражений для Scala?

Я работаю над библиотекой, которая нуждается в отражении, и нуждается в Scala -специфической информации, в отличие от того, что доступно через стандартный API отражения Java. Прямо сейчас я использую недокументированный код в scalap (эквивалент Scala для javap) и пытается связать данные, которые он предоставляет объектам отражения Java, чтобы я мог вызывать методы и такие (scalap просто разбирает файлы классов).

Я нашел это, но там ничего нет... https://github.com/dubochet/scala-reflection

... и я искал Scala SVN repo для его следов и не смог найти его там (но это могло быть я просто пропустил).

Кто-нибудь знает библиотеку отражений Scala, которая предоставляет информацию, аналогичную тому, что предлагает скайпап, а также позволяет вызывать методы, поля доступа и т.д., такие как библиотека отражения Java?

[изменить]

Я предполагаю, что должен объяснить более четко то, что я пытаюсь сделать...

Я хочу написать библиотеку, которая возьмет файл, скажем, текстовый файл с разделителями или рабочий лист в файле Excel, с заголовками вверху и манифестом, и вернуть Seq объектов. Таким образом, в основном функция, которая выглядит так:

def parseFile[T](fileName: String)(implicit manifest: Manifest[T]): Seq[T] = {
  // lots of magic ...
}

В общем случае это, вероятно, невозможно, и я уверен, что существует множество "возможных" случаев, которые чрезвычайно сложны, но я думаю, что есть полезное подмножество, которое может быть реализовано без излишней сложности Я получаю зависание скайпапа (или scala.reflect, два одинаковые, но разные...) и вступают в брак с правильными объектами в API отражения Java. Мой основной план - посмотреть заголовки файла, посмотреть имена параметров и типы публичных конструкторов и применить методы к сопутствующему объекту, выбрать тот, который наилучшим образом соответствует файлу, и проанализировать файл на объекты. Это для чего-то более близкого к сценарию, чем создание приложений. Поэтому я просто хочу создать что-то, что сэкономит мне время.

Таким образом, библиотека, которую я пишу, не имеет ни априорного знания о классах, которые она создает, ни ничего, кроме базовой структуры (разделительный текстовый текст, Excel и т.д.) файла, который он использует. Предпочтительно он должен быть минимально инвазивным.

Я раньше делал что-то подобное на Python, но было инвазивным в том, что мне приходилось использовать дескрипторы, которые указывали нужные типы, или мне нужно было, чтобы дескрипторы принимали строки и делали преобразование в соответствующий тип. Я рисую с Scala информацией о богатом типе, я могу быть менее инвазивным.

Ответ 1

Можно создать манифест, отражательно, во время выполнения.

Введите TypeWrangler здесь, на gitub...

Просто удалите последние два метода этого класса (которые относятся к Spring), и вам хорошо идти!

На днях я воплощу этот код в библиотеку полного отражения, также используя некоторую логику подписи в Scalap. Кажется, спрос существует для чего-то подобного.