IDEA插件开发---Extension Points

Posted 流子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA插件开发---Extension Points相关的知识,希望对你有一定的参考价值。

通过在插件中定义扩展点,您可以允许其他插件扩展您的插件的功能。有两种类型的扩展点:

接口扩展点允许其他插件使用代码扩展您的插件。当您定义接口扩展点时,您指定了一个接口,其他插件将提供实现该接口的类。然后,您将能够在这些接口上调用方法。

Bean扩展点允许其他插件使用data扩展您的插件。您指定扩展类的完全限定名称,其他插件将提供将转换为该类实例的数据。

声明扩展点
您可以在插件配置文件plugin.xml的和部分中声明扩展和扩展点。

要在插件中声明扩展点,请在plugin.xml中添加一个部分。然后插入一个子元素,该子元素定义扩展点名称和允许扩展插件功能的 bean 类或接口的名称,分别在,和属性中。namebeanClassinterface

myPlugin /META-INF /plugin.xml

my.plugin
<extensionPoint
    name="myExtensionPoint2"
    interface="com.example.MyInterface"/>
该name属性为此扩展点分配一个唯一名称。使用扩展点所需的完全限定名称是通过前缀+ .:my.plugin.myExtensionPoint1和my.plugin.myExtensionPoint2.

该beanClass属性设置一个 bean 类,该类指定一个或多个使用该注解进行@Attribute注解的属性。请注意,bean 类不遵循 JavaBean 标准。

该interface属性设置了一个接口,该接口有助于扩展点的插件必须实现。

该area属性决定了扩展将被实例化的范围。由于扩展应该是无状态的,所以不建议使用非默认。必须是IDEA_APPLICATION应用程序(默认)、IDEA_PROJECT项目或IDEA_MODULE模块范围之一。

对扩展点有贡献的插件将从plugin.xml文件中读取这些属性。

请参阅捆绑插件 API 源部分,解释如何将扩展点源公开给其他插件。

样本
MyBeanClass为了澄清这一点,请考虑上述plugin.xml文件中使用的以下示例bean 类:

myPlugin /src /com /myplugin /MyBeanClass.java

public class MyBeanClass extends AbstractExtensionPointBean

@Attribute(“key”)
public String key;

@Attribute(“implementationClass”)
public String implementationClass;

public String getKey()
return key;

public String getClass()
return implementationClass;


有关如何提供智能完成/验证的信息,请参阅扩展属性代码洞察。

对于anotherPlugin中的上述扩展点用法,将如下所示(另请参见声明扩展):

anotherPlugin /META-INF /plugin.xml

another.plugin

my.plugin

<myExtensionPoint2
    implementation="another.MyInterfaceImpl"/>
使用扩展点 要在运行时引用所有已注册的扩展实例,请声明传入与其在 plugin.xml 中的声明ExtensionPointName匹配的完全限定名称。

myPlugin /src /com /myplugin /MyExtensionUsingService.java

public class MyExtensionUsingService

private static final ExtensionPointName EP_NAME =
ExtensionPointName.create(“my.plugin.myExtensionPoint1”);

public void useExtensions()
for (MyBeanClass extension : EP_NAME.getExtensionList())
String key = extension.getKey();
String clazz = extension.getClass();
// …



声明的装订线图标允许导航到plugin.xmlExtensionPointName中的相应声明。

动态扩展点
要支持动态插件(2020.1 及更高版本),扩展点必须遵守特定的使用规则:

每次使用都会枚举扩展,并且扩展实例不会存储在任何地方

或者,ExtensionPointListener可以执行数据结构的必要更新(通过注册ExtensionPointName.addExtensionPointListener())

匹配这些条件的扩展点可以通过在声明中添加来标记为动态的:dynamic=“true”

通过Plugin DevKit |突出显示所有非动态扩展点 插件描述符 | 在 IntelliJ IDEA 2020.1 或更高版本中提供Plugin.xml 动态插件验证检查。以前的版本还将该dynamic属性突出显示为“实验性”。

以上是关于IDEA插件开发---Extension Points的主要内容,如果未能解决你的问题,请参考以下文章

idea Plugin "Maven Integration Extension" was not loaded: required plugin "Maven Int

如何使用FireFox插件FirePHP调试PHP

iOS开发------Widget(Today Extension)插件化开发

iOS小技能: 开发 uni 原生插件(支持iOS Extension)

chrome extension插件扩展开发部分文档

chrome extension插件扩展开发部分文档