From fed075b0cafcdae2ea97bf780bd06ed69df675f3 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 23 Nov 2011 17:25:36 +0400 Subject: [PATCH] fix DescriptionRenderer failure if FunctionDescriptor.getReturnType returns null --- .../jet/lang/descriptors/CallableDescriptor.java | 4 ++++ .../jet/lang/descriptors/FunctionDescriptorImpl.java | 6 ++++++ .../jet/lang/descriptors/PropertyDescriptor.java | 5 +++++ .../jet/lang/descriptors/PropertyGetterDescriptor.java | 6 ++++++ .../jet/lang/descriptors/PropertySetterDescriptor.java | 5 +++++ .../jet/lang/descriptors/VariableDescriptorImpl.java | 6 ++++++ .../org/jetbrains/jet/resolve/DescriptorRenderer.java | 9 ++++++--- 7 files changed, 38 insertions(+), 3 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java index 4e78d2c81f5..afc9560badb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/CallableDescriptor.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -24,6 +25,9 @@ public interface CallableDescriptor extends DeclarationDescriptor { @NotNull JetType getReturnType(); + @Nullable + JetType getReturnTypeSafe(); + @NotNull @Override CallableDescriptor getOriginal(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index ef3ab5aefa0..7f8a7943a88 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -125,6 +125,12 @@ public class FunctionDescriptorImpl extends DeclarationDescriptorImpl implements return unsubstitutedReturnType; } + @Override + @Nullable + public JetType getReturnTypeSafe() { + return unsubstitutedReturnType; + } + @NotNull @Override public FunctionDescriptor getOriginal() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java index 354979ecac9..1205e95477d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -118,6 +118,11 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab return getOutType(); } + @Override + @Nullable + public JetType getReturnTypeSafe() { + return getOutType(); + } public boolean isVar() { return isVar; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java index 01bde2bf062..753d0cd4923 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java @@ -45,6 +45,12 @@ public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { return returnType; } + @Override + @Nullable + public JetType getReturnTypeSafe() { + return returnType; + } + @Override public R accept(DeclarationDescriptorVisitor visitor, D data) { return visitor.visitPropertyGetterDescriptor(this, data); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java index d5f2038a282..365aa645651 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java @@ -53,6 +53,11 @@ public class PropertySetterDescriptor extends PropertyAccessorDescriptor { return JetStandardClasses.getUnitType(); } + @Override + public JetType getReturnTypeSafe() { + return getReturnType(); + } + @Override public R accept(DeclarationDescriptorVisitor visitor, D data) { return visitor.visitPropertySetterDescriptor(this, data); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java index 6daefbce285..827fcbeab9a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptorImpl.java @@ -89,4 +89,10 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorImpl i public JetType getReturnType() { return getOutType(); } + + @Override + @Nullable + public JetType getReturnTypeSafe() { + return getOutType(); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index a378e31d39b..8b2ccbd024a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -73,7 +73,11 @@ public class DescriptorRenderer implements Renderer { } public String renderType(JetType type) { - return escape(type.toString()); + if (type == null) { + return escape(""); + } else { + return escape(type.toString()); + } } protected String escape(String s) { @@ -222,8 +226,7 @@ public class DescriptorRenderer implements Renderer { renderName(descriptor, builder); renderValueParameters(descriptor, builder); - // TODO: getReturnType may be uninitialized and throw IllegalStateException // stepan.koltsov@ 2011-11-21 - builder.append(" : ").append(escape(renderType(descriptor.getReturnType()))); + builder.append(" : ").append(escape(renderType(descriptor.getReturnTypeSafe()))); return super.visitFunctionDescriptor(descriptor, builder); }