Move test logging processing in find usages to single place

This commit is contained in:
Nikolay Krasko
2017-06-14 19:59:20 +03:00
parent 60c8d5dcc0
commit 6e9c0a0fda
2 changed files with 15 additions and 11 deletions
@@ -85,6 +85,10 @@ class ExpressionsOfTypeProcessor(
@TestOnly @TestOnly
var testLog: MutableList<String>? = null var testLog: MutableList<String>? = null
inline fun testLog(s: () -> String) {
testLog?.add(s())
}
val LOG = Logger.getInstance(ExpressionsOfTypeProcessor::class.java) val LOG = Logger.getInstance(ExpressionsOfTypeProcessor::class.java)
fun logPresentation(element: PsiElement): String? { fun logPresentation(element: PsiElement): String? {
@@ -183,7 +187,7 @@ class ExpressionsOfTypeProcessor(
private fun downShiftToPlainSearch(reference: PsiReference) { private fun downShiftToPlainSearch(reference: PsiReference) {
val message = getFallbackDiagnosticsMessage(reference) val message = getFallbackDiagnosticsMessage(reference)
LOG.info("ExpressionsOfTypeProcessor: " + message) LOG.info("ExpressionsOfTypeProcessor: " + message)
testLog?.add("Downgrade to plain text search: $message") testLog { "Downgrade to plain text search: $message" }
tasks.clear() tasks.clear()
scopesToUsePlainSearch.clear() scopesToUsePlainSearch.clear()
@@ -216,7 +220,7 @@ class ExpressionsOfTypeProcessor(
private fun addClassToProcess(classToSearch: PsiClass) { private fun addClassToProcess(classToSearch: PsiClass) {
data class ProcessClassUsagesTask(val classToSearch: PsiClass) : Task { data class ProcessClassUsagesTask(val classToSearch: PsiClass) : Task {
override fun perform() { override fun perform() {
testLog?.add("Searched references to ${logPresentation(classToSearch)}") testLog { "Searched references to ${logPresentation(classToSearch)}" }
val scope = GlobalSearchScope.allScope(project).excludeFileTypes(XmlFileType.INSTANCE) // ignore usages in XML - they don't affect us val scope = GlobalSearchScope.allScope(project).excludeFileTypes(XmlFileType.INSTANCE) // ignore usages in XML - they don't affect us
searchReferences(classToSearch, scope) { reference -> searchReferences(classToSearch, scope) { reference ->
val element = reference.element val element = reference.element
@@ -347,7 +351,7 @@ class ExpressionsOfTypeProcessor(
for (klass in classes) { for (klass in classes) {
val request = klass.name + "." + declarationName val request = klass.name + "." + declarationName
testLog?.add("Searched references to static ${member.name} in non-Java files by request $request") testLog { "Searched references to static ${member.name} in non-Java files by request $request" }
searchRequestCollector.searchWord( searchRequestCollector.searchWord(
request, request,
classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor) classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor)
@@ -356,7 +360,7 @@ class ExpressionsOfTypeProcessor(
if (qualifiedName != null) { if (qualifiedName != null) {
val importAllUnderRequest = qualifiedName + ".*" val importAllUnderRequest = qualifiedName + ".*"
testLog?.add("Searched references to static ${member.name} in non-Java files by request $importAllUnderRequest") testLog { "Searched references to static ${member.name} in non-Java files by request $importAllUnderRequest" }
searchRequestCollector.searchWord( searchRequestCollector.searchWord(
importAllUnderRequest, importAllUnderRequest,
classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor) classUseScope(klass).intersectWith(memberScope), UsageSearchContext.IN_CODE, true, member, resultProcessor)
@@ -397,10 +401,10 @@ class ExpressionsOfTypeProcessor(
data class ProcessCallableUsagesTask(val declaration: PsiElement, val processor: ReferenceProcessor, val scope: SearchScope) : Task { data class ProcessCallableUsagesTask(val declaration: PsiElement, val processor: ReferenceProcessor, val scope: SearchScope) : Task {
override fun perform() { override fun perform() {
if (scope is LocalSearchScope) { if (scope is LocalSearchScope) {
testLog?.add("Searched imported static member $declaration in ${scope.scope.toList()}") testLog { "Searched imported static member $declaration in ${scope.scope.toList()}" }
} }
else { else {
testLog?.add("Searched references to ${logPresentation(declaration)} in non-Java files") testLog { "Searched references to ${logPresentation(declaration)} in non-Java files" }
} }
val searchParameters = KotlinReferencesSearchParameters( val searchParameters = KotlinReferencesSearchParameters(
@@ -464,7 +468,7 @@ class ExpressionsOfTypeProcessor(
data class ProcessSamInterfaceTask(val psiClass: PsiClass) : Task { data class ProcessSamInterfaceTask(val psiClass: PsiClass) : Task {
override fun perform() { override fun perform() {
val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(KotlinFileType.INSTANCE, XmlFileType.INSTANCE) val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(KotlinFileType.INSTANCE, XmlFileType.INSTANCE)
testLog?.add("Searched references to ${logPresentation(psiClass)} in non-Kotlin files") testLog { "Searched references to ${logPresentation(psiClass)} in non-Kotlin files" }
searchReferences(psiClass, scope) { reference -> searchReferences(psiClass, scope) { reference ->
if (reference.element.language != JavaLanguage.INSTANCE) { // reference in some JVM language can be method parameter (but we don't know) if (reference.element.language != JavaLanguage.INSTANCE) { // reference in some JVM language can be method parameter (but we don't know)
downShiftToPlainSearch(reference) downShiftToPlainSearch(reference)
@@ -765,7 +769,7 @@ class ExpressionsOfTypeProcessor(
if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { if (method.hasModifierProperty(PsiModifier.ABSTRACT)) {
val psiClass = method.containingClass val psiClass = method.containingClass
if (psiClass != null) { if (psiClass != null) {
testLog?.add("Resolved java class to descriptor: ${psiClass.qualifiedName}") testLog { "Resolved java class to descriptor: ${psiClass.qualifiedName}" }
val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacadeByFile(psiClass.containingFile, JvmPlatform) val resolutionFacade = KotlinCacheService.getInstance(project).getResolutionFacadeByFile(psiClass.containingFile, JvmPlatform)
val classDescriptor = psiClass.resolveToDescriptor(resolutionFacade) as? JavaClassDescriptor val classDescriptor = psiClass.resolveToDescriptor(resolutionFacade) as? JavaClassDescriptor
@@ -844,7 +848,7 @@ class ExpressionsOfTypeProcessor(
else { else {
if (!isImplicitlyTyped(declaration)) return if (!isImplicitlyTyped(declaration)) return
testLog?.add("Checked type of ${logPresentation(declaration)}") testLog { "Checked type of ${logPresentation(declaration)}" }
val descriptor = declaration.resolveToDescriptorIfAny() as? CallableDescriptor ?: return val descriptor = declaration.resolveToDescriptorIfAny() as? CallableDescriptor ?: return
val type = descriptor.returnType val type = descriptor.returnType
@@ -78,7 +78,7 @@ abstract class OperatorReferenceSearcher<TReferenceElement : KtElement>(
protected fun processReferenceElement(element: TReferenceElement): Boolean { protected fun processReferenceElement(element: TReferenceElement): Boolean {
val reference = extractReference(element) ?: return true val reference = extractReference(element) ?: return true
testLog?.add("Resolved ${logPresentation(element)}") testLog { "Resolved ${logPresentation(element)}" }
if (reference.isReferenceTo(targetDeclaration)) { if (reference.isReferenceTo(targetDeclaration)) {
return consumer.process(reference) return consumer.process(reference)
} }
@@ -239,7 +239,7 @@ abstract class OperatorReferenceSearcher<TReferenceElement : KtElement>(
} }
private fun doPlainSearch(scope: SearchScope) { private fun doPlainSearch(scope: SearchScope) {
testLog?.add("Used plain search of ${logPresentation(targetDeclaration)} in ${scope.logPresentation()}") testLog { "Used plain search of ${logPresentation(targetDeclaration)} in ${scope.logPresentation()}" }
if (scope is LocalSearchScope) { if (scope is LocalSearchScope) {
for (element in scope.scope) { for (element in scope.scope) {