Skip to content

Commit eaf968e

Browse files
authored
Enable using localPath in a IDE profile (#2704)
* Remove some of the implicitness of IdeVersions to allow finer control * Allow localPath to be specified for an IDE product profile
1 parent 31585f8 commit eaf968e

File tree

7 files changed

+141
-97
lines changed

7 files changed

+141
-97
lines changed

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/IdeVersions.kt

Lines changed: 121 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -7,133 +7,165 @@ import org.gradle.api.Project
77
import org.gradle.api.provider.Provider
88
import org.gradle.api.provider.ProviderFactory
99

10-
object IdeVersions {
11-
fun ideProfile(project: Project): Profile = ideProfile(project.providers).get()
10+
enum class IdeFlavor { IC, IU, RD }
1211

13-
fun ideProfile(providers: ProviderFactory): Provider<Profile> = resolveIdeProfileName(providers).map {
14-
ideProfiles[it] ?: throw IllegalStateException("Can't find profile for $it")
15-
}
12+
object IdeVersions {
13+
private val commonPlugins = arrayOf(
14+
"org.jetbrains.plugins.terminal",
15+
"org.jetbrains.plugins.yaml"
16+
)
1617

1718
private val ideProfiles = listOf(
1819
Profile(
1920
name = "2020.2",
20-
communityPlugins = listOf(
21-
"java",
22-
"com.intellij.gradle",
23-
"org.jetbrains.idea.maven",
24-
"PythonCore:202.6397.124",
25-
"Docker:202.6397.93"
21+
community = ProductProfile(
22+
sdkFlavor = IdeFlavor.IC,
23+
sdkVersion = "2020.2",
24+
plugins = commonPlugins + listOf(
25+
"java",
26+
"com.intellij.gradle",
27+
"org.jetbrains.idea.maven",
28+
"PythonCore:202.6397.124",
29+
"Docker:202.6397.93"
30+
)
2631
),
27-
ultimatePlugins = listOf(
28-
"JavaScript",
29-
"JavaScriptDebugger",
30-
"com.intellij.database",
31-
"Pythonid:202.6397.98",
32-
"org.jetbrains.plugins.go:202.6397.20"
32+
ultimate = ProductProfile(
33+
sdkFlavor = IdeFlavor.IU,
34+
sdkVersion = "2020.2",
35+
plugins = commonPlugins + listOf(
36+
"JavaScript",
37+
"JavaScriptDebugger",
38+
"com.intellij.database",
39+
"Pythonid:202.6397.98",
40+
"org.jetbrains.plugins.go:202.6397.20"
41+
)
3342
),
34-
riderPlugins = listOf(
35-
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
36-
),
37-
rdGenVersion = "0.203.161",
38-
nugetVersion = "2020.2.0"
43+
rider = RiderProfile(
44+
sdkVersion = "2020.2",
45+
plugins = commonPlugins + listOf(
46+
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
47+
),
48+
rdGenVersion = "0.203.161",
49+
nugetVersion = "2020.2.0"
50+
)
3951
),
4052
Profile(
4153
name = "2020.3",
42-
communityPlugins = listOf(
43-
"java",
44-
"com.intellij.gradle",
45-
"org.jetbrains.idea.maven",
46-
"PythonCore:203.5981.165",
47-
"Docker:203.5981.155"
48-
),
49-
ultimatePlugins = listOf(
50-
"JavaScript",
51-
"JavaScriptDebugger",
52-
"com.intellij.database",
53-
"Pythonid:203.5981.165",
54-
"org.jetbrains.plugins.go:203.5981.114"
54+
community = ProductProfile(
55+
sdkFlavor = IdeFlavor.IC,
56+
sdkVersion = "2020.3",
57+
plugins = commonPlugins + listOf(
58+
"java",
59+
"com.intellij.gradle",
60+
"org.jetbrains.idea.maven",
61+
"PythonCore:203.5981.165",
62+
"Docker:203.5981.155"
63+
)
5564
),
56-
riderPlugins = listOf(
57-
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
65+
ultimate = ProductProfile(
66+
sdkFlavor = IdeFlavor.IU,
67+
sdkVersion = "2020.3",
68+
plugins = commonPlugins + listOf(
69+
"JavaScript",
70+
"JavaScriptDebugger",
71+
"com.intellij.database",
72+
"Pythonid:203.5981.165",
73+
"org.jetbrains.plugins.go:203.5981.114"
74+
)
5875
),
59-
riderSdkOverride = "2020.3.2",
60-
ijSdkOverride = "2020.3",
61-
rdGenVersion = "0.203.161",
62-
nugetVersion = "2020.3.0"
76+
rider = RiderProfile(
77+
sdkVersion = "2020.3",
78+
plugins = commonPlugins + listOf(
79+
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
80+
),
81+
rdGenVersion = "0.203.161",
82+
nugetVersion = "2020.3.0"
83+
)
6384
),
6485
Profile(
6586
name = "2021.1",
66-
communityPlugins = listOf(
67-
"java",
68-
"com.intellij.gradle",
69-
"org.jetbrains.idea.maven",
70-
"PythonCore:211.6693.119",
71-
"Docker:211.6693.111"
72-
),
73-
ultimatePlugins = listOf(
74-
"JavaScript",
75-
// Transitive dependency needed for javascript
76-
// Can remove when https://github.com/JetBrains/gradle-intellij-plugin/issues/608 is fixed
77-
"com.intellij.css",
78-
"JavaScriptDebugger",
79-
"com.intellij.database",
80-
"Pythonid:211.6693.115",
81-
"org.jetbrains.plugins.go:211.6693.111"
87+
community = ProductProfile(
88+
sdkFlavor = IdeFlavor.IC,
89+
sdkVersion = "2021.1",
90+
plugins = commonPlugins + listOf(
91+
"java",
92+
"com.intellij.gradle",
93+
"org.jetbrains.idea.maven",
94+
"PythonCore:211.6693.119",
95+
"Docker:211.6693.111"
96+
)
8297
),
83-
riderPlugins = listOf(
84-
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
98+
ultimate = ProductProfile(
99+
sdkFlavor = IdeFlavor.IU,
100+
sdkVersion = "2021.1",
101+
plugins = commonPlugins + listOf(
102+
"JavaScript",
103+
// Transitive dependency needed for javascript
104+
// Can remove when https://github.com/JetBrains/gradle-intellij-plugin/issues/608 is fixed
105+
"com.intellij.css",
106+
"JavaScriptDebugger",
107+
"com.intellij.database",
108+
"Pythonid:211.6693.115",
109+
"org.jetbrains.plugins.go:211.6693.111"
110+
)
85111
),
86-
riderSdkOverride = "2021.1.1",
87-
rdGenVersion = "0.211.234",
88-
nugetVersion = "2021.1.0"
89-
)
112+
rider = RiderProfile(
113+
sdkVersion = "2021.1.1",
114+
plugins = commonPlugins + listOf(
115+
"rider-plugins-appender" // Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
116+
),
117+
rdGenVersion = "0.211.234",
118+
nugetVersion = "2021.1.0"
119+
)
120+
),
90121
).associateBy { it.name }
91122

123+
fun ideProfile(project: Project): Profile = ideProfile(project.providers).get()
124+
125+
fun ideProfile(providers: ProviderFactory): Provider<Profile> = resolveIdeProfileName(providers).map {
126+
ideProfiles[it] ?: throw IllegalStateException("Can't find profile for $it")
127+
}
128+
92129
private fun resolveIdeProfileName(providers: ProviderFactory): Provider<String> =
93130
providers.environmentVariable("ALTERNATIVE_IDE_PROFILE_NAME").forUseAtConfigurationTime().orElse(
94131
providers.gradleProperty("ideProfileName").forUseAtConfigurationTime()
95132
)
96133
}
97134

98135
open class ProductProfile(
136+
val sdkFlavor: IdeFlavor,
99137
val sdkVersion: String,
100138
val plugins: Array<String>
101-
)
139+
) {
140+
fun version(): String? = if (!isLocalPath(sdkVersion)) {
141+
sdkFlavor.name + "-" + sdkVersion
142+
} else {
143+
null
144+
}
145+
146+
fun localPath(): String? = sdkVersion.takeIf {
147+
isLocalPath(it)
148+
}
149+
150+
private fun isLocalPath(str: String) = str.startsWith("/") || str.getOrNull(1) == ':'
151+
}
102152

103153
class RiderProfile(
104154
sdkVersion: String,
105155
plugins: Array<String>,
106-
val rdGenVersion: String,
107-
val nugetVersion: String
108-
) : ProductProfile(sdkVersion, plugins)
156+
val rdGenVersion: String, // https://www.myget.org/feed/rd-snapshots/package/maven/com.jetbrains.rd/rd-gen
157+
val nugetVersion: String // https://www.nuget.org/packages/JetBrains.Rider.SDK/
158+
) : ProductProfile(IdeFlavor.RD, sdkVersion, plugins)
109159

110160
class Profile(
111161
val name: String,
112162
val shortName: String = shortenedIdeProfileName(name),
113163
val sinceVersion: String = shortName,
114164
val untilVersion: String = "$sinceVersion.*",
115-
communityPlugins: List<String>,
116-
ultimatePlugins: List<String>,
117-
riderPlugins: List<String>,
118-
ijSdkOverride: String? = null,
119-
riderSdkOverride: String? = null,
120-
rdGenVersion: String, // https://www.myget.org/feed/rd-snapshots/package/maven/com.jetbrains.rd/rd-gen
121-
nugetVersion: String // https://www.nuget.org/packages/JetBrains.Rider.SDK/
122-
) {
123-
private val commonPlugins = arrayOf(
124-
"org.jetbrains.plugins.terminal",
125-
"org.jetbrains.plugins.yaml"
126-
)
127-
128-
val community: ProductProfile = ProductProfile(sdkVersion = "IC-${ijSdkOverride ?: name}", plugins = commonPlugins + communityPlugins)
129-
val ultimate: ProductProfile = ProductProfile(sdkVersion = "IU-${ijSdkOverride ?: name}", plugins = commonPlugins + ultimatePlugins)
130-
val rider: RiderProfile = RiderProfile(
131-
sdkVersion = "RD-${riderSdkOverride ?: name}",
132-
plugins = commonPlugins + riderPlugins,
133-
rdGenVersion = rdGenVersion,
134-
nugetVersion = nugetVersion
135-
)
136-
}
165+
val community: ProductProfile,
166+
val ultimate: ProductProfile,
167+
val rider: RiderProfile,
168+
)
137169

138170
private fun shortenedIdeProfileName(sdkName: String): String {
139171
val parts = sdkName.trim().split(".")

buildSrc/src/main/kotlin/software/aws/toolkits/gradle/intellij/ToolkitIntelliJExtension.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@ import org.gradle.api.provider.Provider
88
import org.gradle.api.provider.ProviderFactory
99

1010
abstract class ToolkitIntelliJExtension(private val providers: ProviderFactory) {
11-
enum class IdeFlavor { IC, IU, RD }
12-
1311
abstract val ideFlavor: Property<IdeFlavor>
1412

1513
fun ideProfile() = IdeVersions.ideProfile(providers)
1614

15+
fun version(): Provider<String?> = productProfile().flatMap { profile ->
16+
providers.provider { profile.version() }
17+
}
18+
19+
fun localPath(): Provider<String?> = productProfile().flatMap { profile ->
20+
providers.provider { profile.localPath() }
21+
}
22+
1723
fun productProfile(): Provider<out ProductProfile> = ideFlavor.flatMap { flavor ->
1824
when (flavor) {
1925
IdeFlavor.IC -> ideProfile().map { it.community }

buildSrc/src/main/kotlin/toolkit-intellij-subplugin.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import org.jetbrains.intellij.tasks.RunIdeForUiTestTask
77
import software.aws.toolkits.gradle.ciOnly
88
import software.aws.toolkits.gradle.findFolders
99
import software.aws.toolkits.gradle.intellij.IdeVersions
10+
import software.aws.toolkits.gradle.intellij.IdeFlavor
1011
import software.aws.toolkits.gradle.intellij.ToolkitIntelliJExtension
11-
import software.aws.toolkits.gradle.intellij.ToolkitIntelliJExtension.IdeFlavor
1212
import software.aws.toolkits.gradle.isCi
1313

1414
val toolkitIntelliJ = project.extensions.create<ToolkitIntelliJExtension>("intellijToolkit")
@@ -66,7 +66,10 @@ tasks.processResources {
6666
// Run after the project has been evaluated so that the extension (intellijToolkit) has been configured
6767
intellij {
6868
pluginName.set("aws-toolkit-jetbrains")
69-
version.set(toolkitIntelliJ.productProfile().map { it.sdkVersion })
69+
70+
localPath.set(toolkitIntelliJ.localPath())
71+
version.set(toolkitIntelliJ.version())
72+
7073
plugins.set(toolkitIntelliJ.productProfile().map { it.plugins.toMutableList() })
7174

7275
downloadSources.set(toolkitIntelliJ.ideFlavor.map { it == IdeFlavor.IC && !project.isCi() })

intellij/build.gradle.kts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,11 @@ val resharperDlls = configurations.create("resharperDlls") {
2323
}
2424

2525
intellij {
26-
version.set(ideProfile.community.sdkVersion)
2726
pluginName.set("aws-toolkit-jetbrains")
27+
28+
version.set(ideProfile.community.version())
29+
localPath.set(ideProfile.community.localPath())
30+
2831
updateSinceUntilBuild.set(false)
2932
instrumentCode.set(false)
3033
}

jetbrains-core/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
import software.aws.toolkits.gradle.changelog.tasks.GeneratePluginChangeLog
5-
import software.aws.toolkits.gradle.intellij.ToolkitIntelliJExtension.IdeFlavor
5+
import software.aws.toolkits.gradle.intellij.IdeFlavor
66
import software.aws.toolkits.telemetry.generator.gradle.GenerateTelemetry
77

88
plugins {

jetbrains-rider/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.jetbrains.rd.generator.gradle.RdGenExtension
55
import com.jetbrains.rd.generator.gradle.RdGenTask
66
import org.jetbrains.intellij.tasks.PrepareSandboxTask
7+
import software.aws.toolkits.gradle.intellij.IdeFlavor
78
import software.aws.toolkits.gradle.intellij.IdeVersions
8-
import software.aws.toolkits.gradle.intellij.ToolkitIntelliJExtension.IdeFlavor
99
import java.nio.file.Path
1010

1111
buildscript {

jetbrains-ultimate/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
import software.aws.toolkits.gradle.intellij.ToolkitIntelliJExtension.IdeFlavor
4+
import software.aws.toolkits.gradle.intellij.IdeFlavor
55

66
plugins {
77
id("toolkit-kotlin-conventions")

0 commit comments

Comments
 (0)