Using valid member scope in descriptors created from alternative signatures.

This commit is contained in:
Evgeny Gerashchenko
2012-07-02 23:47:36 +04:00
parent 9dec15d2b1
commit 53cdbe486d
@@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;
@@ -210,12 +211,24 @@ class AlternativeSignatureData {
} }
TypeConstructor typeConstructor = originalTypeConstructor; TypeConstructor typeConstructor = originalTypeConstructor;
if (typeConstructor.getDeclarationDescriptor() instanceof TypeParameterDescriptor ClassifierDescriptor typeConstructorClassifier = typeConstructor.getDeclarationDescriptor();
&& originalToAltTypeParameters.containsKey(typeConstructor.getDeclarationDescriptor())) { if (typeConstructorClassifier instanceof TypeParameterDescriptor
typeConstructor = originalToAltTypeParameters.get(typeConstructor.getDeclarationDescriptor()).getTypeConstructor(); && originalToAltTypeParameters.containsKey(typeConstructorClassifier)) {
typeConstructor = originalToAltTypeParameters.get(typeConstructorClassifier).getTypeConstructor();
}
JetScope memberScope;
if (typeConstructorClassifier instanceof TypeParameterDescriptor) {
memberScope = ((TypeParameterDescriptor) typeConstructorClassifier).getUpperBoundsAsType().getMemberScope();
}
else if (typeConstructorClassifier instanceof ClassDescriptor) {
memberScope = ((ClassDescriptor) typeConstructorClassifier).getMemberScope(altArguments);
}
else {
throw new AssertionError("Unexpected class of type constructor classifier "
+ (typeConstructorClassifier == null ? "null" : typeConstructorClassifier.getClass().getName()));
} }
return new JetTypeImpl(autoType.getAnnotations(), typeConstructor, false, return new JetTypeImpl(autoType.getAnnotations(), typeConstructor, false,
altArguments, autoType.getMemberScope()); altArguments, memberScope);
} }
@Override @Override