package com.intellij.javascript.flex.compiled;
import com.intellij.javascript.flex.FlexApplicationComponent;
import com.intellij.lang.Language;
import com.intellij.lang.javascript.DialectDetector;
import com.intellij.lang.javascript.psi.impl.JSFileImpl;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import org.jetbrains.annotations.NotNull;
public class SwfFileViewProviderFactory implements FileViewProviderFactory {
@NotNull
public FileViewProvider createFileViewProvider(@NotNull final VirtualFile file, Language language, @NotNull final PsiManager manager, final boolean eventSystemEnabled) {
return new SwfFileViewProvider(manager, file, eventSystemEnabled);
}
private static class SwfFileViewProvider extends SingleRootFileViewProvider {
public SwfFileViewProvider(PsiManager manager, VirtualFile file, boolean physical) {
super(manager, file, physical);
}
@Override
protected PsiFile createFile(@NotNull Project project, @NotNull VirtualFile vFile, @NotNull FileType fileType) {
return new CompiledJSFile(this);
}
@NotNull
@Override
public Language getBaseLanguage() {
return FlexApplicationComponent.DECOMPILED_SWF;
}
@NotNull
@Override
public SingleRootFileViewProvider createCopy(@NotNull VirtualFile copy) {
return new SwfFileViewProvider(getManager(), copy, false);
}
}
static class CompiledJSFile extends JSFileImpl implements PsiCompiledFile {
public CompiledJSFile(FileViewProvider fileViewProvider) {
super(fileViewProvider, DialectDetector.getJSLanguage(fileViewProvider.getVirtualFile()));
}
public PsiElement getMirror() {
return this;
}
@Override
public boolean isWritable() {
return true;
}
@Override
public PsiFile getDecompiledPsiFile() {
return this;
}
}
}