IntelliJ IDEA 插件:将源 psi 文件与包结构中的图标相关联

IntelliJ IDEA plugin: associating a source psi file with a icon in the package structure

我正在构建一个创意插件,它需要创建扩展名为“.java”的源文件。我创建了一个文件模板并将其用于 JavaCreateTemplateInPackageAction<PsiElement> class 的实现。在上面提到的 class 的构造函数中,我用一个图标调用了超级 class 的构造函数(我之前使用 IconLoader.getIcon 加载了它)像这样

protected JavaCreateTemplateInPackageAction(String text, String description, Icon icon, boolean inSourceOnly) {
    super(text, description, icon, inSourceOnly ? JavaModuleSourceRootTypes.SOURCES : null);
}

最后,我将 plugin.xml 中的实现注册为一个动作。该代码作为使用给定模板创建源文件的魅力,但问题在于包结构它不显示给定的自定义图标,而是显示 java classes 的默认图标(字母 'c')。但是当右键单击源包以创建源文件时,给定的图标会出现在新菜单中。有人可以帮我吗?谢谢

PS:我试图将文件扩展名更改为 .java 以外的其他内容,但它仍然没有显示预期的图标,而是显示了 java 的通用图标(字母'j'图标)

您在 JavaCreateTemplateInPackageAction 中提供的图标 用于该操作。可以使用 IconProvider 覆盖项目视图中的图标,您可以使用 plugin.xml:

中的 <iconProvider> 标签进行注册
<iconProvider implementation="org.intellij.plugins.ceylon.ide.presentation.CeylonIconProvider"/>

Java代码:

public class CeylonIconProvider extends IconProvider {
    @Nullable
    @Override
    public Icon getIcon(@NotNull PsiElement element, int flags) {
        if (element instanceof CeylonFile) {
            return ...
        }

        if (element instanceof CeyLightClass) {
            ...
        }
        return null;
    }
}