Report UNSUPPORTED on class object constraints in lazy resolve
This commit is contained in:
@@ -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,
|
||||
|
||||
+8
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user