don't use project scope to resolve java.lang.String (#KT-25024)

This commit is contained in:
Nicolay Mitropolsky
2018-06-21 20:17:24 +03:00
parent cdfb813f2e
commit 01e9dd5085
6 changed files with 29 additions and 13 deletions
@@ -24,7 +24,6 @@ import com.intellij.psi.impl.cache.TypeInfo
import com.intellij.psi.impl.compiled.ClsTypeElementImpl
import com.intellij.psi.impl.compiled.SignatureParsing
import com.intellij.psi.impl.compiled.StubBuildingVisitor
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.PsiTypesUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
@@ -181,7 +180,7 @@ internal fun KotlinType.toPsiType(lightDeclaration: PsiModifierListOwner?, conte
"kotlin.Char" -> PsiType.CHAR.orBoxed()
"kotlin.Double" -> PsiType.DOUBLE.orBoxed()
"kotlin.Float" -> PsiType.FLOAT.orBoxed()
"kotlin.String" -> PsiType.getJavaLangString(context.manager, GlobalSearchScope.projectScope(context.project))
"kotlin.String" -> PsiType.getJavaLangString(context.manager, context.resolveScope)
else -> {
val typeConstructor = this.constructor
if (typeConstructor is IntegerValueTypeConstructor) {
@@ -16,6 +16,7 @@
package org.jetbrains.uast.test.kotlin
import com.intellij.psi.PsiClassType
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiLanguageInjectionHost
@@ -130,6 +131,19 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() {
}
fun testResolveStringFromUast() {
val file = myFixture.addFileToProject(
"s.kt", """fun foo(){
val s = "abc"
s.toUpperCase()
}
""${'"'}"""
)
val refs = file.findUElementByTextFromPsi<UQualifiedReferenceExpression>("s.toUpperCase()")
TestCase.assertNotNull((refs.receiver.getExpressionType() as PsiClassType).resolve())
}
}
fun <T> T?.orFail(msg: String): T = this ?: error(msg)