diff --git a/idea/ide-common/src/org/jetbrains/kotlin/util/exceptionUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/util/exceptionUtils.kt
index 9825695..61f589c 100644
--- a/idea/ide-common/src/org/jetbrains/kotlin/util/exceptionUtils.kt
+++ b/idea/ide-common/src/org/jetbrains/kotlin/util/exceptionUtils.kt
@@ -9,7 +9,7 @@
 import java.lang.IllegalStateException
 import kotlin.reflect.KClass
 
-class ExceptionWithAttachmentWrapper(val ref: String, vararg val vars: Any? = emptyArray()) {
+class ExceptionWithAttachmentWrapper(val ref: String, val varsProvider: () -> Array<Any?>?) {
     var catch: KClass<out Throwable> = Throwable::class
 
     fun <T> invoke(block: () -> T) =
@@ -28,10 +28,12 @@
         } catch (t: Throwable) {
             if (catch.java.isAssignableFrom(t.javaClass)) {
                 val exception = KotlinExceptionWithAttachments(ref + t.message, t)
-                for (arg in vars.withIndex())
+                val vars = varsProvider.invoke() ?: emptyArray()
+                for (arg in vars.withIndex()) {
                     arg.value?.let {
                         exception.withAttachment("arg" + arg.index, arg.value.toString())
                     }
+                }
                 throw exception
             }
             throw t;
@@ -40,11 +42,22 @@
 }
 
 object EA {
-    fun ea141456(vararg vars: Any?) =
-        ExceptionWithAttachmentWrapper("EA-141456", vars).catch<IllegalStateException>()
+    inline fun <T> vars(vararg elements: T): () -> Array<Any?>? =
+        { arrayOf(elements) }
 
-    fun ea219323(vararg vars: Any?) =
-        ExceptionWithAttachmentWrapper("EA-219323", vars).catch<IllegalStateException>()
+    fun ea141456(f: (EA) -> () -> Array<Any?>?) =
+        ExceptionWithAttachmentWrapper("EA-141456", f(EA)).catch<IllegalStateException>()
+
+    fun ea219323(f: (EA) -> () -> Array<Any?>?) =
+        ExceptionWithAttachmentWrapper("EA-219323", f(EA)).catch<IllegalStateException>()
 }
 
 
+fun main() {
+    EA.ea141456 {
+        it.vars("1", "2")
+    }.invoke {
+        System.out.println("1");
+        throw IllegalStateException()
+    }
+}
\ No newline at end of file
diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt
index 939b571..a58261d 100644
--- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt
+++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/smart/Utils.kt
@@ -30,6 +30,7 @@
 import org.jetbrains.kotlin.types.typeUtil.TypeNullability
 import org.jetbrains.kotlin.types.typeUtil.isNothing
 import org.jetbrains.kotlin.types.typeUtil.isNullableNothing
+import org.jetbrains.kotlin.util.EA
 import org.jetbrains.kotlin.util.descriptorsEqualWithSubstitution
 import java.util.*
 
@@ -304,7 +305,9 @@
     }
 
     if (this is CallableDescriptor) {
-        val returnType = fuzzyReturnType() ?: return emptyList()
+        val returnType =
+            EA.ea141456(this, this.returnType)
+                .invoke { fuzzyReturnType() } ?: return emptyList()
 
         // skip declarations of types Nothing, Nothing?, dynamic or of generic parameter type which has no real bounds
         if (returnType.type.isNothing() ||
diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt
index 9260bb0..785226f 100644
--- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt
+++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/KotlinIndicesHelper.kt
@@ -55,6 +55,7 @@
 import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes
 import org.jetbrains.kotlin.resolve.scopes.collectSyntheticStaticFunctions
 import org.jetbrains.kotlin.types.KotlinType
+import org.jetbrains.kotlin.util.EA
 import java.lang.reflect.Field
 import java.lang.reflect.Modifier
 import java.util.*
@@ -242,14 +243,23 @@
     ): Collection<CallableDescriptor> {
         val result = LinkedHashSet<CallableDescriptor>()
 
-        fun processDescriptor(descriptor: CallableDescriptor) {
+        fun processDescriptor(callableDeclaration: KtCallableDeclaration, descriptor: CallableDescriptor) {
             if (descriptor.extensionReceiverParameter != null && descriptorFilter(descriptor)) {
-                result.addAll(descriptor.substituteExtensionIfCallable(receiverTypes, callType))
+                EA.ea141456(
+                    callableDeclaration.text,
+                    descriptor,
+                    descriptor.extensionReceiverParameter,
+                    descriptor.extensionReceiverParameter?.type,
+                ).invoke {
+                    result.addAll(descriptor.substituteExtensionIfCallable(receiverTypes, callType))
+                }
             }
         }
 
-        declarations.forEach { it.resolveToDescriptors<CallableDescriptor>().forEach(::processDescriptor) }
-
+        declarations.forEach {
+            for (callableDescriptor in it.resolveToDescriptors<CallableDescriptor>())
+                processDescriptor(it, callableDescriptor)
+        }
         return result
     }
 
@@ -455,7 +465,7 @@
         shortNamesCache.processAllMethodNames(
             { name -> if (nameFilter(name)) allMethodNames.add(name); true },
             scopeWithoutKotlin,
-            idFilter
+            idFilter,
         )
         for (name in allMethodNames) {
             ProgressManager.checkCanceled()
