/*
* Copyright 2003-2012 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 jetbrains.mps;
import com.intellij.lang.Language;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.PsiManager;
import com.intellij.psi.SingleRootFileViewProvider;
import com.intellij.psi.impl.source.PsiPlainTextFileImpl;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.util.LocalTimeCounter;
import com.intellij.util.text.CharSequenceSubSequence;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class EmptyPsiFileFactory extends PsiFileFactory {
private final PsiManager myManager;
public EmptyPsiFileFactory(final PsiManager manager) {
myManager = manager;
}
@Override
@NotNull
public PsiFile createFileFromText(@NotNull String name, @NotNull FileType fileType, @NotNull CharSequence text,
long modificationStamp, final boolean physical) {
return createFileFromText(name, fileType, text, modificationStamp, physical, true);
}
@Override
public PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text) {
return null;
}
@Override
public PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text, boolean physical,
final boolean markAsCopy) {
return null;
}
@Override
public PsiFile createFileFromText(@NotNull String name,
@NotNull Language language,
@NotNull CharSequence text,
boolean physical,
boolean markAsCopy,
boolean noSizeLimit) {
return null;
}
@Override
public PsiFile createFileFromText(@NotNull String name, @NotNull Language language, @NotNull CharSequence text, boolean eventSystemEnabled,
boolean markAsCopy, boolean noSizeLimit, @Nullable VirtualFile original) {
return null;
}
@Override
@NotNull
public PsiFile createFileFromText(@NotNull String name,
@NotNull FileType fileType,
@NotNull CharSequence text,
long modificationStamp,
final boolean physical,
boolean markAsCopy) {
final LightVirtualFile virtualFile = new LightVirtualFile(name, fileType, text, modificationStamp);
final SingleRootFileViewProvider singleRootFileViewProvider =
new SingleRootFileViewProvider(myManager, virtualFile, physical);
return new PsiPlainTextFileImpl(singleRootFileViewProvider);
}
@NotNull
public PsiFile createFileFromText(@NotNull String name,
@NotNull FileType fileType, final Language language, @NotNull Language targetLanguage, @NotNull CharSequence text,
long modificationStamp,
final boolean physical,
boolean markAsCopy) {
return createFileFromText(name, fileType, text, modificationStamp, physical, markAsCopy);
}
@Override
@NotNull
public PsiFile createFileFromText(@NotNull String name, @NotNull FileType fileType, @NotNull CharSequence text) {
return createFileFromText(name, fileType, text, LocalTimeCounter.currentTime(), false);
}
@Override
@NotNull
public PsiFile createFileFromText(@NotNull String name, @NotNull String text) {
FileType type = FileTypeRegistry.getInstance().getFileTypeByFileName(name);
if (type.isBinary()) {
throw new RuntimeException("Cannot create binary files from text: name " + name + ", file type " + type);
}
return createFileFromText(name, type, text);
}
@Override
public PsiFile createFileFromText(FileType fileType, final String fileName, CharSequence chars, int startOffset, int endOffset) {
final CharSequence text = startOffset == 0 && endOffset == chars.length() ? chars : new CharSequenceSubSequence(chars, startOffset, endOffset);
return createFileFromText(fileName, fileType, text);
}
@Nullable
@Override
public PsiFile createFileFromText(@NotNull CharSequence chars, @NotNull PsiFile original) {
return createFileFromText(original.getName(), original.getLanguage(), chars, false, true);
}
}