create appropriate string serializator for JPS cache during init

GitOrigin-RevId: 3e7db0a60388b08afd78a1673d66c65809d295e7
This commit is contained in:
Vladimir Krivosheev
2024-09-10 09:00:44 +02:00
committed by intellij-monorepo-bot
parent 6f361d1a81
commit 80cad407f0
8 changed files with 34 additions and 52 deletions

View File

@@ -2692,7 +2692,7 @@ f:org.jetbrains.jps.incremental.storage.OneToManyPathsMapping
- <init>(java.io.File,org.jetbrains.jps.incremental.relativizer.PathRelativizerService):V
- appendData(java.lang.String,java.lang.String):V
- appendData(java.lang.String,java.util.Collection):V
- getKeys():java.util.Collection
- getKeys():java.util.List
- getKeysIterator():java.util.Iterator
- getState(java.lang.String):java.util.Collection
- getStateIterator(java.lang.String):java.util.Iterator

View File

@@ -19,7 +19,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.builders.storage.BuildDataCorruptedException;
import org.jetbrains.jps.incremental.Utils;
import org.jetbrains.jps.incremental.relativizer.PathRelativizerService;
import org.jetbrains.jps.incremental.storage.PathStringDescriptor;
import org.jetbrains.jps.incremental.storage.PathStringDescriptors;
import org.jetbrains.jps.javac.Iterators;
import org.jetbrains.jps.service.JpsServiceManager;
import org.jetbrains.org.objectweb.asm.ClassReader;
@@ -169,7 +169,7 @@ public class Mappings {
DependencyContext.getTableFile(myRootDir, SHORT_NAMES), EnumeratorIntegerDescriptor.INSTANCE
);
myRelativeSourceFilePathToClasses = new ObjectObjectPersistentMultiMaplet<String, ClassFileRepr>(
DependencyContext.getTableFile(myRootDir, SOURCE_TO_CLASS), PathStringDescriptor.INSTANCE, new ClassFileReprExternalizer(myContext),
DependencyContext.getTableFile(myRootDir, SOURCE_TO_CLASS), PathStringDescriptors.createPathStringDescriptor(), new ClassFileReprExternalizer(myContext),
() -> new HashSet<>(5, DEFAULT_SET_LOAD_FACTOR)
) {
@Override
@@ -179,7 +179,7 @@ public class Mappings {
}
};
myClassToRelativeSourceFilePath = new IntObjectPersistentMultiMaplet<>(
DependencyContext.getTableFile(myRootDir, CLASS_TO_SOURCE), EnumeratorIntegerDescriptor.INSTANCE, PathStringDescriptor.INSTANCE, fileCollectionFactory
DependencyContext.getTableFile(myRootDir, CLASS_TO_SOURCE), EnumeratorIntegerDescriptor.INSTANCE, PathStringDescriptors.createPathStringDescriptor(), fileCollectionFactory
);
}
}

View File

@@ -7,7 +7,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.incremental.relativizer.PathRelativizerService;
import org.jetbrains.jps.incremental.storage.AbstractStateStorage;
import org.jetbrains.jps.incremental.storage.PathStringDescriptor;
import org.jetbrains.jps.incremental.storage.PathStringDescriptors;
import java.io.*;
import java.util.ArrayList;
@@ -23,7 +23,7 @@ public final class ArtifactOutputToSourceMapping
private final PathRelativizerService myRelativizer;
public ArtifactOutputToSourceMapping(File storePath, PathRelativizerService relativizer) throws IOException {
super(storePath, PathStringDescriptor.INSTANCE, new SourcePathListExternalizer());
super(storePath, PathStringDescriptors.createPathStringDescriptor(), new SourcePathListExternalizer());
myRelativizer = relativizer;
}

View File

