Use MD5 when caching class ABI structure
This avoids Kotlin Gradle plugin dependency on Guava, and it is a good hash function for this use-case. Also fix some formatting.
This commit is contained in:
committed by
Alexey Tsvetkov
parent
e171199bf5
commit
955a27ec77
+1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.internal.kapt.incremental
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
|
||||
const val metadataDescriptor: String = "Lkotlin/Metadata;"
|
||||
|
||||
class ClassAbiExtractor(private val writer: ClassWriter) : ClassVisitor(Opcodes.API_VERSION, writer) {
|
||||
|
||||
override fun visitMethod(
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ class ClassTypeExtractorVisitor(visitor: ClassVisitor) : ClassVisitor(Opcodes.AP
|
||||
private lateinit var classInternalName: String
|
||||
|
||||
fun getAbiTypes() = abiTypes.filter { !toIgnore.contains(it) && it != classInternalName }.toSet()
|
||||
fun getPrivateTypes() = privateTypes.filter { !toIgnore.contains(it) && it != classInternalName && !abiTypes.contains(it)}.toSet()
|
||||
fun getPrivateTypes() = privateTypes.filter { !toIgnore.contains(it) && it != classInternalName && !abiTypes.contains(it) }.toSet()
|
||||
|
||||
override fun visit(version: Int, access: Int, name: String?, signature: String?, superName: String?, interfaces: Array<out String>?) {
|
||||
super.visit(version, access, name, signature, superName, interfaces)
|
||||
|
||||
+4
-3
@@ -5,11 +5,11 @@
|
||||
|
||||
package org.jetbrains.kotlin.gradle.internal.kapt.incremental
|
||||
|
||||
import com.google.common.hash.Hashing
|
||||
import org.gradle.api.artifacts.transform.ArtifactTransform
|
||||
import org.jetbrains.org.objectweb.asm.ClassReader
|
||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||
import java.io.*
|
||||
import java.security.MessageDigest
|
||||
import java.util.zip.ZipFile
|
||||
|
||||
const val CLASS_STRUCTURE_ARTIFACT_TYPE = "class-structure"
|
||||
@@ -75,8 +75,9 @@ private fun analyzeInputStream(input: InputStream, internalName: String, entryDa
|
||||
)
|
||||
|
||||
val bytes = abiExtractor.getBytes()
|
||||
val hashBytes = Hashing.murmur3_128().hashBytes(bytes)
|
||||
entryData.classAbiHash[internalName] = hashBytes.asBytes()
|
||||
val digest = MessageDigest.getInstance("MD5").digest(bytes)
|
||||
|
||||
entryData.classAbiHash[internalName] = digest
|
||||
entryData.classDependencies[internalName] =
|
||||
ClassDependencies(typeDependenciesExtractor.getAbiTypes(), typeDependenciesExtractor.getPrivateTypes())
|
||||
}
|
||||
|
||||
+2
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.internal.kapt.incremental
|
||||
|
||||
import java.io.*
|
||||
import java.util.*
|
||||
|
||||
open class ClasspathSnapshot protected constructor(
|
||||
private val cacheDir: File,
|
||||
private val classpath: Iterable<File>,
|
||||
@@ -146,7 +147,7 @@ open class ClasspathSnapshot protected constructor(
|
||||
|
||||
val allImpacted = mutableSetOf<String>()
|
||||
var current = changedClasses
|
||||
while(current.isNotEmpty()) {
|
||||
while (current.isNotEmpty()) {
|
||||
val newRound = mutableSetOf<String>()
|
||||
for (klass in current) {
|
||||
if (allImpacted.add(klass)) {
|
||||
|
||||
Reference in New Issue
Block a user