diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt index 1b7a45db879..93aa080ecdc 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt @@ -184,6 +184,7 @@ internal fun KtExpression.unwrapBlockOrParenthesis(): KtExpression { } internal fun KtElement.analyze(): BindingContext { + if(containingFile !is KtFile) return BindingContext.EMPTY // EA-114080, EA-113475 return ServiceManager.getService(project, KotlinUastBindingContextProviderService::class.java) ?.getBindingContext(this) ?: BindingContext.EMPTY } diff --git a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt index 08b271a4dd8..561ec9535ea 100644 --- a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt +++ b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt @@ -25,8 +25,13 @@ import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.idea.core.copied import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor +import org.jetbrains.kotlin.psi.KtCallExpression +import org.jetbrains.kotlin.psi.KtClass +import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.getParentOfType +import org.jetbrains.kotlin.test.testFramework.runWriteAction import org.jetbrains.uast.* import org.jetbrains.uast.test.env.findUElementByTextFromPsi @@ -61,6 +66,22 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() { copied.originalFile.virtualFile) } + fun testDetachedResolve() { + val psiFile = myFixture.configureByText( + "AnnotatedClass.kt", """ + class AnnotatedClass { + @JvmName(name = "") + fun bar(param: String) { unknownFunc(param) } + } + """.trimIndent() + ) as KtFile + + val detachedCall = psiFile.findDescendantOfType()!!.copied() + val uCallExpression = detachedCall.toUElementOfType()!! + // at least it should not throw exceptions + TestCase.assertNull(uCallExpression.methodName) + } + fun testParameterInAnnotationClassFromFactory() { val detachedClass = KtPsiFactory(project).createClass("""