diff --git a/build.gradle b/build.gradle index 6afe4b9..9c466e3 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'io.izzel.taboolib' -version '1.8' +version '1.9' configurations { embed diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/groovy/io/izzel/taboolib/gradle/KotlinAnnotationVisitor.groovy b/src/main/groovy/io/izzel/taboolib/gradle/KotlinAnnotationVisitor.groovy new file mode 100644 index 0000000..c369e0b --- /dev/null +++ b/src/main/groovy/io/izzel/taboolib/gradle/KotlinAnnotationVisitor.groovy @@ -0,0 +1,55 @@ +package io.izzel.taboolib.gradle + +import org.gradle.api.Project +import org.objectweb.asm.AnnotationVisitor +import org.objectweb.asm.Opcodes + +class KotlinAnnotationVisitor extends AnnotationVisitor { + + Project project + + KotlinAnnotationVisitor(AnnotationVisitor annotationVisitor, project) { + super(Opcodes.ASM7, annotationVisitor) + this.project = project + } + + @Override + void visit(String name, Object value) { + if (value instanceof String) { + super.visit(name, value + .replace("@kotlin_version@", getKotlinVersion()) + .replace("@kotlin_version_escape@", getKotlinVersionEscape()) + ) + } else { + super.visit(name, value) + } + } + + @Override + void visitEnum(String name, String descriptor, String value) { + super.visitEnum(name, descriptor, value) + } + + @Override + AnnotationVisitor visitAnnotation(String name, String descriptor) { + return new KotlinAnnotationVisitor(super.visitAnnotation(name, descriptor), project) + } + + @Override + AnnotationVisitor visitArray(String name) { + return new KotlinAnnotationVisitor(super.visitArray(name), project) + } + + @Override + void visitEnd() { + super.visitEnd() + } + + String getKotlinVersion() { + return project.plugins.findPlugin("org.jetbrains.kotlin.jvm").kotlinPluginVersion + } + + String getKotlinVersionEscape() { + return getKotlinVersion().replaceAll("[.-]", "_") + } +} diff --git a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy index 82c58db..05cbeb8 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibClassVisitor.groovy @@ -32,6 +32,10 @@ class TabooLibClassVisitor extends ClassVisitor { AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { if (descriptor == "L${project.group.replace('.', '/')}/taboolib/common/Isolated;") { return new IsolatedAnnotationVisitor(super.visitAnnotation(descriptor, visible), project, name, this) + } else if (descriptor == "L${project.group.replace('.', '/')}/taboolib/common/env/RuntimeDependency;") { + return new KotlinAnnotationVisitor(super.visitAnnotation(descriptor, visible), project) + } else if (descriptor == "L${project.group.replace('.', '/')}/taboolib/common/env/RuntimeDependencies;") { + return new KotlinAnnotationVisitor(super.visitAnnotation(descriptor, visible), project) } else if (descriptor in annotations) { return new PluginAnnotationVisitor(super.visitAnnotation(descriptor, visible), project) } else { diff --git a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibPlugin.groovy b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibPlugin.groovy index 15920eb..ae1ef43 100644 --- a/src/main/groovy/io/izzel/taboolib/gradle/TabooLibPlugin.groovy +++ b/src/main/groovy/io/izzel/taboolib/gradle/TabooLibPlugin.groovy @@ -12,7 +12,6 @@ class TabooLibPlugin implements Plugin { def tabooExt = project.extensions.create('taboolib', TabooLibExtension) def taboo = project.configurations.maybeCreate('taboo') def tabooTask = project.tasks.create('tabooRelocateJar', RelocateJar) - project.afterEvaluate { project.configurations.compileClasspath.extendsFrom(taboo) // subprojects @@ -23,6 +22,7 @@ class TabooLibPlugin implements Plugin { project.tasks.jar.configure { Jar task -> task.from(taboo.collect { it.isDirectory() ? it : project.zipTree(it) }) } + def kv = project.plugins.findPlugin("org.jetbrains.kotlin.jvm").kotlinPluginVersion.replaceAll("[.-]", "_") def jarTask = project.tasks.jar as Jar tabooTask.configure { RelocateJar task -> task.tabooExt = tabooExt @@ -30,6 +30,7 @@ class TabooLibPlugin implements Plugin { task.inJar = task.inJar ?: jarTask.archivePath task.relocations = tabooExt.relocation task.classifier = tabooExt.classifier + task.relocations['kotlin'] = 'taboolib.library.kotlin_' + kv task.relocations['taboolib'] = project.group.toString() + '.taboolib' } }