Skip to content

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

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>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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