diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java index 82e4416c056..33a4211e2af 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -343,6 +343,11 @@ public class TypeUtils { private static void fillInDeepSubstitutor(@NotNull JetType context, @NotNull TypeSubstitutor substitutor, @NotNull Map substitution, @Nullable Multimap fullSubstitution) { List parameters = context.getConstructor().getParameters(); List arguments = context.getArguments(); + + if (parameters.size() != arguments.size()) { + throw new IllegalStateException(); + } + for (int i = 0; i < arguments.size(); i++) { TypeProjection argument = arguments.get(i); TypeParameterDescriptor typeParameterDescriptor = parameters.get(i); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 475acc8f65e..7b64af7a06b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -266,6 +266,11 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { return false; } + // do not crash on error types + if (ErrorUtils.isErrorType(actualType) || ErrorUtils.isErrorType(targetType)) { + return false; + } + { Multimap typeSubstitutionMap = TypeUtils.buildDeepSubstitutionMultimap(targetType);