diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IdeLightClassInheritanceHelper.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IdeLightClassInheritanceHelper.kt index b2d5014cc65..3714177d6f0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IdeLightClassInheritanceHelper.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/lightClasses/IdeLightClassInheritanceHelper.kt @@ -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 } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt index bc76e3a0926..e2b31af3501 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KtFileClassProviderImpl.kt @@ -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 { + 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 diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/dumbUtils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/dumbUtils.kt new file mode 100644 index 00000000000..80089c79f61 --- /dev/null +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/util/dumbUtils.kt @@ -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("")) + } + return dumb +} +