Light refactoring of AndroidUnresolvedReferenceQuickFixProvider and its test to enable follow up changes.

Change-Id: I5d08512bbff86ad935ec0d0df1d724eaed9252b6
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 2dee732..964c264 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
@@ -34,41 +34,43 @@
 @BelongsToTestGroups({PROJECT_SUPPORT})
 public class AddGradleDependencyTest extends GuiTestCase {
   @Test @IdeGuiTest
-  public void testAddProdDependency() throws IOException {
+  public void testAddProdModuleDependency() throws IOException {
     IdeFrameFixture projectFrame = importProjectAndWaitForProjectSyncToFinish("MultiModule");
     EditorFixture editor = projectFrame.getEditor();
     editor.open("app/src/main/java/com/android/multimodule/MainActivity.java");
 
-    typeImportAndInvokeAction(projectFrame);
+    typeImportAndInvokeAction(projectFrame, "com.android.multimodule;\n^", "import com.example.MyLib^rary;",
+                              "Add dependency on module 'library3'");
 
     assertBuildFileContains(projectFrame, "app/build.gradle", "compile project(':library3')");
   }
 
   @Test @IdeGuiTest
-  public void testAddTestDependency() throws IOException {
+  public void testAddTestModuleDependency() throws IOException {
     IdeFrameFixture projectFrame = importProjectAndWaitForProjectSyncToFinish("MultiModule");
     EditorFixture editor = projectFrame.getEditor();
     editor.open("app/src/androidTest/java/com/android/multimodule/ApplicationTest.java");
 
-    typeImportAndInvokeAction(projectFrame);
+    typeImportAndInvokeAction(projectFrame, "com.android.multimodule;\n^", "import com.example.MyLib^rary;",
+                              "Add dependency on module 'library3'");
 
     assertBuildFileContains(projectFrame, "app/build.gradle", "androidTestCompile project(':library3')");
   }
 
-  private static void typeImportAndInvokeAction(@NotNull IdeFrameFixture projectFrame) {
+  private static void typeImportAndInvokeAction(@NotNull IdeFrameFixture projectFrame, @NotNull String lineToType,
+                                                @NotNull String testImportStatement, @NotNull String intention) {
     EditorFixture editor = projectFrame.getEditor();
-    editor.moveTo(editor.findOffset("com.android.multimodule;\n^"));
-    editor.enterText("\nimport com.example.MyLibrary;");
+    editor.moveTo(editor.findOffset(lineToType));
+    editor.enterText("\n" + testImportStatement.replace("^", ""));
 
     editor.waitForCodeAnalysisHighlightCount(HighlightSeverity.ERROR, 1);
 
-    editor.moveTo(editor.findOffset("com.example.MyLib^rary;"));
-    editor.invokeIntentionAction("Add dependency on module 'library3'");
+    editor.moveTo(editor.findOffset(testImportStatement));
+    editor.invokeIntentionAction(intention);
 
     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());
diff --git a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
index 1b821a8..0502acc 100644
--- a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
+++ b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
@@ -15,12 +15,9 @@
  */
 package com.android.tools.idea.quickfix;
 
-import com.android.builder.model.AndroidProject;
-import com.android.tools.idea.gradle.IdeaAndroidProject;
-import com.android.tools.idea.gradle.parser.*;
+import com.android.tools.idea.gradle.parser.Dependency;
 import com.android.tools.idea.gradle.project.GradleProjectImporter;
 import com.android.tools.idea.gradle.project.GradleSyncListener;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.intellij.application.options.ModuleListCellRenderer;
 import com.intellij.codeInsight.CodeInsightUtilBase;
@@ -28,7 +25,6 @@
 import com.intellij.codeInsight.daemon.impl.actions.AddImportAction;
 import com.intellij.openapi.application.Application;
 import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleUtilCore;
@@ -42,8 +38,6 @@
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
 import com.intellij.ui.components.JBList;
-import com.intellij.util.containers.ContainerUtil;
-import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -61,8 +55,6 @@
  * {@link AddGradleProjectDependencyFix#addDependencyOnModule} method
  */
 public class AddGradleProjectDependencyFix extends GradleDependencyFix {
-  private static final Logger LOG = Logger.getInstance(AddGradleProjectDependencyFix.class);
-
   private final Set<Module> myModules = Sets.newHashSet();
   private final Module myCurrentModule;
   private final VirtualFile myClassVFile;
@@ -223,9 +215,8 @@
     }
   }
 
-  private static void showCircularWarningAndContinue(@NotNull final Project project, @NotNull final Pair<Module, Module> circularModules,
-                                                     @NotNull final Module classModule,
-                                                     @NotNull final Runnable doit) {
+  private static void showCircularWarningAndContinue(@NotNull final Project project, @NotNull Pair<Module, Module> circularModules,
+                                                     @NotNull Module classModule, @NotNull final Runnable doit) {
     final String message = QuickFixBundle.message("orderEntry.fix.circular.dependency.warning", classModule.getName(),
                                                   circularModules.getFirst().getName(), circularModules.getSecond().getName());
     if (ApplicationManager.getApplication().isUnitTestMode()) throw new RuntimeException(message);
@@ -248,40 +239,11 @@
   }
 
   // TODO use new gradle build file API to add dependencies.
-  private static void addDependency(@NotNull Module from, @NotNull final Module to, boolean test) {
+  private static void addDependency(@NotNull Module from, @NotNull Module to, boolean test) {
     String gradlePath = getGradlePath(to);
     if (gradlePath != null) {
       Dependency dependency = new Dependency(getDependencyScope(from, test), Dependency.Type.MODULE, gradlePath);
       addDependency(from, dependency);
     }
   }
-
-  private static void addDependency(@NotNull final Module module, final @NotNull Dependency dependency) {
-    final GradleBuildFile gradleBuildFile = GradleBuildFile.get(module);
-
-    if (gradleBuildFile == null) {
-      LOG.error("Run add dependency quickfix on a module that has no module level 'gradle.build' file");
-      return;
-    }
-
-    final List<BuildFileStatement> dependencies = Lists.newArrayList(gradleBuildFile.getDependencies());
-    dependencies.add(dependency);
-
-    gradleBuildFile.setValue(BuildFileKey.DEPENDENCIES, dependencies);
-  }
-
-  @NotNull
-  private static Dependency.Scope getDependencyScope(@NotNull Module module, boolean test) {
-    Dependency.Scope testScope = Dependency.Scope.TEST_COMPILE;
-    if (test) {
-      AndroidFacet androidFacet = AndroidFacet.getInstance(module);
-      if (androidFacet != null) {
-        IdeaAndroidProject androidProject = androidFacet.getIdeaAndroidProject();
-        if (androidProject != null && AndroidProject.ARTIFACT_ANDROID_TEST.equals(androidProject.getSelectedTestArtifactName())) {
-          testScope = Dependency.Scope.ANDROID_TEST_COMPILE;
-        }
-      }
-    }
-    return test ? testScope : Dependency.Scope.COMPILE;
-  }
 }
diff --git a/android/src/com/android/tools/idea/quickfix/AndroidUnresolvedReferenceQuickFixProvider.java b/android/src/com/android/tools/idea/quickfix/AndroidUnresolvedReferenceQuickFixProvider.java
index e1c02b1..80f43a8 100644
--- a/android/src/com/android/tools/idea/quickfix/AndroidUnresolvedReferenceQuickFixProvider.java
+++ b/android/src/com/android/tools/idea/quickfix/AndroidUnresolvedReferenceQuickFixProvider.java
@@ -15,6 +15,8 @@
  */
 package com.android.tools.idea.quickfix;
 
+import com.android.tools.idea.gradle.facet.AndroidGradleFacet;
+import com.android.tools.idea.gradle.parser.GradleBuildFile;
 import com.intellij.codeInsight.daemon.QuickFixActionRegistrar;
 import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix;
 import com.intellij.codeInsight.intention.IntentionAction;
@@ -29,7 +31,6 @@
 import com.intellij.psi.PsiJavaCodeReferenceElement;
 import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.psi.search.PsiShortNamesCache;
-import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
@@ -42,16 +43,22 @@
 
   @Override
   public void registerFixes(@NotNull PsiJavaCodeReferenceElement reference, @NotNull QuickFixActionRegistrar registrar) {
-    final Module contextModule = findModuleForPsiElement(reference);
+    Module contextModule = findModuleForPsiElement(reference);
     if (contextModule == null) {
       return;
     }
 
-    final AndroidFacet facet = AndroidFacet.getInstance(contextModule);
-    if (facet == null) {
+    AndroidGradleFacet gradleFacet = AndroidGradleFacet.getInstance(contextModule);
+    if (gradleFacet == null) {
       return;
     }
-    final PsiFile contextFile = reference.getContainingFile();
+
+    GradleBuildFile gradleBuildFile = GradleBuildFile.get(contextModule);
+    if (gradleBuildFile == null) {
+      return;
+    }
+
+    PsiFile contextFile = reference.getContainingFile();
     if (contextFile == null) {
       return;
     }
diff --git a/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java b/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java
index 1b6da57..bb75a8a 100644
--- a/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java
+++ b/android/src/com/android/tools/idea/quickfix/GradleDependencyFix.java
@@ -15,13 +15,24 @@
  */
 package com.android.tools.idea.quickfix;
 
+import com.android.builder.model.AndroidProject;
+import com.android.tools.idea.gradle.IdeaAndroidProject;
+import com.android.tools.idea.gradle.parser.BuildFileKey;
+import com.android.tools.idea.gradle.parser.BuildFileStatement;
+import com.android.tools.idea.gradle.parser.Dependency;
+import com.android.tools.idea.gradle.parser.GradleBuildFile;
+import com.google.common.collect.Lists;
 import com.intellij.codeInsight.intention.HighPriorityAction;
 import com.intellij.codeInsight.intention.IntentionAction;
 import com.intellij.codeInspection.LocalQuickFix;
 import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
+import org.jetbrains.android.facet.AndroidFacet;
 import org.jetbrains.annotations.NotNull;
 
+import java.util.List;
+
 abstract class GradleDependencyFix implements IntentionAction, LocalQuickFix, HighPriorityAction {
   @Override
   public boolean startInWriteAction() {
@@ -35,7 +46,35 @@
   }
 
   @Override
-  public void applyFix(@NotNull final Project project, @NotNull final ProblemDescriptor descriptor) {
+  public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
     invoke(project, null, descriptor.getPsiElement().getContainingFile());
   }
+
+  protected static void addDependency(@NotNull Module module, @NotNull Dependency dependency) {
+    GradleBuildFile gradleBuildFile = GradleBuildFile.get(module);
+
+    if (gradleBuildFile == null) {
+      return;
+    }
+
+    List<BuildFileStatement> dependencies = Lists.newArrayList(gradleBuildFile.getDependencies());
+    dependencies.add(dependency);
+
+    gradleBuildFile.setValue(BuildFileKey.DEPENDENCIES, dependencies);
+  }
+
+  @NotNull
+  protected static Dependency.Scope getDependencyScope(@NotNull Module module, boolean test) {
+    Dependency.Scope testScope = Dependency.Scope.TEST_COMPILE;
+    if (test) {
+      AndroidFacet androidFacet = AndroidFacet.getInstance(module);
+      if (androidFacet != null) {
+        IdeaAndroidProject androidProject = androidFacet.getIdeaAndroidProject();
+        if (androidProject != null && AndroidProject.ARTIFACT_ANDROID_TEST.equals(androidProject.getSelectedTestArtifactName())) {
+          testScope = Dependency.Scope.ANDROID_TEST_COMPILE;
+        }
+      }
+    }
+    return test ? testScope : Dependency.Scope.COMPILE;
+  }
 }
\ No newline at end of file