Java 使用IntelliJ 2019.3.1为Clion开发插件。如何添加c++;我的插件项目的语言支持?
我目前正在学习为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)个提供 特定功能,以及当前随附的产品 他们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. 部分文档解释了插件可能依赖于其他插件, 以及如何添加依赖项 插件依赖关系 您的插件可能依赖于其他插件的类。在这种情况下,, 插件可以是捆绑的、第三方的,甚至是您自己的。对于 有关如何表达依赖关系的说明,请参阅插件 依赖关
根据上面提到的表,我需要添加<代码> 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>