aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/build.gradle76
1 files changed, 75 insertions, 1 deletions
diff --git a/core/build.gradle b/core/build.gradle
index 42fa30e1..22fe2668 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -1,3 +1,9 @@
+import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator
+import com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTransformer
+import groovy.xml.XmlUtil
+import org.apache.tools.zip.ZipEntry
+import org.apache.tools.zip.ZipOutputStream
+
import javax.tools.ToolProvider
group 'org.jetbrains.dokka'
@@ -6,7 +12,7 @@ version dokka_version
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.2'
+ classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
}
repositories {
jcenter()
@@ -76,6 +82,60 @@ jar {
}
}
+class PluginXmlTransformer implements com.github.jengelman.gradle.plugins.shadow.transformers.Transformer {
+ private Map<String, Node> transformedPluginXmlFiles = new HashMap<>();
+
+ @Override
+ boolean canTransformResource(FileTreeElement fileTreeElement) {
+ return fileTreeElement.relativePath.segments.contains("META-INF") && fileTreeElement.name.endsWith(".xml")
+ }
+
+ @Override
+ void transform(String path, InputStream inputStream, List<Relocator> relocators) {
+ Node node = new XmlParser().parse(inputStream)
+ relocateXml(node, relocators)
+ transformedPluginXmlFiles.put(path, node)
+ }
+
+ @Override
+ boolean hasTransformedResource() {
+ return !transformedPluginXmlFiles.isEmpty()
+ }
+
+ @Override
+ void modifyOutputStream(ZipOutputStream zipOutputStream) {
+ for (Map.Entry<String, Node> entry : transformedPluginXmlFiles.entrySet()) {
+ zipOutputStream.putNextEntry(new ZipEntry(entry.key))
+ XmlUtil.serialize(entry.value, zipOutputStream)
+ }
+ }
+
+ private static void relocateXml(Node node, List<Relocator> relocators) {
+ Map attributes = node.attributes()
+ for (Map.Entry entry : attributes.entrySet()) {
+ entry.setValue(relocateClassName((String) entry.getValue(), relocators))
+ }
+ List<String> localText = node.localText()
+ if (localText.size() == 1) {
+ node.setValue(relocateClassName(localText[0], relocators))
+ }
+ node.children().each {
+ if (it instanceof Node) {
+ relocateXml((Node) it, relocators)
+ }
+ }
+ }
+
+ private static String relocateClassName(String className, List<Relocator> relocators) {
+ for (Relocator relocator : relocators) {
+ if (relocator.canRelocateClass(className)) {
+ return relocator.relocateClass(className)
+ }
+ }
+ return className
+ }
+}
+
shadowJar {
baseName = 'dokka-fatjar'
classifier = ''
@@ -83,6 +143,20 @@ shadowJar {
dependencies {
exclude(dependency('org.apache.ant:ant:1.9.6'))
}
+
+ relocate 'com', 'dokkacom'
+ relocate('org', 'dokkaorg') {
+ exclude 'org.jetbrains.dokka.**'
+ exclude 'org.xml.**'
+ }
+
+ transform(ServiceFileTransformer)
+ transform(PluginXmlTransformer)
+
+ exclude 'colorScheme/**'
+ exclude 'fileTemplates/**'
+ exclude 'inspectionDescriptions/**'
+ exclude 'intentionDescriptions/**'
}
publishing {