summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorFuyao Zhao <fuyaoz@google.com>2015-07-22 15:09:04 -0700
committerFuyao Zhao <fuyaoz@google.com>2015-08-03 18:26:56 -0700
commit68d3d13cddc98e84f24b963ed209bbd7bd6d9d07 (patch)
tree001dc5451967598f24158f99bcf7d3a0a6db652a /android
parentd0aa6f6e42a8ff80e71b676efb6240446e41d697 (diff)
downloadidea-68d3d13cddc98e84f24b963ed209bbd7bd6d9d07.tar.gz
Add module dep quickfix will correctly consider the type of module.
Don't generate source when doing gradle sync. Change-Id: I0076332bef7ce48cc1221b318a7445205847bd16
Diffstat (limited to 'android')
-rw-r--r--android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java32
-rw-r--r--android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java39
2 files changed, 69 insertions, 2 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 964c264d3d2..d0e388912c5 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
@@ -30,6 +30,7 @@ import java.io.IOException;
import static com.android.tools.idea.tests.gui.framework.TestGroup.PROJECT_SUPPORT;
import static com.intellij.vcsUtil.VcsUtil.getFileContent;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
@BelongsToTestGroups({PROJECT_SUPPORT})
public class AddGradleDependencyTest extends GuiTestCase {
@@ -57,6 +58,36 @@ public class AddGradleDependencyTest extends GuiTestCase {
assertBuildFileContains(projectFrame, "app/build.gradle", "androidTestCompile project(':library3')");
}
+ @Test @IdeGuiTest
+ public void testNoModuleDependencyQuickfixFromJavaToAndroid() throws IOException {
+ IdeFrameFixture projectFrame = importProjectAndWaitForProjectSyncToFinish("MultiModule");
+ EditorFixture editor = projectFrame.getEditor();
+ editor.open("library3/src/main/java/com/example/MyLibrary.java");
+
+ try {
+ typeImportAndInvokeAction(projectFrame, "package com.example;\n^", "import com.android.multimodule.Main^Activity;",
+ "Add dependency on module");
+ fail();
+ } catch (AssertionError e) {
+ assertTrue(e.getMessage().startsWith("Did not find menu item with prefix"));
+ }
+ }
+
+ @Test @IdeGuiTest
+ public void testNoModuleDependencyQuickfixFromAndroidLibToApplication() throws IOException {
+ IdeFrameFixture projectFrame = importProjectAndWaitForProjectSyncToFinish("MultiModule");
+ EditorFixture editor = projectFrame.getEditor();
+ editor.open("library/src/main/java/com/android/library/MainActivity.java");
+
+ try {
+ typeImportAndInvokeAction(projectFrame, "package com.android.mylibrary;\n^", "import com.android.multimodule.Main^Activity;",
+ "Add dependency on module");
+ fail();
+ } catch (AssertionError e) {
+ assertTrue(e.getMessage().startsWith("Did not find menu item with prefix"));
+ }
+ }
+
private static void typeImportAndInvokeAction(@NotNull IdeFrameFixture projectFrame, @NotNull String lineToType,
@NotNull String testImportStatement, @NotNull String intention) {
EditorFixture editor = projectFrame.getEditor();
@@ -71,6 +102,7 @@ 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());
diff --git a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
index d3722172a90..00583cb99e4 100644
--- a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
+++ b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java
@@ -15,6 +15,7 @@
*/
package com.android.tools.idea.quickfix;
+import com.android.builder.model.AndroidProject;
import com.android.tools.idea.gradle.parser.Dependency;
import com.google.common.base.Function;
import com.google.common.collect.Sets;
@@ -42,6 +43,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import static com.android.tools.idea.gradle.util.GradleUtil.getAndroidProject;
import static com.android.tools.idea.gradle.util.GradleUtil.getGradlePath;
import static com.intellij.compiler.ModuleCompilerUtil.addingDependencyFormsCircularity;
import static com.intellij.util.containers.ContainerUtil.getFirstItem;
@@ -66,6 +68,7 @@ public class AddGradleProjectDependencyFix extends GradleDependencyFix {
Project project = psiElement.getProject();
JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
+ ModuleType currentModuleType = getModuleType(currentModule);
for (PsiClass aClass : classes) {
if (!facade.getResolveHelper().isAccessible(aClass, psiElement, aClass)) {
@@ -79,9 +82,25 @@ public class AddGradleProjectDependencyFix extends GradleDependencyFix {
if (virtualFile == null) {
continue;
}
- final Module classModule = fileIndex.getModuleForFile(virtualFile);
+ Module classModule = fileIndex.getModuleForFile(virtualFile);
if (classModule != null && classModule != currentModule && !ModuleRootManager.getInstance(currentModule).isDependsOn(classModule)) {
- myModules.add(classModule);
+ ModuleType classModuleType = getModuleType(classModule);
+ boolean legalDependency = false;
+ switch (currentModuleType) {
+ case JAVA:
+ legalDependency = classModuleType == ModuleType.JAVA;
+ break;
+ case ANDROID_LIBRARY:
+ legalDependency = classModuleType == ModuleType.JAVA || classModuleType == ModuleType.ANDROID_LIBRARY;
+ break;
+ case ANDROID_APPLICATION:
+ legalDependency = classModuleType != ModuleType.ANDROID_APPLICATION;
+ break;
+ }
+
+ if (legalDependency) {
+ myModules.add(classModule);
+ }
}
}
myCurrentModule = currentModule;
@@ -227,4 +246,20 @@ public class AddGradleProjectDependencyFix extends GradleDependencyFix {
addDependency(from, dependency);
}
}
+
+ private enum ModuleType {
+ JAVA,
+ ANDROID_LIBRARY,
+ ANDROID_APPLICATION
+ }
+
+ @NotNull
+ private static ModuleType getModuleType(@NotNull Module module) {
+ AndroidProject androidProject = getAndroidProject(module);
+ if (androidProject == null) {
+ return ModuleType.JAVA;
+ } else {
+ return androidProject.isLibrary() ? ModuleType.ANDROID_LIBRARY : ModuleType.ANDROID_APPLICATION;
+ }
+ }
}