don't use project scope to resolve java.lang.String (#KT-25024)
This commit is contained in:
+1
-2
@@ -10,7 +10,6 @@ import com.intellij.psi.*
|
|||||||
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator
|
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator
|
||||||
import com.intellij.psi.impl.light.LightIdentifier
|
import com.intellij.psi.impl.light.LightIdentifier
|
||||||
import com.intellij.psi.impl.light.LightTypeElement
|
import com.intellij.psi.impl.light.LightTypeElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -83,7 +82,7 @@ private fun psiType(kotlinType: KotlinType, context: PsiElement): PsiType? {
|
|||||||
"kotlin.Char" -> PsiType.CHAR
|
"kotlin.Char" -> PsiType.CHAR
|
||||||
"kotlin.Double" -> PsiType.DOUBLE
|
"kotlin.Double" -> PsiType.DOUBLE
|
||||||
"kotlin.Float" -> PsiType.FLOAT
|
"kotlin.Float" -> PsiType.FLOAT
|
||||||
"kotlin.String" -> PsiType.getJavaLangString(context.manager, GlobalSearchScope.projectScope(context.project))
|
"kotlin.String" -> PsiType.getJavaLangString(context.manager, context.resolveScope)
|
||||||
else -> PsiType.getTypeByName(typeFqName, context.project, context.resolveScope)
|
else -> PsiType.getTypeByName(typeFqName, context.project, context.resolveScope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -10,7 +10,6 @@ import com.intellij.psi.*
|
|||||||
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator
|
import com.intellij.psi.impl.LanguageConstantExpressionEvaluator
|
||||||
import com.intellij.psi.impl.light.LightIdentifier
|
import com.intellij.psi.impl.light.LightIdentifier
|
||||||
import com.intellij.psi.impl.light.LightTypeElement
|
import com.intellij.psi.impl.light.LightTypeElement
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
@@ -83,7 +82,7 @@ private fun psiType(kotlinType: KotlinType, context: PsiElement): PsiType? {
|
|||||||
"kotlin.Char" -> PsiType.CHAR
|
"kotlin.Char" -> PsiType.CHAR
|
||||||
"kotlin.Double" -> PsiType.DOUBLE
|
"kotlin.Double" -> PsiType.DOUBLE
|
||||||
"kotlin.Float" -> PsiType.FLOAT
|
"kotlin.Float" -> PsiType.FLOAT
|
||||||
"kotlin.String" -> PsiType.getJavaLangString(context.manager, GlobalSearchScope.projectScope(context.project))
|
"kotlin.String" -> PsiType.getJavaLangString(context.manager, context.resolveScope)
|
||||||
else -> PsiType.getTypeByName(typeFqName, context.project, context.resolveScope)
|
else -> PsiType.getTypeByName(typeFqName, context.project, context.resolveScope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.config.LanguageFeature
|
|||||||
import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf
|
import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf
|
||||||
import org.jetbrains.kotlin.idea.facet.configureFacet
|
import org.jetbrains.kotlin.idea.facet.configureFacet
|
||||||
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
||||||
import org.jetbrains.kotlin.idea.search.projectScope
|
|
||||||
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
|
||||||
|
|
||||||
@@ -85,7 +84,10 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
.expectAnnotations(2).single { it.qualifiedName == "Qualifier" }
|
.expectAnnotations(2).single { it.qualifiedName == "Qualifier" }
|
||||||
val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression
|
val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression
|
||||||
assertTextRangeAndValue("\"foo\"", "foo", annotationAttributeVal)
|
assertTextRangeAndValue("\"foo\"", "foo", annotationAttributeVal)
|
||||||
TestCase.assertEquals(PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)), annotationAttributeVal.type)
|
TestCase.assertEquals(
|
||||||
|
PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
|
annotationAttributeVal.type
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testAnnotationsInAnnotationsDeclarations() {
|
fun testAnnotationsInAnnotationsDeclarations() {
|
||||||
@@ -139,7 +141,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal)
|
assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal)
|
||||||
TestCase.assertEquals("67", annotationAttributeVal.value)
|
TestCase.assertEquals("67", annotationAttributeVal.value)
|
||||||
TestCase.assertEquals(
|
TestCase.assertEquals(
|
||||||
PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)),
|
PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
(annotationAttributeVal as PsiExpression).type
|
(annotationAttributeVal as PsiExpression).type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -230,7 +232,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
|
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
|
||||||
assertTextAndRange("String::class", annotationAttributeVal)
|
assertTextAndRange("String::class", annotationAttributeVal)
|
||||||
TestCase.assertEquals(
|
TestCase.assertEquals(
|
||||||
PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()),
|
PsiType.getJavaLangString(myFixture.psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
annotationAttributeVal.operand.type
|
annotationAttributeVal.operand.type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,10 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression
|
val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression
|
||||||
TestCase.assertTrue(annotationAttributeVal.isPhysical)
|
TestCase.assertTrue(annotationAttributeVal.isPhysical)
|
||||||
assertTextRangeAndValue("\"foo\"", "foo", annotationAttributeVal)
|
assertTextRangeAndValue("\"foo\"", "foo", annotationAttributeVal)
|
||||||
TestCase.assertEquals(PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)), annotationAttributeVal.type)
|
TestCase.assertEquals(
|
||||||
|
PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
|
annotationAttributeVal.type
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testAnnotationsInAnnotationsDeclarations() {
|
fun testAnnotationsInAnnotationsDeclarations() {
|
||||||
@@ -140,7 +143,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal)
|
assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal)
|
||||||
TestCase.assertEquals("67", annotationAttributeVal.value)
|
TestCase.assertEquals("67", annotationAttributeVal.value)
|
||||||
TestCase.assertEquals(
|
TestCase.assertEquals(
|
||||||
PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)),
|
PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
(annotationAttributeVal as PsiExpression).type
|
(annotationAttributeVal as PsiExpression).type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -231,7 +234,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
|
val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression
|
||||||
assertTextAndRange("String::class", annotationAttributeVal)
|
assertTextAndRange("String::class", annotationAttributeVal)
|
||||||
TestCase.assertEquals(
|
TestCase.assertEquals(
|
||||||
PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()),
|
PsiType.getJavaLangString(myFixture.psiManager, GlobalSearchScope.everythingScope(project)),
|
||||||
annotationAttributeVal.operand.type
|
annotationAttributeVal.operand.type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -24,7 +24,6 @@ import com.intellij.psi.impl.cache.TypeInfo
|
|||||||
import com.intellij.psi.impl.compiled.ClsTypeElementImpl
|
import com.intellij.psi.impl.compiled.ClsTypeElementImpl
|
||||||
import com.intellij.psi.impl.compiled.SignatureParsing
|
import com.intellij.psi.impl.compiled.SignatureParsing
|
||||||
import com.intellij.psi.impl.compiled.StubBuildingVisitor
|
import com.intellij.psi.impl.compiled.StubBuildingVisitor
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
|
||||||
import com.intellij.psi.util.PsiTypesUtil
|
import com.intellij.psi.util.PsiTypesUtil
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
||||||
@@ -181,7 +180,7 @@ internal fun KotlinType.toPsiType(lightDeclaration: PsiModifierListOwner?, conte
|
|||||||
"kotlin.Char" -> PsiType.CHAR.orBoxed()
|
"kotlin.Char" -> PsiType.CHAR.orBoxed()
|
||||||
"kotlin.Double" -> PsiType.DOUBLE.orBoxed()
|
"kotlin.Double" -> PsiType.DOUBLE.orBoxed()
|
||||||
"kotlin.Float" -> PsiType.FLOAT.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 -> {
|
else -> {
|
||||||
val typeConstructor = this.constructor
|
val typeConstructor = this.constructor
|
||||||
if (typeConstructor is IntegerValueTypeConstructor) {
|
if (typeConstructor is IntegerValueTypeConstructor) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.uast.test.kotlin
|
package org.jetbrains.uast.test.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClassType
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.PsiLanguageInjectionHost
|
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)
|
fun <T> T?.orFail(msg: String): T = this ?: error(msg)
|
||||||
Reference in New Issue
Block a user