Add several subclasses of BinaryVersion
To simplify comparison of expected vs actual versions in the future
This commit is contained in:
@@ -21,16 +21,17 @@ import com.intellij.util.indexing.DataIndexer
|
||||
import com.intellij.util.indexing.FileBasedIndex
|
||||
import com.intellij.util.indexing.FileContent
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil.asmDescByFqNameWithoutInnerClasses
|
||||
import org.jetbrains.kotlin.load.java.AbiVersionUtil
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames.*
|
||||
import org.jetbrains.kotlin.load.java.JvmBytecodeBinaryVersion
|
||||
import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion
|
||||
import org.jetbrains.org.objectweb.asm.AnnotationVisitor
|
||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||
import org.jetbrains.org.objectweb.asm.ClassVisitor
|
||||
import org.jetbrains.org.objectweb.asm.Opcodes
|
||||
|
||||
object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinAbiVersionIndex>(KotlinAbiVersionIndex::class.java) {
|
||||
|
||||
object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinAbiVersionIndex>(
|
||||
KotlinAbiVersionIndex::class.java, { JvmBytecodeBinaryVersion.create(it) }
|
||||
) {
|
||||
override fun getIndexer() = INDEXER
|
||||
|
||||
override fun getInputFilter() = FileBasedIndex.InputFilter() { file -> file.fileType == StdFileTypes.CLASS }
|
||||
@@ -60,7 +61,7 @@ object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinAbiVersionIndex>(
|
||||
return object : AnnotationVisitor(Opcodes.ASM5) {
|
||||
override fun visit(name: String, value: Any) {
|
||||
if (name == VERSION_FIELD_NAME && value is IntArray) {
|
||||
version = BinaryVersion.create(value)
|
||||
version = JvmBytecodeBinaryVersion.create(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,7 +71,7 @@ object KotlinAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinAbiVersionIndex>(
|
||||
|
||||
if (annotationPresent && version == null) {
|
||||
// No version at all because the class is too old, or version is set to something weird
|
||||
version = AbiVersionUtil.INVALID_VERSION
|
||||
version = JvmBytecodeBinaryVersion.INVALID_VERSION
|
||||
}
|
||||
|
||||
if (version != null) mapOf(version!! to null) else mapOf()
|
||||
|
||||
@@ -29,7 +29,10 @@ import java.io.DataOutput
|
||||
/**
|
||||
* Important! This is not a stub-based index. And it has its own version
|
||||
*/
|
||||
abstract class KotlinAbiVersionIndexBase<T>(private val classOfIndex: Class<T>) : ScalarIndexExtension<BinaryVersion>() {
|
||||
abstract class KotlinAbiVersionIndexBase<T>(
|
||||
private val classOfIndex: Class<T>,
|
||||
private val createBinaryVersion: (IntArray) -> BinaryVersion
|
||||
) : ScalarIndexExtension<BinaryVersion>() {
|
||||
|
||||
override fun getName() = ID.create<BinaryVersion, Void>(classOfIndex.canonicalName)
|
||||
|
||||
@@ -40,7 +43,7 @@ abstract class KotlinAbiVersionIndexBase<T>(private val classOfIndex: Class<T>)
|
||||
|
||||
override fun read(input: DataInput): BinaryVersion {
|
||||
val size = DataInputOutputUtil.readINT(input)
|
||||
return BinaryVersion.create((0..size - 1).map { DataInputOutputUtil.readINT(input) }.toIntArray())
|
||||
return createBinaryVersion((0..size - 1).map { DataInputOutputUtil.readINT(input) }.toIntArray())
|
||||
}
|
||||
|
||||
override fun save(output: DataOutput, value: BinaryVersion) {
|
||||
|
||||
@@ -21,14 +21,15 @@ import com.intellij.util.indexing.DataIndexer
|
||||
import com.intellij.util.indexing.FileBasedIndex
|
||||
import com.intellij.util.indexing.FileContent
|
||||
import org.jetbrains.kotlin.js.JavaScript
|
||||
import org.jetbrains.kotlin.load.java.AbiVersionUtil
|
||||
import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion
|
||||
import org.jetbrains.kotlin.utils.JsBinaryVersion
|
||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadata
|
||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||
import java.util.*
|
||||
|
||||
object KotlinJavaScriptAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinJavaScriptAbiVersionIndex>(KotlinJavaScriptAbiVersionIndex::class.java) {
|
||||
|
||||
object KotlinJavaScriptAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinJavaScriptAbiVersionIndex>(
|
||||
KotlinJavaScriptAbiVersionIndex::class.java, { JsBinaryVersion.create(it) }
|
||||
) {
|
||||
override fun getIndexer() = INDEXER
|
||||
|
||||
override fun getInputFilter() = FileBasedIndex.InputFilter() { file -> JavaScript.EXTENSION == file.extension }
|
||||
@@ -46,11 +47,11 @@ object KotlinJavaScriptAbiVersionIndex : KotlinAbiVersionIndexBase<KotlinJavaScr
|
||||
KotlinJavascriptMetadataUtils.parseMetadata(text, metadataList)
|
||||
for (metadata in metadataList) {
|
||||
val version = if (KotlinJavascriptMetadataUtils.isAbiVersionCompatible(metadata.abiVersion)) {
|
||||
BinaryVersion.create(0, metadata.abiVersion, 0)
|
||||
JsBinaryVersion.create(0, metadata.abiVersion, 0)
|
||||
}
|
||||
else {
|
||||
// Version is set to something weird
|
||||
AbiVersionUtil.INVALID_VERSION
|
||||
JsBinaryVersion.INVALID_VERSION
|
||||
}
|
||||
result[version] = null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user