eclipse-jdt / eclipse-jdt/eclipse.jdt.core

Exception formatting code with misplaced Javadoc

Open
#33 1 comment 0 reactions 1 assignee Claimed by @trancexpress View on GitHub
bug
Dominant language
Java
Stars
237
Forks
195
Avg merge
1d 12h
Merged PRs (30d)
47

Description

Eclipse format source code breaks on an unusual example where javadoc appeared after an enum. This code is strange, but technically legal Java, I'd expect Eclipse tooling to handle it gracefully. This is a particular problem if the issue occurs in a large code base and you're trying to do a bulk format operation via source cleanup - this fails but it is not immediately clear why.

Steps
* Try and format this with Eclipse 2021-12 (4.22.0)
```
public enum Test {
FOO /** random javadoc */,
BAR
}
```

Expected
* Code to be formatted

Actual
* The formatting fails and the following exception is shown
```
Caused by: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 9
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
at java.base/java.util.Objects.checkIndex(Objects.java:372)
at java.base/java.util.ArrayList.get(ArrayList.java:459)
at org.eclipse.jdt.internal.formatter.TokenManager.get(TokenManager.java:76)
at org.eclipse.jdt.internal.formatter.TokenManager.findIndex(TokenManager.java:169)
at org.eclipse.jdt.internal.formatter.TokenManager.firstIndexBefore(TokenManager.java:213)
at org.eclipse.jdt.internal.formatter.TokenManager.firstTokenBefore(TokenManager.java:217)
at org.eclipse.jdt.internal.formatter.SpacePreparator.handleTokenBefore(SpacePreparator.java:1162)
at org.eclipse.jdt.internal.formatter.SpacePreparator.handleCommas(SpacePreparator.java:1147)
at org.eclipse.jdt.internal.formatter.SpacePreparator.visit(SpacePreparator.java:204)
at org.eclipse.jdt.core.dom.EnumDeclaration.accept0(EnumDeclaration.java:253)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3129)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:3200)
at org.eclipse.jdt.core.dom.CompilationUnit.accept0(CompilationUnit.java:258)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3129)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareSpaces(DefaultCodeFormatter.java:409)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareFormattedCode(DefaultCodeFormatter.java:226)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:183)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format(DefaultCodeFormatter.java:165)
at org.eclipse.jdt.internal.corext.util.CodeFormatterUtil.reformat(CodeFormatterUtil.java:361)
at org.eclipse.jdt.internal.ui.text.java.JavaFormattingStrategy.format(JavaFormattingStrategy.java:75)
at org.eclipse.jface.text.formatter.MultiPassContentFormatter.formatMaster(MultiPassContentFormatter.java:197)
at org.eclipse.jface.text.formatter.MultiPassContentFormatter.format(MultiPassContentFormatter.java:143)
at org.eclipse.jface.text.source.SourceViewer.doOperation(SourceViewer.java:1025)
at org.eclipse.jface.text.source.projection.ProjectionViewer.doOperation(ProjectionViewer.java:1466)
at org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer.doOperation(JavaSourceViewer.java:179)
at org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor$AdaptedSourceViewer.doOperation(CompilationUnitEditor.java:205)
at org.eclipse.ui.texteditor.TextOperationAction.lambda$0(TextOperationAction.java:130)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
at org.eclipse.ui.texteditor.TextOperationAction.run(TextOperationAction.java:130)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:474)
at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:121)
... 55 more
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.