您如何支持 com.intellij.psi 针对 pycharm 的插件?

How do you support com.intellij.psi for a plugin targeting pycharm?

在我的插件中,我使用了 com.intellij.psi.PsiMethodcom.intellij.psi.PsiClass。当我使用我的 alternativeIdePath 定位 Pycharm 并尝试使用我的插件时,我收到上述两个 类 的 NoClassDefFound 错误。我的问题分为两部分:

  1. 我应该使用 python 特定的 psi 类 (PyFunction/PyClass) 还是基础 com.intellij.psi 类 已经与 pycharm 兼容了吗?

  2. 如果我确实需要包含不同的 psi module/library,那在我的 build.gradle 文件中会是什么样子?

我在 build.gradle 中的 intellij 部分如下所示:

intellij {
  version '182.4505.22'
  alternativeIdePath "redacted\Toolbox\apps\PyCharm-P\ch-0\182.4505.26"
}

我的项目sdk是JDK1.8,在我的模块依赖中有Gradle: com.jetbrains:ideaIC:182.4505.22tools.jarpycharm.jar和模块源

com.intellij.psi.PsiClassPsiMethod 不是 "base PSI classes",它们是 Java PSI 类,它们不适用于不支持Java。 PyCharm中需要使用PyFunction/PyClass.

要构建同时支持 IntelliJ 和 PyCharm 的插件,您需要在 build.gradle 中添加 Python 插件作为插件的依赖项(它提供相同的 API 为 PyCharm)。在你的 plugin.xml 中,你需要使用 com.intellij.modules.javacom.intellij.modules.python 上的可选依赖项,这样你的 Java 依赖组件只会在 Java [=30] 中加载=],并且您的 Python 相关组件仅在 PyCharm.

中加载

除了yole的回答,参考了intellij的plugin sdk文档: https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html#exploring-module-and-plugin-apis

重要部分:

关于模块和插件依赖的说明:

(1) 这个table并不详尽;其他模块目前在 JetBrains 基于 IntelliJ 平台的 IDE 中可用。要查看模块列表,请在编辑 plugin.xml 文件时调用元素内容的代码完成功能。

(2) Java 语言功能在 IntelliJ 平台 2019.2 版中作为插件提取。此重构将 Java 实现与平台的其他非语言部分分开。因此,根据目标 IntelliJ 平台的版本,Java 功能的依赖性在 plugin.xml 中的表达方式不同:

2019.2 及更高版本的语法: plugin.xml 允许替代添加 com.intellij.java

build.gradle 需要定义对 Java plugin intellij { plugins = ['com.intellij.java'] }

的依赖

2019.2 之前的版本所需的语法,所有版本都允许使用: plugin.xml 添加 com.intellij.modules.java