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
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 b2d5014..3714177 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.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 @@
         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 bc76e3a..e2b31af 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.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 @@
 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
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 0000000..80089c7
--- /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("<stacktrace>"))
+    }
+    return dumb
+}
+