mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-179600 do not save outFilePath as string - use xx33 64-bit hash
GitOrigin-RevId: 6fc84e5f0c11305d48956d99a0e861b79326575f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f43e97d108
commit
caa1ca7324
@@ -70,7 +70,7 @@ internal fun loadJpsModel(
|
||||
|
||||
val digests = TargetConfigurationDigestContainer()
|
||||
digests.set(TargetConfigurationDigestProperty.KOTLIN_VERSION, KOTLINC_VERSION_HASH)
|
||||
digests.set(TargetConfigurationDigestProperty.TOOL_VERSION, 11)
|
||||
digests.set(TargetConfigurationDigestProperty.TOOL_VERSION, 12)
|
||||
|
||||
// properties not needed for us (not implemented for java)
|
||||
// extension.loadModuleOptions not needed for us (not implemented for java)
|
||||
|
||||
@@ -11,6 +11,7 @@ kt_jvm_library(
|
||||
"@lib//:kotlin-stdlib",
|
||||
"@lib//:fastutil-min",
|
||||
"//src/worker-util",
|
||||
"@lib//:hash4j",
|
||||
"//:jps",
|
||||
],
|
||||
visibility = ["//visibility:public"],
|
||||
|
||||
@@ -77,6 +77,10 @@ open class GraphDataInputImpl(
|
||||
return DataInputOutputUtil.readLONG(delegate)
|
||||
}
|
||||
|
||||
fun readRawLong(): Long {
|
||||
return delegate.readLong()
|
||||
}
|
||||
|
||||
override fun readFloat(): Float {
|
||||
return delegate.readFloat()
|
||||
}
|
||||
|
||||
@@ -65,6 +65,10 @@ open class GraphDataOutputImpl(
|
||||
DataInputOutputUtil.writeLONG(delegate, v)
|
||||
}
|
||||
|
||||
fun writeRawLong(v: Long) {
|
||||
delegate.writeLong(v)
|
||||
}
|
||||
|
||||
override fun writeFloat(v: Float) {
|
||||
delegate.writeFloat(v)
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
package org.jetbrains.jps.dependency.java
|
||||
|
||||
import com.dynatrace.hash4j.hashing.Hashing
|
||||
import it.unimi.dsi.fastutil.Hash.Strategy
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap
|
||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap
|
||||
@@ -16,12 +17,14 @@ import org.jetbrains.jps.dependency.Usage
|
||||
import org.jetbrains.jps.dependency.diff.DiffCapable
|
||||
import org.jetbrains.jps.dependency.diff.Difference
|
||||
import org.jetbrains.jps.dependency.diff.Difference.Specifier
|
||||
import org.jetbrains.jps.dependency.impl.GraphDataInputImpl
|
||||
import org.jetbrains.jps.dependency.impl.GraphDataOutputImpl
|
||||
|
||||
private val emptyMetadata = emptyArray<JvmMetadata<*, *>>()
|
||||
|
||||
abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Node<T, D> {
|
||||
private val id: JvmNodeReferenceID
|
||||
private val outFilePath: String
|
||||
private val outFilePathHash: Long
|
||||
private val usages: Collection<Usage>
|
||||
private val metadata: Array<JvmMetadata<*, *>>
|
||||
|
||||
@@ -35,14 +38,15 @@ abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Nod
|
||||
metadata: Iterable<JvmMetadata<*, *>>
|
||||
) : super(flags, signature, name, annotations) {
|
||||
id = JvmNodeReferenceID(name)
|
||||
this.outFilePath = outFilePath
|
||||
outFilePathHash = Hashing.xxh3_64().hashBytesToLong(outFilePath.toByteArray())
|
||||
this.usages = usages as Collection<Usage>
|
||||
this.metadata = (metadata as java.util.Collection<JvmMetadata<*, *>>).toArray(emptyMetadata)
|
||||
}
|
||||
|
||||
constructor(`in`: GraphDataInput) : super(`in`) {
|
||||
val input = `in` as GraphDataInputImpl
|
||||
id = JvmNodeReferenceID(name)
|
||||
outFilePath = `in`.readUTF()
|
||||
outFilePathHash = input.readRawLong()
|
||||
|
||||
val usages = ArrayList<Usage>()
|
||||
var groupCount = `in`.readInt()
|
||||
@@ -57,7 +61,7 @@ abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Nod
|
||||
|
||||
override fun write(out: GraphDataOutput) {
|
||||
super.write(out)
|
||||
out.writeUTF(outFilePath)
|
||||
(out as GraphDataOutputImpl).writeRawLong(outFilePathHash)
|
||||
|
||||
val classToUsageList = Object2ObjectLinkedOpenHashMap<Class<out Usage>, MutableList<Usage>>()
|
||||
for (usage in usages) {
|
||||
@@ -82,6 +86,7 @@ abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Nod
|
||||
@Suppress("unused")
|
||||
fun getMetadata(): Iterable<JvmMetadata<*, *>> = Iterable { metadata.iterator() }
|
||||
|
||||
@Suppress("unused")
|
||||
fun <MT : JvmMetadata<MT, *>> getMetadata(metaClass: Class<MT>): Iterable<MT> {
|
||||
return metadata
|
||||
.asSequence()
|
||||
@@ -90,29 +95,35 @@ abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Nod
|
||||
}
|
||||
|
||||
internal fun <MT : JvmMetadata<MT, *>> filterMetadata(metaClass: Class<MT>): Set<MT> {
|
||||
if (metadata.size == 0) {
|
||||
val size = metadata.size
|
||||
if (size == 0) {
|
||||
return emptySet()
|
||||
}
|
||||
else if (metadata.size == 1) {
|
||||
if (metaClass.isInstance(metadata[0])) {
|
||||
return ObjectOpenCustomHashSet<MT>(DiffCapableHashStrategy)
|
||||
else if (size == 1) {
|
||||
val m = metadata[0]
|
||||
if (metaClass.isInstance(metadata)) {
|
||||
val result = ObjectOpenCustomHashSet<MT>(1, DiffCapableHashStrategy)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
result.add(m as MT)
|
||||
return result
|
||||
}
|
||||
else {
|
||||
return emptySet()
|
||||
}
|
||||
}
|
||||
|
||||
var result: ObjectOpenCustomHashSet<MT>? = null
|
||||
for (m in metadata) {
|
||||
if (metaClass.isInstance(m)) {
|
||||
if (result == null) {
|
||||
result = ObjectOpenCustomHashSet<MT>(DiffCapableHashStrategy)
|
||||
else {
|
||||
var result: ObjectOpenCustomHashSet<MT>? = null
|
||||
for (m in metadata) {
|
||||
if (metaClass.isInstance(m)) {
|
||||
if (result == null) {
|
||||
result = ObjectOpenCustomHashSet<MT>(DiffCapableHashStrategy)
|
||||
}
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
result.add(m as MT)
|
||||
}
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
result.add(m as MT)
|
||||
}
|
||||
return result ?: emptySet()
|
||||
}
|
||||
return result ?: emptySet()
|
||||
}
|
||||
|
||||
final override fun isSame(other: DiffCapable<*, *>?): Boolean {
|
||||
@@ -124,11 +135,11 @@ abstract class JVMClassNode<T : JVMClassNode<T, D>, D : Difference> : Proto, Nod
|
||||
return false
|
||||
}
|
||||
val that = other
|
||||
return id == that.id && outFilePath == that.outFilePath
|
||||
return outFilePathHash == that.outFilePathHash && id == that.id
|
||||
}
|
||||
|
||||
final override fun diffHashCode(): Int {
|
||||
return 31 * outFilePath.hashCode() + id.hashCode()
|
||||
return 31 * outFilePathHash.toInt() + id.hashCode()
|
||||
}
|
||||
|
||||
@Suppress("unused")
|
||||
|
||||
Reference in New Issue
Block a user