You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

IntelliJ IDEA插件开发:如何修改文件模板扩展名为.cqt

解决IntelliJ IDEA插件自定义文件模板扩展名问题

你已经找对了核心配置方向,生成的文件始终是.java扩展名,大概率是模板处理器(CreateFromTemplateHandler)没正确接管扩展名逻辑,或者plugin.xml的配置缺了关键关联项。我给你梳理下完整的修复步骤:

1. 完善CroquetteCreateFromTemplateHandler的核心实现

这是控制扩展名的关键,你需要重写getExtension方法强制返回.cqt,同时确保文件名生成逻辑正确:

public class CroquetteCreateFromTemplateHandler extends CreateFromTemplateHandler {
    @Override
    protected String getExtension() {
        // 直接指定自定义扩展名,覆盖默认的.java
        return "cqt";
    }

    @Override
    public boolean handlesTemplate(Template template) {
        // 匹配你在plugin.xml里定义的模板名称
        return "Croquette File".equals(template.getName());
    }

    @Override
    public void createFromTemplate(@NotNull Project project, @NotNull PsiDirectory directory, @NotNull String fileName, @NotNull Template template, @NotNull String templateText, @NotNull Map<String, Object> props, @Nullable PsiElement anchor) throws IncorrectOperationException {
        // 兜底处理:确保用户输入的文件名自动补上.cqt后缀
        String finalFileName = fileName.endsWith(".cqt") ? fileName : fileName + ".cqt";
        super.createFromTemplate(project, directory, finalFileName, template, templateText, props, anchor);
    }
}

2. 补全plugin.xml的完整配置

你已经添加了internalFileTemplatecreateFromTemplateHandler,但还要补全文件创建动作的绑定,以及扩展名和自定义文件类型的关联:

<idea-plugin>
    <!-- 1. 注册内部文件模板 -->
    <internalFileTemplate name="Croquette File" />

    <!-- 2. 注册模板处理器,关联到你的实现类 -->
    <createFromTemplateHandler implementation="com.yourplugin.package.CroquetteCreateFromTemplateHandler" />

    <!-- 3. 注册右键菜单创建文件的Action(可选,但提升用户体验) -->
    <action id="Croquette.CreateCustomFile" class="com.yourplugin.package.action.CreateCroquetteFileAction" text="Croquette File" description="Create a new Croquette file">
        <add-to-group group-id="NewGroup" anchor="after" relative-to-action="NewJavaClass" />
    </action>

    <!-- 4. 关联.cqt扩展名到自定义文件类型(如果需要语法高亮等特性) -->
    <fileType implementation="com.yourplugin.package.CroquetteFileType" name="Croquette File" extension="cqt" />
</idea-plugin>

3. (可选)注册自定义文件类型

如果你希望.cqt文件被IDE识别为专属类型(比如语法高亮、图标),需要定义CroquetteFileType

public class CroquetteFileType extends LanguageFileType {
    public static final CroquetteFileType INSTANCE = new CroquetteFileType();

    private CroquetteFileType() {
        super(CroquetteLanguage.INSTANCE);
    }

    @NotNull
    @Override
    public String getName() {
        return "Croquette File";
    }

    @NotNull
    @Override
    public String getDescription() {
        return "Custom Croquette file type";
    }

    @NotNull
    @Override
    public String getDefaultExtension() {
        return "cqt";
    }

    @Nullable
    @Override
    public Icon getIcon() {
        // 返回你的自定义文件图标,比如Icons.CROQUETTE_ICON
        return null;
    }
}

4. 检查模板内容的占位符

确保你的内部模板文件(通常放在resources/fileTemplates/internal/Croquette File)没有硬编码.java相关内容,比如:

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end

public class ${NAME} {
    // Croquette file content here
}

这里的${NAME}会被处理器替换为用户输入的文件名,再加上我们指定的.cqt后缀。

最后提醒:修改完代码和配置后,一定要重新构建插件并重启IDEA,IDE缓存可能会导致配置不即时生效。

内容的提问来源于stack exchange,提问作者bodand

火山引擎 最新活动