diff options
author | Fuyao Zhao <fuyaoz@google.com> | 2015-08-04 01:31:08 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-08-04 01:31:08 +0000 |
commit | bcc4efa63760c7334b83136ad46c8884e350fd88 (patch) | |
tree | 3ccabe10a60887b9e3d7cf76a65ac5e1f7bcfabd /android | |
parent | a26f90bebde3cb9688139a5da2954b92eb33cc69 (diff) | |
parent | 63815e72ec63eb9ab4af986a917d03784423b625 (diff) | |
download | idea-bcc4efa63760c7334b83136ad46c8884e350fd88.tar.gz |
Merge "Add module dep quickfix will correctly consider the type of module. Don\'t generate source when doing gradle sync." into studio-1.4-dev automerge: f460715
automerge: 63815e7
* commit '63815e72ec63eb9ab4af986a917d03784423b625':
Add module dep quickfix will correctly consider the type of module. Don't generate source when doing gradle sync.
Diffstat (limited to 'android')
-rw-r--r-- | android/guiTestSrc/com/android/tools/idea/tests/gui/gradle/AddGradleDependencyTest.java | 31 | ||||
-rw-r--r-- | android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java | 39 |
2 files changed, 68 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 c69f3e09b38..a6641a1b6b5 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,6 +34,7 @@ import static com.intellij.openapi.util.io.FileUtil.join; import static com.intellij.vcsUtil.VcsUtil.getFileContent; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; @BelongsToTestGroups({PROJECT_SUPPORT}) public class AddGradleDependencyTest extends GuiTestCase { @@ -99,6 +100,36 @@ public class AddGradleDependencyTest extends GuiTestCase { assertBuildFileContains(projectFrame, "app/build.gradle", "compile 'com.google.guava:guava:18.0'"); } + @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(); diff --git a/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java b/android/src/com/android/tools/idea/quickfix/AddGradleProjectDependencyFix.java index 1cf67ec1a0f..e1d75039b95 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; @@ -228,4 +247,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; + } + } } |