diff --git a/compiler/frontend/src/org/jetbrains/kotlin/incremental/KotlinLookupLocation.kt b/compiler/frontend/src/org/jetbrains/kotlin/incremental/KotlinLookupLocation.kt index 90b2e8ab761..cf029a1fdbe 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/incremental/KotlinLookupLocation.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/incremental/KotlinLookupLocation.kt @@ -18,8 +18,8 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile import org.jetbrains.kotlin.incremental.components.LocationInfo -import org.jetbrains.kotlin.incremental.components.LocationInfo.Position import org.jetbrains.kotlin.incremental.components.LookupLocation +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.doNotAnalyze diff --git a/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/CompilerCallbackServicesFacadeServer.kt b/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/CompilerCallbackServicesFacadeServer.kt index a6a8e7ac2dd..43dce9b8964 100644 --- a/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/CompilerCallbackServicesFacadeServer.kt +++ b/compiler/rmi/kotlinr/src/org/jetbrains/kotlin/rmi/kotlinr/CompilerCallbackServicesFacadeServer.kt @@ -16,8 +16,8 @@ package org.jetbrains.kotlin.rmi.kotlinr -import org.jetbrains.kotlin.incremental.components.LocationInfo import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto @@ -65,8 +65,10 @@ public class CompilerCallbackServicesFacadeServer( incrementalCompilationComponents!!.getIncrementalCache(target).close() } - override fun lookupTracker_record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) { - incrementalCompilationComponents!!.getLookupTracker().record(locationInfo, scopeFqName, scopeKind, name) + override fun lookupTracker_requiresPosition() = incrementalCompilationComponents!!.getLookupTracker().requiresPosition + + override fun lookupTracker_record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { + incrementalCompilationComponents!!.getLookupTracker().record(filePath, position, scopeFqName, scopeKind, name) } private val lookupTracker_isDoNothing: Boolean = incrementalCompilationComponents != null && incrementalCompilationComponents.getLookupTracker() == LookupTracker.DO_NOTHING diff --git a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/CompilerCallbackServicesFacade.kt b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/CompilerCallbackServicesFacade.kt index 4ae7d4d0011..97bcaedd617 100644 --- a/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/CompilerCallbackServicesFacade.kt +++ b/compiler/rmi/rmi-interface/src/org/jetbrains/kotlin/rmi/CompilerCallbackServicesFacade.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.rmi -import org.jetbrains.kotlin.incremental.components.LocationInfo +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto import org.jetbrains.kotlin.modules.TargetId @@ -72,8 +72,10 @@ public interface CompilerCallbackServicesFacade : Remote { // ---------------------------------------------------- // LookupTracker @Throws(RemoteException::class) - fun lookupTracker_record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) - + fun lookupTracker_requiresPosition(): Boolean + + fun lookupTracker_record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) + @Throws(RemoteException::class) fun lookupTracker_isDoNothing(): Boolean diff --git a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/RemoteLookupTrackerClient.kt b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/RemoteLookupTrackerClient.kt index 6916fce62f3..6d94fb3c59a 100644 --- a/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/RemoteLookupTrackerClient.kt +++ b/compiler/rmi/rmi-server/src/org/jetbrains/kotlin/rmi/service/RemoteLookupTrackerClient.kt @@ -16,8 +16,8 @@ package org.jetbrains.kotlin.rmi.service -import org.jetbrains.kotlin.incremental.components.LocationInfo import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade import org.jetbrains.kotlin.rmi.DummyProfiler @@ -27,10 +27,12 @@ import org.jetbrains.kotlin.rmi.Profiler class RemoteLookupTrackerClient(val facade: CompilerCallbackServicesFacade, val profiler: Profiler = DummyProfiler()) : LookupTracker { private val isDoNothing = profiler.withMeasure(this) { facade.lookupTracker_isDoNothing() } - override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) { + override val requiresPosition: Boolean = profiler.withMeasure(this) { facade.lookupTracker_requiresPosition() } + + override fun record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { if (!isDoNothing) { profiler.withMeasure(this) { - facade.lookupTracker_record(locationInfo, scopeFqName, scopeKind, name) + facade.lookupTracker_record(filePath, position, scopeFqName, scopeKind, name) } } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupLocation.kt b/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupLocation.kt index 2242c256309..66dc9ee949a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupLocation.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupLocation.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.incremental.components +import java.io.Serializable + public interface LookupLocation { val location: LocationInfo? } @@ -25,8 +27,12 @@ interface LocationInfo { // only for tests val position: Position +} - data class Position(val line: Int, val column: Int) +data class Position(val line: Int, val column: Int) : Serializable { + companion object { + val NO_POSITION = Position(-1, -1) + } } public enum class NoLookupLocation : LookupLocation { diff --git a/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt b/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt index 7732abce720..8ee0b7ec97a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/incremental/components/LookupTracker.kt @@ -17,8 +17,12 @@ package org.jetbrains.kotlin.incremental.components public interface LookupTracker { + // used in tests for more accurate checks + val requiresPosition: Boolean + fun record( - locationInfo: LocationInfo, + filePath: String, + position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String @@ -26,7 +30,10 @@ public interface LookupTracker { companion object { val DO_NOTHING: LookupTracker = object : LookupTracker { - override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) { + override val requiresPosition: Boolean + get() = false + + override fun record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { } } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/incremental/utils.kt b/core/descriptors/src/org/jetbrains/kotlin/incremental/utils.kt index 0bdca67ba26..0e9cfcfddeb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/incremental/utils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/incremental/utils.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor -import org.jetbrains.kotlin.incremental.components.LookupLocation -import org.jetbrains.kotlin.incremental.components.LookupTracker -import org.jetbrains.kotlin.incremental.components.NoLookupLocation -import org.jetbrains.kotlin.incremental.components.ScopeKind +import org.jetbrains.kotlin.incremental.components.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.scopes.MemberScope @@ -39,5 +36,7 @@ public fun LookupTracker.record(from: LookupLocation, scopeOwner: DeclarationDes else -> throw AssertionError("Unexpected containing declaration type: ${scopeOwner.javaClass}") } - record(location, scopeOwner.fqNameUnsafe.asString(), scopeKind, name.asString()) + val position = if (requiresPosition) location.position else Position.NO_POSITION + + record(location.filePath, position, scopeOwner.fqNameUnsafe.asString(), scopeKind, name.asString()) } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/LookupStorage.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/LookupStorage.kt index cf32e331995..32903e254f2 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/LookupStorage.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/LookupStorage.kt @@ -19,8 +19,8 @@ package org.jetbrains.kotlin.jps.incremental import com.intellij.util.containers.MultiMap import org.jetbrains.annotations.TestOnly import org.jetbrains.jps.builders.storage.StorageProvider -import org.jetbrains.kotlin.incremental.components.LocationInfo import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.jps.incremental.storage.* import org.jetbrains.kotlin.utils.Printer @@ -184,9 +184,12 @@ class LookupStorage(private val targetDataDir: File) : BasicMapsOwner() { class LookupTrackerImpl(private val delegate: LookupTracker) : LookupTracker { val lookups = MultiMap() - override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) { - lookups.putValue(LookupSymbol(name, scopeFqName), locationInfo.filePath) - delegate.record(locationInfo, scopeFqName, scopeKind, name) + override val requiresPosition: Boolean + get() = delegate.requiresPosition + + override fun record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { + lookups.putValue(LookupSymbol(name, scopeFqName), filePath) + delegate.record(filePath, position, scopeFqName, scopeKind, name) } } diff --git a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt index 3bac0319008..597c04cf891 100644 --- a/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt +++ b/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt @@ -17,11 +17,10 @@ package org.jetbrains.kotlin.jps.build import com.intellij.openapi.util.io.FileUtil -import org.jetbrains.kotlin.incremental.components.LocationInfo import org.jetbrains.kotlin.incremental.components.LookupTracker +import org.jetbrains.kotlin.incremental.components.Position import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.test.KotlinTestUtils -import org.jetbrains.kotlin.utils.join import java.io.File import java.util.* @@ -120,9 +119,12 @@ abstract class AbstractLookupTrackerTest : AbstractIncrementalJpsTest( class TestLookupTracker : LookupTracker { val lookups = arrayListOf() - override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) { - val (line, column) = locationInfo.position - lookups.add(LookupInfo(locationInfo.filePath, line, column, scopeFqName, scopeKind, name)) + override val requiresPosition: Boolean + get() = true + + override fun record(filePath: String, position: Position, scopeFqName: String, scopeKind: ScopeKind, name: String) { + val (line, column) = position + lookups.add(LookupInfo(filePath, line, column, scopeFqName, scopeKind, name)) } data class LookupInfo(