diff options
3 files changed, 32 insertions, 1 deletions
diff --git a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java index ff70110236c..c69f3e09b38 100644 --- a/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java +++ b/android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java @@ -47,6 +47,9 @@ public class AddGradleDependencyTest extends GuiTestCase { "Add dependency on module 'library3'"); assertBuildFileContains(projectFrame, "app/build.gradle", "compile project(':library3')"); + + undo(projectFrame); + editor.waitForCodeAnalysisHighlightCount(HighlightSeverity.ERROR, 1); } @Test @IdeGuiTest @@ -59,6 +62,9 @@ public class AddGradleDependencyTest extends GuiTestCase { "Add dependency on module 'library3'"); assertBuildFileContains(projectFrame, "app/build.gradle", "androidTestCompile project(':library3')"); + + undo(projectFrame); + editor.waitForCodeAnalysisHighlightCount(HighlightSeverity.ERROR, 1); } @Test @IdeGuiTest @@ -107,9 +113,16 @@ public class AddGradleDependencyTest extends GuiTestCase { projectFrame.waitForGradleProjectSyncToFinish(); editor.waitForCodeAnalysisHighlightCount(HighlightSeverity.ERROR, 0); } + private static void assertBuildFileContains(@NotNull IdeFrameFixture projectFrame, @NotNull String relativePath, @NotNull String content) { String newBuildFileContent = getFileContent(new File(projectFrame.getProjectPath(), relativePath).getPath()); assertTrue(newBuildFileContent.contains(content)); } + + private static void undo(@NotNull IdeFrameFixture projectFrame) { + projectFrame.getEditor().invokeAction(EditorFixture.EditorAction.UNDO); + projectFrame.waitForGradleProjectSyncToFinish(); + projectFrame.findMessageDialog("Undo").clickOk(); + } } diff --git a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java index d3722172a90..1cf67ec1a0f 100644 --- a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java +++ b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java @@ -168,6 +168,7 @@ public class AddGradleProjectDependencyFix extends GradleDependencyFix { @Override public void run() { addDependency(myCurrentModule, module, test); + registerUndoAction(project); gradleSyncAndImportClass(module, editor, myReference, new Function<Void, List<PsiClass>>() { @Override public List<PsiClass> apply(@Nullable Void input) { diff --git a/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java b/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java index a360b3b3723..9da2bca82d1 100644 --- a/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java +++ b/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java @@ -31,6 +31,9 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.command.undo.BasicUndoableAction; +import com.intellij.openapi.command.undo.UndoManager; +import com.intellij.openapi.command.undo.UnexpectedUndoException; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; @@ -120,4 +123,18 @@ abstract class GradleDependencyFix implements IntentionAction, LocalQuickFix, Hi } }); } -}
\ No newline at end of file + + protected static void registerUndoAction(@NotNull final Project project) { + UndoManager.getInstance(project).undoableActionPerformed(new BasicUndoableAction() { + @Override + public void undo() throws UnexpectedUndoException { + GradleProjectImporter.getInstance().requestProjectSync(project, false, null); + } + + @Override + public void redo() throws UnexpectedUndoException { + GradleProjectImporter.getInstance().requestProjectSync(project, false, null); + } + }); + } +} |