EA-101715: Handle also case with IntegerValueTypeConstructor

This commit is contained in:
Yan Zhulanow
2017-11-25 01:08:28 +09:00
parent 108e91f2a2
commit 2ee23ddd02
4 changed files with 30 additions and 1 deletions
@@ -42,6 +42,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstructor
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.isError
@@ -86,7 +87,14 @@ internal fun KotlinType.toPsiType(source: UElement, element: KtElement, boxed: B
"kotlin.Double" -> PsiType.DOUBLE.orBoxed()
"kotlin.Float" -> PsiType.FLOAT.orBoxed()
"kotlin.String" -> PsiType.getJavaLangString(element.manager, GlobalSearchScope.projectScope(element.project))
else -> null
else -> {
val typeConstructor = this.constructor
if (typeConstructor is IntegerValueTypeConstructor) {
typeConstructor.supertypes.first().toPsiType(source, element, boxed)
} else {
null
}
}
}
if (psiType != null) return psiType
}
+5
View File
@@ -0,0 +1,5 @@
fun a() {
val a = Obj(555)
}
object Obj
+14
View File
@@ -0,0 +1,14 @@
UFile (package = ) [public final class Ea101715Kt {...]
UClass (name = Ea101715Kt) [public final class Ea101715Kt {...}]
UAnnotationMethod (name = a) [public static final fun a() : void {...}]
UBlockExpression [{...}] : PsiType:Unit
UDeclarationsExpression [var a: <ErrorType> = Obj(555)]
ULocalVariable (name = a) [var a: <ErrorType> = Obj(555)]
UCallExpression (kind = UastCallKind(name='method_call'), argCount = 1)) [Obj(555)]
UIdentifier (Identifier (Obj)) [UIdentifier (Identifier (Obj))]
USimpleNameReferenceExpression (identifier = Obj) [Obj]
ULiteralExpression (value = 555) [555] : PsiType:int
UClass (name = Obj) [public final class Obj {...}]
UField (name = INSTANCE) [public static final var INSTANCE: Obj]
UAnnotation (fqName = null) [@null]
UAnnotationMethod (name = Obj) [private fun Obj() = UastEmptyExpression]
@@ -8,4 +8,6 @@ class KotlinUastTypesTest : AbstractKotlinTypesTest() {
@Test fun testUnexpectedContainerException() = doTest("UnexpectedContainerException")
@Test fun testCycleInTypeParameters() = doTest("CycleInTypeParameters")
@Test fun testEa101715() = doTest("ea101715")
}