diff --git a/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesTrackerImpl.kt b/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesTrackerImpl.kt index fe6f3dd1759..11c7b0434e8 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesTrackerImpl.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/JavaClassesTrackerImpl.kt @@ -71,6 +71,11 @@ class JavaClassesTrackerImpl( } } + override fun clear() { + classToSourceSerialized.clear() + classDescriptors.clear() + } + private fun JavaClassDescriptor.wasContentRequested() = this.safeAs()?.wasScopeContentRequested() != false } diff --git a/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt b/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt index 742dffe806c..d613ab4e662 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/LookupStorage.kt @@ -276,6 +276,15 @@ class LookupTrackerImpl(private val delegate: LookupTracker) : LookupTracker { delegate.record(prevFilePath, position, prevScopeFqName, scopeKind, prevName) } } + + override fun clear() { + lookups.clear() + prevFilePath = "" + prevPosition = null + prevScopeFqName = "" + prevScopeKind = null + prevName = "" + } } data class LookupSymbol(val name: String, val scope: String) : Comparable { diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 16a22118b73..e1905ccd1bb 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -21,15 +21,18 @@ import org.jetbrains.kotlin.cli.common.fir.FirDiagnosticsCompilerResultsReporter import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport import org.jetbrains.kotlin.cli.common.toLogger import org.jetbrains.kotlin.cli.jvm.config.* +import org.jetbrains.kotlin.cli.jvm.config.ClassicFrontendSpecificJvmConfigurationKeys.JAVA_CLASSES_TRACKER import org.jetbrains.kotlin.codegen.ClassBuilderFactories import org.jetbrains.kotlin.codegen.CodegenFactory import org.jetbrains.kotlin.codegen.DefaultCodegenFactory import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.* +import org.jetbrains.kotlin.config.CommonConfigurationKeys.LOOKUP_TRACKER import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector import org.jetbrains.kotlin.extensions.ProcessSourcesBeforeCompilingExtension import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries +import org.jetbrains.kotlin.load.java.JavaClassesTracker import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager import org.jetbrains.kotlin.modules.Module import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus @@ -168,6 +171,12 @@ object KotlinToJVMBytecodeCompiler { KotlinJavaPsiFacade.getInstance(environment.project).clearPackageCaches() + val javaClassesTracker = configuration[JAVA_CLASSES_TRACKER] + javaClassesTracker?.clear() + + val lookupTracker = configuration[LOOKUP_TRACKER] + lookupTracker?.clear() + // Clear all diagnostic messages configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]?.clear() diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt index c26342a1330..37c648af271 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/RemoteLookupTrackerClient.kt @@ -55,6 +55,10 @@ class RemoteLookupTrackerClient( lookups.getOrPut(filePath, ::THashMap).getOrPut(internedSymbolFqName, ::THashSet).add(objectToPut) } + override fun clear() { + lookups.clear() + } + init { eventManager.onCompilationFinished { flush() } } diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/experimental/RemoteLookupTrackerClient.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/experimental/RemoteLookupTrackerClient.kt index 34b97697a45..24b066fbdc1 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/experimental/RemoteLookupTrackerClient.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/experimental/RemoteLookupTrackerClient.kt @@ -36,6 +36,10 @@ class RemoteLookupTrackerClient( lookups.add(LookupInfo(internedFilePath, position, internedScopeFqName, scopeKind, internedName)) } + override fun clear() { + lookups.clear() + } + init { runBlocking { eventManager.onCompilationFinished { flush() } diff --git a/core/compiler.common/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt b/core/compiler.common/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt index 24a3819d0a9..306be110196 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt @@ -32,12 +32,17 @@ interface LookupTracker { name: String ) + fun clear() + object DO_NOTHING : LookupTracker { override val requiresPosition: Boolean get() = false override fun record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { } + + override fun clear() { + } } } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassesTracker.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassesTracker.kt index ba6c0ee0b23..6a05f2d0333 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassesTracker.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/JavaClassesTracker.kt @@ -24,8 +24,11 @@ interface JavaClassesTracker { fun onCompletedAnalysis(module: ModuleDescriptor) + fun clear() + object Default : JavaClassesTracker { override fun reportClass(classDescriptor: JavaClassDescriptor) {} override fun onCompletedAnalysis(module: ModuleDescriptor) {} + override fun clear() {} } } diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt index be3ec8090ea..3f0cc5ffbd6 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt @@ -361,6 +361,10 @@ class TestLookupTracker : LookupTracker { lookups.add(LookupInfo(internedFilePath, position, internedScopeFqName, scopeKind, internedName)) } + + override fun clear() { + lookups.clear() + } }