2009-03-05 5 views
0

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

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

+0

Можете ли вы пояснить, что вы имеете в виду? Вам нужен класс, представленный текущим исходным файлом? Или представление этого класса? – Uri

+0

У меня есть функция doSomething (класс clazz), которую должен вызвать мой плагин, с классом текущего исходного файла – Sarmun

ответ

2

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

Оттуда:

IResource selectedResource = ResourceUtils.getSelectedResource(); 

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

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

0

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

curIType.getFullyQualifiedName() 

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

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

2

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

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

+0

Так, например, JUNIT не использует какой-либо изящный способ, но вместо этого сложный подход? (поскольку они, безусловно, должны скомпилировать источники и загрузить также) – Sarmun

+0

JUnit запускает новую виртуальную машину и что VM имеет скомпилированные классы в своем пути к классам.Я не уверен, как JUnitMax проводит тестирование в реальном времени, независимо от того, используют ли они динамическую загрузку классов или поддерживают VM в каком-то пуле. – mhaller

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