Skip to content

IndexOutOfBoundsException on two Java Multi-line String constants #2497

Open
@radboudp

Description

@radboudp

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions