diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt index ebf7d7818f1..bdf260add68 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaTypeResolver.kt @@ -89,8 +89,10 @@ class LazyJavaTypeResolver( private val attr: JavaTypeAttributes ) : LazyType(c.storageManager) { + private val classifier = c.storageManager.createNullableLazyValue { javaType.getClassifier() } + override fun computeTypeConstructor(): TypeConstructor { - val classifier = javaType.getClassifier() + val classifier = classifier() if (classifier == null) { return ErrorUtils.createErrorTypeConstructor("Unresolved java classifier: " + javaType.getPresentableText()) } @@ -215,7 +217,11 @@ class LazyJavaTypeResolver( !attr.isMarkedNotNull && // 'L extends List' in Java is a List in Kotlin, not a List // nullability will be taken care of in individual member signatures - (attr.howThisTypeIsUsed !in setOf(TYPE_ARGUMENT, UPPER_BOUND, SUPERTYPE_ARGUMENT, SUPERTYPE)) + when (classifier()) { + is JavaClass -> attr.howThisTypeIsUsed !in setOf(TYPE_ARGUMENT, SUPERTYPE_ARGUMENT, SUPERTYPE) + is JavaTypeParameter -> attr.howThisTypeIsUsed !in setOf(TYPE_ARGUMENT, UPPER_BOUND, SUPERTYPE_ARGUMENT) + else -> true + } } override fun isNullable(): Boolean = _nullable() }