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 {
|
internal fun KtElement.analyze(): BindingContext {
|
||||||
|
if(containingFile !is KtFile) return BindingContext.EMPTY // EA-114080, EA-113475
|
||||||
return ServiceManager.getService(project, KotlinUastBindingContextProviderService::class.java)
|
return ServiceManager.getService(project, KotlinUastBindingContextProviderService::class.java)
|
||||||
?.getBindingContext(this) ?: BindingContext.EMPTY
|
?.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.core.copied
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
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.KtPsiFactory
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
|
import org.jetbrains.kotlin.test.testFramework.runWriteAction
|
||||||
import org.jetbrains.uast.*
|
import org.jetbrains.uast.*
|
||||||
import org.jetbrains.uast.test.env.findUElementByTextFromPsi
|
import org.jetbrains.uast.test.env.findUElementByTextFromPsi
|
||||||
|
|
||||||
@@ -61,6 +66,22 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
copied.originalFile.virtualFile)
|
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() {
|
fun testParameterInAnnotationClassFromFactory() {
|
||||||
|
|
||||||
val detachedClass = KtPsiFactory(project).createClass("""
|
val detachedClass = KtPsiFactory(project).createClass("""
|
||||||
|
|||||||
Reference in New Issue
Block a user