Skip to content

Google Java Format fails on complex switch expressions with Java 21 #983

Closed
@bmeier-pros

Description

@bmeier-pros

Version 1.18.1 formatter throws an exception when trying to handle code like this:

      return switch (obj1) {
          case null -> obj2 == null;
          case T1 myT1 when obj2 instanceof T1 otherT1 -> myT1.equalsStrict(otherT1);
          // exception ^ at the when (69:46 in the original source)
          case T2 myT2 when obj2 instanceof T2 otherT2 -> T2.isDeepEquals(myT2, otherT2);
          default -> obj1.equals(obj2);
      };

The exception is:

Step 'google-java-format' found problem in 'src/test/java/com/example/test/acceptance/ExpectedResult.java':
69:46: error: : or -> expected
com.google.googlejavaformat.java.FormatterException: 69:46: error: : or -> expected
        at com.google.googlejavaformat.java.FormatterException.fromJavacDiagnostics(FormatterException.java:51)
        at com.google.googlejavaformat.java.Formatter.format(Formatter.java:149)
        at com.google.googlejavaformat.java.Formatter.getFormatReplacements(Formatter.java:273)
        at com.google.googlejavaformat.java.Formatter.formatSource(Formatter.java:247)
        at com.google.googlejavaformat.java.Formatter.formatSource(Formatter.java:213)
        at com.diffplug.spotless.glue.java.GoogleJavaFormatFormatterFunc.apply(GoogleJavaFormatFormatterFunc.java:65)
        at com.diffplug.spotless.FormatterFunc.apply(FormatterFunc.java:32)
        at com.diffplug.spotless.FormatterStepImpl$Standard.format(FormatterStepImpl.java:82)
        at com.diffplug.spotless.FormatterStep$Strict.format(FormatterStep.java:103)
        at com.diffplug.spotless.Formatter.compute(Formatter.java:246)
        at com.diffplug.spotless.PaddedCell.calculateDirtyState(PaddedCell.java:203)
        at com.diffplug.spotless.PaddedCell.calculateDirtyState(PaddedCell.java:190)
        at com.diffplug.gradle.spotless.SpotlessTaskImpl.processInputFile(SpotlessTaskImpl.java:105)
        at com.diffplug.gradle.spotless.SpotlessTaskImpl.performAction(SpotlessTaskImpl.java:89)
<gradle stack trace elided>

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions