How to ignore LanguageInjection in kotlin PSI for value containing placeholder "\${my-placeholder}"?

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