您如何支持 com.intellij.psi 针对 pycharm 的插件?
How do you support com.intellij.psi for a plugin targeting pycharm?
在我的插件中,我使用了 com.intellij.psi.PsiMethod
和 com.intellij.psi.PsiClass
。当我使用我的 alternativeIdePath 定位 Pycharm 并尝试使用我的插件时,我收到上述两个 类 的 NoClassDefFound
错误。我的问题分为两部分:
我应该使用 python 特定的 psi 类 (PyFunction
/PyClass
) 还是基础 com.intellij.psi
类 已经与 pycharm 兼容了吗?
如果我确实需要包含不同的 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.22
、tools.jar
、pycharm.jar
和模块源
com.intellij.psi.PsiClass
和 PsiMethod
不是 "base PSI classes",它们是 Java PSI 类,它们不适用于不支持Java。 PyCharm中需要使用PyFunction
/PyClass
.
要构建同时支持 IntelliJ 和 PyCharm 的插件,您需要在 build.gradle 中添加 Python 插件作为插件的依赖项(它提供相同的 API 为 PyCharm)。在你的 plugin.xml 中,你需要使用 com.intellij.modules.java
和 com.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
在我的插件中,我使用了 com.intellij.psi.PsiMethod
和 com.intellij.psi.PsiClass
。当我使用我的 alternativeIdePath 定位 Pycharm 并尝试使用我的插件时,我收到上述两个 类 的 NoClassDefFound
错误。我的问题分为两部分:
我应该使用 python 特定的 psi 类 (
PyFunction
/PyClass
) 还是基础com.intellij.psi
类 已经与 pycharm 兼容了吗?如果我确实需要包含不同的 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.22
、tools.jar
、pycharm.jar
和模块源
com.intellij.psi.PsiClass
和 PsiMethod
不是 "base PSI classes",它们是 Java PSI 类,它们不适用于不支持Java。 PyCharm中需要使用PyFunction
/PyClass
.
要构建同时支持 IntelliJ 和 PyCharm 的插件,您需要在 build.gradle 中添加 Python 插件作为插件的依赖项(它提供相同的 API 为 PyCharm)。在你的 plugin.xml 中,你需要使用 com.intellij.modules.java
和 com.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