How to import from com.intellij.compiler.actions

Google AI Says: To import classes from com.intellij.compiler within an IntelliJ-based plugin, you need to declare the appropriate dependencies in your plugin project’s configuration.

The com.intellij.compiler package belongs to the IntelliJ Platform’s core compiler module. To access these classes, you must: Declare a dependency in plugin.xml.

Add the following line within the <depends> tags in your plugin.xml file:

  <depends>com.intellij.modules.java</depends>

I got: Cannot resolve plugin 'com.intellij.modules.java' in dependencies (Reference: Plugin Dependencies) 

How do I make it work?

Hi,

  • did you base your project on the IntelliJ Platform Gradle Plugin?
  • can you share the plugin.xml?

Yes I did base my project on the IntelliJ Platform Gradle Plugin.

This is my plugin.xml: – see line: 24-25

<!-- Plugin Configuration File. Read more: https://plugins.jetbrains.com/docs/intellij/plugin-configuration-file.html -->
<idea-plugin>
    <!-- Unique identifier of the plugin. It should be FQN. It cannot be changed between the plugin versions. -->
    <id>com.portablesimula.SimulaPlugin</id>

    <!-- Public plugin name should be written in Title Case.
         Guidelines: https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-name -->
    <name>SimulaPlugin</name>

    <!-- A displayed Vendor name or Organization ID displayed on the Plugins Page. -->
    <vendor url="https://portablesimula.github.io/github.io/">Portable Simula</vendor>

    <!-- Description of the plugin displayed on the Plugin Page and IDE Plugin Manager.
         Guidelines: https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-description -->
    <!--description><![CDATA[
        Enter short description for your plugin here.<br>
        <em>most HTML tags may be used</em>
    ]]></description-->

    <!-- Product and plugin compatibility requirements.
         Read more: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
    <depends>com.intellij.modules.platform</depends>

    <!-- Following line: Cannot resolve plugin 'com.intellij.modules.java' in dependencies  -->
    <depends>com.intellij.modules.java</depends>


    <!-- Extension points defined by the plugin.
         Read more: https://plugins.jetbrains.com/docs/intellij/plugin-extension-points.html -->
    <extensions defaultExtensionNs="com.intellij">

        <fileType name="Simula File" implementationClass="com.simula.extensions.lang.SimulaFileType"
                fieldName="INSTANCE" language="Simula" extensions="sim"/>

        <lang.syntaxHighlighterFactory
                language="Simula"
                implementationClass="com.simula.extensions.highlighterExtension.zz_highlighter.SimulaSyntaxHighlighterFactory"/>

        <!--lang.parserDefinition
                language="Simula"
                implementationClass="com.simula.lang.parser.SimulaParserDefinition"/-->

        <!-- New Project -->
        <newProjectWizard.languageGenerator implementation="com.simula.extensions.newProject.SimulaNewProjectWizard"/>

        <!-- Run Configuration -->
    <!-- test1
        <configurationType implementation="com.simula.extensions.runConfigurationExtension.SimulaRunConfigurationType"/>
        <runConfigurationProducer implementation="com.simula.extensions.runConfigurationExtension.SimulaRunConfigurationProducer"/>
    -->
    <!-- test2
        <configurationType implementation="com.simula.extensions.runConfigurationExtension.test2.TestSimulaConfigurationType"/>
        <runConfigurationProducer implementation="com.simula.extensions.runConfigurationExtension.test2.TestSimulaRunConfigurationProducer"/>
    -->

    <!-- test3 -->
        <!-- Register your main configuration type first -->
        <configurationType implementation="com.simula.extensions.runConfigurationExtension.SimulaRunConfigurationType"/>

        <!-- Register the producer to link it to the context menu -->
        <runConfigurationProducer implementation="com.simula.extensions.runConfigurationExtension.MyFileRunConfigurationProducer"/>
    -->

        <executor implementation="com.simula.extensions.programRunner.InCmdExecutor"/>
        <programRunner implementation="com.simula.extensions.programRunner.InCmdRunner"/>
        <projectConfigurable instance="com.simula.extensions.programRunner.InCmdConfigurable"/>
        <projectService serviceImplementation="com.simula.extensions.programRunner.OptionsPatchConfiguration"/>


    </extensions>

    <applicationListeners>
        <listener class="com.simula.actions.MyActionLogger" topic="com.intellij.openapi.actionSystem.ex.AnActionListener"/>
    </applicationListeners>

    <actions>

        <action id="MyPlugin.MyAction"
                class="com.simula.actions.toolsMenu.SimulaOptions"
                text="My Plugin Menu Item"
                description="A description for my plugin's menu item">
            <add-to-group group-id="ToolsMenu" anchor="first"/>
            <!-- Or other group-id like "FileMenu", "EditMenu", "ProjectViewPopupMenu", etc. -->
            <!-- Anchor can be "first", "last", "before", or "after" with a specific action ID -->
        </action>

        <!-- Build Actions -->
        <action id="MyBuildPlugin.MyBuild"
                class="com.simula.actions.build.SimulaBuildAction"
                text="Simula Build"
                description="Triggers a simula build for the plugin">
            <add-to-group group-id="BuildMenu" anchor="last"/>
        </action>

    </actions>
