Refactoring: introduced val location: LocationInfo? in LookupLocation and use it in LookupTracker::record

This commit is contained in:
Zalim Bashorov
2015-09-22 21:03:59 +03:00
parent 81a288b42c
commit a5d8b47083
8 changed files with 53 additions and 53 deletions
@@ -16,7 +16,26 @@
package org.jetbrains.kotlin.incremental 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.LookupLocation
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.doNotAnalyze
class KotlinLookupLocation(val element: KtElement) : LookupLocation class KotlinLookupLocation(val element: KtElement) : LookupLocation {
override val location: LocationInfo?
get() {
val containingJetFile = element.getContainingJetFile()
if (containingJetFile.doNotAnalyze != null) return null
return object : LocationInfo {
override val filePath = containingJetFile.virtualFile.path
override val position: Position
get() = getLineAndColumnInPsiFile(containingJetFile, element.textRange).let { Position(it.line, it.column) }
}
}
}
@@ -16,6 +16,7 @@
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.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
@@ -64,8 +65,8 @@ public class CompilerCallbackServicesFacadeServer(
incrementalCompilationComponents!!.getIncrementalCache(target).close() incrementalCompilationComponents!!.getIncrementalCache(target).close()
} }
override fun lookupTracker_record(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) { override fun lookupTracker_record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
incrementalCompilationComponents!!.getLookupTracker().record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name) incrementalCompilationComponents!!.getLookupTracker().record(locationInfo, 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
@@ -16,6 +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.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
@@ -71,14 +72,7 @@ public interface CompilerCallbackServicesFacade : Remote {
// ---------------------------------------------------- // ----------------------------------------------------
// LookupTracker // LookupTracker
@Throws(RemoteException::class) @Throws(RemoteException::class)
fun lookupTracker_record( fun lookupTracker_record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String)
lookupContainingFile: String,
lookupLine: Int?,
lookupColumn: Int?,
scopeFqName: String,
scopeKind: ScopeKind,
name: String
)
@Throws(RemoteException::class) @Throws(RemoteException::class)
fun lookupTracker_isDoNothing(): Boolean fun lookupTracker_isDoNothing(): Boolean
@@ -16,6 +16,7 @@
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.ScopeKind import org.jetbrains.kotlin.incremental.components.ScopeKind
import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade import org.jetbrains.kotlin.rmi.CompilerCallbackServicesFacade
@@ -24,13 +25,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(lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?, scopeFqName: String, scopeKind: ScopeKind, name: String) { override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
if (!isDoNothing) { if (!isDoNothing) {
profiler.withMeasure(this) { profiler.withMeasure(this) {
facade.lookupTracker_record(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name) facade.lookupTracker_record(locationInfo, scopeFqName, scopeKind, name)
} }
} }
} }
@@ -17,6 +17,16 @@
package org.jetbrains.kotlin.incremental.components package org.jetbrains.kotlin.incremental.components
public interface LookupLocation { public interface LookupLocation {
val location: LocationInfo?
}
interface LocationInfo {
val filePath: String
// only for tests
val position: Position
data class Position(val line: Int, val column: Int)
} }
public enum class NoLookupLocation : LookupLocation { public enum class NoLookupLocation : LookupLocation {
@@ -37,5 +47,7 @@ public enum class NoLookupLocation : LookupLocation {
WHEN_TYPING, WHEN_TYPING,
WHEN_GET_SUPER_MEMBERS, WHEN_GET_SUPER_MEMBERS,
FOR_NON_TRACKED_SCOPE, FOR_NON_TRACKED_SCOPE,
FROM_SYNTHETIC_SCOPE FROM_SYNTHETIC_SCOPE;
override val location: LocationInfo? = null
} }
@@ -17,14 +17,8 @@
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 requiresLookupLineAndColumn: Boolean
get() = false
fun record( fun record(
lookupContainingFile: String, locationInfo: LocationInfo,
lookupLine: Int?,
lookupColumn: Int?,
scopeFqName: String, scopeFqName: String,
scopeKind: ScopeKind, scopeKind: ScopeKind,
name: String name: String
@@ -32,14 +26,7 @@ public interface LookupTracker {
companion object { companion object {
val DO_NOTHING: LookupTracker = object : LookupTracker { val DO_NOTHING: LookupTracker = object : LookupTracker {
override fun record( override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
lookupContainingFile: String,
lookupLine: Int?,
lookupColumn: Int?,
scopeFqName: String,
scopeKind: ScopeKind,
name: String
) {
} }
} }
} }
@@ -18,27 +18,18 @@ package org.jetbrains.kotlin.incremental
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile
import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.LookupLocation
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.incremental.components.ScopeKind import org.jetbrains.kotlin.incremental.components.ScopeKind
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.doNotAnalyze
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
import org.jetbrains.kotlin.resolve.scopes.KtScope import org.jetbrains.kotlin.resolve.scopes.KtScope
public fun LookupTracker.record(from: LookupLocation, inScope: KtScope, name: Name) { public fun LookupTracker.record(from: LookupLocation, inScope: KtScope, name: Name) {
if (this == LookupTracker.DO_NOTHING || from is NoLookupLocation) return if (this == LookupTracker.DO_NOTHING || from is NoLookupLocation) return
if (from !is KotlinLookupLocation) throw AssertionError("Unexpected location type: ${from.javaClass}") val location = from.location ?: return
val containingJetFile = from.element.getContainingJetFile()
if (containingJetFile.doNotAnalyze != null) return
val containingFilePath = containingJetFile.virtualFile.path
val lineAndColumn = if (requiresLookupLineAndColumn) getLineAndColumnInPsiFile(containingJetFile, from.element.textRange) else null
val scopeContainingDeclaration = inScope.getContainingDeclaration() val scopeContainingDeclaration = inScope.getContainingDeclaration()
@@ -49,5 +40,5 @@ public fun LookupTracker.record(from: LookupLocation, inScope: KtScope, name: Na
else -> throw AssertionError("Unexpected containing declaration type: ${scopeContainingDeclaration.javaClass}") else -> throw AssertionError("Unexpected containing declaration type: ${scopeContainingDeclaration.javaClass}")
} }
record(containingFilePath, lineAndColumn?.line, lineAndColumn?.column, scopeContainingDeclaration.fqNameUnsafe.asString(), scopeKind, name.asString()) record(location, scopeContainingDeclaration.fqNameUnsafe.asString(), scopeKind, name.asString())
} }
@@ -17,6 +17,7 @@
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.ScopeKind import org.jetbrains.kotlin.incremental.components.ScopeKind
import org.jetbrains.kotlin.test.JetTestUtils import org.jetbrains.kotlin.test.JetTestUtils
@@ -55,8 +56,8 @@ abstract class AbstractLookupTrackerTest : AbstractIncrementalJpsTest(
val lines = text.lines().toArrayList() val lines = text.lines().toArrayList()
for ((line, lookupsFromLine) in lookupsFromFile.groupBy { it.lookupLine!! }) { for ((line, lookupsFromLine) in lookupsFromFile.groupBy { it.lookupLine }) {
val columnToLookups = lookupsFromLine.groupBy { it.lookupColumn!! }.toList().sortedBy { it.first } val columnToLookups = lookupsFromLine.groupBy { it.lookupColumn }.toList().sortedBy { it.first }
val lineContent = lines[line - 1] val lineContent = lines[line - 1]
val parts = ArrayList<CharSequence>(columnToLookups.size * 2) val parts = ArrayList<CharSequence>(columnToLookups.size * 2)
@@ -135,8 +136,8 @@ abstract class AbstractLookupTrackerTest : AbstractIncrementalJpsTest(
private data class LookupInfo( private data class LookupInfo(
val lookupContainingFile: String, val lookupContainingFile: String,
val lookupLine: Int?, val lookupLine: Int,
val lookupColumn: Int?, val lookupColumn: Int,
val scopeFqName: String, val scopeFqName: String,
val scopeKind: ScopeKind, val scopeKind: ScopeKind,
val name: String val name: String
@@ -145,14 +146,9 @@ private data class LookupInfo(
private class TestLookupTracker : LookupTracker { private class TestLookupTracker : LookupTracker {
val lookups = arrayListOf<LookupInfo>() val lookups = arrayListOf<LookupInfo>()
override val requiresLookupLineAndColumn: Boolean override fun record(locationInfo: LocationInfo, scopeFqName: String, scopeKind: ScopeKind, name: String) {
get() = true val (line, column) = locationInfo.position
lookups.add(LookupInfo(locationInfo.filePath, line, column, scopeFqName, scopeKind, name))
override fun record(
lookupContainingFile: String, lookupLine: Int?, lookupColumn: Int?,
scopeFqName: String, scopeKind: ScopeKind, name: String
) {
lookups.add(LookupInfo(lookupContainingFile, lookupLine, lookupColumn, scopeFqName, scopeKind, name))
} }
} }