diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java index 08e03e813ba..126c6e9cdc6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassDescriptorResolver.java @@ -106,6 +106,16 @@ public class ClassDescriptorResolver { JetTypeReference typeReference = delegationSpecifier.getTypeReference(); if (typeReference != null) { result.add(resolver.resolveType(extensibleScope, typeReference)); + JetTypeElement typeElement = typeReference.getTypeElement(); + if (typeElement instanceof JetUserType) { + JetUserType userType = (JetUserType) typeElement; + List typeArguments = userType.getTypeArguments(); + for (JetTypeProjection typeArgument : typeArguments) { + if (typeArgument.getProjectionKind() != JetProjectionKind.NONE) { + trace.getErrorHandler().genericError(typeArgument.getProjectionNode(), "Projections are not allowed for immediate arguments of a supertype"); + } + } + } } else { result.add(ErrorUtils.createErrorType("No type reference")); diff --git a/idea/testData/checker/ProjectionsInSupertypes.jet b/idea/testData/checker/ProjectionsInSupertypes.jet new file mode 100644 index 00000000000..2bf472b3f43 --- /dev/null +++ b/idea/testData/checker/ProjectionsInSupertypes.jet @@ -0,0 +1,6 @@ +trait A {} +trait B {} +trait C {} +trait D {} + +trait Test : A<in Int>, B<out T>, C<*>, D {} \ No newline at end of file