Здравствуйте, md55, Вы писали:
M>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine(). M>Подскажите пример кода пожалуйста =)
В каком виде ты будешь задавать метод, вызовы которого надо искать? Это тот, на котором стоит курсор в редакторе или в object browser, или ты его хлчешь задавать программно?
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Здравствуйте, xvost, Вы писали:
X>Здравствуйте, md55, Вы писали:
M>>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine(). M>>Подскажите пример кода пожалуйста =)
X>В каком виде ты будешь задавать метод, вызовы которого надо искать? Это тот, на котором стоит курсор в редакторе или в object browser, или ты его хлчешь задавать программно?
Ну лови первую прикидку.
На вход подается solution, CLR-имя класса и имя метода
void PrintUsagesOfMethod(ISolution solution, string className, string methodName)
{
// Находим класс по имени
IDeclarationsCache cache = PsiManager.GetInstance(solution).GetDeclarationsCache(DeclarationsCacheScope.SolutionScope(solution, true), true);
ITypeElement @class = cache.GetTypeElementByCLRName(className);
// Находим в классе все методы с заданным именем
List<IDeclaredElement> methods = new List<IDeclaredElement>();
foreach (IMethod method in @class.Methods)
{
if (method.ShortName == methodName)
methods.Add(method);
}
// Находим все использования методов
List<IReference> usages = new List<IReference>();
PsiManager.GetInstance(solution).Finder.FindReferences(methods,
SearchDomainFactory.Instance.CreateSearchDomain(solution, false),
FindResultConsumers.ConsumeReferences(usages),
NullProgressIndicator.INSTANCE);
// Собираем имена классов,внутри которых есть вызовы метода
Dictionary<string, object> classNames = new Dictionary<string, object>();
foreach (IReference usage in usages)
{
ITypeDeclaration declaration = usage.GetElement().GetContainingElement<ITypeDeclaration>(true);
if (declaration != null)
{
ITypeElement typeElement = declaration.DeclaredElement;
if (typeElement != null)
classNames[typeElement.CLRName] = null;
}
}
// печатаем в консоль найденноеforeach (string s in classNames.Keys)
Console.Out.WriteLine(s);
}
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Здравствуйте, md55, Вы писали:
M>>>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine(). M>>>Подскажите пример кода пожалуйста =)
В ReSharper 2.5.1 см. DeclaredElementUsageSearchRequest и PowerToy FindText