nmatt opened a new issue, #8985:
URL: https://github.com/apache/netbeans/issues/8985
### Apache NetBeans version
Apache NetBeans 28 latest release candidate
### What happened
Invoking Find Usages or Call Hierarchy on an enum constructor fails with a
StringIndexOutOfBoundsException if the enum type has constants with
implementations (curly braces).
Exception stacktrace:
```
java.lang.StringIndexOutOfBoundsException: Range [74, -1) out of bounds for
length 115
at
java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at
java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at
java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at
java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at
java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
at
java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at
java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4865)
at java.base/java.lang.String.substring(String.java:2834)
at java.base/java.lang.String.subSequence(String.java:2872)
at
org.netbeans.modules.refactoring.java.WhereUsedElement.create(WhereUsedElement.java:303)
at
org.netbeans.modules.refactoring.java.WhereUsedElement.create(WhereUsedElement.java:162)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.addUsage(FindUsagesVisitor.java:336)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.addIfMatch(FindUsagesVisitor.java:218)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitIdentifier(FindUsagesVisitor.java:371)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitIdentifier(FindUsagesVisitor.java:50)
at com.sun.tools.javac.tree.JCTree$JCIdent.accept(JCTree.java:2718)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at
com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:591)
at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1876)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at
com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:504)
at
com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1655)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:271)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1148)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:223)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:992)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:899)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at com.sun.source.util.TreeScanner.visitNewClass(TreeScanner.java:611)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitNewClass(FindUsagesVisitor.java:405)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitNewClass(FindUsagesVisitor.java:50)
at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1937)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
at com.sun.source.util.TreeScanner.visitVariable(TreeScanner.java:242)
at
com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1084)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:899)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
at
com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:151)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitCompilationUnit(FindUsagesVisitor.java:135)
at
org.netbeans.modules.refactoring.java.plugins.FindUsagesVisitor.visitCompilationUnit(FindUsagesVisitor.java:50)
at
com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:627)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
at
org.netbeans.modules.refactoring.java.callhierarchy.CallHierarchyTasks$CallersTask.run(CallHierarchyTasks.java:357)
at
org.netbeans.modules.refactoring.java.callhierarchy.CallHierarchyTasks$CallersTask.run(CallHierarchyTasks.java:301)
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.modules.refactoring.java.callhierarchy.CallHierarchyTasks$CallersTask.processFiles(CallHierarchyTasks.java:476)
at
org.netbeans.modules.refactoring.java.callhierarchy.CallHierarchyTasks$CallersTask.runTask(CallHierarchyTasks.java:338)
[catch] at
org.netbeans.modules.refactoring.java.callhierarchy.CallHierarchyTasks$CallTaskBase.run(CallHierarchyTasks.java:288)
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)
```
### Language / Project Type / NetBeans Component
Java, Refactoring
### How to reproduce
In a Java project, create the following enum class:
```
enum Example
{
CONSTANT() { };
Example() { }
}
```
Then invoke Find Usages or Call Hierarchy on `Example()`.
### Did this work correctly in an earlier version?
No / Don't know
### Operating System
Windows
### JDK
21
### Apache NetBeans packaging
Apache NetBeans binary zip
### Anything else
This might not be a common operation for enum constructors, but in large
enum classes (constants with non-trivial implementations), it can actually be
quite useful. Another reason is that that having the cursor on the enum
constructor doesn't highlight the constants in the sidebar, unlike other usages.
### Are you willing to submit a pull request?
No
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists