roaster icon indicating copy to clipboard operation
roaster copied to clipboard

Support comments in method bodies

Open gastaldi opened this issue 2 years ago • 9 comments

Discussed in https://github.com/forge/roaster/discussions/267

Originally posted by panderior November 6, 2022 When I try to add a line comment to a Java class code I am trying to generate, the roaster library removes the comment and gives just the code.

My intention is to generate a code like this:

public class A {
    public void helper () {
         // this is a comment
         System.out.println("Success");
}}

What have I tried:

  • I have tried class and method level JavaDoc, which is a nice feature. But I also want to use line comment.
  • I have tried getting the "toUnformattedString" on the JavaClassSource, but the line comments just won't appear.

Your help is very appreciated. Thank you.

gastaldi avatar Nov 07 '22 12:11 gastaldi

I believe a custom visitor needs to be implemented to gain access to comments, otherwise the JDT ignores them. I seem to remember this from some issue a long time ago, but here's an example. Hopefully it still applies:

https://stackoverflow.com/questions/3019729/how-to-access-comments-from-the-java-compiler-tree-api-generated-ast/9884987#9884987

lincolnthree avatar Nov 07 '22 14:11 lincolnthree

@lincolnthree yes, I discovered that through my investigation as well. The problem is that the comments are stored in the CompilationUnit but you can not modify them (or I haven't found a way yet to do it). In Eclipse JDT terms, it's impossible when Method.setBody is called to create a Block containing Statements and store comments in the respective CompilationUnit. See https://github.com/forge/roaster/pull/269

gastaldi avatar Nov 07 '22 18:11 gastaldi

Ah yeah that makes sense. I see you found a solution using document. Just curious since I'm 'lurking' - did you mean for these tests to be @Disabled? Or is it still not working?

https://github.com/forge/roaster/pull/269/files#diff-c2edb13e8db21b14ec895bcc177d91f546c2e60679aabe86c8d1cd8a43e6d72eR71

lincolnthree avatar Nov 08 '22 16:11 lincolnthree

It's still not working. Unfortunately the solution with Document doesn't work when the class is created on-the-fly

gastaldi avatar Nov 08 '22 16:11 gastaldi

Greetings! Wondering about the status of this issue.

oc007us avatar Aug 28 '24 04:08 oc007us

@oc007us no evolution so far, unfortunately. Open for suggestions 😉

gastaldi avatar Aug 28 '24 10:08 gastaldi

@gastaldi, yes, it is a tricky one. I guess, there is a way to collect all comments and perhaps save them in the MethodImpl class. I am not sure if there is a way to insert them back when the entire CompilationUnit is written to a file.

oc007us avatar Aug 28 '24 13:08 oc007us

@oc007us I guess it depends on if the MethodDeclaration in JDT supports that, I am not a big fan of storing content that is not synchronized with the underlying JDT tree

gastaldi avatar Aug 28 '24 13:08 gastaldi

@gastaldi, neither am I. The generated code in my case can be done away without comments. I will use the JavaDoc on the methods to add info. Thank you for looking into it!

oc007us avatar Aug 28 '24 14:08 oc007us