From 955a27ec777b1673a7fbeb5294c1775a84adcfe4 Mon Sep 17 00:00:00 2001 From: Ivan Gavrilovic Date: Thu, 11 Apr 2019 10:27:03 -0700 Subject: [PATCH] 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. --- .../gradle/internal/kapt/incremental/ClassAbiExtractor.kt | 1 + .../internal/kapt/incremental/ClassTypeExtractorVisitor.kt | 2 +- .../gradle/internal/kapt/incremental/ClasspathAnalyzer.kt | 7 ++++--- .../gradle/internal/kapt/incremental/ClasspathSnapshot.kt | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt index f118a979ddf..7703aed295e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassAbiExtractor.kt @@ -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( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt index 60c06d31949..0217bda427e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClassTypeExtractorVisitor.kt @@ -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?) { super.visit(version, access, name, signature, superName, interfaces) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt index d19a360648f..c4bd1f689c2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathAnalyzer.kt @@ -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()) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathSnapshot.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathSnapshot.kt index 7e1a2ceefd6..4926ba98c77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathSnapshot.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/incremental/ClasspathSnapshot.kt @@ -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, @@ -146,7 +147,7 @@ open class ClasspathSnapshot protected constructor( val allImpacted = mutableSetOf() var current = changedClasses - while(current.isNotEmpty()) { + while (current.isNotEmpty()) { val newRound = mutableSetOf() for (klass in current) { if (allImpacted.add(klass)) {