mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Platform: always allow writing module files (IDEA-123899)
This commit is contained in:
+8
-1
@@ -19,6 +19,8 @@ import com.intellij.ProjectTopics;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.StorageScheme;
|
||||
import com.intellij.openapi.components.impl.stores.IProjectStore;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ex.ProjectEx;
|
||||
import com.intellij.openapi.roots.ModuleRootAdapter;
|
||||
@@ -105,6 +107,8 @@ public class NonProjectFileWritingAccessProvider extends WritingAccessProvider {
|
||||
}
|
||||
|
||||
private boolean isProjectFile(@NotNull VirtualFile file) {
|
||||
if (ProjectFileIndex.SERVICE.getInstance(myProject).isInContent(file)) return true;
|
||||
|
||||
if (myProject instanceof ProjectEx) {
|
||||
IProjectStore store = ((ProjectEx)myProject).getStateStore();
|
||||
|
||||
@@ -115,9 +119,12 @@ public class NonProjectFileWritingAccessProvider extends WritingAccessProvider {
|
||||
}
|
||||
|
||||
if (file.equals(store.getWorkspaceFile()) || file.equals(store.getProjectFile())) return true;
|
||||
for (Module each : ModuleManager.getInstance(myProject).getModules()) {
|
||||
if (file.equals(each.getModuleFile())) return true;
|
||||
}
|
||||
}
|
||||
|
||||
return ProjectFileIndex.SERVICE.getInstance(myProject).isInContent(file);
|
||||
return false;
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
|
||||
+41
-1
@@ -21,6 +21,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.application.impl.ApplicationImpl;
|
||||
import com.intellij.openapi.command.WriteCommandAction;
|
||||
import com.intellij.openapi.components.impl.ComponentManagerImpl;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.actionSystem.EditorActionManager;
|
||||
@@ -29,6 +30,10 @@ import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
|
||||
import com.intellij.openapi.fileEditor.impl.NonProjectFileNotificationPanel;
|
||||
import com.intellij.openapi.fileEditor.impl.NonProjectFileWritingAccessProvider;
|
||||
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
|
||||
import com.intellij.openapi.module.EmptyModuleType;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
@@ -84,7 +89,7 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase {
|
||||
assertNull(getNotificationPanel(nonProjectFile));
|
||||
}
|
||||
|
||||
public void testAccessToFilesUnderProjectRootAndDotIdea() throws Exception {
|
||||
public void testAccessToProjectSystemFiles() throws Exception {
|
||||
saveProject();
|
||||
VirtualFile fileUnderProjectDir = new WriteAction<VirtualFile>() {
|
||||
@Override
|
||||
@@ -100,6 +105,41 @@ public class NonProjectFileAccessTest extends HeavyFileEditorManagerTestCase {
|
||||
typeAndCheck(fileUnderProjectDir, false);
|
||||
}
|
||||
|
||||
public void testAccessToModuleSystemFiles() throws Exception {
|
||||
final Module moduleWithoutContentRoot = new WriteCommandAction<Module>(getProject()) {
|
||||
@Override
|
||||
protected void run(@NotNull Result<Module> result) throws Throwable {
|
||||
String moduleName;
|
||||
ModifiableModuleModel moduleModel = ModuleManager.getInstance(getProject()).getModifiableModel();
|
||||
try {
|
||||
VirtualFile moduleDir = getProject().getBaseDir().createChildDirectory(this, "moduleWithoutContentRoot");
|
||||
moduleName = moduleModel.newModule(moduleDir + "/moduleWithoutContentRoot.iml", EmptyModuleType.EMPTY_MODULE).getName();
|
||||
moduleModel.commit();
|
||||
}
|
||||
catch (Throwable t) {
|
||||
moduleModel.dispose();
|
||||
throw t;
|
||||
}
|
||||
|
||||
result.setResult(ModuleManager.getInstance(getProject()).findModuleByName(moduleName));
|
||||
}
|
||||
}.execute().getResultObject();
|
||||
saveProject();
|
||||
|
||||
VirtualFile fileUnderModuleDir = new WriteAction<VirtualFile>() {
|
||||
@Override
|
||||
protected void run(@NotNull Result<VirtualFile> result) throws Throwable {
|
||||
result.setResult(moduleWithoutContentRoot.getModuleFile().getParent().createChildData(this, "fileUnderModuleDir.txt"));
|
||||
}
|
||||
}.execute().getResultObject();
|
||||
|
||||
assertFalse(ProjectFileIndex.SERVICE.getInstance(getProject()).isInContent(fileUnderModuleDir));
|
||||
|
||||
typeAndCheck(moduleWithoutContentRoot.getModuleFile(), true);
|
||||
typeAndCheck(myModule.getModuleFile(), true);
|
||||
typeAndCheck(fileUnderModuleDir, false);
|
||||
}
|
||||
|
||||
private void saveProject() {
|
||||
ApplicationImpl app = (ApplicationImpl)ApplicationManager.getApplication();
|
||||
boolean save = app.isDoNotSave();
|
||||
|
||||
Reference in New Issue
Block a user