[test framework] utility methods made accessible to child classes

This commit is contained in:
Roman Shevchenko
2016-07-13 18:05:24 +02:00
parent 09056a0fe6
commit 565837190c
@@ -15,7 +15,7 @@
*/
package com.intellij.testFramework;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.module.EmptyModuleType;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
@@ -25,7 +25,6 @@ import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.ContentIterator;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
@@ -43,12 +42,11 @@ import java.io.IOException;
import static com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel;
public class LightProjectDescriptor {
public static final LightProjectDescriptor EMPTY_PROJECT_DESCRIPTOR = new LightProjectDescriptor();
public void setUpProject(@NotNull final Project project, @NotNull final SetupHandler handler) throws Exception {
ApplicationManager.getApplication().runWriteAction(() -> {
public void setUpProject(@NotNull Project project, @NotNull SetupHandler handler) throws Exception {
WriteAction.run(() -> {
Module module = createMainModule(project);
handler.moduleCreated(module);
VirtualFile sourceRoot = createSourcesRoot(module);
@@ -60,9 +58,12 @@ public class LightProjectDescriptor {
}
@NotNull
public Module createMainModule(@NotNull final Project project) {
return ApplicationManager.getApplication().runWriteAction((Computable<Module>)() -> {
String moduleFilePath = "light_idea_test_case.iml";
public Module createMainModule(@NotNull Project project) {
return createModule(project, "light_idea_test_case.iml");
}
protected Module createModule(@NotNull Project project, @NotNull String moduleFilePath) {
return WriteAction.compute(() -> {
File imlFile = new File(moduleFilePath);
if (imlFile.exists()) {
//temporary workaround for IDEA-147530: otherwise if someone saved module with this name before the created module will get its settings
@@ -78,29 +79,32 @@ public class LightProjectDescriptor {
}
@Nullable
public VirtualFile createSourcesRoot(@NotNull final Module module) {
public VirtualFile createSourcesRoot(@NotNull Module module) {
return createSourceRoot(module, "src");
}
protected VirtualFile createSourceRoot(@NotNull Module module, String srcPath) {
VirtualFile dummyRoot = VirtualFileManager.getInstance().findFileByUrl("temp:///");
assert dummyRoot != null;
dummyRoot.refresh(false, false);
final VirtualFile srcRoot;
VirtualFile srcRoot;
try {
srcRoot = dummyRoot.createChildDirectory(this, "src");
srcRoot = dummyRoot.createChildDirectory(this, srcPath);
cleanSourceRoot(srcRoot);
}
catch (IOException e) {
throw new RuntimeException(e);
}
final IndexableFileSet indexableFileSet = new IndexableFileSet() {
IndexableFileSet indexableFileSet = new IndexableFileSet() {
@Override
public boolean isInSet(@NotNull final VirtualFile file) {
return file.getFileSystem() == srcRoot.getFileSystem() &&
module.getProject().isOpen();
public boolean isInSet(@NotNull VirtualFile file) {
return file.getFileSystem() == srcRoot.getFileSystem() && module.getProject().isOpen();
}
@Override
public void iterateIndexableFilesIn(@NotNull final VirtualFile file, @NotNull final ContentIterator iterator) {
public void iterateIndexableFilesIn(@NotNull VirtualFile file, @NotNull ContentIterator iterator) {
VfsUtilCore.visitChildrenRecursively(file, new VirtualFileVisitor() {
@Override
public boolean visitFile(@NotNull VirtualFile file) {
@@ -116,7 +120,7 @@ public class LightProjectDescriptor {
return srcRoot;
}
protected void createContentEntry(@NotNull final Module module, @NotNull final VirtualFile srcRoot) {
protected void createContentEntry(@NotNull Module module, @NotNull VirtualFile srcRoot) {
updateModel(module, model -> {
Sdk sdk = getSdk();
if (sdk != null) {
@@ -145,14 +149,12 @@ public class LightProjectDescriptor {
}
}
protected void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) {
}
@SuppressWarnings("NullableProblems")
protected void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { }
public interface SetupHandler {
default void moduleCreated(@NotNull Module module) {
}
default void moduleCreated(@NotNull Module module) { }
default void sourceRootCreated(@NotNull VirtualFile sourceRoot) {
}
default void sourceRootCreated(@NotNull VirtualFile sourceRoot) { }
}
}
}