forge / roaster

A Java Parser library that allows easy parsing and formatting of Java source files
Other
676 stars 105 forks source link

Support comments in method bodies #268

Open gastaldi opened 1 year ago

gastaldi commented 1 year ago

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: ```java 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.
lincolnthree commented 1 year ago

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

gastaldi commented 1 year ago

@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

lincolnthree commented 1 year ago

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

gastaldi commented 1 year ago

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

oc007us commented 1 month ago

Greetings! Wondering about the status of this issue.

gastaldi commented 1 month ago

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

oc007us commented 1 month ago

@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.

gastaldi commented 1 month ago

@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

oc007us commented 1 month ago

@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!