Skip to content

[kotlin] Support multidollar interpolation (Kotlin 2.2) #6003

@martinvisser

Description

@martinvisser

Is your feature request related to a problem? Please describe.
The latest release of Kotlin (2.2) has some new language features that the current PMD plugin cannot parse, like double-dollar constructions.

Describe the solution you'd like
Support for Kotlin 2.2

Describe alternatives you've considered
The plugin doesn't crash, so there is no workaround/alternative necessary at this point.

Additional context
Result of a scan:

13:55:05,784 [INFO] Sensor PmdSensor [pmdjpinpoint]
13:55:05,785 [INFO] Execute PMD 7.10.0
13:55:05,809 [INFO] Java version: 21
13:55:05,872 [INFO] PMD configuration: /agent/_work/23/s/app/target/sonar/pmd.xml
13:55:10,311 [INFO] PMD configuration: /agent/_work/23/s/app/target/sonar/pmd-kotlin.xml
13:55:11,450 [ERROR] [stderr] line 40:59 token recognition error at: '$'
13:55:11,451 [ERROR] [stderr] line 40:60 token recognition error at: '$'
13:55:11,763 [ERROR] [stderr] line 12:90 extraneous input '{' expecting {<EOF>, '@', AT_PRE_WS, 'class', 'interface', 'fun', 'object', 'val', 'var', 'typealias', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'expect', 'actual'}
13:55:12,285 [ERROR] [stderr] line 38:12 extraneous input '{' expecting {<EOF>, '@', AT_PRE_WS, 'class', 'interface', 'fun', 'object', 'val', 'var', 'typealias', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'expect', 'actual'}
13:55:12,290 [ERROR] [stderr] line 40:26 no viable alternative at input '('
13:55:12,290 [ERROR] [stderr] line 41:16 extraneous input '"' expecting {<EOF>, '@', AT_PRE_WS, 'class', 'interface', 'fun', 'object', 'val', 'var', 'typealias', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'expect', 'actual'}
13:55:12,319 [ERROR] [stderr] line 44:8 no viable alternative at input '()\n        path'
13:55:12,334 [ERROR] [stderr] line 44:8 no viable alternative at input '\n        path'
13:55:12,334 [ERROR] [stderr] line 44:8 extraneous input 'path' expecting {<EOF>, '@', AT_PRE_WS, 'class', 'interface', 'fun', 'object', 'val', 'var', 'typealias', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'expect', 'actual'}
13:55:12,396 [ERROR] [stderr] line 61:12 no viable alternative at input 'private companion'
13:55:12,397 [ERROR] [stderr] line 61:29 extraneous input '{' expecting {NL, 'file', 'field', 'property', 'get', 'set', 'receiver', 'param', 'setparam', 'delegate', 'import', 'constructor', 'by', 'companion', 'init', 'where', 'catch', 'finally', 'out', 'dynamic', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'reified', 'expect', 'actual', Identifier}
13:55:12,403 [ERROR] [stderr] line 65:4 no viable alternative at input '\n    }'
13:55:12,404 [ERROR] [stderr] line 65:4 extraneous input '}' expecting {<EOF>, '@', AT_PRE_WS, 'class', 'interface', 'fun', 'object', 'val', 'var', 'typealias', 'public', 'private', 'protected', 'internal', 'enum', 'sealed', 'annotation', 'data', 'inner', 'value', 'tailrec', 'operator', 'inline', 'infix', 'external', 'suspend', 'override', 'abstract', 'final', 'open', 'const', 'lateinit', 'vararg', 'noinline', 'crossinline', 'expect', 'actual'}
13:55:12,460 [ERROR] [stderr] line 30:17 token recognition error at: '$'
13:55:12,460 [ERROR] [stderr] line 30:18 token recognition error at: '$'
13:55:12,664 [ERROR] [stderr] line 22:33 token recognition error at: '$'
13:55:12,664 [ERROR] [stderr] line 22:34 token recognition error at: '$'
13:55:12,846 [ERROR] [stderr] line 15:26 token recognition error at: '$'
13:55:12,846 [ERROR] [stderr] line 15:27 token recognition error at: '$'
13:55:13,044 [ERROR] [stderr] line 14:26 token recognition error at: '$'
13:55:13,045 [ERROR] [stderr] line 14:27 token recognition error at: '$'
13:55:13,124 [ERROR] [stderr] line 28:33 token recognition error at: '$'
13:55:13,124 [ERROR] [stderr] line 28:34 token recognition error at: '$'
13:55:13,128 [ERROR] [stderr] line 34:17 token recognition error at: '$'
13:55:13,129 [ERROR] [stderr] line 34:18 token recognition error at: '$'
13:55:13,304 [ERROR] [stderr] line 18:26 token recognition error at: '$'
13:55:13,304 [ERROR] [stderr] line 18:27 token recognition error at: '$'
13:55:13,404 [ERROR] [stderr] line 15:8 token recognition error at: '$'
13:55:13,404 [ERROR] [stderr] line 15:9 token recognition error at: '$'

Metadata

Metadata

Assignees

No one assigned

    Labels

    an:enhancementAn improvement on existing features / rules

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions