idea插件开发之如何获取用户输入的变量名(类变量,局部变量等)

发布于:2024-06-21 ⋅ 阅读:(108) ⋅ 点赞:(0)

写在前面

比如我们要开发一个变量名称补全功能的插件,此时就需要在用户输入时获取当前的最新输入内容,本文就来看下如何来做。

1:开发

首先我们需要创建一个CompletionContributor的子类,还需要一个CompletionProvider的子类来真正获取和处理用户的输入,源码如下:

public class ListenUserInput extends CompletionContributor {

    public ListenUserInput() {
        CompletionProvider<CompletionParameters> provider = new DefaultCompletionProvider();

        /**
         * 设置监听哪些类型的变量
         *
         * PsiLocalVariable 方法内的局部变量
         * PsiMethod 方法名称
         * PsiField 类字段
         * PsiParameter 方法参数
         * 实际情况按需设置即可
         */
        extend(CompletionType.BASIC, psiElement(PsiIdentifier.class).withParent(PsiLocalVariable.class), provider);
        extend(CompletionType.BASIC, psiElement(PsiIdentifier.class).withParent(PsiMethod.class), provider);
        extend(CompletionType.BASIC, psiElement(PsiIdentifier.class).withParent(PsiField.class), provider);
        extend(CompletionType.BASIC, psiElement(PsiIdentifier.class).withParent(PsiParameter.class), provider);
    }

    static class DefaultCompletionProvider extends CompletionProvider<CompletionParameters> {
        public DefaultCompletionProvider() {
        }

        /**
         * 在该方法中可以获取到当前用户录入的内容,并执行操作
         * @param parameters
         * @param context
         * @param result
         */
        @Override
        protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) {
            PrefixMatcher prefixMatcher = result.getPrefixMatcher();
            String prefix = prefixMatcher.getPrefix();
            System.out.println("输入了:" + prefix);
        }
    }
}

接着类ListenUserInput还需要注册到plugin.xml中的completion.contributor扩展中:

<extensions defaultExtensionNs="com.intellij">
    <!-- Add your extensions here -->
    <completion.contributor language="JAVA"
                            order="first"
                            implementationClass="tt.ListenUserInput"/>
</extensions>

这就完了。

2:测试

运行:
在这里插入图片描述
测试:
在这里插入图片描述

写在后面

参考文章列表


网站公告

今日签到

点亮在社区的每一天
去签到