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:
Ivan Gavrilovic
2019-04-11 10:27:03 -07:00
committed by Alexey Tsvetkov
parent e171199bf5
commit 955a27ec77
4 changed files with 8 additions and 5 deletions
@@ -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(
@@ -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)
@@ -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())
}
@@ -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)) {