Кстати, похоже, Рори исправил некоторые ошибки в плагине "Refactor_Resolver" и теперь работает. Что касается ваших вопросов, вот быстрый ответ:
RE # 1:
CodeRush имеет встроенный кэш для всех типов, ссылок на проекты и т. Д., Который создается во время анализа решения. Но на данный момент он используется внутри и не доступен для разработчиков плагинов, извините. Однако вот несколько полезных API для начала работы:
// Using the source code cache...
// gets the active Solution object
SolutionElement activeSolution = CodeRush.Source.ActiveSolution;
if (activeSolution == null)
return;
// iterate thought all projects in the solution
foreach (ProjectElement project in activeSolution.AllProjects)
{
string assemblyName = project.AssemblyName;
// iterate inside source code symbols cache...
Hashtable projectSymbols = activeProject.ProjectSymbols;
foreach (object item in projectSymbols.Values)
{
ITypeElement typeElement = item as ITypeElement;
if (typeElement == null)
continue;
// TODO: ...
}
}
Чтобы получить кэш ссылок на сборки, используйте ScopeManager (находится в DevExpress.DXCore.MetaData.dll), например,
IEnumerable<IMetaDataScope> allMetaDataScopes = ScopeManager.All;
foreach (IMetaDataScope scope in allMetaDataScopes)
{
IAssemblyInfo assembly = scope.Assembly;
if (assembly != null)
{
ITypeInfo[] types = assembly.GetTypes();
for (int i = 0; i < types.Length; i++)
{
ITypeInfo typeInfo = types[i];
if (typeInfo == null)
continue;
// TODO: ...
}
}
}
RE # 2: чтобы добавить CodeProvider во всплывающее окно, установите его свойство «CodeIssueMessage» для имени проблемы с кодом, которую нужно исправить, например,
myCodeProvider.CodeIssueMessage = "Необъявленный элемент";
Дайте мне знать, если вам понадобится дополнительная помощь.