From d718fae6d9797ed6cabc8f272acb21d71c31d30f Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 30 May 2018 18:41:29 +0300 Subject: [PATCH] New J2K: Deal with unresolved class types --- .../jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt | 16 ++++++++++++---- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 7 +++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt index e3ab22da417..8240a98b598 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/JavaToJKTreeBuilder.kt @@ -200,10 +200,18 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) { fun PsiType.toJK(): JKType { return when (this) { - is PsiClassType -> JKClassTypeImpl( - resolve()?.let { symbolProvider.provideSymbol(it) as? JKClassSymbol }!!, - parameters.map { it.toJK() } - ) + is PsiClassType -> { + val target = resolve() + val parameters = parameters.map { it.toJK() } + if (target != null) { + JKClassTypeImpl( + target.let { symbolProvider.provideSymbol(it) as JKClassSymbol }, + parameters + ) + } else { + JKUnresolvedClassType(parameters) + } + } is PsiArrayType -> JKJavaArrayTypeImpl(componentType.toJK()) is PsiPrimitiveType -> JKJavaPrimitiveTypeImpl.KEYWORD_TO_INSTANCE[presentableText] ?: error("Invalid primitive type $presentableText") diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index 1123fc42af8..beec0d8debe 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -142,6 +142,13 @@ class JKClassTypeImpl( override val nullability: Nullability = Nullability.Default ) : JKClassType + +class JKUnresolvedClassType( + var parameters: List, + override val nullability: Nullability = Nullability.Default +) : JKType + + class JKNullLiteral : JKLiteralExpression, JKElementBase() { override val literal: String get() = "null"