Uast: don't run resolve if not inside KtFile
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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<KtCallExpression>()!!.copied()
|
||||
val uCallExpression = detachedCall.toUElementOfType<UCallExpression>()!!
|
||||
// at least it should not throw exceptions
|
||||
TestCase.assertNull(uCallExpression.methodName)
|
||||
}
|
||||
|
||||
fun testParameterInAnnotationClassFromFactory() {
|
||||
|
||||
val detachedClass = KtPsiFactory(project).createClass("""
|
||||
|
||||
Reference in New Issue
Block a user