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