idea插件开发-自定义语言7-Code Completion

        自定义语言插件可以提供两种主要类型的代码完成:reference completion 和Contributor-based completion的完成。前者更容易实现,但只支持基本的补全动作。后者会复杂一些,但功能更强大支持所有三种完成类型(基本、智能和类名),并且可用于实现关键字完成等。

一、reference completion 

        为了填充完成列表,IDE 调用PsiReference.getVariants()插入符号位置的引用或将放置在插入符号处的虚拟引用,这个方法需要返回包含字符串、实例或类实例的对象数组,PsiElement或LookupElement。如果PsiElement在数组中返回一个实例,完成列表将显示该元素的图标。

        最常见的实现getVariants()方式是使用与PsiReference.resolve()中相同的函数向上遍历树。收集PsiScopeProcessor给execute()方法的所有声明并将它们作为数组返回以填充完成列表。

        实现时可参考PsiSymbolReference提供的PsiCompletableReference接口。

二、Contributor-based completion

        需要实现CompletionContributor接口,并且注册com.intellij.completion.contributor扩展点并指定language属性。模式是针对叶 PSI 元素进行检查的。如果要匹配复合元素,请使用withParent()withSuperParent()方法。一个参考示例:CompletionContributor 。

三、Lookup items

        完成列表中显示的项目由LookupElement接口的实例表示,由LookupElementBuilder类创建。对于每个查找元素,您可以指定以下属性:

你可能感兴趣的:(#,Intellij,IDE插件开发,数据结构,java,设计模式,插件,intellij-idea)