diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt index e0da5f4e256..0e7ac0af908 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt @@ -10,7 +10,6 @@ import com.intellij.psi.* import com.intellij.psi.impl.LanguageConstantExpressionEvaluator import com.intellij.psi.impl.light.LightIdentifier import com.intellij.psi.impl.light.LightTypeElement -import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext @@ -83,7 +82,7 @@ private fun psiType(kotlinType: KotlinType, context: PsiElement): PsiType? { "kotlin.Char" -> PsiType.CHAR "kotlin.Double" -> PsiType.DOUBLE "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) } } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt.173 b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt.173 index 87cab2de1bd..8bf8c1547b4 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt.173 +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/KtLightAnnotationsValues.kt.173 @@ -10,7 +10,6 @@ import com.intellij.psi.* import com.intellij.psi.impl.LanguageConstantExpressionEvaluator import com.intellij.psi.impl.light.LightIdentifier import com.intellij.psi.impl.light.LightTypeElement -import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext @@ -83,7 +82,7 @@ private fun psiType(kotlinType: KotlinType, context: PsiElement): PsiType? { "kotlin.Char" -> PsiType.CHAR "kotlin.Double" -> PsiType.DOUBLE "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) } } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt index 5b82777c77d..23d64a21c3f 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt @@ -30,7 +30,6 @@ import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.completion.test.assertInstanceOf import org.jetbrains.kotlin.idea.facet.configureFacet 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.KotlinWithJdkAndRuntimeLightProjectDescriptor @@ -85,7 +84,10 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { .expectAnnotations(2).single { it.qualifiedName == "Qualifier" } val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression 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() { @@ -139,7 +141,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal) TestCase.assertEquals("67", annotationAttributeVal.value) TestCase.assertEquals( - PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)), + PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)), (annotationAttributeVal as PsiExpression).type ) } @@ -230,7 +232,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression assertTextAndRange("String::class", annotationAttributeVal) TestCase.assertEquals( - PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()), + PsiType.getJavaLangString(myFixture.psiManager, GlobalSearchScope.everythingScope(project)), annotationAttributeVal.operand.type ) } diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt.173 b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt.173 index aafd54dec58..99b8d233708 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt.173 +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt.173 @@ -86,7 +86,10 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { val annotationAttributeVal = annotation.findAttributeValue("value") as PsiExpression TestCase.assertTrue(annotationAttributeVal.isPhysical) 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() { @@ -140,7 +143,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { assertTextAndRange("Constants.MY_CONSTANT", annotationAttributeVal) TestCase.assertEquals("67", annotationAttributeVal.value) TestCase.assertEquals( - PsiType.getJavaLangString(psiManager, GlobalSearchScope.projectScope(project)), + PsiType.getJavaLangString(psiManager, GlobalSearchScope.everythingScope(project)), (annotationAttributeVal as PsiExpression).type ) } @@ -231,7 +234,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { val annotationAttributeVal = annotations.first().findAttributeValue("cls") as PsiClassObjectAccessExpression assertTextAndRange("String::class", annotationAttributeVal) TestCase.assertEquals( - PsiType.getJavaLangString(myFixture.psiManager, myFixture.project.projectScope()), + PsiType.getJavaLangString(myFixture.psiManager, GlobalSearchScope.everythingScope(project)), annotationAttributeVal.operand.type ) } 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 81bf53db1f7..feb5665a04e 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 @@ -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) { diff --git a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt index b8fa9b4c7c6..65e2001a168 100644 --- a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt +++ b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt @@ -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("s.toUpperCase()") + TestCase.assertNotNull((refs.receiver.getExpressionType() as PsiClassType).resolve()) + } + } fun T?.orFail(msg: String): T = this ?: error(msg) \ No newline at end of file