Skip to content

Commit 5f250a7

Browse files
authored
Used configured Gradle JVM when executing tasks (#6425)
1 parent a82db77 commit 5f250a7

File tree

8 files changed

+44
-10
lines changed

8 files changed

+44
-10
lines changed

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/codegen/ApolloCodegenService.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import org.gradle.tooling.GradleConnector
3838
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper
3939
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
4040
import org.jetbrains.plugins.gradle.util.GradleConstants
41+
import java.io.File
4142
import java.util.concurrent.Executors
4243

4344
@Service(Service.Level.PROJECT)
@@ -191,9 +192,17 @@ class ApolloCodegenService(
191192
try {
192193
val cancellationToken = gradleCodegenCancellation!!.token()
193194
connection.newBuild()
195+
.setJavaHome(executionSettings.javaHome?.let { File(it) })
194196
.forTasks(CODEGEN_GRADLE_TASK_NAME)
195197
.withCancellationToken(cancellationToken)
196198
.addArguments("--continuous")
199+
.let {
200+
if (project.projectSettingsState.automaticCodegenAdditionalGradleJvmArguments.isNotEmpty()) {
201+
it.addJvmArguments(project.projectSettingsState.automaticCodegenAdditionalGradleJvmArguments.split(' '))
202+
} else {
203+
it
204+
}
205+
}
197206
.addProgressListener(object : SimpleProgressListener() {
198207
override fun onSuccess() {
199208
logd("Gradle build success, marking generated source roots as dirty")

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/DownloadSchemaAction.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.gradle.tooling.model.GradleProject
2222
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper
2323
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
2424
import org.jetbrains.plugins.gradle.util.GradleConstants
25+
import java.io.File
2526

2627
class DownloadSchemaAction : AnAction() {
2728
override fun actionPerformed(e: AnActionEvent) {
@@ -55,7 +56,9 @@ private class DownloadSchemaTask(project: Project) : Task.Backgroundable(
5556
val rootGradleProject = gradleExecutionHelper.execute(rootProjectPath, executionSettings) { connection ->
5657
logd("Fetch Gradle project model")
5758
return@execute try {
58-
connection.model<GradleProject>(GradleProject::class.java).get()
59+
connection.model<GradleProject>(GradleProject::class.java)
60+
.setJavaHome(executionSettings.javaHome?.let { File(it) })
61+
.get()
5962
} catch (t: Throwable) {
6063
logw(t, "Couldn't fetch Gradle project model")
6164
null
@@ -83,6 +86,7 @@ private class DownloadSchemaTask(project: Project) : Task.Backgroundable(
8386
gradleExecutionHelper.execute(rootProjectPath, executionSettings) { connection ->
8487
try {
8588
connection.newBuild()
89+
.setJavaHome(executionSettings.javaHome?.let { File(it) })
8690
.forTasks(*allDownloadSchemaTasks.toTypedArray())
8791
.addProgressListener(object : SimpleProgressListener() {
8892
override fun onFailure(failures: List<Failure>) {

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleToolingModelService.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ class GradleToolingModelService(
167167
logd("Fetch Gradle project model")
168168
return@execute try {
169169
connection.model<GradleProject>(GradleProject::class.java)
170+
.setJavaHome(executionSettings.javaHome?.let { File(it) })
170171
.withCancellationToken(gradleCancellation!!.token())
171172
.get()
172173
} catch (t: Throwable) {
@@ -191,6 +192,7 @@ class GradleToolingModelService(
191192
logd("Fetch tooling model for ${gradleProject.path}")
192193
return@execute try {
193194
connection.model<ApolloGradleToolingModel>(ApolloGradleToolingModel::class.java)
195+
.setJavaHome(executionSettings.javaHome?.let { File(it) })
194196
.withCancellationToken(gradleCancellation!!.token())
195197
.get()
196198
.takeIf {

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/gradle/GradleUtil.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,12 @@ package com.apollographql.ijplugin.gradle
22

33
import com.apollographql.ijplugin.util.logw
44
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
5-
import com.intellij.openapi.module.Module
65
import com.intellij.openapi.module.ModuleManager
76
import com.intellij.openapi.project.Project
87
import org.gradle.tooling.model.GradleProject
98

109
const val CODEGEN_GRADLE_TASK_NAME = "generateApolloSources"
1110

12-
fun Module.getGradleName(): String? {
13-
val projectId = ExternalSystemApiUtil.getExternalProjectId(this) ?: return null
14-
// "MyProject:main" -> ""
15-
// "MyProject:MyModule:main" -> "MyModule"
16-
// "MyProject:MyModule:MySubModule:main" -> "MyModule:MySubModule"
17-
return projectId.split(":").drop(1).dropLast(1).joinToString(":")
18-
}
19-
2011
fun Project.getGradleRootPath(): String? {
2112
val rootProjectPath = ModuleManager.getInstance(this).modules.firstNotNullOfOrNull {
2213
ExternalSystemApiUtil.getExternalRootProjectPath(it)

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/settings/ProjectSettingsService.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ class ProjectSettingsService(private val project: Project) : PersistentStateComp
4747
notifySettingsChanged()
4848
}
4949

50+
override var automaticCodegenAdditionalGradleJvmArguments: String
51+
get() = _state.automaticCodegenAdditionalGradleJvmArguments
52+
set(value) {
53+
_state.automaticCodegenAdditionalGradleJvmArguments = value
54+
notifySettingsChanged()
55+
}
56+
5057
override var hasEnabledGraphQLPluginApolloKotlinSupport: Boolean
5158
get() = _state.hasEnabledGraphQLPluginApolloKotlinSupport
5259
set(value) {
@@ -143,6 +150,7 @@ class ProjectSettingsService(private val project: Project) : PersistentStateComp
143150

144151
interface ProjectSettingsState {
145152
var automaticCodegenTriggering: Boolean
153+
var automaticCodegenAdditionalGradleJvmArguments: String
146154
var hasEnabledGraphQLPluginApolloKotlinSupport: Boolean
147155
var contributeConfigurationToGraphqlPlugin: Boolean
148156
var apolloKotlinServiceConfigurations: List<ApolloKotlinServiceConfiguration>
@@ -191,6 +199,7 @@ data class ApolloKotlinServiceConfiguration(
191199

192200
data class ProjectSettingsStateImpl(
193201
override var automaticCodegenTriggering: Boolean = true,
202+
override var automaticCodegenAdditionalGradleJvmArguments: String = "-Xms64m -Xmx512m",
194203
override var hasEnabledGraphQLPluginApolloKotlinSupport: Boolean = false,
195204
override var contributeConfigurationToGraphqlPlugin: Boolean = true,
196205
override var apolloKotlinServiceConfigurations: List<ApolloKotlinServiceConfiguration> = emptyList(),

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/settings/SettingsComponent.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,22 @@ import com.intellij.openapi.project.Project
1010
import com.intellij.ui.AddEditRemovePanel
1111
import com.intellij.ui.dsl.builder.AlignX
1212
import com.intellij.ui.dsl.builder.bindSelected
13+
import com.intellij.ui.dsl.builder.bindText
1314
import com.intellij.ui.dsl.builder.panel
15+
import java.awt.Font
1416
import javax.swing.JCheckBox
1517
import javax.swing.JComponent
1618
import javax.swing.JPanel
1719

1820
class SettingsComponent(private val project: Project) {
1921
private val propertyGraph = PropertyGraph()
2022
private val automaticCodegenTriggeringProperty = propertyGraph.property(false)
23+
private val automaticCodegenAdditionalGradleJvmArgumentsProperty = propertyGraph.property("")
2124
private val contributeConfigurationToGraphqlPluginProperty = propertyGraph.property(false)
2225
private val telemetryEnabledProperty = propertyGraph.property(false)
2326

2427
var automaticCodegenTriggering: Boolean by automaticCodegenTriggeringProperty
28+
var automaticCodegenAdditionalGradleJvmArguments: String by automaticCodegenAdditionalGradleJvmArgumentsProperty
2529
var contributeConfigurationToGraphqlPlugin: Boolean by contributeConfigurationToGraphqlPluginProperty
2630
var apolloKotlinServiceConfigurations: List<ApolloKotlinServiceConfiguration>
2731
get() = addEditRemovePanel?.data?.toList() ?: emptyList()
@@ -42,6 +46,15 @@ class SettingsComponent(private val project: Project) {
4246
.bindSelected(automaticCodegenTriggeringProperty)
4347
.component
4448
}
49+
row {
50+
label(ApolloBundle.message("settings.codegen.additionalGradleJvmArguments.text"))
51+
textField()
52+
.align(AlignX.FILL)
53+
.bindText(automaticCodegenAdditionalGradleJvmArgumentsProperty)
54+
.applyToComponent {
55+
font = Font(Font.MONOSPACED, font.style, font.size)
56+
}
57+
}
4558
}.visible(isKotlinPluginPresent && isGradlePluginPresent)
4659
group(ApolloBundle.message("settings.graphqlPlugin.title")) {
4760
row {

intellij-plugin/src/main/kotlin/com/apollographql/ijplugin/settings/SettingsConfigurable.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,25 @@ class SettingsConfigurable(private val project: Project) : Configurable {
1717

1818
override fun isModified(): Boolean {
1919
return settingsComponent!!.automaticCodegenTriggering != project.projectSettingsState.automaticCodegenTriggering ||
20+
settingsComponent!!.automaticCodegenAdditionalGradleJvmArguments != project.projectSettingsState.automaticCodegenAdditionalGradleJvmArguments ||
2021
settingsComponent!!.contributeConfigurationToGraphqlPlugin != project.projectSettingsState.contributeConfigurationToGraphqlPlugin ||
2122
settingsComponent!!.apolloKotlinServiceConfigurations != project.projectSettingsState.apolloKotlinServiceConfigurations ||
2223
settingsComponent!!.telemetryEnabled != appSettingsState.telemetryEnabled
2324
}
2425

2526
override fun apply() {
2627
project.projectSettingsState.automaticCodegenTriggering = settingsComponent!!.automaticCodegenTriggering
28+
project.projectSettingsState.automaticCodegenAdditionalGradleJvmArguments =
29+
settingsComponent!!.automaticCodegenAdditionalGradleJvmArguments
2730
project.projectSettingsState.contributeConfigurationToGraphqlPlugin = settingsComponent!!.contributeConfigurationToGraphqlPlugin
2831
project.projectSettingsState.apolloKotlinServiceConfigurations = settingsComponent!!.apolloKotlinServiceConfigurations
2932
appSettingsState.telemetryEnabled = settingsComponent!!.telemetryEnabled
3033
}
3134

3235
override fun reset() {
3336
settingsComponent!!.automaticCodegenTriggering = project.projectSettingsState.automaticCodegenTriggering
37+
settingsComponent!!.automaticCodegenAdditionalGradleJvmArguments =
38+
project.projectSettingsState.automaticCodegenAdditionalGradleJvmArguments
3439
settingsComponent!!.contributeConfigurationToGraphqlPlugin = project.projectSettingsState.contributeConfigurationToGraphqlPlugin
3540
settingsComponent!!.apolloKotlinServiceConfigurations = project.projectSettingsState.apolloKotlinServiceConfigurations
3641
settingsComponent!!.telemetryEnabled = appSettingsState.telemetryEnabled

intellij-plugin/src/main/resources/messages/ApolloBundle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ settings.codegen.automaticCodegenTriggering.text=Automatic code generation
8686
settings.codegen.automaticCodegenTriggering.comment=Enabling this setting will run Gradle in continuous mode, similarly to \
8787
<code>./gradlew generateApolloSources --continuous</code>.<br>\
8888
This watches changes to your GraphQL files and re-generates models when they change.
89+
settings.codegen.additionalGradleJvmArguments.text=Additional JVM arguments:
8990

9091
settings.graphqlPlugin.title=GraphQL Plugin
9192
settings.graphqlPlugin.contributeConfigurationToGraphqlPlugin.text=Contribute configuration to the GraphQL plugin

0 commit comments

Comments
 (0)