Как найти все вызовы метода?
От: md55  
Дата: 09.03.07 12:39
Оценка:
Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine().
Подскажите пример кода пожалуйста =)
Re: Как найти все вызовы метода?
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 09.03.07 13:36
Оценка:
Здравствуйте, md55, Вы писали:

M>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine().

M>Подскажите пример кода пожалуйста =)

В каком виде ты будешь задавать метод, вызовы которого надо искать? Это тот, на котором стоит курсор в редакторе или в object browser, или ты его хлчешь задавать программно?
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Re[2]: Как найти все вызовы метода?
От: md55  
Дата: 12.03.07 07:18
Оценка:
Здравствуйте, xvost, Вы писали:

X>Здравствуйте, md55, Вы писали:


M>>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine().

M>>Подскажите пример кода пожалуйста =)

X>В каком виде ты будешь задавать метод, вызовы которого надо искать? Это тот, на котором стоит курсор в редакторе или в object browser, или ты его хлчешь задавать программно?


программно
Re[3]: Как найти все вызовы метода?
От: xvost Германия http://www.jetbrains.com/company/people/Pasynkov_Eugene.html
Дата: 12.03.07 08:48
Оценка:
Здравствуйте, md55, Вы писали:

Ну лови первую прикидку.
На вход подается 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!"
Re[3]: Как найти все вызовы метода?
От: orangy Россия
Дата: 12.03.07 10:29
Оценка:
Здравствуйте, md55, Вы писали:

M>>>Мне нужно получить список имен классов, код которых содержит определенный вызов, например Console.WriteLine().

M>>>Подскажите пример кода пожалуйста =)
В ReSharper 2.5.1 см. DeclaredElementUsageSearchRequest и PowerToy FindText
... << RSDN@Home 1.2.0 alpha rev. 655>>
"Develop with pleasure!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.