Вкратце описание типов которые нужно реализовать:
TypeInfo — описвает базовый абстрактный тип представляющий описание типа в компиляторе. TypeInfo описывает невоплощенный тип, т.е. тип без параметров типов. Его часто так же называют Type Constructor, от чего в компиляторе он частенько появляется в полях с именем tycon.
У этого класса есть ряд наследников в том числе наследники с префиксом "External": ExternalNemerleTypeInfo, ExternalPrimitiveTypeInfo, ExternalTypeInfo. Названия говорят сами за себя. ExternalTypeInfo — базовый тип описывающий загружаемые из сборок типы. ExternalNemerleTypeInfo — уточнеение предыдущего класса описывающие типы немерла (варианты и т.п.). ExternalPrimitiveTypeInfo — описывает примитивы и прибилднутые типы.
Задача этих типов получать общую информацию о типах:
* Имя типа.
* Пространство имен в котором объявлен тип.
* Полное имя (с пространством имен и внешними классами, если такие есть).
* Список параметров типов.
* Список членов (в отложенном режиме, чтобы на тратить время на разбор сигнатур которые могут никогда не понадобиться в программе, кроме приватных).
* Список вложенных типов.
* Список кастом-атрибутов. Тут все сложнее. Нужно уметь читать значение простых свойств атрибутов (прибилднутых типов). Как понимаешь читать их придется в режиме декомпиляции, так как сборку на исполнение поднимать нельзя (она может быть не того рантайма). CCI позволяет решить эту задачу на ура (я проверял).
* Модификаторы доступа (public/internal).
ExternalNemerleTypeInfo должен разбирать дополнительную информацию запакованную в виде спец.атрибутов. и воссоздавать информацию об определенных во внешних сборках вариантных типах и их вхождениях. Для рабора этой фигни есть тип TyCodec, который так же нужно переименовать, отрефакторить и приспособить к новым условиям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.