Fix asm annotations loading after annotations refactoring

This commit is contained in:
Ilya Chernikov
2018-08-17 17:17:16 +02:00
parent 2bf458d970
commit bda8089004
2 changed files with 13 additions and 6 deletions
@@ -65,9 +65,11 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
}
override val scriptFileExtensionWithDot: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
val ext = annotationsFromAsm.find { it.name == KotlinScriptFileExtension::class.simpleName!! }?.args?.first()
// TODO: check whether it actually works
?: annotationsFromAsm.find { it.name == KotlinScript::class.simpleName }?.args?.get(1)
val extFromAnn = (
annotationsFromAsm.find { it.name == KotlinScriptFileExtension::class.simpleName!! }?.args
?: annotationsFromAsm.find { it.name == KotlinScript::class.simpleName }?.args
)?.find { it.name == "extension" }?.value
val ext = extFromAnn
?: scriptDefinition.let {
it[ScriptDefinition.fileExtension] ?: "kts"
}
@@ -75,7 +77,7 @@ class LazyScriptDefinitionFromDiscoveredClass internal constructor(
}
override val name: String by lazy(LazyThreadSafetyMode.PUBLICATION) {
annotationsFromAsm.find { it.name == KotlinScript::class.simpleName!! }?.args?.first()
annotationsFromAsm.find { it.name == KotlinScript::class.simpleName!! }?.args?.find { it.name == "name" }?.value
?: super.name
}
}
@@ -7,14 +7,19 @@ package org.jetbrains.kotlin.scripting.compiler.plugin
import org.jetbrains.org.objectweb.asm.*
internal class BinAnnArgData(
val name: String?,
val value: String
)
internal class BinAnnData(
val name: String,
val args: ArrayList<String> = arrayListOf()
val args: ArrayList<BinAnnArgData> = arrayListOf()
)
private class TemplateAnnotationVisitor(val anns: ArrayList<BinAnnData> = arrayListOf()) : AnnotationVisitor(Opcodes.ASM5) {
override fun visit(name: String?, value: Any?) {
anns.last().args.add(value.toString())
anns.last().args.add(BinAnnArgData(name, value.toString()))
}
}