Move fileType to upper level

This commit is contained in:
Gregory.Shrago
2015-01-31 00:14:44 +03:00
parent a8850f9303
commit 87ba153a2d
4 changed files with 93 additions and 65 deletions
@@ -169,7 +169,7 @@ public abstract class ScratchFileServiceImpl extends ScratchFileService {
@Override
public Language getMapping(@Nullable VirtualFile file) {
Language language = super.getMapping(file);
if (language == null && file != null && file.getFileType() == ScratchRootType.SCRATCH_FILE_TYPE) {
if (language == null && file != null && file.getFileType() == ScratchFileType.INSTANCE) {
String extension = file.getExtension();
FileType fileType = extension == null ? null : FileTypeManager.getInstance().getFileTypeByExtension(extension);
language = fileType instanceof LanguageFileType ? ((LanguageFileType)fileType).getLanguage() : null;
@@ -229,6 +229,14 @@ public abstract class ScratchFileServiceImpl extends ScratchFileService {
}
}
public static class TypeFactory extends FileTypeFactory {
@Override
public void createFileTypes(@NotNull FileTypeConsumer consumer) {
consumer.consume(ScratchFileType.INSTANCE);
}
}
public static class Substitutor extends LanguageSubstitutor {
@Nullable
@Override
@@ -275,7 +283,7 @@ public abstract class ScratchFileServiceImpl extends ScratchFileService {
@Override
public boolean isWritable(@NotNull VirtualFile file) {
return ScratchFileService.getInstance().getRootType(file) != null;
return file.getFileType() == ScratchFileType.INSTANCE;
}
}
@@ -0,0 +1,78 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.scratch;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.fileTypes.PlainTextLanguage;
import com.intellij.openapi.fileTypes.ex.FileTypeIdentifiableByVirtualFile;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
/**
* @author gregsh
*/
public class ScratchFileType extends LanguageFileType implements FileTypeIdentifiableByVirtualFile {
public static final LanguageFileType INSTANCE = new ScratchFileType();
ScratchFileType() {
super(PlainTextLanguage.INSTANCE);
}
@Override
public boolean isMyFileType(@NotNull VirtualFile file) {
return ScratchFileService.getInstance().getRootType(file) != null;
}
@NotNull
@Override
public String getName() {
return "Scratch";
}
@NotNull
@Override
public String getDescription() {
return "Scratch";
}
@NotNull
@Override
public String getDefaultExtension() {
return "";
}
@Nullable
@Override
public Icon getIcon() {
return PlainTextFileType.INSTANCE.getIcon();
}
@Override
public boolean isReadOnly() {
return true;
}
@Nullable
@Override
public String getCharset(@NotNull VirtualFile file, @NotNull byte[] content) {
return null;
}
}
@@ -18,8 +18,6 @@ package com.intellij.ide.scratch;
import com.intellij.icons.AllIcons;
import com.intellij.lang.Language;
import com.intellij.lang.PerFileMappings;
import com.intellij.openapi.fileTypes.*;
import com.intellij.openapi.fileTypes.ex.FileTypeIdentifiableByVirtualFile;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.LanguageSubstitutors;
@@ -35,8 +33,6 @@ import javax.swing.*;
*/
public final class ScratchRootType extends RootType {
public static final LanguageFileType SCRATCH_FILE_TYPE = new MyFileType();
@NotNull
public static ScratchRootType getInstance() {
return findByClass(ScratchRootType.class);
@@ -50,69 +46,14 @@ public final class ScratchRootType extends RootType {
public Language substituteLanguage(@NotNull Project project, @NotNull VirtualFile file) {
PerFileMappings<Language> mapping = ScratchFileService.getInstance().getScratchesMapping();
Language language = mapping.getMapping(file);
return language != null && language != SCRATCH_FILE_TYPE.getLanguage() ?
return language != null && language != ScratchFileType.INSTANCE.getLanguage() ?
LanguageSubstitutors.INSTANCE.substituteLanguage(language, file, project) : language;
}
@Nullable
@Override
public Icon substituteIcon(@NotNull Project project, @NotNull VirtualFile file) {
Icon icon = ObjectUtils.chooseNotNull(super.substituteIcon(project, file), SCRATCH_FILE_TYPE.getIcon());
Icon icon = ObjectUtils.chooseNotNull(super.substituteIcon(project, file), ScratchFileType.INSTANCE.getIcon());
return LayeredIcon.create(icon, AllIcons.Actions.Scratch);
}
public static class TypeFactory extends FileTypeFactory {
@Override
public void createFileTypes(@NotNull FileTypeConsumer consumer) {
consumer.consume(SCRATCH_FILE_TYPE);
}
}
private static class MyFileType extends LanguageFileType implements FileTypeIdentifiableByVirtualFile {
MyFileType() {
super(PlainTextLanguage.INSTANCE);
}
@Override
public boolean isMyFileType(@NotNull VirtualFile file) {
return ScratchFileService.getInstance().getRootType(file) != null;
}
@NotNull
@Override
public String getName() {
return "Scratch";
}
@NotNull
@Override
public String getDescription() {
return "Scratch";
}
@NotNull
@Override
public String getDefaultExtension() {
return "";
}
@Nullable
@Override
public Icon getIcon() {
return PlainTextFileType.INSTANCE.getIcon();
}
@Override
public boolean isReadOnly() {
return true;
}
@Nullable
@Override
public String getCharset(@NotNull VirtualFile file, @NotNull byte[] content) {
return null;
}
}
}
@@ -333,17 +333,18 @@
serviceImplementation="com.intellij.ide.scratch.ScratchFileServiceImpl$App"/>
<projectService serviceInterface="com.intellij.ide.scratch.ScratchFileService"
serviceImplementation="com.intellij.ide.scratch.ScratchFileServiceImpl$Prj"/>
<fileTypeFactory implementation="com.intellij.ide.scratch.ScratchFileServiceImpl$TypeFactory"/>
<navbar implementation="com.intellij.ide.scratch.ScratchFileServiceImpl$NavBarExtension"/>
<lang.substitutor language="TEXT" implementationClass="com.intellij.ide.scratch.ScratchFileServiceImpl$Substitutor" order="first"/>
<nonProjectFileWritingAccessExtension implementation="com.intellij.ide.scratch.ScratchFileServiceImpl$AccessExtension"/>
<fileIconProvider implementation="com.intellij.ide.scratch.ScratchFileServiceImpl$FilePresentation"/>
<editorTabTitleProvider implementation="com.intellij.ide.scratch.ScratchFileServiceImpl$FilePresentation"/>
<syntaxHighlighter factoryClass="com.intellij.ide.scratch.ScratchFileServiceImpl$Highlighter" order="first"/>
<scratch.rootType implementation="com.intellij.ide.scratch.ScratchRootType" />
<scratch.rootType implementation="com.intellij.execution.console.HistoryRootType"/>
<scratch.rootType implementation="com.intellij.execution.console.IdeConsoleRootType"/>
<fileTypeFactory implementation="com.intellij.ide.scratch.ScratchRootType$TypeFactory"/>
<colorSettingsPage implementation="com.intellij.openapi.options.colors.pages.GeneralColorsPage" id="general"/>
<colorSettingsPage implementation="com.intellij.openapi.options.colors.pages.DefaultLanguageColorsPage" id="defaultLanguage"/>