blob: 3cb571cd298a62ba1b31e95df8d4aa9c2c4b5bf2 [file] [log] [blame]
package com.intellij.execution;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.PsiTestUtil;
import com.intellij.testFramework.TempFiles;
import org.jetbrains.annotations.Nullable;
import java.io.*;
import java.util.Collection;
public class TestSources {
private final Project myProject;
private final TempFiles myTempFiles;
private File mySrc;
private Module myModule;
public TestSources(Project project, Collection<File> filesToDelete) {
myProject = project;
myTempFiles = new TempFiles(filesToDelete);
}
public void tearDown() {
if (myModule != null) {
disposeModule(myModule);
myModule = null;
}
}
public PsiPackage createPackage(String name) {
File dir = new File(mySrc, name);
dir.mkdir();
LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir);
return findPackage(name);
}
public PsiPackage findPackage(String name) {
return JavaPsiFacade.getInstance(myProject).findPackage(name);
}
@Nullable
public PsiClass createClass(String className, String code) throws FileNotFoundException {
File file = new File(mySrc, className + ".java");
PrintStream stream = new PrintStream(new FileOutputStream(file));
try {
stream.println(code);
}
finally {
stream.close();
}
LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);
return JavaPsiFacade.getInstance(myProject).findClass(className, GlobalSearchScope.allScope(myProject));
}
public void initModule() throws IOException {
if (myModule != null) disposeModule(myModule);
mySrc = myTempFiles.createTempDir();
myModule = BaseConfigurationTestCase.createTempModule(myTempFiles, myProject);
VirtualFile moduleContent = TempFiles.getVFileByFile(mySrc);
PsiTestUtil.addSourceRoot(myModule, moduleContent);
Module tempModule = BaseConfigurationTestCase.createTempModule(myTempFiles, myProject);
ModuleRootModificationUtil.addDependency(myModule, tempModule);
disposeModule(tempModule);
}
private void disposeModule(Module tempModule) {
ModuleManager.getInstance(myProject).disposeModule(tempModule);
}
public void copyJdkFrom(Module module) {
ModuleRootModificationUtil.setModuleSdk(myModule, ModuleRootManager.getInstance(module).getSdk());
}
public void addLibrary(VirtualFile lib) {
ModuleRootModificationUtil.addModuleLibrary(myModule, lib.getUrl());
}
public VirtualFile createPackageDir(String packageName) {
File pkg = new File(mySrc, packageName);
pkg.mkdirs();
VirtualFile pkgFile = TempFiles.getVFileByFile(pkg);
return pkgFile;
}
public PsiClass findClass(String fqName) {
return JavaPsiFacade.getInstance(myProject).findClass(fqName, GlobalSearchScope.moduleScope(myModule));
}
}