Don't fail on star projections for error types
This commit is contained in:
+7
-1
@@ -105,7 +105,13 @@ class LazyJavaTypeResolver(
|
|||||||
typeConstructor: () -> TypeConstructor,
|
typeConstructor: () -> TypeConstructor,
|
||||||
typeParameterIndex: Int
|
typeParameterIndex: Int
|
||||||
) : TypeProjectionBase() {
|
) : 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 getProjectionKind() = typeParameter.getVariance().eq(OUT_VARIANCE).iif(INVARIANT, OUT_VARIANCE)
|
||||||
override fun getType() = typeParameter.getUpperBoundsAsType()
|
override fun getType() = typeParameter.getUpperBoundsAsType()
|
||||||
|
|||||||
@@ -328,6 +328,18 @@ public class ErrorUtils {
|
|||||||
return candidate instanceof ErrorClassDescriptor;
|
return candidate instanceof ErrorClassDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public static TypeParameterDescriptor createErrorTypeParameter(int index, @NotNull String debugMessage) {
|
||||||
|
return TypeParameterDescriptorImpl.createWithDefaultBound(
|
||||||
|
ERROR_CLASS,
|
||||||
|
Collections.<AnnotationDescriptor>emptyList(),
|
||||||
|
false,
|
||||||
|
Variance.INVARIANT,
|
||||||
|
Name.special("<ERROR: " + debugMessage + ">"),
|
||||||
|
index
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private static class ErrorTypeImpl implements JetType {
|
private static class ErrorTypeImpl implements JetType {
|
||||||
private final TypeConstructor constructor;
|
private final TypeConstructor constructor;
|
||||||
private final JetScope memberScope;
|
private final JetScope memberScope;
|
||||||
|
|||||||
Reference in New Issue
Block a user