From 5e8a568bb75dee7af86c7b96da0ef3a188a0bc30 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 12 Jul 2019 15:25:18 +0300 Subject: [PATCH] add stub serialization version to prebuilt stubs version file IDEA-218097 GitOrigin-RevId: 40df5213c56640875d46f4e3f90b5ef203824399 --- .../com/intellij/psi/stubs/PrebuiltStubs.kt | 19 ++++++++++++++++--- .../jetbrains/index/stubs/StubsGenerator.kt | 7 ++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/stubs/PrebuiltStubs.kt b/platform/lang-impl/src/com/intellij/psi/stubs/PrebuiltStubs.kt index 5fb55fa61883..1dc2b500d345 100644 --- a/platform/lang-impl/src/com/intellij/psi/stubs/PrebuiltStubs.kt +++ b/platform/lang-impl/src/com/intellij/psi/stubs/PrebuiltStubs.kt @@ -10,6 +10,7 @@ import com.intellij.openapi.fileTypes.FileTypeExtension import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.text.StringUtilRt import com.intellij.psi.PsiElement +import com.intellij.util.indexing.FileBasedIndexExtension import com.intellij.util.indexing.FileContent import com.intellij.util.indexing.ID import com.intellij.util.io.* @@ -19,6 +20,7 @@ import java.io.DataInput import java.io.DataOutput import java.io.File import java.io.IOException +import java.nio.file.Files import java.util.function.UnaryOperator const val EP_NAME = "com.intellij.filetype.prebuiltStubsProvider" @@ -108,9 +110,20 @@ abstract class PrebuiltStubsProviderBase : PrebuiltIndexProviderBase? { - val versionInFile = indexesRoot.toPath().resolve("$indexName.version").readText() - if (StringUtilRt.parseInt(versionInFile, 0) != stubVersion) { - LOG.error("Prebuilt stubs version mismatch: $versionInFile, current version is $stubVersion") + val versionFileText = Files.readAllLines(indexesRoot.toPath().resolve("$indexName.version")) + if (versionFileText.size != 2) { + LOG.error("Invalid version file format: \"$versionFileText\"") + return null + } + val stubSerializationVersion = versionFileText[0] + val currentSerializationVersion = StringUtilRt.parseInt(stubSerializationVersion, 0) + if (currentSerializationVersion != FileBasedIndexExtension.EXTENSION_POINT_NAME.findExtension(StubUpdatingIndex::class.java)!!.version) { + LOG.error("Stub serialization version mismatch: $stubSerializationVersion, current version is $currentSerializationVersion") + return null + } + val prebuiltIndexVersion = versionFileText[1] + if (StringUtilRt.parseInt(prebuiltIndexVersion, 0) != stubVersion) { + LOG.error("Prebuilt stubs version mismatch: $prebuiltIndexVersion, current version is $stubVersion") return null } else { diff --git a/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt b/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt index e401a4f7ec02..edef8c69783e 100644 --- a/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt +++ b/tools/index-tools/src/org/jetbrains/index/stubs/StubsGenerator.kt @@ -18,6 +18,7 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.impl.DebugUtil import com.intellij.psi.stubs.* +import com.intellij.util.indexing.FileBasedIndexExtension import com.intellij.util.indexing.FileContentImpl import com.intellij.util.io.PersistentHashMap import junit.framework.TestCase @@ -66,7 +67,11 @@ open class StubsGenerator(private val stubsVersion: String, private val stubsSto } fun writeStubsVersionFile(stubsStorageFilePath: String, stubsVersion: String) { - FileUtil.writeToFile(File("$stubsStorageFilePath.version"), stubsVersion) + val stubSerializationVersion = FileBasedIndexExtension + .EXTENSION_POINT_NAME + .findExtension(StubUpdatingIndex::class.java)!! + .version + FileUtil.writeToFile(File("$stubsStorageFilePath.version"), "$stubSerializationVersion\n$stubsVersion") } fun mergeStubs(paths: List, stubsFilePath: String, stubsFileName: String, projectPath: String, stubsVersion: String) {