Skip to content

Commit 4d0973c

Browse files
Correct installation dependencies into Gradle project #1300 (#1402)
1 parent 62a55a6 commit 4d0973c

File tree

5 files changed

+76
-14
lines changed

5 files changed

+76
-14
lines changed

gradle.properties

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ ideVersion=222.4167.29
88
pythonIde=IC,IU,PC,PY
99
jsIde=IU,PY,WS
1010

11-
# In order to run Android Studion instead of Intellij Community,
12-
# specify the path to your Android Studio installation
13-
//androidStudioPath=your_path_to_android_studio
11+
# In order to run Android Studion instead of Intellij Community, specify the path to your Android Studio installation
12+
#androidStudioPath=your_path_to_android_studio
1413

1514
#Version numbers: https://plugins.jetbrains.com/plugin/631-python/versions
1615
pythonCommunityPluginVersion=222.4167.37

utbot-android-studio/src/main/kotlin/org/androidstudio/plugin/util/UtAndroidGradleJavaProjectModelModifier.kt

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,23 @@ import com.android.tools.idea.gradle.util.GradleUtil
1111
import com.android.tools.idea.project.AndroidProjectInfo
1212
import com.android.tools.idea.projectsystem.TestArtifactSearchScopes
1313
import com.google.wireless.android.sdk.stats.GradleSyncStats
14+
import com.intellij.ide.plugins.PluginManager
1415
import com.intellij.openapi.command.WriteCommandAction
1516
import com.intellij.openapi.command.undo.BasicUndoableAction
1617
import com.intellij.openapi.command.undo.UndoManager
17-
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager
18+
import com.intellij.openapi.extensions.PluginId
1819
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx
1920
import com.intellij.openapi.module.Module
2021
import com.intellij.openapi.project.Project
2122
import com.intellij.openapi.roots.DependencyScope
2223
import com.intellij.openapi.roots.ExternalLibraryDescriptor
24+
import com.intellij.openapi.roots.libraries.Library
2325
import com.intellij.openapi.vfs.VirtualFile
26+
import com.intellij.pom.java.LanguageLevel
2427
import com.intellij.util.containers.ContainerUtil
2528
import org.jetbrains.concurrency.AsyncPromise
2629
import org.jetbrains.concurrency.Promise
30+
import org.jetbrains.concurrency.rejectedPromise
2731

2832
class UtAndroidGradleJavaProjectModelModifier : AndroidGradleJavaProjectModelModifier() {
2933
override fun addExternalLibraryDependency(
@@ -32,14 +36,8 @@ class UtAndroidGradleJavaProjectModelModifier : AndroidGradleJavaProjectModelMod
3236
scope: DependencyScope
3337
): Promise<Void?>? {
3438
val module = ContainerUtil.getFirstItem(modules) ?: return null
35-
36-
if (!isAndroidGradleProject(module.project)) {
37-
return null
38-
}
39-
4039
val dependencySpec = ArtifactDependencySpec.create(descriptor.libraryArtifactId, descriptor.libraryGroupId, descriptor.preferredVersion)
4140
return addExternalLibraryDependency(module, dependencySpec, scope)
42-
4341
}
4442

4543
private fun addExternalLibraryDependency(
@@ -100,8 +98,6 @@ class UtAndroidGradleJavaProjectModelModifier : AndroidGradleJavaProjectModelMod
10098
})
10199
}
102100

