IDEA-66161 checkout files before writing

This commit is contained in:
Eugene Kudelevsky
2012-03-12 19:17:33 +04:00
parent 58cce8f632
commit 4ea9deaa09
3 changed files with 23 additions and 4 deletions
@@ -24,6 +24,8 @@ import com.intellij.openapi.module.ModuleUtil;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.search.searches.ClassInheritorsSearch;
import com.intellij.util.PlatformIcons;
@@ -32,6 +34,7 @@ import org.jetbrains.android.dom.manifest.Action;
import org.jetbrains.android.dom.manifest.*;
import org.jetbrains.android.dom.resources.ResourceValue;
import org.jetbrains.android.facet.AndroidFacet;
import org.jetbrains.android.facet.AndroidRootUtil;
import org.jetbrains.android.util.AndroidBundle;
import org.jetbrains.android.util.AndroidUtils;
import org.jetbrains.annotations.NotNull;
@@ -149,8 +152,18 @@ public class NewAndroidComponentDialog extends DialogWrapper {
AndroidFacet facet,
String label,
boolean startupActivity) {
Manifest manifest = facet.getManifest();
if (manifest == null) return;
final VirtualFile manifestFile = AndroidRootUtil.getManifestFile(facet);
if (manifestFile == null ||
!ReadonlyStatusHandler.ensureFilesWritable(facet.getModule().getProject(), manifestFile)) {
return;
}
final Manifest manifest = AndroidUtils.loadDomElement(facet.getModule(), manifestFile, Manifest.class);
if (manifest == null) {
return;
}
String packageName = manifest.getPackage().getValue();
if (packageName == null || packageName.length() == 0) {
manifest.getPackage().setValue(aPackage.getQualifiedName());
@@ -36,6 +36,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
@@ -393,7 +394,8 @@ public class AndroidAddStringResourceAction extends AbstractIntentionAction impl
@NotNull String dirName,
@NotNull String value) throws Exception {
final VirtualFile resFile = findOrCreateResourceFile(facet, fileName, dirName);
if (resFile == null) {
if (resFile == null ||
!ReadonlyStatusHandler.ensureFilesWritable(facet.getModule().getProject(), resFile)) {
return null;
}
@@ -24,6 +24,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
@@ -286,7 +287,10 @@ public class LocalResourceManager extends ResourceManager {
throw new IllegalArgumentException("Incorrect resource type");
}
VirtualFile resFile = findOrCreateResourceFile(resourceFileName);
if (resFile == null) return null;
if (resFile == null ||
!ReadonlyStatusHandler.ensureFilesWritable(myModule.getProject(), resFile)) {
return null;
}
final Resources resources = loadDomElement(myModule, resFile, Resources.class);
if (resources == null) {
if (ApplicationManager.getApplication().isUnitTestMode()) {