2011-11-27 1 views
1

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

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

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

Я должен указать все классы из всех 15 проектов, которые внедрили интерфейс.

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

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

  • Узнайте все объявленные переменные, поле, уровень метода, то есть всюду по файлу/классу java, и узнайте их тип, и среди них узнайте класс, который реализует интерфейс.
  • Что-то вроде eclipse найти ссылки во всей рабочей области для интерфейса A, но через код? Был бы признателен, если я получу источник, как затмение делает это так быстро.

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

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

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

+0

вы хотите разработать инструмент? или просто хотите сделать это один раз? – Bhushan

+0

хотел бы добавить как задачу ANT, которая будет запускаться ежедневно. – Rohit

ответ

-1

Для меня самый простой способ будет сделать это в оболочке Linux с помощью таких инструментов, как Grep и туалет. GREP позволит вам найти любые шаблоны, которые вам нравятся (в конце концов, у вас есть исходный код, так что проскальзывать через него не должно быть никаких проблем), то есть «реализует InterFaceA» или «extends 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 wh ich выполнит команду bash. У вас не должно быть трудностей, чтобы найти множество примеров того, как это сделать.

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

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

+1

Технически говоря, это не будет искать все классы, которые реализуют 'Serializable', так как он не найдет исходные файлы, которые имеют несколько пробелов между' implements' и 'Serializable' (или, что еще хуже, комментарий и/или строка -break между ними), а также исходные файлы, содержащие «реализует список , Serializable', а также классы, которые расширяют классы, которые реализуют« Serializable », а также классы, реализующие интерфейсы, расширяющие« Serializable ». – ruakh

+0

Это правильно. Я хотел дать общее представление о том, как это можно достичь. Само регулярное выражение должно быть хорошо продуманным для обеспечения наиболее точных совпадений. –

+0

Очень плохая идея, сложный источник, такой как Java, C/C++/C# или Ada, не может быть хорошо проанализирован с помощью лексических инструментов, но грамматических инструментов – Aubin

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^