2015-11-05 4 views
0

Я разрабатываю приложение RCP, которое использует Groovy в качестве языка сценариев. Я включил плагин Groovy-Eclipse, чтобы пользователь приложения мог писать код Groovy в приложении с помощью редактора Groovy.Использование редактора Groovy из плагина Groovy-Eclipse в приложении RCP

Скрипты Groovy должны использовать некоторые Java-классы из приложения, как я могу добавить видимость к этим классам в редакторе Groovy, чтобы предоставить пользователю такие функции, как завершение кода, насколько это возможно.

Чтобы выполнить скрипты Groovy, я использую GroovyShell, и я добавляю свойство связыванию, которое передается конструктору GroovyShell.

Это свойство является карта, где я ставлю некоторые объекты, имеющие отношение к моему заявлению:

HashMap<String, Object> plx = new HashMap<String, Object>(); 
plx.put("element", new Element("xxx")); 
Binding binding = new Binding(); 
binding.setProperty("plx", plx); 

Представьте себе, что элемент является классом Java определяется таким образом

class Element 
{ 
    String name; 
    public Element(String name) 
    { 
    this.name = name; 
    } 
    public String getName() 
    { 
    return name; 
    } 
} 

я могу написать и выполнить следующее Groovy скрипт без проблем

println plx.element.name 

и я получаю правильный результат: xxx

Проблемы, которые возникают у меня, это то, что я не знаю, как изменить путь к классу, который использует редактор, чтобы разрешить класс Element для включения завершения кода, когда я редактирую скрипт в своем приложении.

ответ

1

Вы хотите запустить новую виртуальную машину каждый раз, когда выполняете скрипт в своем RCP или хотите запустить свой скрипт Groovy на той же виртуальной машине, где работает RCP. Ваш вопрос слишком общий для меня ... Если последний, убедитесь, что вы добавили свои классы Java в зависимость подключаемых модулей, иначе он не будет разрешен во время выполнения, просто компилируйте время.

Если вы хотите использовать свои классы, не импортируя их явно в скрипт, вы можете легко добавлять импорт. http://www.jroller.com/melix/entry/customizing_groovy_compilation_process

Вы также можете вводить любые службы или экземпляры через привязки в скрипт. Это в основном карта ключевых значений.

Как только ваши классы Java находятся на пути к классам, в вашем скрипте будет доступна поддержка содержимого. Если вам нужна дополнительная настройка в предложениях по поддержке контента, то проверьте эту замечательную должность, чтобы получить более подробную информацию о фактической реализации. http://contraptionsforprogramming.blogspot.de/2009/12/extending-groovy-eclipse-for-use-with.html

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

+0

Спасибо @kittaakos за ваш ответ. Я только что редактировал свой вопрос, чтобы попытаться его прояснить. Моя проблема не во время выполнения, а редактирование времени. –

+1

Все понятно, что делает [groovy inferencing engine] (http://contraptionsforprogramming.blogspot.de/2009/11/how-type-inferencing-for-groovy-in.html). Вы можете создать свою собственную реализацию и подключить ее к своему RCP. И у меня такое ощущение, что вы должны его реализовать вручную. По крайней мере, у меня нет лучшей идеи для этого прямо сейчас. Это не ракетостроение, это просто требует некоторых усилий, чтобы это сделать. Также найдите org.eclipse.jdt.groovy.core.typeLookup пункт расширения. – kittaakos

+0

Большое спасибо, я буду следовать вашим предложениям. –

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