Fix tracking lookups when compile using daemon
This commit is contained in:
@@ -18,8 +18,8 @@ package org.jetbrains.kotlin.incremental
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile
|
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile
|
||||||
import org.jetbrains.kotlin.incremental.components.LocationInfo
|
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.LookupLocation
|
||||||
|
import org.jetbrains.kotlin.incremental.components.Position
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.doNotAnalyze
|
import org.jetbrains.kotlin.psi.doNotAnalyze
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.rmi.kotlinr
|
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.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.components.Position
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
@@ -65,8 +65,10 @@ public class CompilerCallbackServicesFacadeServer(
|
|||||||
incrementalCompilationComponents!!.getIncrementalCache(target).close()
|
incrementalCompilationComponents!!.getIncrementalCache(target).close()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun lookupTracker_record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
override fun lookupTracker_requiresPosition() = incrementalCompilationComponents!!.getLookupTracker().requiresPosition
|
||||||
incrementalCompilationComponents!!.getLookupTracker().record(locationInfo, scopeFqName, scopeKind, name)
|
|
||||||
|
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
|
private val lookupTracker_isDoNothing: Boolean = incrementalCompilationComponents != null && incrementalCompilationComponents.getLookupTracker() == LookupTracker.DO_NOTHING
|
||||||
|
|||||||
+5
-3
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.rmi
|
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.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
@@ -72,8 +72,10 @@ public interface CompilerCallbackServicesFacade : Remote {
|
|||||||
// ----------------------------------------------------
|
// ----------------------------------------------------
|
||||||
// LookupTracker
|
// LookupTracker
|
||||||
@Throws(RemoteException::class)
|
@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)
|
@Throws(RemoteException::class)
|
||||||
fun lookupTracker_isDoNothing(): Boolean
|
fun lookupTracker_isDoNothing(): Boolean
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.rmi.service
|
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.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.components.Position
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.rmi.DummyProfiler
|
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 {
|
class RemoteLookupTrackerClient(val facade: CompilerCallbackServicesFacade, val profiler: Profiler = DummyProfiler()) : LookupTracker {
|
||||||
private val isDoNothing = profiler.withMeasure(this) { facade.lookupTracker_isDoNothing() }
|
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) {
|
if (!isDoNothing) {
|
||||||
profiler.withMeasure(this) {
|
profiler.withMeasure(this) {
|
||||||
facade.lookupTracker_record(locationInfo, scopeFqName, scopeKind, name)
|
facade.lookupTracker_record(filePath, position, scopeFqName, scopeKind, name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.incremental.components
|
package org.jetbrains.kotlin.incremental.components
|
||||||
|
|
||||||
|
import java.io.Serializable
|
||||||
|
|
||||||
public interface LookupLocation {
|
public interface LookupLocation {
|
||||||
val location: LocationInfo?
|
val location: LocationInfo?
|
||||||
}
|
}
|
||||||
@@ -25,8 +27,12 @@ interface LocationInfo {
|
|||||||
|
|
||||||
// only for tests
|
// only for tests
|
||||||
val position: Position
|
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 {
|
public enum class NoLookupLocation : LookupLocation {
|
||||||
|
|||||||
@@ -17,8 +17,12 @@
|
|||||||
package org.jetbrains.kotlin.incremental.components
|
package org.jetbrains.kotlin.incremental.components
|
||||||
|
|
||||||
public interface LookupTracker {
|
public interface LookupTracker {
|
||||||
|
// used in tests for more accurate checks
|
||||||
|
val requiresPosition: Boolean
|
||||||
|
|
||||||
fun record(
|
fun record(
|
||||||
locationInfo: LocationInfo,
|
filePath: String,
|
||||||
|
position: Position,
|
||||||
scopeFqName: String,
|
scopeFqName: String,
|
||||||
scopeKind: ScopeKind,
|
scopeKind: ScopeKind,
|
||||||
name: String
|
name: String
|
||||||
@@ -26,7 +30,10 @@ public interface LookupTracker {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val DO_NOTHING: LookupTracker = object : LookupTracker {
|
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) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.incremental
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
import org.jetbrains.kotlin.incremental.components.*
|
||||||
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.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
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}")
|
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())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package org.jetbrains.kotlin.jps.incremental
|
|||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.jps.builders.storage.StorageProvider
|
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.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.components.Position
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.jps.incremental.storage.*
|
import org.jetbrains.kotlin.jps.incremental.storage.*
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
@@ -184,9 +184,12 @@ class LookupStorage(private val targetDataDir: File) : BasicMapsOwner() {
|
|||||||
class LookupTrackerImpl(private val delegate: LookupTracker) : LookupTracker {
|
class LookupTrackerImpl(private val delegate: LookupTracker) : LookupTracker {
|
||||||
val lookups = MultiMap<LookupSymbol, String>()
|
val lookups = MultiMap<LookupSymbol, String>()
|
||||||
|
|
||||||
override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
override val requiresPosition: Boolean
|
||||||
lookups.putValue(LookupSymbol(name, scopeFqName), locationInfo.filePath)
|
get() = delegate.requiresPosition
|
||||||
delegate.record(locationInfo, scopeFqName, scopeKind, name)
|
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,11 +17,10 @@
|
|||||||
package org.jetbrains.kotlin.jps.build
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
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.LookupTracker
|
||||||
|
import org.jetbrains.kotlin.incremental.components.Position
|
||||||
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
import org.jetbrains.kotlin.incremental.components.ScopeKind
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.utils.join
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -120,9 +119,12 @@ abstract class AbstractLookupTrackerTest : AbstractIncrementalJpsTest(
|
|||||||
class TestLookupTracker : LookupTracker {
|
class TestLookupTracker : LookupTracker {
|
||||||
val lookups = arrayListOf<LookupInfo>()
|
val lookups = arrayListOf<LookupInfo>()
|
||||||
|
|
||||||
override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
|
override val requiresPosition: Boolean
|
||||||
val (line, column) = locationInfo.position
|
get() = true
|
||||||
lookups.add(LookupInfo(locationInfo.filePath, line, column, scopeFqName, scopeKind, name))
|
|
||||||
|
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(
|
data class LookupInfo(
|
||||||
|
|||||||
Reference in New Issue
Block a user