Report UNSUPPORTED on class object constraints in lazy resolve

This commit is contained in:
Andrey Breslav
2014-03-05 17:28:20 +04:00
parent b72bcfd8ae
commit 2a82c15465
2 changed files with 15 additions and 7 deletions
@@ -649,9 +649,7 @@ public class DescriptorResolver {
}
}
for (JetTypeConstraint constraint : declaration.getTypeConstraints()) {
if (constraint.isClassObjectConstraint()) {
trace.report(UNSUPPORTED.on(constraint, "Class objects constraints are not supported yet"));
}
reportUnsupportedClassObjectConstraint(trace, constraint);
JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName();
if (subjectTypeParameterName == null) {
@@ -717,6 +715,12 @@ public class DescriptorResolver {
}
}
public static void reportUnsupportedClassObjectConstraint(BindingTrace trace, JetTypeConstraint constraint) {
if (constraint.isClassObjectConstraint()) {
trace.report(UNSUPPORTED.on(constraint, "Class objects constraints are not supported yet"));
}
}
private static void checkUpperBoundType(
JetTypeReference upperBound,
JetType upperBoundType,
@@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.AbstractLazyTypeParameterDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
@@ -64,7 +65,7 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
JetTypeParameter jetTypeParameter = this.jetTypeParameter;
resolveUpperBoundsFromWhereClause(upperBounds, false);
resolveUpperBoundsFromWhereClause(upperBounds);
JetTypeReference extendsBound = jetTypeParameter.getExtendsBound();
if (extendsBound != null) {
@@ -78,12 +79,12 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
return upperBounds;
}
private void resolveUpperBoundsFromWhereClause(Set<JetType> upperBounds, boolean forClassObject) {
private void resolveUpperBoundsFromWhereClause(Set<JetType> upperBounds) {
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(jetTypeParameter, JetClassOrObject.class);
if (classOrObject instanceof JetClass) {
JetClass jetClass = (JetClass) classOrObject;
for (JetTypeConstraint jetTypeConstraint : jetClass.getTypeConstraints()) {
if (jetTypeConstraint.isClassObjectConstraint() != forClassObject) continue;
DescriptorResolver.reportUnsupportedClassObjectConstraint(resolveSession.getTrace(), jetTypeConstraint);
JetSimpleNameExpression constrainedParameterName = jetTypeConstraint.getSubjectTypeParameterName();
if (constrainedParameterName != null) {
@@ -91,7 +92,10 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
JetTypeReference boundTypeReference = jetTypeConstraint.getBoundTypeReference();
if (boundTypeReference != null) {
upperBounds.add(resolveBoundType(boundTypeReference));
JetType boundType = resolveBoundType(boundTypeReference);
if (!jetTypeConstraint.isClassObjectConstraint()) {
upperBounds.add(boundType);
}
}
}
}