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;
}
}
我正在构建一个创意插件,它需要创建扩展名为“.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;
}
}