diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 056003f3e65..35bc9bc9393 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -52,6 +52,7 @@ import org.jetbrains.jet.lang.resolve.ScriptNameUtil; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalCacheProvider; +import org.jetbrains.jet.lang.resolve.kotlin.incremental.IncrementalPackage; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.plugin.MainFunctionDetector; import org.jetbrains.jet.utils.KotlinPaths; @@ -332,7 +333,8 @@ public class KotlinToJVMBytecodeCompiler { Collection packagesWithRemovedFiles = incrementalCacheDir == null || moduleId == null || incrementalCacheProvider == null ? null - : incrementalCacheProvider.getIncrementalCache(incrementalCacheDir).getPackagesWithRemovedFiles(moduleId, environment.getSourceFiles()); + : IncrementalPackage.getPackagesWithRemovedFiles( + incrementalCacheProvider.getIncrementalCache(incrementalCacheDir), moduleId, environment.getSourceFiles()); GenerationState generationState = new GenerationState( environment.getProject(), ClassBuilderFactories.BINARIES, Progress.DEAF, exhaust.getModuleDescriptor(), exhaust.getBindingContext(), sourceFiles, diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalCache.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalCache.kt index 3ebda40fd84..e3d559958f5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalCache.kt +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalCache.kt @@ -19,11 +19,28 @@ package org.jetbrains.jet.lang.resolve.kotlin.incremental import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.java.JvmClassName import org.jetbrains.jet.lang.psi.JetFile +import java.util.HashMap +import java.io.File public trait IncrementalCache { - public fun getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection): Collection + public fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map): Collection - public fun getRemovedPackageParts(moduleId: String, compiledSourceFiles: Collection): Collection - - public fun getPackageData(moduleId: String, fqName: FqName): ByteArray? + public fun getPackageData(moduleId: String, fqName: String): ByteArray? +} + +public fun IncrementalCache.getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection): Collection { + return getRemovedPackageParts(moduleId, compiledSourceFiles).map { it.getFqNameForClassNameWithoutDollars().parent() } +} + +public fun IncrementalCache.getRemovedPackageParts(moduleId: String, compiledSourceFiles: Collection): Collection { + val compiledSourceFilesToFqName = HashMap() + for (sourceFile in compiledSourceFiles) { + compiledSourceFilesToFqName[File(sourceFile.getVirtualFile()!!.getPath())] = sourceFile.getPackageFqName().asString() + } + + return getRemovedPackageParts(moduleId, compiledSourceFilesToFqName).map { JvmClassName.byInternalName(it) } +} + +public fun IncrementalCache.getPackageData(moduleId: String, fqName: FqName): ByteArray? { + return getPackageData(moduleId, fqName.asString()) } diff --git a/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt b/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt index 083e5b46c6c..50e94b82945 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/incremental/IncrementalCacheImpl.kt @@ -168,31 +168,22 @@ public class IncrementalCacheImpl(baseDir: File): IncrementalCache { putPackagePartSourceData(moduleId, sourceFile, null) } - public override fun getPackagesWithRemovedFiles(moduleId: String, compiledSourceFiles: Collection): Collection { - return getRemovedPackageParts(moduleId, compiledSourceFiles).map { it.getFqNameForClassNameWithoutDollars().parent() } - } - - public override fun getRemovedPackageParts(moduleId: String, compiledSourceFiles: Collection): Collection { - val sourceFileToCurrentFqNameMap = HashMap() - for (sourceFile in compiledSourceFiles) { - sourceFileToCurrentFqNameMap[File(sourceFile.getVirtualFile()!!.getPath())] = sourceFile.getPackageFqName() - } - - val result = HashSet() + public override fun getRemovedPackageParts(moduleId: String, compiledSourceFilesToFqName: Map): Collection { + val result = HashSet() packageSourcesData.processKeysWithExistingMapping { key -> if (key!!.startsWith(moduleId + File.pathSeparator)) { val indexOf = key.indexOf(File.pathSeparator) val sourceFile = File(key.substring(indexOf + 1)) - val packagePartClassName = JvmClassName.byInternalName(packageSourcesData[key]!!) + val packagePartClassName = packageSourcesData[key]!! if (!sourceFile.exists()) { result.add(packagePartClassName) } else { - val previousPackageFqName = packagePartClassName.getFqNameForClassNameWithoutDollars().parent() - val currentPackageFqName = sourceFileToCurrentFqNameMap[sourceFile] - if (currentPackageFqName != null && currentPackageFqName != previousPackageFqName) { + val previousPackageFqName = JvmClassName.byInternalName(packagePartClassName).getFqNameForClassNameWithoutDollars().parent() + val currentPackageFqName = compiledSourceFilesToFqName[sourceFile] + if (currentPackageFqName != null && currentPackageFqName != previousPackageFqName.asString()) { result.add(packagePartClassName) } } @@ -204,8 +195,8 @@ public class IncrementalCacheImpl(baseDir: File): IncrementalCache { return result } - public override fun getPackageData(moduleId: String, fqName: FqName): ByteArray? { - return protoData[ClassOrPackageId(moduleId, fqName)] + public override fun getPackageData(moduleId: String, fqName: String): ByteArray? { + return protoData[ClassOrPackageId(moduleId, FqName(fqName))] } public fun close() {