Difference between revisions of "Add the ability to write plugins using jruby or groovy."

From Eclipsepedia

Jump to: navigation, search
(Deliverables)
(Status/Timeline)
Line 35: Line 35:
  
  
[[Image:Ok_green.gif]] ''How to attach an action, that is implemented using a scripting language (Groovy or JRuby), to an eclipse button or menu.''  All the extensions will be described just if it would be a normal eclipse plug-in, instead, the implementing class will be specified using using custom syntax line referring to a script location.
+
[[Image:Ok_green.gif]] ''Proxy class''. A proxy solution is implemented for delegating the method calls to the scripting world: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/core/ScriptExtensionProxy.java?revision=68&view=markup org.eclipse.soc.yummy.core.ScriptExtensionProxy]
  
  
Line 41: Line 41:
 
* [[Image:Ok_green.gif]] org.eclipse.ui.actionSets: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/actions/ScriptAction.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/action.groovy?revision=27&view=markup script]  
 
* [[Image:Ok_green.gif]] org.eclipse.ui.actionSets: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/actions/ScriptAction.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/action.groovy?revision=27&view=markup script]  
 
* [[Image:Progress.gif]] org.eclipse.ui.views: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/views/ScriptView.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/view.groovy?view=markup script]
 
* [[Image:Progress.gif]] org.eclipse.ui.views: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/views/ScriptView.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/view.groovy?view=markup script]
* [[Image:Progress.gif]] org.eclipse.ui.perspectives: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-plugin/src/org/eclipse/soc/yummy/facade/perspectives/ScriptPerspective.java?view=markup facade], [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/perspective.groovy?view=log script]
 
  
  
 
[[Image:Ok_green.gif]] ''Referencing to the script item in plugin.xml.''
 
[[Image:Ok_green.gif]] ''Referencing to the script item in plugin.xml.''
  
A reference to a script file is done using a syntax hack that is provided by the org.eclipse.core.runtime.IExecutableExtension interface. Script file name is referenced in the same text value where the class name is specified, delimited with ':' character:
+
A reference to a script file is done using a syntax hack that is provided by the org.eclipse.core.runtime.IExecutableExtension interface. Script file name is referenced in the same text value where the class name is specified:
  
   org.eclipse.soc.yummy.facade.views.ScriptView:view.groovy
+
   org.eclipse.soc.yummy.core.ScriptExtensionProxy:org.eclipse.ui.IWorkbenchWindowActionDelegate/action.groovy
  
 
See the demostration plug-in for more: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/plugin.xml?view=markup plugin.xml]
 
See the demostration plug-in for more: [http://eclipse-incub.svn.sourceforge.net/viewvc/eclipse-incub/scripting_plugins/yummy-script-contributor/plugin.xml?view=markup plugin.xml]
Line 60: Line 59:
 
* <language>-engine.jar, e.g. groovy-engine.jar  
 
* <language>-engine.jar, e.g. groovy-engine.jar  
 
* yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support.
 
* yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support.
* [[Image:Glass.gif]] Licencing issues for 3rd-party libraries.
+
* [[Image:Glass.gif]] Licencing issues for 3rd-party libraries, e.g. groovy-all.jar, groovy-engine.jar
  
  
 
[[Image:Glass.gif]] ''Executing the new script plug-in in the same workbench''.  
 
[[Image:Glass.gif]] ''Executing the new script plug-in in the same workbench''.  
 
+
* Create a a bundle programmaticaly and register it via Equinox?
Options:
+
* [http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html Plug-In Architecture Notes]. When starting the "scriptable" plug-in, the extensions defined in ''plugin.xml'' should be processed by a custom handler, that will override the standardized extension processing.
+
* Create a a bundle programmaticaly and register it via Equinox.
+
  
 
== Deliverables ==
 
== Deliverables ==

Revision as of 16:16, 18 July 2007

This project is part of Google Summer of Code 2007, project link is here.

Student: Anton Arhipov

Blog: http://arhipov.blogspot.com

test

SVN repo at SF.net: at eclipse-incub

Contents

About

Scripting language like Groovy (or JRuby) is an ideal choice for Java developer to do quick prototyping. The biggest benefit of Eclipse support for Groovy plug-in development is that while changing the plug-in on-the-fly there's no need to start a separate Eclipse instance or restart the IDE when something was changed in the code. This would rapidly improve the speed of lightweight plug-in development.

This project aims to add ability to write plugins in JVM-based scripting language, like Groovy and JRuby. But it could be a starting point for any other JVM scripting language, like BeanShell or Jython.

Legend

Glass.gif Needs some investigation
Progress.gif Patch in progress
Ok green.gif Bug fixed / Feature added


Repository

SVN repo at SF.net at eclipse-incub contains two plug-ins:

  • yummy-plugin - this is the plug-in that should provide the ability to write the new plug-ins in a scripting language, e.g. Groovy.
  • yummy-script-contributor - a demonstration plug-in that contributes the components written in a scripting language.

I will also provide a set of unit tests as a separate plug-in and feature/site projects for the installation.

Status/Timeline

Ok green.gif Implementation of runtime engine to run the scripts. javax.scripting API is in use for this purpose: org.eclipse.soc.yummy.core.ScriptExecutor does the job.


Ok green.gif Proxy class. A proxy solution is implemented for delegating the method calls to the scripting world: org.eclipse.soc.yummy.core.ScriptExtensionProxy


Progress.gif Implementing a set of facades to the scripting objects that should implement extensions.


Ok green.gif Referencing to the script item in plugin.xml.

A reference to a script file is done using a syntax hack that is provided by the org.eclipse.core.runtime.IExecutableExtension interface. Script file name is referenced in the same text value where the class name is specified:

 org.eclipse.soc.yummy.core.ScriptExtensionProxy:org.eclipse.ui.IWorkbenchWindowActionDelegate/action.groovy

See the demostration plug-in for more: plugin.xml


Progress.gifGlass.gif Exposing the workbench to the script. This should be very much like in Eclipse Monkey. For smooth scripting there should be a set of predefined variables that a script contributor could use out of the box: e.g a reference to workbench, windows, views, etc.


Ok green.gif The dependencies for any specific language PDE implementation are:

  • <language>.jar, e.g. groovy-all.jar
  • <language>-engine.jar, e.g. groovy-engine.jar
  • yummy-plugin.jar, i.e. the plug-in for any specific language will use the engine to run the scripts executed by <language>-engine.jar at the end. The brand new scripted plug-in will have to use yummy to enable scripting support.
  • Glass.gif Licencing issues for 3rd-party libraries, e.g. groovy-all.jar, groovy-engine.jar


Glass.gif Executing the new script plug-in in the same workbench.

  • Create a a bundle programmaticaly and register it via Equinox?

Deliverables

The goal to be reached is an Eclipse extension/plug-in that could be used to write the new plug-ins in a scripting language, e.g. Groovy.