对于以pycharm为目标的插件,您如何支持com.intellij.psi?

时间:2018-11-04 21:55:53

标签: intellij-plugin

在我的插件中,我正在使用com.intellij.psi.PsiMethodcom.intellij.psi.PsiClass。当我将我的AlternativeIdePath作为目标Pycharm并尝试使用我的插件时,上述两个类均出现NoClassDefFound错误。我的问题分为两部分:

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

  2. 如果我确实需要包括其他psi模块/库,那么我的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和模块源。

2 个答案:

答案 0 :(得分:0)

com.intellij.psi.PsiClassPsiMethod不是“基本PSI类”,它们是Java PSI类,并且在不支持Java的产品中不可用。在PyCharm中,您需要使用PyFunction / PyClass

要构建同时支持IntelliJ和PyCharm的插件,您需要在build.gradle中添加Python插件作为插件的依赖项(它提供与PyCharm相同的API)。在plugin.xml中,您需要在com.intellij.modules.javacom.intellij.modules.python上使用可选的依赖项,以便仅将Java依赖的组件加载到Java IDE中,而将Python依赖的组件仅加载到PyCharm中

答案 1 :(得分:0)

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

重要部分:

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

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

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

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

build.gradle 需要定义对 Java 插件的依赖 intellij { plugins = ['com.intellij.java'] }

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