openclover/clover

OpenClover 4.5.0 fails to instrument code with "unexpected token: record" error

Closed this issue · 1 comments

Environment:

  • OpenClover 4.5.0
  • Java source code level 1.7-15

Behaviour:

Instrumentation fails with an error like the following.

com.atlassian.clover.api.CloverException: Abc.java:41:46:unexpected token: record
    at com.atlassian.clover.instr.java.Instrumenter.instrument (Instrumenter.java:160)
    at com.atlassian.clover.CloverInstr.execute (CloverInstr.java:110)
    at com.atlassian.clover.CloverInstr.mainImpl (CloverInstr.java:86)
...
 Caused by: clover.antlr.NoViableAltException: unexpected token: record
    at com.atlassian.clover.instr.java.JavaRecognizer.classOrInterfaceType (JavaRecognizer.java:1619)
    at com.atlassian.clover.instr.java.JavaRecognizer.classTypeSpec (JavaRecognizer.java:1520)
    at com.atlassian.clover.instr.java.JavaRecognizer.typeSpec (JavaRecognizer.java:1481)
...```

**Cause:**

OpenClover 4.5.0 supports instrumentation of `record` types (introduced in Java 14-16). In case code written in older Java uses `record` word as a name of a symbol (variable, method), instrumentation fails.

**Expected behaviour:**

OpenClover should correctly detect Java source level and do not treat `record` as a keyword for versions prior to 16.

**Workaround:**

Rename a symbol (method/variable).