diff --git a/plugins/android/src/org/jetbrains/android/actions/NewAndroidComponentDialog.java b/plugins/android/src/org/jetbrains/android/actions/NewAndroidComponentDialog.java index b94ded4dfd67..5afecc055996 100644 --- a/plugins/android/src/org/jetbrains/android/actions/NewAndroidComponentDialog.java +++ b/plugins/android/src/org/jetbrains/android/actions/NewAndroidComponentDialog.java @@ -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()); diff --git a/plugins/android/src/org/jetbrains/android/intentions/AndroidAddStringResourceAction.java b/plugins/android/src/org/jetbrains/android/intentions/AndroidAddStringResourceAction.java index 2e8693dfe094..e6e4e54ba23b 100644 --- a/plugins/android/src/org/jetbrains/android/intentions/AndroidAddStringResourceAction.java +++ b/plugins/android/src/org/jetbrains/android/intentions/AndroidAddStringResourceAction.java @@ -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; } diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java index 237f62ec06f6..b2dcdb5a94da 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java @@ -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()) {