Do not throw on using kotlin resolve via light classes in dumb mode
Fix an exception when kotlin resolve was invoked when searching
for tests while indexing (probably many other cases)
Does not actually fix the behaviour, the test will not be found
resulting in undesired behaviour
Full-blown infrastructure for resolving Kotlin in dumb mode is needed
to fix the behaviour
#KT-24979 Fixed
This commit is contained in:
+3
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.*
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.classes.LightClassInheritanceHelper
|
||||
import org.jetbrains.kotlin.asJava.classes.defaultJavaAncestorQualifiedName
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.isInDumbMode
|
||||
import org.jetbrains.kotlin.idea.search.PsiBasedClassResolver
|
||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||
import org.jetbrains.kotlin.psi.KtSuperTypeCallEntry
|
||||
@@ -34,6 +35,8 @@ class IdeLightClassInheritanceHelper : LightClassInheritanceHelper {
|
||||
baseClass: PsiClass,
|
||||
checkDeep: Boolean
|
||||
): ImpreciseResolveResult {
|
||||
if (baseClass.project.isInDumbMode()) return NO_MATCH
|
||||
|
||||
val classOrObject = lightClass.kotlinOrigin ?: return UNSURE
|
||||
val entries = classOrObject.superTypeListEntries
|
||||
val hasSuperClass = entries.any { it is KtSuperTypeCallEntry }
|
||||
|
||||
+5
-1
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassForFacade
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.util.isInDumbMode
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtFileClassProvider
|
||||
@@ -21,6 +21,10 @@ import org.jetbrains.kotlin.psi.analysisContext
|
||||
class KtFileClassProviderImpl(val kotlinAsJavaSupport: KotlinAsJavaSupport) :
|
||||
KtFileClassProvider {
|
||||
override fun getFileClasses(file: KtFile): Array<PsiClass> {
|
||||
if (file.project.isInDumbMode()) {
|
||||
return PsiClass.EMPTY_ARRAY
|
||||
}
|
||||
|
||||
// TODO We don't currently support finding light classes for scripts
|
||||
if (file.isCompiled || file.isScript()) {
|
||||
return PsiClass.EMPTY_ARRAY
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve.util
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.DumbService
|
||||
import com.intellij.openapi.project.Project
|
||||
|
||||
|
||||
private val LOG = Logger.getInstance("kotlin.resolve.dumb.mode")
|
||||
|
||||
fun Project.isInDumbMode(): Boolean {
|
||||
val dumbService = DumbService.getInstance(this)
|
||||
val dumb = dumbService.isDumb
|
||||
if (dumb && dumbService.isAlternativeResolveEnabled) {
|
||||
LOG.warn("Kotlin does not support alternative resolve", Throwable("<stacktrace>"))
|
||||
}
|
||||
return dumb
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user