Плагин Eclipse - Объект класса - PullRequest
0 голосов
/ 05 марта 2009

Я создаю плагин eclipse, и мне нужен объект Class выбранного файла, а не IType. Возможно ли это, и как лучше всего это сделать?

Редактировать: когда я думаю об этом, лучший способ - добавить его как run as (как делают junit, profiler или другие плагины). Я предполагаю, что у них должен быть доступ к классу (если X - рассматриваемый класс), потому что они выполняют его функции. Так как же создать плагин с действием «запустить как» и получить живой объект?

Ответы [ 3 ]

2 голосов
/ 08 марта 2009

Eclipse использует абстрактное представление выбранного объекта, будь то файл (IResource) или тип Java (IJavaType). Поскольку исходный файл не требуется компилировать (например, отключить автоматическую сборку), необязательно должен быть файл .class или объект Class для редактируемого кода. Следовательно, нет правильного способа получить объект «Class» из выбора в пользовательском интерфейсе.

Однако, как упоминалось вчера, вы можете полагаться на тот факт, что механизм компоновщика Eclipse всегда будет компилировать исходные файлы немедленно и, таким образом, файл .class существует. Чтобы получить доступ к этому файлу .class во время выполнения, вам необходимо создать динамический загрузчик классов для проекта или запустить виртуальную машину времени выполнения. Я попробовал это, и это работает, но это очень нестабильный подход и может привести к различным трудно прослеживаемым сбоям.

2 голосов
/ 05 марта 2009

В плагине eclipse вы, например, получите выбранный файл через IAction .
(Он представляет сторону команды, не относящуюся к пользовательскому интерфейсу, которая может быть запущена конечным пользователем. Действия обычно связаны с кнопками, элементами меню и элементами на панелях инструментов.)

Оттуда:

IResource selectedResource = ResourceUtils.getSelectedResource();

IResource Аналог рабочей области файлов и каталогов файловой системы. Существует ровно четыре типа ресурса: файлы, папки, проекты и корневой каталог рабочей области.

От его типа вы можете разыграть его в IFile , который дает вам доступ к его полному пути (getFullPath())

0 голосов
/ 06 марта 2009

Имя класса IType "curIType" можно получить через

curIType.getFullyQualifiedName()

Это простая часть. Но тогда у вас возникает проблема, что этот класс не обязательно должен быть в загрузчике классов вашего плагина (если это класс одного из пользовательских проектов, он редко является частью вашего загрузчика классов). Поэтому вызов Class.forName (classname) не принесет пользы.

У меня был похожий случай, и я (в первой попытке) решил его, создав собственный поток с собственным загрузчиком классов, который включал в себя все библиотеки текущего загрузчика классов и все библиотеки проекта типа. Это не короткий и не простой код, и я уже реорганизовал его. Намного проще получить всю информацию из IType и не использовать классы где-либо в коде плагина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...