Don't fail on star projections for error types
This commit is contained in:
+7
-1
@@ -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()
|
||||
|
||||
@@ -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.<AnnotationDescriptor>emptyList(),
|
||||
false,
|
||||
Variance.INVARIANT,
|
||||
Name.special("<ERROR: " + debugMessage + ">"),
|
||||
index
|
||||
);
|
||||
}
|
||||
|
||||
private static class ErrorTypeImpl implements JetType {
|
||||
private final TypeConstructor constructor;
|
||||
private final JetScope memberScope;
|
||||
|
||||
Reference in New Issue
Block a user