From ef49e792b06192a3d95c613d54db9f9f28169ca2 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Fri, 21 Dec 2018 12:39:07 +0300 Subject: [PATCH] AppCode/CLion: patch java plugin xmls in AppCode as well --- buildSrc/src/main/kotlin/cidr/cidrTasks.kt | 50 ++++++++++++++++++++++ prepare/appcode-plugin/build.gradle.kts | 2 + prepare/clion-plugin/build.gradle.kts | 40 +---------------- 3 files changed, 54 insertions(+), 38 deletions(-) create mode 100644 buildSrc/src/main/kotlin/cidr/cidrTasks.kt diff --git a/buildSrc/src/main/kotlin/cidr/cidrTasks.kt b/buildSrc/src/main/kotlin/cidr/cidrTasks.kt new file mode 100644 index 00000000000..f803584ca5c --- /dev/null +++ b/buildSrc/src/main/kotlin/cidr/cidrTasks.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cidr + +import org.gradle.api.Task +import org.gradle.api.tasks.bundling.Zip +import java.util.regex.Pattern + +fun Zip.includePatched(fileToMarkers: Map>) { + val notDone = mutableSetOf>() + fileToMarkers.forEach { (path, markers) -> + for (marker in markers) { + notDone += path to marker + } + } + + eachFile { + val markers = fileToMarkers[this.sourcePath] ?: return@eachFile + this.filter { + var data = it + for (marker in markers) { + val newData = data.replace(("^(.*" + Pattern.quote(marker) + ".*)$").toRegex(), "") + data = newData + notDone -= path to marker + } + data + } + } + doLast { + check(notDone.size == 0) { + "Filtering failed for: " + + notDone.joinToString(separator = "\n") { (file, marker) -> "file=$file, marker=`$marker`" } + } + } +} + +fun Zip.includePatchedJavaXmls() { + val javaPsiXmlPath = "META-INF/JavaPsiPlugin.xml" + val javaPluginXmlPath = "META-INF/JavaPlugin.xml" + + includePatched( + mapOf( + javaPsiXmlPath to listOf("implementation=\"org.jetbrains.uast.java.JavaUastLanguagePlugin\""), + javaPluginXmlPath to listOf("implementation=\"com.intellij.spi.SPIFileTypeFactory\"") + ) + ) +} \ No newline at end of file diff --git a/prepare/appcode-plugin/build.gradle.kts b/prepare/appcode-plugin/build.gradle.kts index f8a005a4f01..50c0637db94 100644 --- a/prepare/appcode-plugin/build.gradle.kts +++ b/prepare/appcode-plugin/build.gradle.kts @@ -2,6 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.github.jk1.tcdeps.KotlinScriptDslAdapter.teamcityServer import com.github.jk1.tcdeps.KotlinScriptDslAdapter.tc import org.gradle.kotlin.dsl.support.zipTo +import org.jetbrains.kotlin.cidr.includePatchedJavaXmls apply { plugin("kotlin") @@ -78,6 +79,7 @@ val platformDepsJar by task { val platformDepsJar = zipTree(platformDepsZip.singleFile).matching { include("**/$platformDepsJarName") }.singleFile from(zipTree(platformDepsJar)) { exclude(pluginXmlPath) + includePatchedJavaXmls() } } diff --git a/prepare/clion-plugin/build.gradle.kts b/prepare/clion-plugin/build.gradle.kts index 31ea5d0911c..7e6fb9e51fb 100644 --- a/prepare/clion-plugin/build.gradle.kts +++ b/prepare/clion-plugin/build.gradle.kts @@ -1,6 +1,6 @@ import com.github.jk1.tcdeps.KotlinScriptDslAdapter.teamcityServer import com.github.jk1.tcdeps.KotlinScriptDslAdapter.tc -import java.util.regex.Pattern +import org.jetbrains.kotlin.cidr.includePatchedJavaXmls apply { plugin("kotlin") @@ -31,8 +31,6 @@ val cidrPlugin by configurations.creating val platformDepsZip by configurations.creating val pluginXmlPath = "META-INF/plugin.xml" -val javaPsiXmlPath = "META-INF/JavaPsiPlugin.xml" -val javaPluginXmlPath = "META-INF/JavaPlugin.xml" val platformDepsJarName = "kotlinNative-platformDeps.jar" val pluginXmlLocation = File(buildDir, "pluginXml") @@ -106,46 +104,12 @@ val jar = runtimeJar { from(pluginXmlLocation) { include(pluginXmlPath) } } -fun Zip.includePatched(fileToMarkers: Map>) { - - val notDone = mutableSetOf>() - fileToMarkers.forEach { (path, markers) -> - for (marker in markers) { - notDone += path to marker - } - } - - eachFile { - val markers = fileToMarkers[this.sourcePath] ?: return@eachFile - this.filter { - var data = it - for (marker in markers) { - val newData = data.replace(("^(.*" + Pattern.quote(marker) + ".*)$").toRegex(), "") - data = newData - notDone -= path to marker - } - data - } - } - doLast { - check(notDone.size == 0) { - "Filtering failed for: " + - notDone.joinToString(separator = "\n") { (file, marker) -> "file=$file, marker=`$marker`" } - } - } -} - val platformDepsJar by task { archiveName = platformDepsJarName val platformDepsJar = zipTree(platformDepsZip.singleFile).matching { include("**/$platformDepsJarName") }.singleFile from(zipTree(platformDepsJar)) { exclude(pluginXmlPath) - includePatched( - mapOf( - javaPsiXmlPath to listOf("implementation=\"org.jetbrains.uast.java.JavaUastLanguagePlugin\""), - javaPluginXmlPath to listOf("implementation=\"com.intellij.spi.SPIFileTypeFactory\"") - ) - ) + includePatchedJavaXmls() } }