Re: Is anyone working on Groovy language support at the moment? Asking because I'm looking at things, and don't want to collide and throw away each others time.

Wade Chandler <[email protected]> Mon, 26 Sep 2016 23:24:40 -0400
Newsgroups gmane.comp.java.netbeans.devel
Message-ID <CALiWaWkbfoRibzuaKYC2kwTPtmhv3E0poGQ490TXqBrBx6952Q@mail.gmail.com>
I should add the run/debug single test support was merged into the dailies
some days ago now.

Wade

On Sep 26, 2016 11:22 PM, "Wade Chandler" <[email protected]> wrote:

> Way to go Sven! I can't wait to check it out.
>
> I want to look at source scanning and completion in Groovy files not in a
> project; such as scripts under favorites or in some other structure. It
> seems if a Groovy environment could be associated with a path, that would
> be possible. Too, support for Grape.grab or other class path altering logic
> in a script.
>
> Wade
>
> On Sep 24, 2016 8:06 AM, "Sven Reimers" <[email protected]> wrote:
>
>> Hi guys,
>>
>> I already made some progress enhancing code completion and a first hook
>> for mime-type based code completion extension (using gradle files as poc)
>>
>> Bonus: Initial support for traits (i.e. traits not making IDE unusable)
>>
>> More news once I am back from Java One.
>>
>> I assume we can start committing changes  (after release branch creation?)
>>
>> Will make handling the different things more easy for me
>>
>> Sven
>>
>> Am 07.09.2016 05:23 schrieb "Wade Chandler" <[email protected]>:
>>
>>> I have it running nicely locally. I haven't tested on Windows yet
>>> though. Too, I noticed there are no tests in the support module; at all. I
>>> am adding some only for what I am touching. Too, I will need to make
>>> isTestClass work better. At the moment I believe it would be enabled for
>>> any Groovy file, but honestly it is better than not having the option at
>>> all, and at worst case things will fail as expected of one tries to test a
>>> class or method that is not a test. Not much different than the "run" file
>>> which is enabled for a file with nothing "runnable". So, I may submit this
>>> before making that work better, and then iterate.
>>>
>>> I wonder if this could be back ported to 8.1 or at least make a quick
>>> fix for the 8.2 release. It is a pain using Groovy for testing in NB
>>> without run single.
>>>
>>> Wade
>>>
>>> On Sep 5, 2016 2:15 PM, "Wade Chandler" <[email protected]>
>>> wrote:
>>>
>>> Sounds good Bruno. I’m in the middle of it, so once I done I will post
>>> an issue (or find one), and attach the patch, or look for a repo in which
>>> to create a branch to request a merge.
>>>
>>> Thanks
>>>
>>> Wade
>>>
>>>
>>> ===================
>>>
>>> Wade Chandler
>>> e: [email protected]
>>>
>>>
>>>
>>> On Sep 5, 2016, at 13:26, Bruno Flavio <[email protected]> wrote:
>>>
>>> Hello Wade,
>>>
>>> I'm currently the community member maintaining Groovy/Grails support.
>>>
>>> Sven Reimers and Martin Klähn recently got in touch to improve the
>>> NetBeans Groovy code completion for Groovy based DSL's. A wiki page has
>>> been setup by Sven which gives us an overview of the issues and options
>>> regarding their resolution:
>>>
>>> http://wiki.netbeans.org/MakeGroovyInNetBeansGreatAgain
>>>
>>> I'm working to add extension points that allow an faster support of
>>> newer Grails versions and that will eventually allows NetBeans to support a
>>> Grails version per project (currently only one version can be used at a
>>> time within the IDE).
>>>
>>> Thus it would be great to have your help and the POC would be greatly
>>> appreciated (using reflection in order to access the necessary groovy
>>> classes) Let me know what I could do to ease the development. I can
>>> test/apply patches or give access to a Jenkins instance configured to test
>>> a patch against core-main or main-silver and run the Groovy/Grails related
>>> test suites.
>>>
>>> Feel free to edit the aforementioned wiki page and/or update the
>>> relevant issues (#212829 ?). Also I don't see a reason not to update the
>>> source to 1.8 whenever necessary.
>>>
>>> Thank you for looking into this. Keep in touch :)
>>>
>>> Best regards,
>>> Bruno Flávio.
>>>
>>> On Sun, 4 Sep 2016 at 16:37 Wade Chandler <[email protected]>
>>> wrote:
>>>
>>>> Also,
>>>>
>>>> Any objections to bumping the Java version in NB projects
>>>> project.properties to 1.8 considering we need 1.8 to build as it is? i.e.
>>>> is it OK to use Java 1.8 syntax in NB projects (such as Streams and Lambdas
>>>> where possible). I noticed some already do this, and others are still at
>>>> source 1.6. If no to a blanket “if you touch a project, update the source
>>>> to 1.8”, then what about just the Groovy projects for now?
>>>>
>>>> Thanks,
>>>>
>>>> Wade
>>>>
>>>>
>>>> ===================
>>>>
>>>> Wade Chandler
>>>> e: [email protected]
>>>>
>>>>
>>>>
>>>> On Sep 4, 2016, at 11:19, Wade Chandler <[email protected]>
>>>> wrote:
>>>>
>>>> I previously sent this from the wrong address...
>>>>
>>>> All,
>>>>
>>>> After a long time without proper Groovy support for some important
>>>> features in the IDE, I have bit the bullet, and started digging in. The
>>>> first priorities for me are “Run Focused Test Method” and “Debug Focused
>>>> Test Method”.
>>>>
>>>> I see that someone started in the past, but the code there is in 1 of 2
>>>> states: 1) partially to mostly there and incorrect in places or 2)
>>>> completely wrong. Also, I’m noticing the project DAG with relation to
>>>> “Groovy Support” and “Groovy Editor”, while correct for some things, is not
>>>> what we need to be able to discover the selected method and name from the
>>>> Groovy source code considering to do this we need to be able to access the
>>>> GroovyParser and GroovyParserResult in the “Groovy Support” module to
>>>> correlate the cursor position to the selected or surrounding method name
>>>> and class.
>>>>
>>>> I know this as I have changed up org.netbeans.modules.groovy
>>>> .support.actions.TestMethodUtil and org.netbeans.modules.gsf.t
>>>> estrunner.ui.TestMethodRunnerAction enough to attempt to run a
>>>> selected method, and see what happens in the code. I changed TestMethodUtil
>>>> enough not to error out and allow it to get all the way down to incorrectly
>>>> looking for a JavaSource instance in the Document; which it never finds. It
>>>> is using JavaSource where it really needs Source and GroovyParserResult
>>>> plus the Groovy classes ModuleNode and ASTNode; i.e. we are parsing Groovy
>>>> code not Java.
>>>>
>>>> This from code in TestMethodUtil doing this:
>>>>             JavaSource js = JavaSource.forDocument(doc);
>>>>             GroovyTestClassInfoTask task = new
>>>> GroovyTestClassInfoTask(cursor);
>>>>             try {
>>>>                 if (js != null) {
>>>>                     Future<Void> f = js.runWhenScanFinished(task, true);
>>>>                     if (f.isDone() && task.getFileObject() != null &&
>>>> task.getMethodName() != null){
>>>>                         sm = new SingleMethod(task.getFileObject(),
>>>> task.getMethodName());
>>>>                     }
>>>>                 }
>>>>             } catch (IOException ex) {
>>>>                 LOGGER.log(Level.WARNING, null, ex);
>>>>             }
>>>>
>>>> and then GroovyTestClassInfoTask really needs to be oriented to the
>>>> Groovy AST.
>>>>
>>>> Once you discover this, you realize you don’t have access to those
>>>> classes, that Groovy Editor depends on Groovy Support, and thus Groovy
>>>> Support can not depend on Groovy Editor (cyclical dependencies), and too,
>>>> there is a bit more to write. I also noticed that org.netbeans.modules.gsf.
>>>> testrunner.ui.TestMethodRunnerAction is slightly problematic as it is
>>>> generic code, but action registration is its Achilles hill. To get it to
>>>> work for both Java and Groovy, one needs to add an
>>>> extra @ActionReference(path = "Editors/text/x-groovy/Popup",
>>>> position=1795)} … 1795 definitely needs adjusted as I’m just getting the
>>>> workings down.
>>>>
>>>> I have thought about using reflection for the near term to access the
>>>> GroovyParserResult which is returned from code similar to this:
>>>>                 ParserManager.parseWhenScanFin
>>>> ished(Collections.<Source>singleton(s), new UserTask() {
>>>>                     @Override
>>>>                     public void run(ResultIterator rit) throws
>>>> Exception {
>>>>                         Result r = rit.getParserResult();
>>>>                         if("GroovyParserResult".equals
>>>> (r.getClass().getSimpleName())) {
>>>>                             //do things here as it will be with the
>>>> correct code
>>>>                             //and use reflection to get the Groovy
>>>> ModuleNode instance
>>>>                             //and hand off to a new
>>>> GroovyTestClassInfoTask like utility
>>>>                         }
>>>>                     }
>>>>
>>>>                 });
>>>>
>>>> I think I can get a POC together that will basically only require
>>>> changes to:
>>>> * org.netbeans.modules.gsf.testrunner.ui.TestMethodRunnerAction
>>>> (annotation additions unless there is some other way to inject this), but
>>>> now that I’m writing this I do see org.netbeans.modules.groov
>>>> y.support.actions.TestMethodAction which isn’t halfway baked. So, this
>>>> may be TestMethodAction completion or an extra annotation on
>>>> TestMethodRunnerAction; TestMethodRunnerAction works as expected ATM.
>>>>
>>>> * org.netbeans.modules.groovy.support.actions.TestMethodUtil
>>>>
>>>> * org.netbeans.modules.groovy.support.actions.GroovyTestClassInfoTask
>>>> (essentially making it extends UserTask instead
>>>> of CancellableTask<CompilationController>)
>>>>
>>>> * “Groovy Support” projects meta-data “project.xml”, to add the
>>>> dependency on the Groovy binaries
>>>>
>>>> Anyways, that would be to get it there, as that is the worst thing not
>>>> having in the Groovy editor during my day to day work when testing code.
>>>> There are other low hanging fruit related to actions and parsing that might
>>>> be able to be fixed with everything in the structure it is in currently,
>>>> and though using reflection doesn’t “feel right”, it may be the best thing
>>>> to do in the mean time with a TODO being added to break out and fix later,
>>>> after all dependencies and the overall graph can be better understood, plus
>>>> some tests to verify if code is ever changed which makes it broken. When I
>>>> start looking into “Refactoring” then perhaps the picture gets worse; I
>>>> don’t know. But, at that time, then I would worry further. Does that sound
>>>> workable or something that could get accepted?
>>>>
>>>> I am working locally off main-golden, so any patch I submit will be in
>>>> that context.
>>>>
>>>> Many thanks,
>>>>
>>>> Wade
>>>>
>>>> ===================
>>>>
>>>> Wade Chandler
>>>> e: [email protected]
>>>>
>>>>
>>>>
>>>>
>>>> ===================
>>>>
>>>> Wade Chandler
>>>> e: [email protected]
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>>
>>> ===================
>>>
>>> Wade Chandler
>>> e: [email protected]
>>>
>>>
>>>
>>>
>>>