How to ignore LanguageInjection in kotlin PSI for value containing placeholder “${my-placeholder}”
I am using ignore-pattern
as the value \\\$\{.+\}
but it is ignored completely.
injectionConfig
:
<injection language="RegExp" injector-id="kotlin">
<display name>...</display name>
<place><![CDATA[ ...]]></place>
<ignore-pattern>\\\$\{.+\}</ignore-pattern>
</injection>
Can anyone help me?
Could you show an example where you want to ignore the injection? Which plugin sets the injection place?
1 Like
Hi Yuriy,
I’m still developing the plugin,
In Java it works as expected, but in Kotlin it injects, but doesn’t ignore
the code is like this so far.
resources/META-INF/plugin.xml
<idea-plugin require-restart="false">
<depends>com.intellij.modules.java</depends>
<depends>com.intellij.modules.lang</depends>
<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.java</depends>
<depends>org.jetbrains.kotlin</depends>
<extensions defaultExtensionNs="org.intellij.intelliLang">
<injectionConfig config="javainjections.xml"/>
</extensions>
...
</idea-plugin>
resources/javainjections.xml
<?xml version="1.0" encoding="UTF-8"?>
<component name="LanguageInjectionConfiguration">
<injection language="RegExp" injector-id="java">
<display-name>JsonFormat (com.fasterxml.jackson.annotation.JsonFormat)</display-name>
<place><![CDATA[
psiMethod().withName("pattern").withParameters().definedInClass("com.fasterxml.jackson.annotation.JsonFormat")
]]></place>
<ignore-pattern>\$\{.+\}</ignore-pattern>
</injection>
<injection language="RegExp" injector-id="kotlin">
<display-name>JsonFormat (com.fasterxml.jackson.annotation.JsonFormat)</display-name>
<place><![CDATA[
psiMethod().withName("pattern").withParameters().definedInClass("com.fasterxml.jackson.annotation.JsonFormat")
]]></place>
<ignore-pattern>\\\$\{.+\}</ignore-pattern>
</injection>
</component>
My test
package dev.sample;
import com.fasterxml.jackson.annotation.JsonFormat;
public class AnyTest {
//Good ignored-pattern placeholder
@JsonFormat(pattern = "${my-placeholder:(\\d{4})\\/(\\d{2})\\/(\\d{2})}")
LocalDate dateWithPlaceholder;
//Good
@JsonFormat(pattern = "(\\d{4})\\/(\\d{2})\\/(\\d{2})")
LocalDate dateWithoutPlaceholder;
}
package dev.sample
import com.fasterxml.jackson.annotation.JsonFormat
class KtAnyTest(
//bad: ignored-pattern placeholder failure
@JsonFormat(pattern = "\${my-placeholder:(\\d{4})\\/(\\d{2})\\/(\\d{2})}")
val dateWithPlaceholder: LocalDate?,
//good: injection OK
@JsonFormat(pattern = "(\\d{4})\\/(\\d{2})\\/(\\d{2})")
val dateWithoutPlaceholder: LocalDate?
)