/* * Copyright 2013 Guidewire Software, Inc. */ package gw.plugin.ij.filetypes; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiFile; import gw.plugin.ij.icons.GosuIcons; import gw.plugin.ij.lang.GosuLanguage; import gw.plugin.ij.lang.psi.impl.GosuProgramFileImpl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.List; public class GosuCodeFileType extends LanguageFileType { public static final GosuCodeFileType INSTANCE = new GosuCodeFileType(); private static final String EXT_CLASS = "gs"; private GosuCodeFileType() { super(GosuLanguage.instance()); } @NotNull public String getName() { return "GosuCode"; } @NotNull public String getDescription() { return "Gosu code source files"; } @NotNull public String getDefaultExtension() { return EXT_CLASS; } public Icon getIcon() { return GosuIcons.CLASS; // TODO: Should be some general icon, not class related } public boolean isJVMDebuggingSupported() { return true; } public static IGosuFileTypeProvider getFileTypeProvider(@NotNull VirtualFile file) { return GosuCodeFileTypesManager.INSTANCE.getFileTypeProvider(file.getExtension()); } // IGosuFileType public List<String> getExtensions() { return GosuCodeFileTypesManager.INSTANCE.getRegisteredExtensions(); } @Nullable public Icon getIcon(@NotNull VirtualFile file) { final IGosuFileTypeProvider provider = getFileTypeProvider(file); if (provider != null) { return provider.getIcon(file); } else { return null; } } public PsiFile createPsiFile(@NotNull FileViewProvider viewProvider) { final VirtualFile file = viewProvider.getVirtualFile(); final IGosuFileTypeProvider provider = getFileTypeProvider(file); if (provider != null) { return provider.createGosuFile(viewProvider); } else { return new GosuProgramFileImpl(viewProvider); // For code injection (can't find provider by file extension) } } }