| 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)); |
| } |
| } |