103-
private fun isAndroidGradleProject(project: Project): Boolean = AndroidProjectInfo.getInstance(project).requiresAndroidModel()
104-
105101
private fun doAndroidGradleSync(project: Project, trigger: GradleSyncStats.Trigger): AsyncPromise<Void?> {
106102
val promise = AsyncPromise<Void?>()
107103
val request = GradleSyncInvoker.Request(trigger)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package org.androidstudio.plugin.util
2+
3+
import com.android.tools.idea.project.AndroidProjectInfo
4+
import com.intellij.ide.plugins.PluginManager
5+
import com.intellij.openapi.extensions.PluginId
6+
import com.intellij.openapi.module.Module
7+
import com.intellij.openapi.project.Project
8+
import com.intellij.openapi.roots.DependencyScope
9+
import com.intellij.openapi.roots.ExternalLibraryDescriptor
10+
import com.intellij.openapi.roots.impl.IdeaProjectModelModifier
11+
import com.intellij.openapi.roots.libraries.Library
12+
import com.intellij.pom.java.LanguageLevel
13+
import com.intellij.util.containers.ContainerUtil
14+
import org.jetbrains.concurrency.Promise
15+
16+
/*
17+
NOTE: this is a wrapper for [UtAndroidGradleJavaProjectModelModifier].
18+
The purpose of this wrapper is to avoid inheritance of [AndroidGradleJavaProjectModelModifier]
19+
because it leads to crashes when Android plugin is disabled.
20+
*/
21+
class UtAndroidGradleJavaProjectModelModifierWrapper(val project: Project): IdeaProjectModelModifier(project) {
22+
23+
override fun addExternalLibraryDependency(
24+
modules: Collection<Module?>,
25+
descriptor: ExternalLibraryDescriptor,
26+
scope: DependencyScope
27+
): Promise<Void?>? {
28+
29+
val module = ContainerUtil.getFirstItem(modules) ?: return null
30+
if (!isAndroidGradleProject(module.project)) {
31+
return null
32+
}
33+
34+
// NOTE: we use such DependencyScope to obtain `implementation`, not `testImplementation`
35+
// to deal with androidTest modules (there is no way to add `androidTestImplementation` additionally.
36+
return UtAndroidGradleJavaProjectModelModifier().addExternalLibraryDependency(modules, descriptor, DependencyScope.COMPILE)
37+
}
38+
39+
override fun addModuleDependency(
40+
from: Module,
41+
to: Module,
42+
scope: DependencyScope,
43+
exported: Boolean
44+
): Promise<Void>? = null
45+
46+
override fun addLibraryDependency(
47+
from: Module,
48+
library: Library,
49+
scope: DependencyScope,
50+
exported: Boolean
51+
): Promise<Void>? = null
52+
53+
override fun changeLanguageLevel(module: Module, level: LanguageLevel): Promise<Void>? = null
54+
55+
private fun isAndroidGradleProject(project: Project): Boolean {
56+
val pluginId = PluginId.findId("org.jetbrains.android")
57+
if (pluginId == null || PluginManager.getInstance().findEnabledPlugin(pluginId) == null) {
58+
return false
59+
}
60+
61+
return AndroidProjectInfo.getInstance(project).requiresAndroidModel()
62+
}
63+
}

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/UtProjectModelModifier.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import org.jetbrains.concurrency.resolvedPromise
2020
import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties
2121
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
2222
import org.utbot.intellij.plugin.models.mavenCoordinates
23+
import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle
2324

2425
class UtProjectModelModifier(val project: Project) : IdeaProjectModelModifier(project) {
2526
override fun addExternalLibraryDependency(
@@ -52,7 +53,7 @@ class UtProjectModelModifier(val project: Project) : IdeaProjectModelModifier(pr
5253
}
5354
if (classesRoots.isNotEmpty()) {
5455
val urls = OrderEntryFix.refreshAndConvertToUrls(classesRoots)
55-
if (modules.size == 1) {
56+
if (canLoadModuleLibrary(modules)) {
5657
ModuleRootModificationUtil.addModuleLibrary(
5758
firstModule,
5859
if (classesRoots.size > 1) descriptor.presentableName else null,
@@ -78,4 +79,7 @@ class UtProjectModelModifier(val project: Project) : IdeaProjectModelModifier(pr
7879
}
7980
return resolvedPromise()
8081
}
82+
83+
private fun canLoadModuleLibrary(modules: Collection<Module>) =
84+
modules.size == 1 && !ContainerUtil.getFirstItem(modules).project.isBuildWithGradle
8185
}

utbot-intellij/src/main/resources/META-INF/plugin.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
<registryKey defaultValue="false" description="Enable editing Kotlin test files" key="kotlin.ultra.light.classes.empty.text.range"/>
3333
<postStartupActivity implementation="org.utbot.intellij.plugin.ui.GotItTooltipActivity"/>
3434
<projectModelModifier implementation="org.utbot.intellij.plugin.util.UtProjectModelModifier"/>
35-
<projectModelModifier implementation="org.androidstudio.plugin.util.UtAndroidGradleJavaProjectModelModifier" order="first"/>
35+
<projectModelModifier implementation="org.androidstudio.plugin.util.UtAndroidGradleJavaProjectModelModifierWrapper" order="first"/>
3636
<!--Documentation-->
3737
<customJavadocTagProvider implementation="org.utbot.intellij.plugin.javadoc.UtCustomJavaDocTagProvider"/>
3838
<lang.documentationProvider language="JAVA" order="first" implementationClass="org.utbot.intellij.plugin.javadoc.UtDocumentationProvider"/>

0 commit comments

Comments
 (0)