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 bdc152ea58e..fdf986519d6 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 @@ -105,7 +105,13 @@ class LazyJavaTypeResolver( typeConstructor: () -> TypeConstructor, typeParameterIndex: Int ) : TypeProjectionBase() { - private val typeParameter by c.storageManager.createLazyValue {typeConstructor().getParameters()[typeParameterIndex]} + private val typeParameter by c.storageManager.createLazyValue { + val typeConstructor = typeConstructor() + val parameters = typeConstructor.getParameters() + if (typeParameterIndex >= parameters.size) + ErrorUtils.createErrorTypeParameter("#$typeParameterIndex for ${typeConstructor}") + else parameters[typeParameterIndex] + } override fun getProjectionKind() = typeParameter.getVariance().eq(OUT_VARIANCE).iif(INVARIANT, OUT_VARIANCE) override fun getType() = typeParameter.getUpperBoundsAsType() diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 5727f463957..fc6178a5775 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -328,6 +328,18 @@ public class ErrorUtils { return candidate instanceof ErrorClassDescriptor; } + @NotNull + public static TypeParameterDescriptor createErrorTypeParameter(int index, @NotNull String debugMessage) { + return TypeParameterDescriptorImpl.createWithDefaultBound( + ERROR_CLASS, + Collections.emptyList(), + false, + Variance.INVARIANT, + Name.special(""), + index + ); + } + private static class ErrorTypeImpl implements JetType { private final TypeConstructor constructor; private final JetScope memberScope;