From 7adb2d1381101528b7f1235a959bffe216ecab8c Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 6 Jul 2011 18:18:47 +0400 Subject: [PATCH] tests for JET-168 Improve the parser for function and tuple types as receiver types --- .../LazySubstitutingClassDescriptor.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java b/idea/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java index d161f2e5963..be6ebd7f121 100644 --- a/idea/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java +++ b/idea/src/org/jetbrains/jet/lang/descriptors/LazySubstitutingClassDescriptor.java @@ -1,10 +1,12 @@ package org.jetbrains.jet.lang.descriptors; +import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.JetScope; import org.jetbrains.jet.lang.resolve.SubstitutingScope; import org.jetbrains.jet.lang.types.*; +import java.util.Collection; import java.util.List; /** @@ -13,6 +15,7 @@ import java.util.List; public class LazySubstitutingClassDescriptor implements ClassDescriptor { private final ClassDescriptor original; + private TypeConstructor typeConstructor; private final TypeSubstitutor substitutor; public LazySubstitutingClassDescriptor(ClassDescriptor descriptor, TypeSubstitutor substitutor) { @@ -23,10 +26,32 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { @NotNull @Override public TypeConstructor getTypeConstructor() { + TypeConstructor originalTypeConstructor = original.getTypeConstructor(); if (substitutor.isEmpty()) { - return original.getTypeConstructor(); + return originalTypeConstructor; } - throw new UnsupportedOperationException(); // TODO + + if (typeConstructor == null) { + List parameters = Lists.newArrayList(); + for (TypeParameterDescriptor parameterDescriptor : originalTypeConstructor.getParameters()) { + parameters.add(parameterDescriptor.substitute(substitutor)); + } + Collection supertypes = Lists.newArrayList(); + for (JetType supertype : originalTypeConstructor.getSupertypes()) { + supertypes.add(substitutor.substitute(supertype, Variance.INVARIANT)); + } + + typeConstructor = new TypeConstructorImpl( + this, + originalTypeConstructor.getAnnotations(), + originalTypeConstructor.isSealed(), + originalTypeConstructor.toString(), + parameters, + supertypes + ); + } + + return typeConstructor; } @NotNull