Skip to content
Skip to breadcrumbs
Skip to header menu
Skip to action menu
Skip to quick search
Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Dashboard
Groovy
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<p>There are many ways you can help make Groovy a better piece of software - and we can use all the help we can get. Please dive in and help! <img class="emoticon emoticon-smile" data-emoticon-name="smile" border="0" src="/s/en_GB/3278/15/_/images/icons/emoticons/smile.png" alt="(smile)" title="(smile)" /></p><p>Try surfing the documentation - if something is confusing or not clear, let us know - or better still fix it for us. All of this website is maintained in <a href="http://docs.codehaus.org/pages/listpages.action?key=GROOVY">a wiki</a>, so please go right ahead and fix things if they are wrong or contribute new documentation.</p><p>Download the code & try it out and see what you think. Browse the source code.<br /> Got an itch to scratch, want to tune some operation or add some feature?</p><p>Want to do some hacking on Groovy? Try surfing the issue tracker (<a href="http://groovy.codehaus.org/Contributing#Contributing-Usingtheissuetracker">see below</a>) for open issues or features that need to be implemented, take ownership of an issue and try to fix it.</p><p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e3RvY30&locale=en_GB&version=2" data-macro-name="toc"></p><h2>If you find a bug or a problem</h2><p>Please raise a new issue in our issue tracker (<a href="http://groovy.codehaus.org/Contributing#Contributing-Usingtheissuetracker">see below</a>).</p><p>If you can create a JUnit test case (either via Groovy or Java code) then your issue is more likely to be resolved quicker.<br /> Take a look at some of the <a href="http://git.codehaus.org/gitweb.cgi?p=groovy-git.git;a=tree;f=src/test">existing unit tests cases</a>, find one and modify it to try reproduce your problem.</p><p>Then we can add your issue to <a class="confluence-link" href="/display/GROOVY/Git" data-linked-resource-id="227050718" data-linked-resource-type="page" data-linked-resource-default-alias="Git" data-base-url="http://docs.codehaus.org">Git</a> and then we'll know when its really fixed and we can ensure that the problem stays fixed in future releases.</p><h2>Submitting Github Pull Requests</h2><p>The preferred way of contributing code to Groovy is by submitting a Pull Request to <a href="https://github.com/groovy/groovy-core">the project on Github</a>.</p><p>The best workflow for this is to raise a new issue in the tracker (<a href="http://groovy.codehaus.org/Contributing#Contributing-Usingtheissuetracker">see below</a>), fix the code in a branch on your forked project, and submit a pull request via the Github UI (mentioning the Jira Issue ID in the pull request, and then commenting the Jira ticket with the ID of the pull request so that both can be tied together).</p><p>One workflow you could use is described <a href="http://blog.bloidonia.com/post/17711808015/submitting-code-to-the-groovy-language">in a blog post here</a>.</p><h2>Submitting patches</h2><p>We gladly accept patches if you can find ways to improve, tune or fix Groovy in some way.</p><p>Most IDEs can create nice patches very easily. If you're a command line person try the following to create the patch</p><table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="none" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6bm9uZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>diff -u Main.java.orig Main.java >> patchfile.txt </pre></td></tr></table><p>or</p><table class="wysiwyg-macro" data-macro-name="code" data-macro-default-parameter="none" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvZGU6bm9uZX0&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="PLAIN_TEXT"><tr><td class="wysiwyg-macro-body"><pre>git diff >> mymodif.patch </pre></td></tr></table><p>Once you've created a patch the best way to submit it is to raise a new issue in the issue tracker (<a href="http://groovy.codehaus.org/Contributing#Contributing-Usingtheissuetracker">see below</a>) and maybe send us a mail on the <a href="http://groovy.codehaus.org/mail-lists.html">developer list</a> letting us know about the patch.</p><h2>Using the issue tracker</h2><p>Dune to JIRA spam-bots you have to register with Codehaus Xircles before accessing the <a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242">issue tracker</a>. Follow these steps:</p><ol><li style="margin-left: 15.0px;"><a href="https://xircles.codehaus.org/signup"> </a>Open the <a href="https://xircles.codehaus.org/signup">Xircles Signup</a> page.</li><li style="margin-left: 15.0px;">Pick a username/password.</li><li style="margin-left: 15.0px;">Get the verification email and verify yourself.</li><li style="margin-left: 15.0px;">You are now logged into <a href="http://xircles.codehaus.org/" rel="nofollow">xircles.codehaus.org</a>. Note that there is no link to this page from the <a href="http://codehaus.org/" rel="nofollow">codehaus.org</a> main page.</li><li style="margin-left: 15.0px;">Open the <a href="http://jira.codehaus.org/secure/BrowseProject.jspa?id=10242">issue tracker (JIRA)</a> page.</li><li style="margin-left: 15.0px;">In the upper-right corner, click "log in" (you must log into JIRA separately from Xircles).</li><li style="margin-left: 15.0px;">Use your Xircles username/password. You should now be logged into JIRA.</li></ol><p>See <a href="http://groovy.329449.n5.nabble.com/How-can-register-in-Groovy-s-JIRA-td5713775.html">http://groovy.329449.n5.nabble.com/How-can-register-in-Groovy-s-JIRA-td5713775.html</a> for additional details/help.</p><h2>Improvements that need your help</h2><p>Here's a <a href="https://jira.codehaus.org/secure/IssueNavigator%21executeAdvanced.jspa?jqlQuery=project%3DGROOVY+and+labels+%3D+contrib+AND+resolution%3DUnresolved&runQuery=true&clear=true">list of some issues contributors could have a look at</a>, to get started contributing to Groovy. You can also contribute to unassigned issues/enhancements without the "contrib" tag, just add the comment about your intentions in this issue and start working on it.</p><p>The following table is a summary of the fields where we would like to improve Groovy but do not find enough time to implement those features. For each of them, you will find a short description, an idea of the skills you need to implement them and the level of difficulty. Of course, getting into Groovy Core can be sometimes hard, so we should always work as a team and each subject below would be followed by a mentor.</p><table class="confluenceTable"><tbody><tr><th class="confluenceTh">Feature</th><th class="confluenceTh">Description</th><th class="confluenceTh">Skills</th><th class="confluenceTh">Difficulty</th><th class="confluenceTh">Mentor</th><th colspan="1" class="confluenceTh">Status</th></tr><tr><td colspan="1" class="confluenceTd">Grammar rewrite</td><td colspan="1" class="confluenceTd">The current Groovy grammar is written using ANTLR 2. For maintenance reasons, we would like to migrate the grammar to ANTLR 3 or ANTLR 4. Originally planned for Groovy 3, we will probably not be able to do that if no one helps. It is an important background task which covers the grammar of Groovy, the grammar of Java and a good knowledge of the Groovy AST (for backwards compatibility).</td><td colspan="1" class="confluenceTd">Grammar writing (Antlr helps a lot!), parsers, Groovy AST (nice to have)</td><td colspan="1" class="confluenceTd">Hard</td><td colspan="1" class="confluenceTd">Jochen Theodorou</td><td colspan="1" class="confluenceTd"><p>Delayed</p></td></tr><tr><td colspan="1" class="confluenceTd">Bytecode optimizations</td><td colspan="1" class="confluenceTd">Since Groovy 2.0, we have two flavours of bytecode: the dynamic bytecode, corresponding to the main and legacy Groovy, and a "static" bytecode, triggered using the @CompileStatic annotation, which is closer to what Java produces. Both need specific bytecode optimizations.</td><td colspan="1" class="confluenceTd">ASM, JVM Bytecode</td><td colspan="1" class="confluenceTd">Hard</td><td colspan="1" class="confluenceTd">Cédric Champeau</td><td colspan="1" class="confluenceTd">In progress</td></tr><tr><td colspan="1" class="confluenceTd">Javascript backend</td><td colspan="1" class="confluenceTd">Groovy runs on the JVM, but we would also like to see a Javascript backend. Of course, a prototype would have limited capabilities compared to what the JVM one offers, mostly because the Groovy language is not only a language but also a rich API relying internally on JDK APIs.</td><td colspan="1" class="confluenceTd">Javascript, Groovy compiler internals</td><td colspan="1" class="confluenceTd">Hard</td><td colspan="1" class="confluenceTd">Guillaume Laforge</td><td colspan="1" class="confluenceTd">Idea</td></tr><tr><td colspan="1" class="confluenceTd">Lambda support</td><td colspan="1" class="confluenceTd">JDK 8 will offer support for lambdas. Lambdas are close to what Groovy offers with closures, but the syntax, implementation and more importantly semantics are quite different. A future version of Groovy should be able to support both closures (Groovy) and lambdas (JDK 8).</td><td colspan="1" class="confluenceTd">JVM bytecode, grammar</td><td colspan="1" class="confluenceTd">Hard</td><td colspan="1" class="confluenceTd">Jochen Theodorou</td><td colspan="1" class="confluenceTd">Not started</td></tr><tr><td colspan="1" class="confluenceTd">Lazy datastructures and comprehensions</td><td colspan="1" class="confluenceTd"><p>The idea would be to have Groovy support generators, lazy evaluations, ... See for example <a href="http://blog.bloidonia.com/post/22117894718/groovy-stream-a-lazy-generator-class-for-groovy">http://blog.bloidonia.com/post/22117894718/groovy-stream-a-lazy-generator-class-for-groovy</a></p><p>It is also important to take a look at what APIs are being written in JDK 8 because most of the APIs written for the new lambdas are specifically lazy.</p></td><td colspan="1" class="confluenceTd">Algorithmics</td><td colspan="1" class="confluenceTd">Medium</td><td colspan="1" class="confluenceTd">Paul King</td><td colspan="1" class="confluenceTd">Prototype</td></tr><tr><td colspan="1" class="confluenceTd">New MOP</td><td colspan="1" class="confluenceTd">The new MOP (Meta Object Protocol) is a key feature of Groovy 3. The objective is to rewrite the MOP totally, in order to provide a more consistent, powerful and performant MOP. See <a href="http://groovy.codehaus.org/MOP+2.0+ideas">http://groovy.codehaus.org/MOP+2.0+ideas</a></td><td colspan="1" class="confluenceTd">Language theory</td><td colspan="1" class="confluenceTd">Medium</td><td colspan="1" class="confluenceTd">Jochen Theodorou</td><td colspan="1" class="confluenceTd">In progress</td></tr><tr><td colspan="1" class="confluenceTd">Bugfixes</td><td colspan="1" class="confluenceTd">As the language is widely used, we have a lot of bug reports. Unfortunately, the team is too small to tackle them all. If you find a bug that you think you can work on, do not hesitate to help!</td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">Easy to hard</td><td colspan="1" class="confluenceTd">any member of Groovy core</td><td colspan="1" class="confluenceTd">In progress</td></tr><tr><td colspan="1" class="confluenceTd">Modularization</td><td colspan="1" class="confluenceTd">Groovy 2 came with the concept of modularization and is now splitted into modules. Each module is a logical group of features (for example, XML, JSON, Swing, ...). While Groovy core was reduced by half, there's still plenty of room for improvement and further modularization.</td><td colspan="1" class="confluenceTd">Architecture</td><td colspan="1" class="confluenceTd">Easy</td><td colspan="1" class="confluenceTd">Paul King</td><td colspan="1" class="confluenceTd">In progress</td></tr><tr><td colspan="1" class="confluenceTd">Documentation</td><td colspan="1" class="confluenceTd">On every project, documentation is never enough, nor up-to-date. Groovy falls into that trap too. A very good way to get into Groovy is to start documentation, fix documentation or improve javadocs. There are also side projects like a new website, a new Groovy Web Console which require some time but were never started.</td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">Easy</td><td colspan="1" class="confluenceTd">Guillaume Laforge</td><td colspan="1" class="confluenceTd">In progress</td></tr><tr><td colspan="1" class="confluenceTd">Specification</td><td colspan="1" class="confluenceTd">Help joining the specification effort. The Groovy language has evolved a lot and there's no complete specification available yet.</td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">Medium</td><td colspan="1" class="confluenceTd">Guillaume Laforge</td><td colspan="1" class="confluenceTd">Standby</td></tr><tr><td colspan="1" class="confluenceTd">Security</td><td colspan="1" class="confluenceTd">Help us improving java.security support in Groovy. We have, for example, unit tests failing periodically because of security tests (Security Manager related). No one in the team is an expert in that domain so any help would be very appreciated!</td><td colspan="1" class="confluenceTd">Java security</td><td colspan="1" class="confluenceTd">Medium</td><td colspan="1" class="confluenceTd">Cédric Champeau</td><td colspan="1" class="confluenceTd">Standby</td></tr><tr><td colspan="1" class="confluenceTd">Groovy for Android</td><td colspan="1" class="confluenceTd"><p>A lot of us would like to see Groovy run on Android. There are some technical challenges but the good news is that some hackers (<span>Marcin Erdmann and Erik Pragt</span>) managed to do it for Groovy 1.7. It's not production ready yet, and we would like to have, at some point, support in the Groovy distribution itself (aka, no patch required). Running Groovy is one thing, doing something with it is another, so a side project for this is definitely to make Groovy a language of choice to build Android applications. We think some projects like Griffon, for example, have a strong interest in that, by making the design of UIs much easier.</p><p>See <a href="http://skillsmatter.com/podcast/groovy-grails/groovy-android">http://skillsmatter.com/podcast/groovy-grails/groovy-android</a></p></td><td colspan="1" class="confluenceTd">Android, JVM</td><td colspan="1" class="confluenceTd">Medium</td><td colspan="1" class="confluenceTd">Cédric Champeau</td><td colspan="1" class="confluenceTd">Prototype</td></tr><tr><td colspan="1" class="confluenceTd">Groovy Console</td><td colspan="1" class="confluenceTd">The Groovy Console is a very nice tool. However, there are several things that can be improved: syntax highlighting, especially for large scripts, which is too slow; the AST Browser which can be improved in several ways (displaying node metadata, more focused bytecode view, ...)</td><td colspan="1" class="confluenceTd">Swing, Groovy</td><td colspan="1" class="confluenceTd">Easy to medium</td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">In progress</td></tr></tbody></table>
Please type the word appearing in the picture.
Attachments
Labels
Location
Watch this page
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced