IndexOutOfBoundsException on two Java Multi-line String constants
- Langage dominant
- Java
- Étoiles
- 5.7k
- Forks
- 561
- Merge moyen
- 1 j 14 h
- PR mergées (30 j)
- 43
Description
Hi,
Spotless throws an Java Multi-line IndexOutOfBoundsException on two Java Multi-line String constants in a unit test. Even when they are empty.
```
private static final String TEST_ONE = """
""";
private static final String TEST_TWO = """
""";
```
Change either into a regular String and there is no problem. Here is the output:
```
[ERROR] Step 'eclipse jdt formatter' found problem in 'xxxxxxTest.java':
eclipse jdt formatter 4.10 is currently being used, but outdated.
eclipse jdt formatter 4.34 is the recommended version, which may have fixed this problem.
eclipse jdt formatter 4.34 requires JVM 17+.
java.lang.Exception: eclipse jdt formatter 4.10 is currently being used, but outdated.
eclipse jdt formatter 4.34 is the recommended version, which may have fixed this problem.
eclipse jdt formatter 4.34 requires JVM 17+.
at com.diffplug.spotless.Jvm$Support$1.apply (Jvm.java:211)
at com.diffplug.spotless.FormatterStepEqualityOnStateSerialization.format (FormatterStepEqualityOnStateSerialization.java:49)
at com.diffplug.spotless.Formatter.computeWithLint (Formatter.java:170)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:97)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:82)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:77)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:73)
at com.diffplug.spotless.maven.SpotlessCheckMojo.process (SpotlessCheckMojo.java:81)
at com.diffplug.spotless.maven.AbstractSpotlessMojo.execute (AbstractSpotlessMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:118)
at java.lang.reflect.Method.invoke (Method.java:580)
at com.diffplug.spotless.extra.java.EclipseJdtFormatterStep.lambda$apply$0 (EclipseJdtFormatterStep.java:52)
at com.diffplug.spotless.FormatterFunc$NeedsFile.apply (FormatterFunc.java:174)
at com.diffplug.spotless.Jvm$Support$1.apply (Jvm.java:209)
at com.diffplug.spotless.FormatterStepEqualityOnStateSerialization.format (FormatterStepEqualityOnStateSerialization.java:49)
at com.diffplug.spotless.Formatter.computeWithLint (Formatter.java:170)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:97)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:82)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:77)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:73)
at com.diffplug.spotless.maven.SpotlessCheckMojo.process (SpotlessCheckMojo.java:81)
at com.diffplug.spotless.maven.AbstractSpotlessMojo.execute (AbstractSpotlessMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
Caused by: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 751
at jdk.internal.util.Preconditions.outOfBounds (Preconditions.java:100)
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex (Preconditions.java:106)
at jdk.internal.util.Preconditions.checkIndex (Preconditions.java:302)
at java.util.Objects.checkIndex (Objects.java:365)
at java.util.ArrayList.get (ArrayList.java:428)
at org.eclipse.jdt.internal.formatter.TokenManager.get (TokenManager.java:71)
at org.eclipse.jdt.internal.formatter.TokenManager.lastTokenIn (TokenManager.java:192)
at org.eclipse.jdt.internal.formatter.linewrap.WrapPreparator.preVisit2 (WrapPreparator.java:215)
at org.eclipse.jdt.core.dom.ASTNode.accept (ASTNode.java:2813)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren (ASTNode.java:2886)
at org.eclipse.jdt.core.dom.FieldDeclaration.accept0 (FieldDeclaration.java:273)
at org.eclipse.jdt.core.dom.ASTNode.accept (ASTNode.java:2815)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren (ASTNode.java:2886)
at org.eclipse.jdt.core.dom.TypeDeclaration.accept0 (TypeDeclaration.java:447)
at org.eclipse.jdt.core.dom.ASTNode.accept (ASTNode.java:2815)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren (ASTNode.java:2886)
at org.eclipse.jdt.core.dom.CompilationUnit.accept0 (CompilationUnit.java:258)
at org.eclipse.jdt.core.dom.ASTNode.accept (ASTNode.java:2815)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareWraps (DefaultCodeFormatter.java:432)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.prepareFormattedCode (DefaultCodeFormatter.java:230)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format (DefaultCodeFormatter.java:184)
at org.eclipse.jdt.internal.formatter.DefaultCodeFormatter.format (DefaultCodeFormatter.java:166)
at com.diffplug.spotless.extra.glue.jdt.EclipseJdtFormatterStepImpl.format (EclipseJdtFormatterStepImpl.java:54)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at com.diffplug.spotless.extra.java.EclipseJdtFormatterStep.lambda$apply$0 (EclipseJdtFormatterStep.java:52)
at com.diffplug.spotless.FormatterFunc$NeedsFile.apply (FormatterFunc.java:174)
at com.diffplug.spotless.Jvm$Support$1.apply (Jvm.java:209)
at com.diffplug.spotless.FormatterStepEqualityOnStateSerialization.format (FormatterStepEqualityOnStateSerialization.java:49)
at com.diffplug.spotless.Formatter.computeWithLint (Formatter.java:170)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:97)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:82)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:77)
at com.diffplug.spotless.DirtyState.of (DirtyState.java:73)
at com.diffplug.spotless.maven.SpotlessCheckMojo.process (SpotlessCheckMojo.java:81)
at com.diffplug.spotless.maven.AbstractSpotlessMojo.execute (AbstractSpotlessMojo.java:255)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke (DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
```
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Reproduisez l’échec avec deux constantes de chaînes Java multilignes vides à l’aide de Eclipse JDT formatter 4.10. Commencez par EclipseJdtFormatterStepImpl.format et suivez la pile à travers DefaultCodeFormatter, WrapPreparator et TokenManager. C’est terminé lorsque le formatage de l’exemple ne lève plus IndexOutOfBoundsException.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- tooling
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100