in src/main/kotlin/org/jetbrains/grammarkit/GrammarKitPlugin.kt [30:137]
override fun apply(project: Project) {
checkGradleVersion()
project.plugins.withId("java") {
val extension = project.extensions.create<GrammarKitPluginExtension>(GrammarKitConstants.GROUP_NAME)
val grammarKitClassPathConfiguration = project.configurations.register(GRAMMAR_KIT_CLASS_PATH_CONFIGURATION_NAME)
val compileClasspathConfiguration = project.configurations.named(COMPILE_CLASSPATH_CONFIGURATION_NAME)
val compileOnlyConfiguration = project.configurations.named(COMPILE_ONLY_CONFIGURATION_NAME)
project.tasks.register<GenerateLexerTask>(GENERATE_LEXER_TASK_NAME)
project.tasks.withType<GenerateLexerTask>().configureEach {
classpath(getClasspath(grammarKitClassPathConfiguration, compileClasspathConfiguration) { file ->
file.name.startsWith("jflex")
})
}
project.tasks.register<GenerateParserTask>(GENERATE_PARSER_TASK_NAME)
project.tasks.withType<GenerateParserTask>().configureEach {
val requiredLibs = listOf(
"app", "lib", "jdom", "trove4j", "junit", "guava", "asm-all", "automaton", "platform-api", "platform-impl",
"util", "util_rt", "annotations", "picocontainer", "extensions", "idea", "openapi", "opentelemetry", "grammar-kit",
"platform-util-ui", "platform-concurrency", "intellij-deps-fastutil",
"module-intellij.libraries.fastutil", "module-intellij.libraries.kotlinx.collections.immutable",
"module-intellij.libraries.asm",
// CLion unlike IDEA contains `MockProjectEx` in `testFramework.jar` instead of `idea.jar`
// so this jar should be in `requiredLibs` list to avoid `NoClassDefFoundError` exception
// while parser generation with CLion distribution
"testFramework", "3rd-party",
)
classpath(getClasspath(grammarKitClassPathConfiguration, compileClasspathConfiguration) { file ->
requiredLibs.any {
file.name.equals("$it.jar", true) || file.name.startsWith("$it-", true)
}
})
}
if (project.settings.dependencyResolutionManagement.repositoriesMode.get() != FAIL_ON_PROJECT_REPOS) {
project.repositories.apply {
maven(url = "https://cache-redirector.jetbrains.com/intellij-dependencies")
maven(url = "https://cache-redirector.jetbrains.com/intellij-repository/releases")
}
}
compileOnlyConfiguration.configure {
val grammarJFlexDependencies = zip(
extension.grammarKitRelease,
extension.jflexRelease,
) { grammarKitRelease, jflexRelease ->
listOf(
"org.jetbrains:grammar-kit:$grammarKitRelease",
"org.jetbrains.intellij.deps.jflex:jflex:$jflexRelease",
).map(project.dependencies::create).map {
it as ModuleDependency
it.exclude(mapOf("group" to "org.jetbrains.plugins", "module" to "ant"))
it.exclude(mapOf("group" to "org.jetbrains.plugins", "module" to "idea"))
}
}
dependencies.addAllLater(zip(
extension.intellijRelease,
grammarJFlexDependencies,
) { intellijRelease, dependencies ->
when {
intellijRelease.isEmpty() -> dependencies
else -> emptyList()
}
})
}
grammarKitClassPathConfiguration.configure {
val platformDependencies = zip(
extension.intellijRelease,
extension.grammarKitRelease,
extension.jflexRelease,
) { intellijRelease, grammarKitRelease, jflexRelease ->
listOf(
"org.jetbrains:grammar-kit:$grammarKitRelease",
"org.jetbrains.intellij.deps.jflex:jflex:$jflexRelease",
"com.jetbrains.intellij.platform:indexing-impl:$intellijRelease",
"com.jetbrains.intellij.platform:analysis-impl:$intellijRelease",
"com.jetbrains.intellij.platform:core-impl:$intellijRelease",
"com.jetbrains.intellij.platform:lang-impl:$intellijRelease",
"org.jetbrains.intellij.deps:asm-all:7.0.1",
).map(project.dependencies::create).map {
it as ModuleDependency
it.exclude(mapOf("group" to "com.jetbrains.rd"))
it.exclude(mapOf("group" to "org.jetbrains.marketplace"))
it.exclude(mapOf("group" to "org.roaringbitmap"))
it.exclude(mapOf("group" to "org.jetbrains.plugins"))
it.exclude(mapOf("module" to "idea"))
it.exclude(mapOf("module" to "ant"))
}
}
dependencies.addAllLater(zip(
extension.intellijRelease,
platformDependencies,
) { intellijRelease, dependencies ->
when {
intellijRelease.isEmpty() -> emptyList()
else -> dependencies
}
})
}
}
}