From a7aeba4e489cd750adfd654be797021108856321 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 30 May 2012 21:04:25 +0400 Subject: [PATCH] JDR: do not crash if signature references nonexistent class --- .../java/JetTypeJetSignatureReader.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 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 668459d94d4..a40f32383e6 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 @@ -82,6 +82,7 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd private ClassDescriptor classDescriptor; + private JetType errorType; private boolean nullable; private List typeArguments; @@ -122,7 +123,8 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd } if (this.classDescriptor == null) { - throw new IllegalStateException("class not found by name: " + ourName); // TODO: wrong exception + // TODO: report in to trace + this.errorType = ErrorUtils.createErrorType("class not found by name: " + ourName); } this.nullable = nullable; this.typeArguments = new ArrayList(); @@ -180,12 +182,21 @@ public abstract class JetTypeJetSignatureReader extends JetSignatureExceptionsAd @Override public void visitEnd() { - JetType jetType = new JetTypeImpl( - Collections.emptyList(), - classDescriptor.getTypeConstructor(), - nullable, - typeArguments, - classDescriptor.getMemberScope(typeArguments)); + if ((errorType != null) == (classDescriptor != null)) { + throw new IllegalStateException("must initialize either errorType or classDescriptor"); + } + JetType jetType; + if (errorType != null) { + jetType = errorType; + } + else { + jetType = new JetTypeImpl( + Collections.emptyList(), + classDescriptor.getTypeConstructor(), + nullable, + typeArguments, + classDescriptor.getMemberScope(typeArguments)); + } done(jetType); } -- GitLab