diff --git a/analysis/light-classes-base/build.gradle.kts b/analysis/light-classes-base/build.gradle.kts index f4f3fae5042..4849f5662a6 100644 --- a/analysis/light-classes-base/build.gradle.kts +++ b/analysis/light-classes-base/build.gradle.kts @@ -12,7 +12,7 @@ dependencies { api(project(":core:compiler.common.jvm")) implementation(project(":analysis:project-structure")) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) } sourceSets { diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KotlinClassInnerStuffCache.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KotlinClassInnerStuffCache.kt index fa7d49e4ab9..bd4074f40d2 100644 --- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KotlinClassInnerStuffCache.kt +++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KotlinClassInnerStuffCache.kt @@ -19,7 +19,7 @@ import com.intellij.psi.util.MethodSignatureBackedByPsiMethod import com.intellij.psi.util.PsiUtil import com.intellij.util.ArrayUtil import com.intellij.util.IncorrectOperationException -import gnu.trove.THashMap +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.asJava.elements.KtLightParameter @@ -84,7 +84,7 @@ class KotlinClassInnerStuffCache( private val fieldByNameCache = cache { val fields = this.fields.takeIf { it.isNotEmpty() } ?: return@cache emptyMap() - Collections.unmodifiableMap(THashMap(fields.size).apply { + Collections.unmodifiableMap(Object2ObjectOpenHashMap(fields.size).apply { for (field in fields) { putIfAbsent(field.name, field) } @@ -101,7 +101,7 @@ class KotlinClassInnerStuffCache( private val methodByNameCache = cache { val methods = this.methods.takeIf { it.isNotEmpty() } ?: return@cache emptyMap() - Collections.unmodifiableMap(THashMap>().apply { + Collections.unmodifiableMap(Object2ObjectOpenHashMap>().apply { for ((key, list) in methods.groupByTo(HashMap()) { it.name }) { put(key, list.toTypedArray()) } @@ -119,7 +119,7 @@ class KotlinClassInnerStuffCache( private val innerClassByNameCache = cache { val classes = this.innerClasses.takeIf { it.isNotEmpty() } ?: return@cache emptyMap() - Collections.unmodifiableMap(THashMap().apply { + Collections.unmodifiableMap(Object2ObjectOpenHashMap().apply { for (psiClass in classes) { val name = psiClass.name if (name == null) { diff --git a/compiler/cli/cli-base/build.gradle.kts b/compiler/cli/cli-base/build.gradle.kts index 9355df98568..4d38211144e 100644 --- a/compiler/cli/cli-base/build.gradle.kts +++ b/compiler/cli/cli-base/build.gradle.kts @@ -21,7 +21,7 @@ dependencies { compileOnly(toolsJarApi()) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) } diff --git a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/CliVirtualFileFinder.kt b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/CliVirtualFileFinder.kt index af5cb568ecd..056d87c3bf1 100644 --- a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/CliVirtualFileFinder.kt +++ b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/CliVirtualFileFinder.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.GlobalSearchScope -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.cli.jvm.index.JavaRoot import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder @@ -51,7 +51,7 @@ class CliVirtualFileFinder( } override fun findMetadataTopLevelClassesInPackage(packageFqName: FqName): Set { - val result = THashSet() + val result = ObjectOpenHashSet() index.traverseDirectoriesInPackage(packageFqName, continueSearch = { dir, _ -> for (child in dir.children) { if (child.extension == MetadataPackageFragment.METADATA_FILE_EXTENSION) { diff --git a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt index 8b2d66ea123..a53cdaa6ce1 100644 --- a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt +++ b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt @@ -23,8 +23,8 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.* import com.intellij.psi.impl.file.PsiPackageImpl import com.intellij.psi.search.GlobalSearchScope -import gnu.trove.THashMap -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.cli.jvm.index.JavaRoot import org.jetbrains.kotlin.cli.jvm.index.JvmDependenciesIndex import org.jetbrains.kotlin.cli.jvm.index.SingleJavaFileRootsIndex @@ -50,7 +50,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ private lateinit var index: JvmDependenciesIndex private lateinit var singleJavaFileRootsIndex: SingleJavaFileRootsIndex private lateinit var packagePartProviders: List - private val topLevelClassesCache: MutableMap = THashMap() + private val topLevelClassesCache: MutableMap = Object2ObjectOpenHashMap() private val allScope = GlobalSearchScope.allScope(myPsiManager.project) private var usePsiClassFilesReading = false @@ -96,7 +96,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ }?.takeIf { it in searchScope } } - private val binaryCache: MutableMap = THashMap() + private val binaryCache: MutableMap = Object2ObjectOpenHashMap() private val signatureParsingComponent = BinaryClassSignatureParser() fun findClass(classId: ClassId, searchScope: GlobalSearchScope) = findClass(JavaClassFinder.Request(classId), searchScope) @@ -263,7 +263,7 @@ class KotlinCliJavaFileManagerImpl(private val myPsiManager: PsiManager) : CoreJ } override fun knownClassNamesInPackage(packageFqName: FqName): Set { - val result = THashSet() + val result = ObjectOpenHashSet() index.traverseDirectoriesInPackage(packageFqName, continueSearch = { dir, _ -> for (child in dir.children) { if (child.extension == "class" || child.extension == "java" || child.extension == "sig") { diff --git a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/index/JvmDependenciesIndexImpl.kt b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/index/JvmDependenciesIndexImpl.kt index 745f29e6c9b..cec1ef87ed5 100644 --- a/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/index/JvmDependenciesIndexImpl.kt +++ b/compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/index/JvmDependenciesIndexImpl.kt @@ -9,7 +9,7 @@ import com.intellij.ide.highlighter.JavaClassFileType import com.intellij.ide.highlighter.JavaFileType import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFile -import gnu.trove.THashMap +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import java.util.* @@ -58,7 +58,7 @@ class JvmDependenciesIndexImpl(_roots: List) : JvmDependenciesIndex { override val indexedRoots by lazy { roots.asSequence() } private val packageCache: Array> by lazy { - Array(roots.size) { THashMap() } + Array(roots.size) { Object2ObjectOpenHashMap() } } override fun traverseDirectoriesInPackage( diff --git a/compiler/daemon/build.gradle.kts b/compiler/daemon/build.gradle.kts index 21e0646e535..31bc604e55f 100644 --- a/compiler/daemon/build.gradle.kts +++ b/compiler/daemon/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { compileOnly(project(":compiler:cli")) compileOnly(project(":compiler:incremental-compilation-impl")) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) runtimeOnly(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt index 37c648af271..d9052d5e628 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt @@ -16,8 +16,8 @@ package org.jetbrains.kotlin.daemon -import gnu.trove.THashMap -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.daemon.common.DummyProfiler import org.jetbrains.kotlin.daemon.common.Profiler import org.jetbrains.kotlin.daemon.common.withMeasure @@ -35,7 +35,7 @@ class RemoteLookupTrackerClient( private val isDoNothing = profiler.withMeasure(this) { facade.lookupTracker_isDoNothing() } // Map: FileName -> (ScopeFqName -> Set) - private val lookups = THashMap>>() + private val lookups = Object2ObjectOpenHashMap>>() private val interner = createStringInterner() override val requiresPosition: Boolean = profiler.withMeasure(this) { facade.lookupTracker_requiresPosition() } @@ -51,8 +51,7 @@ class RemoteLookupTrackerClient( LookupInfo(filePath, position, scopeFqName, scopeKind, name) else internedName - - lookups.getOrPut(filePath, ::THashMap).getOrPut(internedSymbolFqName, ::THashSet).add(objectToPut) + lookups.getOrPut(filePath, ::Object2ObjectOpenHashMap).getOrPut(internedSymbolFqName, ::ObjectOpenHashSet).add(objectToPut) } override fun clear() { @@ -64,7 +63,7 @@ class RemoteLookupTrackerClient( } private fun flush() { - if (isDoNothing || lookups.isEmpty) return + if (isDoNothing || lookups.isEmpty()) return profiler.withMeasure(this) { facade.lookupTracker_record( diff --git a/compiler/frontend/build.gradle.kts b/compiler/frontend/build.gradle.kts index 9ba2433dabe..1e82e36b0c0 100644 --- a/compiler/frontend/build.gradle.kts +++ b/compiler/frontend/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { api(project(":kotlin-script-runtime")) api(commonDependency("io.javaslang","javaslang")) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) compileOnly(libs.guava) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt index 26f6c08f0f5..dac4fc31669 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.resolve.lazy -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.incremental.components.LookupLocation @@ -257,7 +257,7 @@ class FileScopeFactory( parentScope: ImportingScope ): ImportingScope { val scope = packageView.memberScope - val names by lazy(LazyThreadSafetyMode.PUBLICATION) { scope.computeAllNames()?.let(::THashSet) } + val names by lazy(LazyThreadSafetyMode.PUBLICATION) { scope.computeAllNames()?.let(::ObjectOpenHashSet) } val packageName = packageView.fqName val excludedNames = aliasImportNames.mapNotNull { if (it.parent() == packageName) it.shortName() else null } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt index dea4bbdb93c..76189c91103 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.resolve.lazy import com.google.common.collect.HashMultimap import com.google.common.collect.ImmutableListMultimap import com.google.common.collect.ListMultimap -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -130,7 +130,7 @@ open class LazyImportResolver( } val allNames: Set? by components.storageManager.createNullableLazyValue { - indexedImports.imports.asIterable().flatMapToNullable(THashSet()) { getImportScope(it).computeImportedNames() } + indexedImports.imports.asIterable().flatMapToNullable(ObjectOpenHashSet()) { getImportScope(it).computeImportedNames() } } fun definitelyDoesNotContainName(name: Name): Boolean { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/PreliminaryLoopVisitor.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/PreliminaryLoopVisitor.kt index 0e3fce910de..835d9447395 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/PreliminaryLoopVisitor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/PreliminaryLoopVisitor.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.types.expressions -import gnu.trove.THashSet +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor import org.jetbrains.kotlin.psi.KtLoopExpression @@ -37,7 +37,7 @@ class PreliminaryLoopVisitor private constructor() : AssignedVariablesSearcher() languageVersionSettings: LanguageVersionSettings ): DataFlowInfo { var resultFlowInfo = dataFlowInfo - val nonTrivialValues = THashSet().apply { + val nonTrivialValues = ObjectOpenHashSet().apply { addAll(dataFlowInfo.completeNullabilityInfo.iterator().map { it._1 }) addAll(dataFlowInfo.completeTypeInfo.iterator().map { it._1 }) } diff --git a/compiler/psi/build.gradle.kts b/compiler/psi/build.gradle.kts index 0481ed22cd2..9dc7729370a 100644 --- a/compiler/psi/build.gradle.kts +++ b/compiler/psi/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { compileOnly(intellijCore()) compileOnly(libs.guava) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) jflexPath(commonDependency("org.jetbrains.intellij.deps.jflex", "jflex")) } diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinStringLiteralTextEscaper.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinStringLiteralTextEscaper.kt index 771bb5a1de6..201e6ba01c6 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinStringLiteralTextEscaper.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/KotlinStringLiteralTextEscaper.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.psi import com.intellij.openapi.util.TextRange import com.intellij.psi.LiteralTextEscaper -import gnu.trove.TIntArrayList +import it.unimi.dsi.fastutil.ints.IntArrayList import org.jetbrains.kotlin.psi.psiUtil.getContentRange import org.jetbrains.kotlin.psi.psiUtil.isSingleQuoted import kotlin.math.min @@ -27,7 +27,7 @@ class KotlinStringLiteralTextEscaper(host: KtStringTemplateExpression) : Literal private var sourceOffsets: IntArray? = null override fun decode(rangeInsideHost: TextRange, outChars: StringBuilder): Boolean { - val sourceOffsetsList = TIntArrayList() + val sourceOffsetsList = IntArrayList() var sourceOffset = 0 for (child in myHost.entries) { @@ -44,7 +44,7 @@ class KotlinStringLiteralTextEscaper(host: KtStringTemplateExpression) : Literal //don't allow injection if its range starts or ends inside escaped sequence //but still process offsets for the already decoded part sourceOffsetsList.add(sourceOffset) - sourceOffsets = sourceOffsetsList.toNativeArray() + sourceOffsets = sourceOffsetsList.toIntArray() return false } val unescaped = child.unescapedValue @@ -64,7 +64,7 @@ class KotlinStringLiteralTextEscaper(host: KtStringTemplateExpression) : Literal } } sourceOffsetsList.add(sourceOffset) - sourceOffsets = sourceOffsetsList.toNativeArray() + sourceOffsets = sourceOffsetsList.toIntArray() return true } diff --git a/compiler/resolution.common.jvm/build.gradle.kts b/compiler/resolution.common.jvm/build.gradle.kts index 48722848892..d302f24c5dc 100644 --- a/compiler/resolution.common.jvm/build.gradle.kts +++ b/compiler/resolution.common.jvm/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { implementation(commonDependency("io.javaslang","javaslang")) compileOnly(intellijCore()) compileOnly(commonDependency("org.jetbrains.intellij.deps:asm-all")) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) compileOnly(libs.guava) } diff --git a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt index 598651e8efa..02c1fd8c913 100644 --- a/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt +++ b/compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt @@ -18,7 +18,7 @@ package org.jetbrains.kotlin.load.java.structure.impl.classFiles import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.SearchScope -import gnu.trove.THashMap +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap import org.jetbrains.kotlin.builtins.PrimitiveType import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass @@ -64,7 +64,7 @@ class BinaryJavaClass( // Short name of a nested class of this class -> access flags as seen in the InnerClasses attribute value. // Note that it doesn't include classes mentioned in other InnerClasses attribute values (those which are not nested in this class). - private val ownInnerClassNameToAccess: MutableMap = THashMap() + private val ownInnerClassNameToAccess: MutableMap = Object2ObjectOpenHashMap() override val innerClassNames get() = ownInnerClassNameToAccess.keys diff --git a/compiler/resolution/build.gradle.kts b/compiler/resolution/build.gradle.kts index f7709218475..18fe805f713 100644 --- a/compiler/resolution/build.gradle.kts +++ b/compiler/resolution/build.gradle.kts @@ -8,7 +8,7 @@ dependencies { api(project(":core:descriptors")) api(project(":compiler:resolution.common")) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) } sourceSets { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/OverloadingConflictResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/OverloadingConflictResolver.kt index c0d7a3114e2..ac4ec948271 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/OverloadingConflictResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/OverloadingConflictResolver.kt @@ -16,8 +16,8 @@ package org.jetbrains.kotlin.resolve.calls.results -import gnu.trove.THashSet -import gnu.trove.TObjectHashingStrategy +import it.unimi.dsi.fastutil.Hash +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.UnsignedTypes @@ -26,9 +26,7 @@ import org.jetbrains.kotlin.descriptors.synthetic.SyntheticMemberDescriptor import org.jetbrains.kotlin.resolve.DescriptorEquivalenceForOverrides import org.jetbrains.kotlin.resolve.OverridingUtil import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode -import org.jetbrains.kotlin.resolve.descriptorUtil.getKotlinTypeRefiner import org.jetbrains.kotlin.resolve.descriptorUtil.isTypeRefinementEnabled -import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.descriptorUtil.varargParameterPosition import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.TypeUtils @@ -55,15 +53,14 @@ open class OverloadingConflictResolver( private val isTypeRefinementEnabled by lazy { module.isTypeRefinementEnabled() } - private val resolvedCallHashingStrategy = object : TObjectHashingStrategy { + private val resolvedCallHashingStrategy = object : Hash.Strategy { override fun equals(call1: C?, call2: C?): Boolean = if (call1 != null && call2 != null) call1.resultingDescriptor == call2.resultingDescriptor else call1 == call2 - override fun computeHashCode(call: C?): Int = - call?.resultingDescriptor?.hashCode() ?: 0 + override fun hashCode(call: C?): Int = call?.resultingDescriptor?.hashCode() ?: 0 } private val C.resultingDescriptor: CallableDescriptor get() = getResultingDescriptor(this) @@ -459,10 +456,10 @@ open class OverloadingConflictResolver( // Different smart casts may lead to the same candidate descriptor wrapped into different ResolvedCallImpl objects private fun uniquifyCandidatesSet(candidates: Collection): Set = - THashSet(candidates.size, resolvedCallHashingStrategy).apply { addAll(candidates) } + ObjectOpenCustomHashSet(candidates.size, resolvedCallHashingStrategy).apply { addAll(candidates) } private fun newResolvedCallSet(expectedSize: Int): MutableSet = - THashSet(expectedSize, resolvedCallHashingStrategy) + ObjectOpenCustomHashSet(expectedSize, resolvedCallHashingStrategy) private fun FlatSignature.candidateDescriptor() = origin.resultingDescriptor.original diff --git a/compiler/tests-common/build.gradle.kts b/compiler/tests-common/build.gradle.kts index a82b1bc9b58..cd3562964fd 100644 --- a/compiler/tests-common/build.gradle.kts +++ b/compiler/tests-common/build.gradle.kts @@ -77,7 +77,6 @@ dependencies { testApi(intellijJavaRt()) // for FileComparisonFailure testImplementation(libs.guava) - testImplementation(commonDependency("org.jetbrains.intellij.deps:trove4j")) testImplementation(commonDependency("org.jetbrains.intellij.deps:asm-all")) testImplementation(commonDependency("org.jetbrains.intellij.deps:log4j")) testImplementation(commonDependency("org.jetbrains.intellij.deps:jdom")) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/Equality.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/Equality.kt new file mode 100644 index 00000000000..c5470b2befd --- /dev/null +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/Equality.kt @@ -0,0 +1,10 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.test.testFramework + +fun interface Equality { + fun equals(o1: T, o2: T): Boolean +} \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java b/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java index 8d9398a2bc0..588bd5a9f06 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java @@ -27,8 +27,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.PeekableIterator; import com.intellij.util.containers.PeekableIteratorWrapper; import com.intellij.util.lang.CompoundRuntimeException; -import gnu.trove.Equality; -import gnu.trove.THashSet; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.jetbrains.annotations.Contract; @@ -385,8 +384,8 @@ public abstract class KtUsefulTestCase extends TestCase { final StringBuilder builder = new StringBuilder(); for (final Object o : collection) { - if (o instanceof THashSet) { - builder.append(new TreeSet<>((THashSet)o)); + if (o instanceof ObjectOpenHashSet) { + builder.append(new TreeSet<>((ObjectOpenHashSet)o)); } else { builder.append(o); @@ -439,7 +438,12 @@ public abstract class KtUsefulTestCase extends TestCase { public static void assertOrderedEquals(@NotNull String errorMsg, @NotNull Iterable actual, @NotNull Iterable expected) { - assertOrderedEquals(errorMsg, actual, expected, Equality.CANONICAL); + assertOrderedEquals(errorMsg, actual, expected, new Equality() { + @Override + public boolean equals(T o1, T o2) { + return Objects.equals(o1, o2); + } + }); } public static void assertOrderedEquals(@NotNull String errorMsg, diff --git a/js/js.ast/build.gradle.kts b/js/js.ast/build.gradle.kts index b3b62f629cf..9246b004c30 100644 --- a/js/js.ast/build.gradle.kts +++ b/js/js.ast/build.gradle.kts @@ -6,7 +6,7 @@ plugins { dependencies { api(project(":core:descriptors")) compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) } sourceSets { diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsReservedIdentifiers.java b/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsReservedIdentifiers.java index 0e138e4f0c1..31e8fe9bd99 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsReservedIdentifiers.java +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsReservedIdentifiers.java @@ -4,7 +4,7 @@ package org.jetbrains.kotlin.js.backend; -import gnu.trove.THashSet; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import java.util.Collections; import java.util.Set; @@ -142,7 +142,7 @@ public class JsReservedIdentifiers { "$stack", "$stackDepth", "$location", }; - reservedGlobalSymbols = new THashSet(commonBuiltins.length); + reservedGlobalSymbols = new ObjectOpenHashSet<>(commonBuiltins.length); Collections.addAll(reservedGlobalSymbols, commonBuiltins); } diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsToStringGenerationVisitor.java b/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsToStringGenerationVisitor.java index a0167fe3a22..1a93be799cc 100644 --- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsToStringGenerationVisitor.java +++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/JsToStringGenerationVisitor.java @@ -4,6 +4,7 @@ package org.jetbrains.kotlin.js.backend; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import kotlin.text.StringsKt; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.js.backend.ast.*; @@ -12,7 +13,6 @@ import org.jetbrains.kotlin.js.backend.ast.JsIntLiteral; import org.jetbrains.kotlin.js.backend.ast.JsVars.JsVar; import org.jetbrains.kotlin.js.common.IdentifierPolicyKt; import org.jetbrains.kotlin.js.util.TextOutput; -import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -190,7 +190,7 @@ public class JsToStringGenerationVisitor extends JsVisitor { * because the statements designated by statementEnds and statementStarts are * those that appear directly within these global blocks. */ - private Set globalBlocks = new THashSet(); + private Set globalBlocks = new ObjectOpenHashSet<>(); @NotNull protected final TextOutput p; diff --git a/js/js.sourcemap/build.gradle.kts b/js/js.sourcemap/build.gradle.kts index bb6b52645e1..5c78766ab95 100644 --- a/js/js.sourcemap/build.gradle.kts +++ b/js/js.sourcemap/build.gradle.kts @@ -8,7 +8,7 @@ dependencies { compileOnly(project(":js:js.parser")) // TODO remove, required for JSON AST compileOnly(project(":js:js.frontend")) // TODO remove compileOnly(intellijCore()) - compileOnly(commonDependency("org.jetbrains.intellij.deps:trove4j")) + compileOnly(commonDependency("org.jetbrains.intellij.deps.fastutil:intellij-deps-fastutil")) } sourceSets { diff --git a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt index a809e63f724..4978d976f53 100644 --- a/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt +++ b/js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt @@ -4,7 +4,7 @@ */ package org.jetbrains.kotlin.js.sourceMap -import gnu.trove.TObjectIntHashMap +import com.intellij.util.containers.ObjectIntHashMap import org.jetbrains.kotlin.js.parser.sourcemaps.* import java.io.File import java.io.IOException @@ -17,13 +17,6 @@ class SourceMap3Builder( private val pathPrefix: String ) : SourceMapBuilder { - private class ObjectIntHashMap : TObjectIntHashMap() { - override fun get(key: T): Int { - val index = index(key) - return if (index < 0) -1 else _values[index] - } - } - private val out = StringBuilder(8192) private val sources = ObjectIntHashMap() @@ -98,7 +91,7 @@ class SourceMap3Builder( private fun getSourceIndex(source: String, fileIdentity: Any?, contentSupplier: Supplier): Int { val key = SourceKey(source, fileIdentity) - var sourceIndex = sources[key] + var sourceIndex = sources.get(key) if (sourceIndex == -1) { sourceIndex = orderedSources.size sources.put(key, sourceIndex) @@ -109,7 +102,7 @@ class SourceMap3Builder( } private fun getNameIndex(name: String): Int { - var nameIndex = names[name] + var nameIndex = names.get(name) if (nameIndex == -1) { nameIndex = orderedNames.size names.put(name, nameIndex) diff --git a/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt b/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt index a13727eac44..68f3665c1d6 100644 --- a/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt +++ b/repo/codebase-tests/tests/org/jetbrains/kotlin/code/CodeConformanceTest.kt @@ -216,23 +216,6 @@ class CodeConformanceTest : TestCase() { message = "%d source files contain references to package gnu.trove.\n" + "Please avoid using trove library in new use cases. " + "These files are affected:\n%s", - allowedFiles = listOf( - "analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KotlinClassInnerStuffCache.kt", - "compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/CliVirtualFileFinder.kt", - "compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCliJavaFileManagerImpl.kt", - "compiler/cli/cli-base/src/org/jetbrains/kotlin/cli/jvm/index/JvmDependenciesIndexImpl.kt", - "compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt", - "compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/FileScopeFactory.kt", - "compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/LazyImportScope.kt", - "compiler/frontend/src/org/jetbrains/kotlin/types/expressions/PreliminaryLoopVisitor.kt", - "compiler/psi/src/org/jetbrains/kotlin/psi/KotlinStringLiteralTextEscaper.kt", - "compiler/resolution.common.jvm/src/org/jetbrains/kotlin/load/java/structure/impl/classFiles/BinaryJavaClass.kt", - "compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/results/OverloadingConflictResolver.kt", - "compiler/tests-common/tests/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java", - "js/js.ast/src/org/jetbrains/kotlin/js/backend/JsReservedIdentifiers.java", - "js/js.ast/src/org/jetbrains/kotlin/js/backend/JsToStringGenerationVisitor.java", - "js/js.sourcemap/src/org/jetbrains/kotlin/js/sourceMap/SourceMap3Builder.kt", - ) ) { _, source -> "gnu.trove" in source }