Convert to text block hint does not work inside Annotations
Apache NetBeans version
Apache NetBeans 22
What happened
Clicking this code hint:
Does not change anything in the editor. This hint does not work when the string is the Annotation default value.
Language / Project Type / NetBeans Component
No response
How to reproduce
Use this (nonsense) code and click the convert to text block hint:
@SuppressWarnings("This is an example\n"
+ "that does not work\n"
+ "converting to a text block")
public static void main(String[] args) {
}
Did this work correctly in an earlier version?
No / Don't know
Operating System
Fedora Core 40
JDK
21
Apache NetBeans packaging
Apache NetBeans Snap Package
Anything else
No response
Are you willing to submit a pull request?
No
javac is likely inserting "value =" as synthetic tree which causes trouble in the diff.
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 24
at org.netbeans.modules.java.source.pretty.CharBuffer.append0(CharBuffer.java:110)
at org.netbeans.modules.java.source.pretty.CharBuffer.append(CharBuffer.java:128)
at org.netbeans.modules.java.source.pretty.VeryPretty.print(VeryPretty.java:265)
at org.netbeans.modules.java.source.pretty.VeryPretty.visitLiteral(VeryPretty.java:1907)
at com.sun.tools.javac.tree.JCTree$JCLiteral.accept(JCTree.java:2732)
at org.netbeans.modules.java.source.pretty.VeryPretty.doAccept(VeryPretty.java:415)
at org.netbeans.modules.java.source.pretty.VeryPretty.print(VeryPretty.java:284)
at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5552)
at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5500)
at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5427)
at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5398)
at org.netbeans.modules.java.source.save.CasualDiff.diffAssign(CasualDiff.java:2606)
at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5690)
at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5500)
at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5427)
at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5410)
at org.netbeans.modules.java.source.save.CasualDiff.diff(CasualDiff.java:353)
at org.netbeans.api.java.source.WorkingCopy.processCurrentCompilationUnit(WorkingCopy.java:907)
at org.netbeans.api.java.source.WorkingCopy.getChanges(WorkingCopy.java:1321)
at org.netbeans.api.java.source.JavaSource$1.run(JavaSource.java:672)
at org.netbeans.api.java.source.JavaSource$1.run(JavaSource.java:661)
at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:504)
at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:454)
at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:425)
at org.netbeans.api.java.source.JavaSource.runModificationTask(JavaSource.java:680)
at org.netbeans.modules.java.hints.spiimpl.JavaFixImpl.implement(JavaFixImpl.java:73)
[catch] at org.netbeans.modules.editor.hints.HintsUI$1.run(HintsUI.java:810)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018)
I checked where the -1 was coming from and its from here:
at org.netbeans.modules.java.source.pretty.CharBuffer.trimTo(CharBuffer.java:214)
at org.netbeans.modules.java.source.pretty.CharBuffer.eatAwayChars(CharBuffer.java:263)
at org.netbeans.modules.java.source.pretty.VeryPretty.eatChars(VeryPretty.java:2931)
at org.netbeans.modules.java.source.save.CasualDiff.copyTo(CasualDiff.java:6171)
at org.netbeans.modules.java.source.save.CasualDiff.copyTo(CasualDiff.java:6155)
at org.netbeans.modules.java.source.save.CasualDiff.diffAssign(CasualDiff.java:2605)
which brings us to this: https://github.com/apache/netbeans/blob/8cab2aeccdae1386d0383ac8eec91c8f9f3edbaa/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java#L6163-L6171
and further down the stack: https://github.com/apache/netbeans/blob/8cab2aeccdae1386d0383ac8eec91c8f9f3edbaa/java/java.source.base/src/org/netbeans/modules/java/source/save/CasualDiff.java#L2587-L2605
unfortunately I don't have a lot of experience in this area, but this looks like to be the cause for it. cc @lahodaj