From 0f9a21a30571403f4decb08dac1fbff4994bf20d Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Tue, 17 Jan 2012 19:33:47 +0400 Subject: [PATCH] no error scope in good type propagate error types in several sites --- .../lang/resolve/java/JetTypeJetSignatureReader.java | 2 +- .../org/jetbrains/jet/lang/resolve/TypeResolver.java | 8 +------- .../src/org/jetbrains/jet/lang/types/ErrorUtils.java | 10 ++++++++-- .../src/org/jetbrains/jet/lang/types/JetTypeImpl.java | 5 +++++ .../src/org/jetbrains/jet/lang/types/TypeUtils.java | 3 +++ 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java index dd8e8b6b3c8..3e1d1918651 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetTypeJetSignatureReader.java @@ -142,7 +142,7 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd classDescriptor.getTypeConstructor(), nullable, typeArguments, - ErrorUtils.getErrorScope()); + classDescriptor.getMemberScope(typeArguments)); done(jetType); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index 35cd9d738a7..071b75180e3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -100,13 +100,7 @@ public class TypeResolver { int expectedArgumentCount = parameters.size(); int actualArgumentCount = arguments.size(); if (ErrorUtils.isError(typeConstructor)) { - result[0] = new JetTypeImpl( - annotations, - typeConstructor, - nullable, - arguments, // TODO : review - classDescriptor.getMemberScope(Collections.emptyList()) - ); + result[0] = ErrorUtils.createErrorType("??"); } else { if (actualArgumentCount != expectedArgumentCount) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 339f72f3381..a170c4ac6ed 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -15,7 +15,13 @@ import java.util.*; public class ErrorUtils { private static final ModuleDescriptor ERROR_MODULE = new ModuleDescriptor(""); - private static final JetScope ERROR_SCOPE = new JetScope() { + + + private static final JetScope ERROR_SCOPE = new ErrorScope(); + + public static class ErrorScope implements JetScope { + + private ErrorScope() {} @Override public ClassifierDescriptor getClassifier(@NotNull String name) { @@ -82,7 +88,7 @@ public class ErrorUtils { return Collections.emptyList(); } - }; + } private static final ClassDescriptorImpl ERROR_CLASS = new ClassDescriptorImpl(ERROR_MODULE, Collections.emptyList(), "") { @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeImpl.java index c8bc340d8bb..28e2314f8ab 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/JetTypeImpl.java @@ -23,6 +23,11 @@ public final class JetTypeImpl extends AnnotatedImpl implements JetType { public JetTypeImpl(List annotations, TypeConstructor constructor, boolean nullable, @NotNull List arguments, JetScope memberScope) { super(annotations); + + if (memberScope instanceof ErrorUtils.ErrorScope) { + throw new IllegalStateException(); + } + this.constructor = constructor; this.nullable = nullable; this.arguments = arguments; 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 6e6f3cfa7c9..76709697223 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/TypeUtils.java @@ -100,6 +100,9 @@ public class TypeUtils { if (type.isNullable() == nullable) { return type; } + if (ErrorUtils.isErrorType(type)) { + return type; + } return new JetTypeImpl(type.getAnnotations(), type.getConstructor(), nullable, type.getArguments(), type.getMemberScope()); }