From 2a82c154651db745b11ab6bf0f9a1cf23ffc69c6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 5 Mar 2014 17:28:20 +0400 Subject: [PATCH] Report UNSUPPORTED on class object constraints in lazy resolve --- .../jet/lang/resolve/DescriptorResolver.java | 10 +++++++--- .../descriptors/LazyTypeParameterDescriptor.java | 12 ++++++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index f67e5db9068..55e4a02dd78 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -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, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java index 1b7d5fbac02..dec7d1ffb3c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyTypeParameterDescriptor.java @@ -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 upperBounds, boolean forClassObject) { + private void resolveUpperBoundsFromWhereClause(Set 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); + } } } }