@@ -4,7 +4,6 @@ package org.jetbrains.jps.incremental.storage;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.io.IOUtil;
import com.intellij.util.io.KeyDescriptor;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import java.io.DataInput;
@@ -12,8 +11,7 @@ import java.io.DataOutput;
import java.io.File;
import java.io.IOException;
@ApiStatus.Internal
public final class FileKeyDescriptor implements KeyDescriptor<File> {
final class FileKeyDescriptor implements KeyDescriptor<File> {
@Override
public void save(@NotNull DataOutput out, File value) throws IOException {
IOUtil.writeUTF(out, value.getPath());

View File

@@ -1,10 +1,8 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.jps.incremental.storage
import com.dynatrace.hash4j.hashing.Hashing
import com.intellij.util.ArrayUtil
import com.intellij.util.io.DataExternalizer
import com.intellij.util.io.EnumeratorStringDescriptor
import com.intellij.util.io.PersistentMapBuilder
import org.jetbrains.jps.builders.BuildTarget
import org.jetbrains.jps.incremental.FSOperations
@@ -139,10 +137,4 @@ private object StateExternalizer : DataExternalizer<Array<HashStampPerTarget>> {
HashStampPerTarget(targetId = id, hash = hash, timestamp = timestamp)
}
}
}
private object JpsCachePathStringDescriptor : EnumeratorStringDescriptor() {
override fun getHashCode(value: String): Int = Hashing.komihash5_0().hashCharsToInt(value)
override fun isEqual(val1: String, val2: String) = val1 == val2
}

View File

@@ -19,7 +19,7 @@ public final class OneToManyPathsMapping extends AbstractStateStorage<String, Co
private final PathRelativizerService relativizer;
public OneToManyPathsMapping(File storePath, PathRelativizerService relativizer) throws IOException {
super(storePath, PathStringDescriptor.INSTANCE, new PathCollectionExternalizer());
super(storePath, PathStringDescriptors.createPathStringDescriptor(), new PathCollectionExternalizer());
this.relativizer = relativizer;
}

View File

@@ -1,35 +1,27 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.jps.incremental.storage;
@file:JvmName("PathStringDescriptors")
package org.jetbrains.jps.incremental.storage
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.util.text.Strings;
import com.intellij.util.io.EnumeratorStringDescriptor;
import org.jetbrains.annotations.ApiStatus;
import static org.jetbrains.jps.incremental.storage.ProjectStamps.PORTABLE_CACHES;
import com.dynatrace.hash4j.hashing.Hashing
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.util.io.EnumeratorStringDescriptor
import com.intellij.util.io.KeyDescriptor
import org.jetbrains.annotations.ApiStatus
@ApiStatus.Internal
public final class PathStringDescriptor extends EnumeratorStringDescriptor {
public static final PathStringDescriptor INSTANCE = new PathStringDescriptor();
@Override
public int getHashCode(String value) {
if (!PORTABLE_CACHES) return FileUtil.pathHashCode(value);
// On case insensitive OS hash calculated from value converted to lower case
return StringUtil.isEmpty(value) ? 0 : FileUtil.toCanonicalPath(value).hashCode();
}
@Override
public boolean isEqual(String val1, String val2) {
if (!PORTABLE_CACHES) return FileUtil.pathsEqual(val1, val2);
// On case insensitive OS hash calculated from path converted to lower case
if (Strings.areSameInstance(val1, val2)) return true;
if (val1 == null || val2 == null) return false;
String path1 = FileUtil.toCanonicalPath(val1);
String path2 = FileUtil.toCanonicalPath(val2);
return path1.equals(path2);
}
fun createPathStringDescriptor(): KeyDescriptor<String> {
return if (ProjectStamps.PORTABLE_CACHES) JpsCachePathStringDescriptor else PathStringDescriptor
}
private object PathStringDescriptor : EnumeratorStringDescriptor() {
override fun getHashCode(value: String?): Int = FileUtilRt.pathHashCode(value)
override fun isEqual(val1: String?, val2: String?): Boolean = FileUtil.pathsEqual(val1, val2)
}
internal object JpsCachePathStringDescriptor : EnumeratorStringDescriptor() {
override fun getHashCode(value: String): Int = Hashing.komihash5_0().hashCharsToInt(value)
override fun isEqual(val1: String, val2: String) = val1 == val2
}

View File

@@ -1,4 +1,4 @@
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.jps.builders.java
import com.intellij.openapi.util.io.FileUtil
@@ -22,7 +22,7 @@ import org.jetbrains.jps.incremental.CompileContext
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.incremental.ModuleLevelBuilder
import org.jetbrains.jps.incremental.storage.AbstractStateStorage
import org.jetbrains.jps.incremental.storage.PathStringDescriptor
import org.jetbrains.jps.incremental.storage.createPathStringDescriptor
import org.jetbrains.jps.model.java.LanguageLevel
import org.jetbrains.org.objectweb.asm.ClassReader
import java.io.File
@@ -35,7 +35,7 @@ import java.util.regex.Pattern
* which references all classes from that package. Package name is derived from 'package <name>;' statement from a file or set to empty
* if no such statement is found
*/
class MockPackageFacadeGenerator : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
internal class MockPackageFacadeGenerator : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
override fun build(context: CompileContext,
chunk: ModuleChunk,
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
@@ -159,7 +159,7 @@ class MockPackageFacadeGenerator : ModuleLevelBuilder(BuilderCategory.SOURCE_PRO
private val PACKAGE_CACHE_STORAGE_PROVIDER = object : StorageProvider<AbstractStateStorage<String, String>>() {
override fun createStorage(targetDataDir: File): AbstractStateStorage<String, String> {
val storageFile = File(targetDataDir, "mockPackageFacade/packages")
return object : AbstractStateStorage<String, String>(storageFile, PathStringDescriptor(), EnumeratorStringDescriptor()) {
return object : AbstractStateStorage<String, String>(storageFile, createPathStringDescriptor(), EnumeratorStringDescriptor()) {
}
}
}