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()) {
|
for (JetTypeConstraint constraint : declaration.getTypeConstraints()) {
|
||||||
if (constraint.isClassObjectConstraint()) {
|
reportUnsupportedClassObjectConstraint(trace, constraint);
|
||||||
trace.report(UNSUPPORTED.on(constraint, "Class objects constraints are not supported yet"));
|
|
||||||
}
|
|
||||||
|
|
||||||
JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName();
|
JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName();
|
||||||
if (subjectTypeParameterName == null) {
|
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(
|
private static void checkUpperBoundType(
|
||||||
JetTypeReference upperBound,
|
JetTypeReference upperBound,
|
||||||
JetType upperBoundType,
|
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.descriptors.impl.AbstractLazyTypeParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
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.ForceResolveUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
|
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
|
||||||
@@ -64,7 +65,7 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
|
|||||||
|
|
||||||
JetTypeParameter jetTypeParameter = this.jetTypeParameter;
|
JetTypeParameter jetTypeParameter = this.jetTypeParameter;
|
||||||
|
|
||||||
resolveUpperBoundsFromWhereClause(upperBounds, false);
|
resolveUpperBoundsFromWhereClause(upperBounds);
|
||||||
|
|
||||||
JetTypeReference extendsBound = jetTypeParameter.getExtendsBound();
|
JetTypeReference extendsBound = jetTypeParameter.getExtendsBound();
|
||||||
if (extendsBound != null) {
|
if (extendsBound != null) {
|
||||||
@@ -78,12 +79,12 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
|
|||||||
return upperBounds;
|
return upperBounds;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resolveUpperBoundsFromWhereClause(Set<JetType> upperBounds, boolean forClassObject) {
|
private void resolveUpperBoundsFromWhereClause(Set<JetType> upperBounds) {
|
||||||
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(jetTypeParameter, JetClassOrObject.class);
|
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(jetTypeParameter, JetClassOrObject.class);
|
||||||
if (classOrObject instanceof JetClass) {
|
if (classOrObject instanceof JetClass) {
|
||||||
JetClass jetClass = (JetClass) classOrObject;
|
JetClass jetClass = (JetClass) classOrObject;
|
||||||
for (JetTypeConstraint jetTypeConstraint : jetClass.getTypeConstraints()) {
|
for (JetTypeConstraint jetTypeConstraint : jetClass.getTypeConstraints()) {
|
||||||
if (jetTypeConstraint.isClassObjectConstraint() != forClassObject) continue;
|
DescriptorResolver.reportUnsupportedClassObjectConstraint(resolveSession.getTrace(), jetTypeConstraint);
|
||||||
|
|
||||||
JetSimpleNameExpression constrainedParameterName = jetTypeConstraint.getSubjectTypeParameterName();
|
JetSimpleNameExpression constrainedParameterName = jetTypeConstraint.getSubjectTypeParameterName();
|
||||||
if (constrainedParameterName != null) {
|
if (constrainedParameterName != null) {
|
||||||
@@ -91,7 +92,10 @@ public class LazyTypeParameterDescriptor extends AbstractLazyTypeParameterDescri
|
|||||||
|
|
||||||
JetTypeReference boundTypeReference = jetTypeConstraint.getBoundTypeReference();
|
JetTypeReference boundTypeReference = jetTypeConstraint.getBoundTypeReference();
|
||||||
if (boundTypeReference != null) {
|
if (boundTypeReference != null) {
|
||||||
upperBounds.add(resolveBoundType(boundTypeReference));
|
JetType boundType = resolveBoundType(boundTypeReference);
|
||||||
|
if (!jetTypeConstraint.isClassObjectConstraint()) {
|
||||||
|
upperBounds.add(boundType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user