开头

众所周知, IntelliJ IDEA 是一款宇宙级IDE
那, 开发的插件大部分都跟语言有关
这一次…
星野就要开发一个属于自己的语言!
和属于这个语言的插件!!

正文

Language

既然要弄一个语言的插件, 用头发想想都知道是需要一个叫做 Language 的类
创建一个名为 language 的包
HoshinoLanguage.java

public final class HoshinoLanguage extends Language {
	public static final HoshinoLanguage INSTANCE = new HoshinoLanguage();
	public static final String NAME = "Hoshino";
	public static final String EXTENSTION = "hsn";

	private HoshinoLanguage() {
		super(NAME);
	}
}

看起来呢, 这个类是个单例
NAME 就是这个语言的名称啦
EXTENSTION 就是语言的扩展名

LanguageFileType

既然有语言, 那么就得有对应的文件类型
就是 LanguageFileType 这个东西啦!
同样是在 language 包下
HoshinoFileType.java

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

	private HoshinoFileType() {
		super(HoshinoLanguage.INSTANCE);
	}

	@NotNull
	@Override
	public String getName() {
		return HoshinoLanguage.NAME;
	}

	@NotNull
	@Override
	public String getDescription() {
		return "Hoshino File";
	}

	@NotNull
	@Override
	public String getDefaultExtension() {
		return HoshinoLanguage.EXTENSTION;
	}

	@Nullable
	@Override
	public Icon getIcon() {
		return HoshinoIcons.hoshino;
	}
}

这个也是个单例呢emmmm
getName 获取语言文件类型的名字
getDefaultExtension 获取语言文件的扩展名
getIcon 获取语言文件的图标
(好困。。。

FileTypeFactory

刚出炉的 LanguageFileType 还不能直接食用哦
要弄上玉米油, 撒点孜然, 隔壁家小孩都馋哭了
需要用一个叫做 FileTypeFactory 的工厂类把 FileType 进行加工
HoshinoFileTypeFactory.java

public class HoshinoFileTypeFactory extends FileTypeFactory {
	@Override
	public void createFileTypes(@NotNull FileTypeConsumer consumer) {
		consumer.consume(HoshinoFileType.INSTANCE, HoshinoLanguage.EXTENSTION);
	}
}

注册 FileTypeFactory

最后在 plugin.xml 里注册这个 FileTypeFactory

<fileTypeFactory implementation="org.hoshino9.intellijplugin.language.HoshinoFileTypeFactory"/>

结尾

最后, 打开 IDE
New -> File
输入 hoshino.hsn
看看是不是有个星星的图标呢
但是这样好麻烦。。。
能不能像 Java 那样, 有一个单独的 Action 去创建文件呢?