Fix exception from ::class literals on unresolved classes
This commit is contained in:
+8
-4
@@ -452,11 +452,15 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
||||
@Override
|
||||
public JetTypeInfo visitClassLiteralExpression(@NotNull JetClassLiteralExpression expression, ExpressionTypingContext c) {
|
||||
ClassDescriptor descriptor = resolveClassLiteral(expression, c);
|
||||
JetType type = descriptor == null
|
||||
? ErrorUtils.createErrorType("Unresolved class")
|
||||
: components.reflectionTypes.getKClassType(Annotations.EMPTY, descriptor);
|
||||
if (descriptor != null && !ErrorUtils.isError(descriptor)) {
|
||||
JetType type = components.reflectionTypes.getKClassType(Annotations.EMPTY, descriptor);
|
||||
if (!type.isError()) {
|
||||
return JetTypeInfo.create(type, c.dataFlowInfo);
|
||||
}
|
||||
c.trace.report(REFLECTION_TYPES_NOT_LOADED.on(expression.getDoubleColonTokenReference()));
|
||||
}
|
||||
|
||||
return JetTypeInfo.create(type, c.dataFlowInfo);
|
||||
return JetTypeInfo.create(ErrorUtils.createErrorType("Unresolved class"), c.dataFlowInfo);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -60,13 +60,19 @@ public class ReflectionTypes(private val module: ModuleDescriptor) {
|
||||
public val kMutableTopLevelExtensionProperty: ClassDescriptor by ClassLookup
|
||||
|
||||
public fun getKClassType(annotations: Annotations, classDescriptor: ClassDescriptor): JetType {
|
||||
val kClassDescriptor = kClass
|
||||
if (ErrorUtils.isError(kClassDescriptor)) {
|
||||
return kClassDescriptor.getDefaultType()
|
||||
}
|
||||
|
||||
val typeConstructor = classDescriptor.getTypeConstructor()
|
||||
val arguments = typeConstructor.getParameters().map(TypeUtils::makeStarProjection)
|
||||
val kClassArguments = listOf(TypeProjectionImpl(
|
||||
Variance.INVARIANT,
|
||||
JetTypeImpl(Annotations.EMPTY, typeConstructor, false, arguments, classDescriptor.getMemberScope(arguments))
|
||||
))
|
||||
return JetTypeImpl(annotations, kClass.getTypeConstructor(), false, kClassArguments, kClass.getMemberScope(kClassArguments))
|
||||
return JetTypeImpl(annotations, kClassDescriptor.getTypeConstructor(), false, kClassArguments,
|
||||
kClassDescriptor.getMemberScope(kClassArguments))
|
||||
}
|
||||
|
||||
public fun getKFunctionType(
|
||||
|
||||
Reference in New Issue
Block a user