diff options
-rw-r--r-- | android/src/com/android/tools/idea/structure/AndroidModuleConfigurable.java | 7 | ||||
-rw-r--r-- | android/src/com/android/tools/idea/structure/AndroidProjectConfigurable.java | 12 |
2 files changed, 16 insertions, 3 deletions
diff --git a/android/src/com/android/tools/idea/structure/AndroidModuleConfigurable.java b/android/src/com/android/tools/idea/structure/AndroidModuleConfigurable.java index d5e2d78d723..17f0cddce29 100644 --- a/android/src/com/android/tools/idea/structure/AndroidModuleConfigurable.java +++ b/android/src/com/android/tools/idea/structure/AndroidModuleConfigurable.java @@ -17,12 +17,15 @@ package com.android.tools.idea.structure; import com.android.SdkConstants; import com.android.ide.common.repository.GradleCoordinate; +import com.android.tools.idea.gradle.util.GradleUtil; import com.intellij.icons.AllIcons; import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.vfs.ReadonlyStatusHandler; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -82,6 +85,10 @@ public class AndroidModuleConfigurable extends NamedConfigurable { @Override public void apply() throws ConfigurationException { + VirtualFile file = GradleUtil.getGradleBuildFile(myModule); + if (!ReadonlyStatusHandler.ensureFilesWritable(myModule.getProject(), file)) { + throw new ConfigurationException(String.format("Build file %1$s is not writable", file.getPath())); + } myModuleEditor.apply(); } diff --git a/android/src/com/android/tools/idea/structure/AndroidProjectConfigurable.java b/android/src/com/android/tools/idea/structure/AndroidProjectConfigurable.java index 5308db557cf..81a069456ff 100644 --- a/android/src/com/android/tools/idea/structure/AndroidProjectConfigurable.java +++ b/android/src/com/android/tools/idea/structure/AndroidProjectConfigurable.java @@ -28,6 +28,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; +import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ActionRunner; @@ -115,6 +116,14 @@ public class AndroidProjectConfigurable extends NamedConfigurable implements Key @Override public void apply() throws ConfigurationException { + if (myGradleBuildFile == null) { + return; + } + VirtualFile file = myGradleBuildFile.getFile(); + if (!ReadonlyStatusHandler.ensureFilesWritable(myProject, file)) { + throw new ConfigurationException(String.format("Build file %1$s is not writable", file.getPath())); + } + CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() { @Override public void run() { @@ -122,9 +131,6 @@ public class AndroidProjectConfigurable extends NamedConfigurable implements Key ActionRunner.runInsideWriteAction(new ActionRunner.InterruptibleRunnable() { @Override public void run() throws Exception { - if (myGradleBuildFile == null) { - return; - } for (BuildFileKey key : PROJECT_PROPERTIES) { if (key == BuildFileKey.GRADLE_WRAPPER_VERSION || !myModifiedKeys.contains(key)) { continue; |