Java 使用IntelliJ 2019.3.1为Clion开发插件。如何添加c++;我的插件项目的语言支持?

Java 使用IntelliJ 2019.3.1为Clion开发插件。如何添加c++;我的插件项目的语言支持?,java,intellij-idea,clion,intellij-plugin,Java,Intellij Idea,Clion,Intellij Plugin,我目前正在学习为IntelliJ IDE编写插件。我对这本书特别感兴趣 为CLion开发插件。因此,我想为C++插件添加对C++的支持。 我的问题是: 我在文档中读到了如何开发C++插件,但是它的方式对我来说不起作用。IntelliJ无法解析我要添加的依赖项 我目前所知: 1. 部分文档解释了插件可能依赖于其他插件, 以及如何添加依赖项 插件依赖关系 您的插件可能依赖于其他插件的类。在这种情况下,, 插件可以是捆绑的、第三方的,甚至是您自己的。对于 有关如何表达依赖关系的说明,请参阅插件 依赖关

我目前正在学习为IntelliJ IDE编写插件。我对这本书特别感兴趣 为CLion开发插件。因此,我想为C++插件添加对C++的支持。 我的问题是: 我在文档中读到了如何开发C++插件,但是它的方式对我来说不起作用。IntelliJ无法解析我要添加的依赖项

我目前所知: 1. 部分文档解释了插件可能依赖于其他插件, 以及如何添加依赖项

插件依赖关系

您的插件可能依赖于其他插件的类。在这种情况下,, 插件可以是捆绑的、第三方的,甚至是您自己的。对于 有关如何表达依赖关系的说明,请参阅插件 依赖关系

您的插件应该指定它将使用的产品 兼容(所有基于IntelliJ的IDE、仅限CLion或某些子集)。 您可以通过使用 plugin.xml中的标签(请参阅插件与IntelliJ产品的兼容性)

2.文档的一部分解释了哪个插件包含哪些功能。每种特定的语言似乎都是一个插件。所以开发一个想要解析C++的插件,将依赖于C++插件。 特定于功能的模块更专业的功能也通过基于IntelliJ平台的模块和插件提供 产品。例如,com.intellij.modules.python模块支持 Python语言特有的功能。如果插件使用 此模块提供的功能,例如特定于Python的检查 和重构,它必须声明对此模块的依赖关系

下表列出了(1)个提供 特定功能,以及当前随附的产品 他们

根据上面提到的表,我需要添加<代码> COM.ItLIJ.Mistult.CIDR.Lang/<代码>作为C++的依赖关系。但是,当我将这一行添加到我的

plugins.xml
文件时,cidr.lang部分无法识别

3.在Stackoverflow问题中,关于java插件开发,有人回答说最近有一个变化,现在还需要添加所需的插件来build.gradle。此外,还有一个变化,java语言支持现在是一个内置插件

我猜该怎么办 我猜C++的支持现在也是一个插件了吗?但我怎样才能添加它呢

所以不是

intellij {
    version '2019.2'
    plugins 'java'
}
也许我需要这样的东西

intellij {
    version '2019.2'
    plugins 'c++' // or maybe cidr??
}

附录 我的java类:

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.ui.Messages;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiRecursiveElementWalkingVisitor;
//import com.jetbrains.cidr.lang.psi.OCFunctionDefinition; <-- This import does not work 
public class HelloAction extends AnAction {
    public HelloAction() {
        super("Hello");
    }

    @Override
    public void actionPerformed(AnActionEvent anActionEvent) {
        Editor editor = anActionEvent.getData(CommonDataKeys.EDITOR);
        PsiFile psiFile = anActionEvent.getData(CommonDataKeys.PSI_FILE);
        if (editor == null || psiFile == null) return;
        int offset = editor.getCaretModel().getOffset();

        final StringBuilder infoBuilder = new StringBuilder();
        PsiElement element = psiFile.findElementAt(offset);
        infoBuilder.append("Element at caret: ").append(element).append("\n");
        Messages.showMessageDialog(anActionEvent.getProject(), infoBuilder.toString(), "PSI Info", null);

        psiFile.accept(new PsiRecursiveElementWalkingVisitor(){
            @Override
            public void visitElement(PsiElement element) {
                super.visitElement(element);
                infoBuilder.append(element.getText()).append("\n");

            }
        });
    }

    @Override
    public void update(AnActionEvent e) {
        Editor editor = e.getData(CommonDataKeys.EDITOR);
        PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
        e.getPresentation().setEnabled(editor != null && psiFile != null);
    }
}
import com.intellij.openapi.actionSystem.anaAction;
导入com.intellij.openapi.actionSystem.AnActionEvent;
导入com.intellij.openapi.actionSystem.CommonDataKeys;
导入com.intellij.openapi.editor.editor;
导入com.intellij.openapi.ui.Messages;
导入com.intellij.psi.PsiElement;
导入com.intellij.psi.psi文件;
导入com.intellij.psi.PsiRecursiveElementWalkingVisitor;

//导入com.jetbrains.cidr.lang.psi.OCFunctionDefinition 我在文档中找到了答案。我只是需要重新导入这个项目

探索模块和插件API

一旦在plugin.xml中声明了对模块或插件的依赖关系, 探索其中可用的包和类非常有用 附属国。以下部分给出了一些建议的程序 发现项目所在模块或插件中的可用内容 视情况而定。这些过程假定项目具有build.gradle和 plugin.xml依赖项配置正确。探索API作为 消费者

探索插件或模块中可用的包和类 利用IntelliJ IDEA中的功能

如果项目不是最新的,请将Gradle项目作为 第一步。重新导入项目将自动更新 依赖关系

<对于C++语言支持,不需要添加一些东西来构建。 My plugin.xml

<idea-plugin>
    <id>org.helloplugin</id>
    <name>Hello Action Project</name>
    <version>0.0.1</version>
    <vendor email="dummy" url="dummy">dummy</vendor>

    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.cidr.lang</depends> // cannot be resolved

    <extensions defaultExtensionNs="com.intellij">
    </extensions>

    <actions>
        <group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
            <add-to-group group-id="MainMenu" anchor="last"/>
            <action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/>
        </group>
    </actions>
</idea-plugin>
<idea-plugin>
    <id>org.helloplugin</id>
    <name>Hello Action Project</name>
    <version>0.0.1</version>
    <vendor email="dummy" url="dummy">dummy</vendor>

    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.cidr.lang</depends>


    <extensions defaultExtensionNs="com.intellij">
    </extensions>

    <actions>
        <group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
            <add-to-group group-id="MainMenu" anchor="last"/>
            <action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/>
        </group>
    </actions> </idea-plugin>

org.helloplugin
你好行动计划
0.0.1
笨蛋
com.intellij.modules.platform
com.intellij.modules.lang
com.intellij.modules.cidr.lang
<idea-plugin>
    <id>org.helloplugin</id>
    <name>Hello Action Project</name>
    <version>0.0.1</version>
    <vendor email="dummy" url="dummy">dummy</vendor>

    <depends>com.intellij.modules.platform</depends>
    <depends>com.intellij.modules.lang</depends>
    <depends>com.intellij.modules.cidr.lang</depends>


    <extensions defaultExtensionNs="com.intellij">
    </extensions>

    <actions>
        <group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
            <add-to-group group-id="MainMenu" anchor="last"/>
            <action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/>
        </group>
    </actions> </idea-plugin>