Получение всех классов из текущей рабочей области в Eclipse

действительно ли запись является плагином Eclipse, и я пытался создать метод, который возвращает все классы в рабочей области в ArrayList <\Class <\?>> (я добавил "\" для включения универсальных скобок, так как HTML не позволит мне сделать так иначе).

Вот код, который я имею:

private ArrayList<Class<?>> getAllClasses() throws JavaModelException {

 ArrayList<Class<?>> classList = new ArrayList<Class<?>>();

 IWorkspace workspace = ResourcesPlugin.getWorkspace();
 IWorkspaceRoot root = workspace.getRoot();
 IProject[] projects = root.getProjects();

 for (IProject project : projects) {
  IJavaProject javaProject = JavaCore.create(project);
  IPackageFragment[] packages = javaProject.getPackageFragments();

  for (IPackageFragment myPackage : packages) {
   IClassFile[] classes = myPackage.getClassFiles();

   for (IClassFile myClass : classes) {
    classList.add(myClass.getClass());
   }
  }
 }

    return classList;
}

Это, однако, кажется, не работает. У меня был некоторый printlines, и я выяснил, что он также включает несоответствующие классы (т.е. классы от Java\jre6\lib\rt.jar). Какие-либо предложения?

8
задан sparrow 17 July 2010 в 19:49
поделиться

2 ответа

Возможно, вы можете использовать метод IJavaProject.getAllPackageFragmentRoots (), чтобы получить всю исходную папку, а затем получить в ней ICompilationUnits.

0
ответ дан 6 December 2019 в 01:39
поделиться

Я не уверен, что вы хотите сделать:

  • В работающем плагине Eclipse показать все классы, которые работают в JVM с плагином (т.е. классы для других редакторов, представлений, механизмов Eclipse)?
  • В работающем плагине Eclipse показать все классы, создаваемые в открытых проектах Java в рабочей области? (Поскольку вы использовали слово "рабочее пространство", я подозреваю, что это то, что вы ищете.)

Обратите внимание, что в последнем случае вы не сможете получить реальные объекты Java Class<...>, поскольку редактируемые и компилируемые проекты не загружаются для выполнения в ту же JVM, что и ваш плагин. Код вашего плагина будет выполняться вместе с кодом Eclipse IDE и Eclipse JDT; единственный раз, когда классы в открытых проектах будут загружены для выполнения (создавая Class<...> объекты где-то), это когда вы запускаете или отлаживаете один из этих проектов ... в этом случае вы имеете дело с совершенно новой JVM, и вашего плагина больше нет. Имеет ли это смысл?

Если я правильно вас понял, то, вероятно, вы хотите найти "единицы компиляции", а не "файлы классов". "Единицы компиляции" соответствуют .java исходным файлам, а "файлы классов" соответствуют предварительно созданным бинарным файлам классов (часто в JAR). А может быть, вам нужно и то, и другое. Еще лучше, если то, что вам действительно нужно, - это "типы" внутри этих файлов.

Посмотрите руководство по JDT Core для получения довольно хорошей информации, которую удивительно трудно найти. Обратите внимание, что некоторый анализ возможен на уровне модели Java, но более детальный анализ (например, поиск "внутри" определений методов) потребует разбора кусков кода в AST и перехода оттуда. Java Model довольно удобна в использовании, но AST может быть немного пугающей в первый раз.

Также рассмотрите поисковую систему Java (документированную рядом с вышеуказанной) и IType.newTypeHierarchy() для поиска и навигации по типам.

Удачи!

1
ответ дан 6 December 2019 в 01:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: