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?
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?
)