Найти ссылки интерфейса через рабочую область программно - PullRequest
1 голос
/ 27 ноября 2011

Просто интересно, какой инструмент / подход может решить следующую проблему легко / с меньшими усилиями? Необходимо вызвать через скрипт ANT.

В рабочем пространстве eclipse есть пара проектов, скажем, projectA - projectO (число 15). Большинство из них являются проектами Java. Суть в том, что мне нужно собрать некоторые данные, не используя IDE eclipse, а программно.

В проекте A, который является Java-проектом, имеется интерфейс, скажем, InterFaceA, который реализуется в различных других проектах.

Суть в том, что мне нужно перечислить все классы из всех 15 проектов, которые реализовали InterfaceA.

Я сталкивался с несколькими инструментами, такими как расширение Javadoc, Eclipse AST, javaCC, ANTLR, но не нашел готового решения.

Мысль о нижеследующих подходах, но ее трудно реализовать.

  • Найдите все объявленные переменные, поле, уровень метода, т. Е. В файле / классе Java, и выясните их тип, а среди них - класс, реализующий InterfaceA.
  • Может ли что-то вроде eclipse найти ссылки во всем рабочем пространстве для интерфейса A, но через код? Был бы признателен, если бы я получил источник, как затмение делает это так быстро.

Могу ли я запросить прямое решение, возможно, вы используете eclipse AST, чтобы сделать это красиво и интуитивно?

P.S .: Существующий код не поддерживается аккуратно. Таким образом, возможности похожи на то, что interfaceA, возможно, НЕ был объявлен с переменной экземпляра, а просто используется как локальная переменная непосредственно перед ее использованием и так далее. Плюс есть много внутренних классов и т. Д.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 13 октября 2012

Вообще говоря, это проблема анализа / управления зависимостями.

Несколько инструментов / тем уже существует:

0 голосов
/ 28 ноября 2011

Для меня самый простой способ сделать это в оболочке Linux с помощью таких инструментов, как grep и wc .GREP позволит вам найти любые шаблоны, которые вам нравятся (ведь у вас есть исходный код, поэтому копаться в нем не должно быть проблемой), то есть «реализует InterFaceA» или «расширяет SomeClassB».Благодаря WC вы можете посчитать появление паттерна.Объединение этих двух функций даст вам огромные возможности.

Например:

  1. Поиск всех классов, реализующих интерфейс Serializable: grep -iR 'implements Serializable' *
  2. Подсчитать все классы, которыереализовать интерфейс Serializable: grep -iR 'implements Serializable' * | wc -l
  3. Сделайте то же самое, что и # 2, но пропустите все файлы в подкаталогах .svn: grep -iR 'implements Serializable' * | grep -v .svn | wc -l

Теперь, чтобы подключить его к ANT, выможно просто создать задачу ANT, которая будет выполнять команду bash.У вас не должно возникнуть никаких затруднений, чтобы найти множество примеров того, как это сделать.

Если вы не используете Linux, в Windows есть эквивалентные инструменты.Просто поищите в Интернете, и вы найдете что-то похожее на this .

Надеюсь, что поможет.

...