</idea-plugin>

Did you put the Java plugin into bundledPlugin()s in the build.gradle.kts?

dependencies {
  intellijPlatform {
    bundledPlugin("com.intellij.java")
  }
}

Any plugin that is a dependency of your plugin needs to be declared in two places:

  1. in plugin.xml via <depends>. You did that correctly, and com.intellij.modules.java is an alias to com.intellij.java and a preferred identifier.
  2. in build.gradle.kts. Since Java is a bundled plugin, use the bundledPlugin function.

This is also described in the blogpost.

I have now added the bundledPlugin() in the build.gradle.ktsbut with no effect.

Then I read the blogpost.

It says:

“ you need to tell Gradle about the Java plugin. Add the following to build.gradle in order to include classes from the Java plugin into the compilation classpath, and tell the IDE to load the plugin at runtime:

intellij {

plugins = [‘com.intellij.java’]

// …

}

Please let us know if you have any issues. “

I tried to put it in build.gradle.kts at several places, but got errors all the time.

Eg: Unresolved reference ‘intellij’.

This is my build.gradle.kts:

plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm") version "2.1.0"
    id("org.jetbrains.intellij.platform") version "2.7.1"
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    intellijPlatform {
        defaultRepositories()
    }
}

sourceSets {
    main {
        java {
            srcDirs("src/main/gen")
        }
    }
}

// Configure IntelliJ Platform Gradle Plugin
// Read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin.html
dependencies {
    intellijPlatform {
        create("IC", "2025.1.4.1")
        testFramework(org.jetbrains.intellij.platform.gradle.TestFrameworkType.Platform)

        // Add necessary plugin dependencies for compilation here, example:
        // bundledPlugin("com.intellij.java")
        bundledPlugin("com.intellij.java")
    }
}

intellij {

    plugins = ['com.intellij.java']

// ...

}

intellijPlatform {
    pluginConfiguration {
        ideaVersion {
            sinceBuild = "251"
        }

        changeNotes = """
            Initial version
        """.trimIndent()
    }
}

tasks {
    // Set the JVM compatibility versions
    withType<JavaCompile> {
        sourceCompatibility = "21"
        targetCompatibility = "21"
    }
}

kotlin {
    compilerOptions {
        jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_21)
    }
}

I am sorry, the blogpost might have mislead you, as it is using non-Kotlin syntax for Gradle build files.

This buildscript works for me:

import org.jetbrains.intellij.platform.gradle.TestFrameworkType

plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm") version "2.2.21"
    id("org.jetbrains.intellij.platform") version "2.10.5"
}

group = "com.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
    intellijPlatform {
        defaultRepositories()
    }
}

sourceSets {
    main {
        java {
            srcDirs("src/main/gen")
        }
    }
}

dependencies {
    intellijPlatform {
        create("IC", "2025.1.4.1")
        testFramework(TestFrameworkType.Platform)

        bundledPlugin("com.intellij.java")
    }
}

intellijPlatform {
    pluginConfiguration {
        ideaVersion {
            sinceBuild = "251"
        }

        changeNotes = """
            Initial version
        """.trimIndent()
    }
}

kotlin {
    jvmToolchain(21)
}

That plugin has the following descriptor:

<idea-plugin>
    <id>com.portablesimula.SimulaPlugin</id>

    <name>SimulaPlugin</name>

    <vendor url="https://portablesimula.github.io/github.io/">Portable Simula</vendor>

    <description>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque efficitur ipsum sit amet magna euismod, sed sagittis eros pulvinar.
    </description>

    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.modules.java</depends>

    <actions>
        <action id="com.portablesimula.SomeAction"
                class="com.portablesimula.SomeAction"
                text="Invoke Some Action">
            <add-to-group group-id="ToolsMenu"/>
        </action>
    </actions>
</idea-plugin>

Additionally, Gradle is on 8.14.

After each Gradle buildscript change (build.gradle.kts) remember to Sync Gradle Changes to synchronize with IntelliJ IDEA.

If that does not work, please share your project publicly, if possible.