Skip to content

Commit f575936

Browse files
authored
Multi module plugin support (#803)
* build: simplify project deps * build: simplify project deps * build: support multi module plugin * build: support multi module plugin * build: support multi module plugin * test * Update build.yml * test * test * fix projectDependency * Update build.yml * disable tasks * disable tasks * clean up deps
1 parent f68d874 commit f575936

File tree

12 files changed

+178
-193
lines changed

12 files changed

+178
-193
lines changed

build.gradle.kts

+56-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import java.util.Calendar
2+
13
buildscript {
24
repositories {
35
mavenCentral()
@@ -11,6 +13,7 @@ plugins {
1113
id("com.diffplug.spotless") apply false
1214
id("org.jetbrains.kotlin.jvm") apply false
1315
id("io.gitlab.arturbosch.detekt") apply false
16+
id("org.jetbrains.intellij") version "1.8.1"
1417
}
1518

1619
val pluginGroup: String by project
@@ -20,11 +23,54 @@ val pluginSinceBuild: String by project
2023
val vertxVersion: String by project
2124

2225
val platformType: String by project
26+
val ideVersion: String by project
27+
val platformPlugins: String by project
2328
val platformDownloadSources: String by project
2429

2530
group = pluginGroup
2631
version = projectVersion
2732

33+
allprojects {
34+
repositories {
35+
mavenCentral()
36+
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
37+
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
38+
}
39+
40+
apply(plugin = "org.jetbrains.intellij")
41+
42+
intellij {
43+
pluginName.set("interface-jetbrains")
44+
version.set(ideVersion)
45+
type.set(platformType)
46+
downloadSources.set(platformDownloadSources.toBoolean())
47+
updateSinceUntilBuild.set(false)
48+
49+
plugins.set(platformPlugins.split(',').map(String::trim).filter(String::isNotEmpty).toMutableList())
50+
//plugins.add("com.intellij.zh:202.413") //test chinese locale
51+
}
52+
53+
tasks {
54+
// Disable all Gradle Tasks for the gradle-intellij-plugin as we only use the plugin for the dependencies
55+
buildPlugin { enabled = false }
56+
buildSearchableOptions { enabled = false }
57+
downloadRobotServerPlugin { enabled = false }
58+
jarSearchableOptions { enabled = false }
59+
patchPluginXml { enabled = false }
60+
prepareSandbox { enabled = false }
61+
prepareTestingSandbox { enabled = false }
62+
prepareUiTestingSandbox { enabled = false }
63+
publishPlugin { enabled = false }
64+
runIde { enabled = false }
65+
runIdeForUiTests { enabled = false }
66+
runPluginVerifier { enabled = false }
67+
signPlugin { enabled = false }
68+
verifyPlugin { enabled = false }
69+
listProductsReleases { enabled = false }
70+
instrumentCode { enabled = false }
71+
}
72+
}
73+
2874
subprojects {
2975
repositories {
3076
mavenCentral()
@@ -74,8 +120,7 @@ subprojects {
74120
targetCompatibility = "1.8"
75121
}
76122
withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
77-
kotlinOptions.apiVersion = "1.4"
78-
kotlinOptions.jvmTarget = "1.8"
123+
kotlinOptions.jvmTarget = "11"
79124
kotlinOptions.freeCompilerArgs +=
80125
listOf(
81126
"-Xno-optimized-callable-references",
@@ -100,7 +145,7 @@ subprojects {
100145
targetExclude("**/generated/**", "**/liveplugin/**")
101146

102147
val startYear = 2022
103-
val currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR)
148+
val currentYear = Calendar.getInstance().get(Calendar.YEAR)
104149
val copyrightYears = if (startYear == currentYear) {
105150
"$startYear"
106151
} else {
@@ -134,4 +179,12 @@ subprojects {
134179
licenseHeader(formattedLicenseHeader)
135180
}
136181
}
182+
183+
fun projectDependency(name: String): ProjectDependency {
184+
return if (rootProject.name.contains("jetbrains")) {
185+
DependencyHandlerScope.of(rootProject.dependencies).project(name)
186+
} else {
187+
DependencyHandlerScope.of(rootProject.dependencies).project(":interfaces:jetbrains$name")
188+
}
189+
}
137190
}

commander

common/build.gradle.kts

-9
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,10 @@ plugins {
44

55
val vertxVersion: String by project
66
val projectVersion: String by project
7-
val intellijVersion: String by project
8-
9-
repositories {
10-
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
11-
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
12-
}
137

148
dependencies {
159
compileOnly("plus.sourceplus:protocol:$projectVersion")
1610
compileOnly("io.vertx:vertx-core:$vertxVersion")
1711
compileOnly("io.vertx:vertx-lang-kotlin-coroutines:$vertxVersion")
1812
compileOnly("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
19-
20-
compileOnly("com.jetbrains.intellij.platform:ide:$intellijVersion")
21-
compileOnly("com.jetbrains.intellij.platform:ide-impl:$intellijVersion")
2213
}

core/build.gradle.kts

+9-15
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,20 @@ plugins {
55
val vertxVersion: String by project
66
val apolloVersion: String by project
77
val projectVersion: String by project
8-
val intellijVersion: String by project
9-
10-
repositories {
11-
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
12-
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
13-
}
148

159
dependencies {
16-
if (findProject(":interfaces:jetbrains") != null) {
17-
compileOnly(project(":interfaces:jetbrains:common"))
18-
compileOnly(project(":interfaces:jetbrains:marker"))
19-
} else {
20-
compileOnly(project(":common"))
21-
compileOnly(project(":marker"))
22-
}
23-
10+
compileOnly(projectDependency(":common"))
11+
compileOnly(projectDependency(":marker"))
2412
compileOnly("plus.sourceplus:protocol:$projectVersion")
2513
compileOnly("io.vertx:vertx-core:$vertxVersion")
2614
compileOnly("io.vertx:vertx-lang-kotlin-coroutines:$vertxVersion")
2715
compileOnly("com.apollographql.apollo3:apollo-api:$apolloVersion")
16+
}
2817

29-
compileOnly("com.jetbrains.intellij.platform:ide:$intellijVersion")
18+
fun projectDependency(name: String): ProjectDependency {
19+
return if (rootProject.name.contains("jetbrains")) {
20+
DependencyHandlerScope.of(rootProject.dependencies).project(name)
21+
} else {
22+
DependencyHandlerScope.of(rootProject.dependencies).project(":interfaces:jetbrains$name")
23+
}
3024
}

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ ideVersion = 2022.2.1
1212
platformDownloadSources = true
1313
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
1414
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
15-
platformPlugins = java, Groovy, Kotlin, PythonCore:222.3739.67, org.intellij.scala:2022.2.13
15+
platformPlugins = java
1616

1717
# Opt-out flag for bundling Kotlin standard library.
1818
# See https://kotlinlang.org/docs/reference/using-gradle.html#dependency-on-the-standard-library for details.

marker/build.gradle.kts

+11-27
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,29 @@ plugins {
22
id("org.jetbrains.kotlin.jvm")
33
}
44

5-
val kotlinVersion: String by project
6-
val pluginGroup: String by project
75
val projectVersion: String by project
8-
val slf4jVersion: String by project
96
val joorVersion: String by project
107
val vertxVersion: String by project
11-
val intellijVersion: String by project
12-
13-
repositories {
14-
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
15-
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
16-
}
178

189
dependencies {
19-
if (findProject(":interfaces:jetbrains") != null) {
20-
compileOnly(project(":interfaces:jetbrains:common"))
21-
} else {
22-
compileOnly(project(":common"))
23-
}
10+
compileOnly(projectDependency(":common"))
2411
compileOnly("plus.sourceplus:protocol:$projectVersion")
25-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
26-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
12+
compileOnly("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
13+
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
2714
compileOnly("io.vertx:vertx-core:$vertxVersion")
2815
compileOnly("io.vertx:vertx-lang-kotlin:$vertxVersion")
2916
compileOnly("io.vertx:vertx-lang-kotlin-coroutines:$vertxVersion")
3017
compileOnly("org.jooq:joor:$joorVersion")
31-
compileOnly("plus.sourceplus:protocol:$projectVersion")
3218
compileOnly("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
3319
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
3420
compileOnly("com.google.guava:guava:31.1-jre")
35-
compileOnly("org.jetbrains:annotations:23.0.0")
36-
compileOnly("org.jetbrains.intellij.deps.jcef:jcef:97.2.22-g6779618-chromium-97.0.4692.45-api-1.6")
37-
compileOnly("com.jetbrains.intellij.platform:ide:$intellijVersion")
38-
compileOnly("com.jetbrains.intellij.platform:ide-impl:$intellijVersion")
39-
compileOnly("com.jetbrains.intellij.platform:core:$intellijVersion")
40-
compileOnly("com.jetbrains.intellij.platform:core-impl:$intellijVersion")
41-
compileOnly("com.jetbrains.intellij.platform:core-ui:$intellijVersion")
42-
compileOnly("com.jetbrains.intellij.platform:code-style:$intellijVersion")
43-
compileOnly("com.jetbrains.intellij.platform:lang:$intellijVersion")
44-
compileOnly("com.jetbrains.intellij.platform:lang-impl:$intellijVersion")
4521
testImplementation("junit:junit:4.13.2")
4622
}
23+
24+
fun projectDependency(name: String): ProjectDependency {
25+
return if (rootProject.name.contains("jetbrains")) {
26+
DependencyHandlerScope.of(rootProject.dependencies).project(name)
27+
} else {
28+
DependencyHandlerScope.of(rootProject.dependencies).project(":interfaces:jetbrains$name")
29+
}
30+
}

marker/jvm-marker/build.gradle.kts

+15-35
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,34 @@ plugins {
22
id("org.jetbrains.kotlin.jvm")
33
}
44

5-
val kotlinVersion: String by project
65
val vertxVersion: String by project
76
val projectVersion: String by project
8-
val slf4jVersion: String by project
97
val joorVersion: String by project
108
val intellijVersion: String by project
119

12-
repositories {
13-
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
14-
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
15-
maven(url = "https://maven.google.com/") { name = "Google Repository" }
10+
intellij {
11+
plugins.set(listOf("java", "Groovy", "Kotlin"))
1612
}
1713

1814
dependencies {
19-
if (findProject(":interfaces:jetbrains") != null) {
20-
compileOnly(project(":interfaces:jetbrains:marker"))
21-
} else {
22-
compileOnly(project(":marker"))
23-
}
15+
compileOnly(projectDependency(":marker"))
2416
compileOnly("plus.sourceplus:protocol:$projectVersion")
2517

26-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
27-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
28-
implementation("com.google.guava:guava:31.1-jre")
29-
implementation("org.jetbrains:annotations:23.0.0")
18+
compileOnly("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
19+
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
20+
compileOnly("com.google.guava:guava:31.1-jre")
21+
compileOnly("org.jetbrains:annotations:23.0.0")
3022
compileOnly("io.vertx:vertx-core:$vertxVersion")
3123
compileOnly("io.vertx:vertx-lang-kotlin:$vertxVersion")
3224
compileOnly("io.vertx:vertx-lang-kotlin-coroutines:$vertxVersion")
3325
compileOnly("org.jooq:joor:$joorVersion")
3426
compileOnly("org.apache.commons:commons-lang3:3.12.0")
35-
compileOnly("com.android.tools.external.org-jetbrains:uast:30.2.2")
36-
compileOnly("com.jetbrains.intellij.platform:ide:$intellijVersion")
37-
compileOnly("com.jetbrains.intellij.platform:ide-impl:$intellijVersion")
38-
compileOnly("com.jetbrains.intellij.platform:core:$intellijVersion")
39-
compileOnly("com.jetbrains.intellij.platform:core-impl:$intellijVersion")
40-
compileOnly("com.jetbrains.intellij.platform:core-ui:$intellijVersion")
41-
compileOnly("com.jetbrains.intellij.platform:code-style:$intellijVersion")
42-
compileOnly("com.jetbrains.intellij.platform:lang:$intellijVersion")
43-
compileOnly("com.jetbrains.intellij.platform:lang-impl:$intellijVersion")
44-
compileOnly("com.jetbrains.intellij.groovy:groovy-psi:$intellijVersion")
45-
compileOnly("com.jetbrains.intellij.platform:util:$intellijVersion")
46-
compileOnly("com.jetbrains.intellij.java:java-analysis:$intellijVersion")
47-
compileOnly("com.jetbrains.intellij.java:java-analysis-impl:$intellijVersion")
48-
compileOnly("com.jetbrains.intellij.java:java-impl:$intellijVersion")
49-
compileOnly("com.jetbrains.intellij.java:java-psi:$intellijVersion")
50-
compileOnly("com.jetbrains.intellij.java:java-debugger:$intellijVersion")
51-
compileOnly("com.jetbrains.intellij.java:java-debugger-impl:$intellijVersion")
52-
compileOnly("com.jetbrains.intellij.platform:debugger-impl:$intellijVersion")
53-
compileOnly("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
54-
compileOnly("org.jetbrains.kotlin:kotlin-compiler:$kotlinVersion")
27+
}
28+
29+
fun projectDependency(name: String): ProjectDependency {
30+
return if (rootProject.name.contains("jetbrains")) {
31+
DependencyHandlerScope.of(rootProject.dependencies).project(name)
32+
} else {
33+
DependencyHandlerScope.of(rootProject.dependencies).project(":interfaces:jetbrains$name")
34+
}
5535
}

marker/jvm-marker/src/main/kotlin/spp/jetbrains/marker/jvm/ArtifactSearch.kt

+9-9
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import io.vertx.core.Promise
2828
import io.vertx.core.Vertx
2929
import io.vertx.kotlin.coroutines.await
3030
import kotlinx.coroutines.runBlocking
31-
import org.jetbrains.kotlin.idea.KotlinFileType
32-
import org.jetbrains.plugins.groovy.GroovyFileType
3331
import org.jetbrains.uast.UMethod
3432
import org.jetbrains.uast.toUElement
3533
import org.jetbrains.uast.toUElementOfType
@@ -121,19 +119,21 @@ object ArtifactSearch {
121119
promise.tryComplete(Optional.empty())
122120
} else {
123121
//todo: should be saving endpoints somewhere so don't always have to scan entire application
124-
val groovySourceFiles = FileTypeIndex.getFiles(
125-
GroovyFileType.GROOVY_FILE_TYPE, GlobalSearchScope.projectScope(project)
126-
)
122+
// val groovySourceFiles = FileTypeIndex.getFiles(
123+
// GroovyFileType.GROOVY_FILE_TYPE, GlobalSearchScope.projectScope(project)
124+
// )
125+
//todo: can't search here, need language specific search then combine
127126
val javaSourceFiles = FileTypeIndex.getFiles(
128127
JavaFileType.INSTANCE, GlobalSearchScope.projectScope(project)
129128
)
130-
val kotlinSourceFiles = FileTypeIndex.getFiles(
131-
KotlinFileType.INSTANCE, GlobalSearchScope.projectScope(project)
132-
)
129+
// val kotlinSourceFiles = FileTypeIndex.getFiles(
130+
// KotlinFileType.INSTANCE, GlobalSearchScope.projectScope(project)
131+
// )
133132

134133
val endpointDetector = JVMEndpointDetector(project) //todo: python
135134
var keepSearching = true
136-
for (virtualFile in groovySourceFiles.union(javaSourceFiles).union(kotlinSourceFiles)) {
135+
// for (virtualFile in groovySourceFiles.union(javaSourceFiles).union(kotlinSourceFiles)) {
136+
for (virtualFile in javaSourceFiles) {
137137
val file = PsiManager.getInstance(project).findFile(virtualFile)!!
138138
file.accept(object : PsiRecursiveElementVisitor(true) {
139139
override fun visitElement(element: PsiElement) {

marker/py-marker/build.gradle.kts

+15-28
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,32 @@ plugins {
22
id("org.jetbrains.kotlin.jvm")
33
}
44

5-
val kotlinVersion: String by project
65
val vertxVersion: String by project
76
val projectVersion: String by project
8-
val slf4jVersion: String by project
9-
val intellijVersion: String by project
107

11-
repositories {
12-
maven(url = "https://www.jetbrains.com/intellij-repository/releases") { name = "intellij-releases" }
13-
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies/") { name = "intellij-dependencies" }
8+
intellij {
9+
plugins.set(listOf("PythonCore:222.3739.67"))
1410
}
1511

1612
dependencies {
17-
if (findProject(":interfaces:jetbrains") != null) {
18-
compileOnly(project(":interfaces:jetbrains:marker"))
19-
} else {
20-
compileOnly(project(":marker"))
21-
}
13+
compileOnly(projectDependency(":marker"))
2214
compileOnly("plus.sourceplus:protocol:$projectVersion")
2315

24-
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
25-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
26-
implementation("com.google.guava:guava:31.1-jre")
27-
implementation("org.jetbrains:annotations:23.0.0")
28-
compileOnly("com.jetbrains.intellij.platform:ide:$intellijVersion")
29-
compileOnly("com.jetbrains.intellij.platform:ide-impl:$intellijVersion")
30-
compileOnly("com.jetbrains.intellij.platform:core:$intellijVersion")
31-
compileOnly("com.jetbrains.intellij.platform:core-impl:$intellijVersion")
32-
compileOnly("com.jetbrains.intellij.platform:core-ui:$intellijVersion")
33-
compileOnly("com.jetbrains.intellij.platform:code-style:$intellijVersion")
34-
compileOnly("com.jetbrains.intellij.platform:lang:$intellijVersion")
35-
compileOnly("com.jetbrains.intellij.platform:lang-impl:$intellijVersion")
36-
compileOnly("com.jetbrains.intellij.python:python-psi:211.7628.21") { isTransitive = false }
37-
compileOnly("com.jetbrains.intellij.python:python-community:211.7628.21") { isTransitive = false }
38-
compileOnly("com.jetbrains.intellij.platform:debugger:$intellijVersion") { isTransitive = false }
39-
compileOnly("com.jetbrains.intellij.platform:debugger-impl:$intellijVersion") { isTransitive = false }
40-
16+
compileOnly("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
17+
compileOnly("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
18+
compileOnly("com.google.guava:guava:31.1-jre")
19+
compileOnly("org.jetbrains:annotations:23.0.0")
4120
compileOnly("io.vertx:vertx-core:$vertxVersion")
4221
}
4322

4423
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
4524
kotlinOptions.jvmTarget = "11"
4625
}
26+
27+
fun projectDependency(name: String): ProjectDependency {
28+
return if (rootProject.name.contains("jetbrains")) {
29+
DependencyHandlerScope.of(rootProject.dependencies).project(name)
30+
} else {
31+
DependencyHandlerScope.of(rootProject.dependencies).project(":interfaces:jetbrains$name")
32+
}
33+
}

0 commit comments

Comments
 (0)