From ea249244c5a5225d29407488d6a99e5ea2f3d059 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 3 Jun 2016 16:45:36 +0300 Subject: [PATCH] 'where' clause in type alias declaration is a syntax error (type alias parameters can't have bounds) --- .../src/org/jetbrains/kotlin/parsing/KotlinParsing.java | 7 +++++-- .../diagnostics/tests/typealias/parameterRestrictions.kt | 2 ++ .../diagnostics/tests/typealias/parameterRestrictions.txt | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParsing.java b/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParsing.java index 46cf26a43bb..a910a6c95ff 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParsing.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/KotlinParsing.java @@ -1195,9 +1195,12 @@ public class KotlinParsing extends AbstractKotlinParsing { expect(IDENTIFIER, "Type name expected", TokenSet.orSet(TokenSet.create(LT, EQ, SEMICOLON), TOP_LEVEL_DECLARATION_FIRST)); - // TODO drop type constraints parsing - if (parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET)) { + parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET); + + if (at(WHERE_KEYWORD)) { + PsiBuilder.Marker error = mark(); parseTypeConstraints(); + error.error("Type alias parameters can't have bounds"); } expect(EQ, "Expecting '='", TokenSet.orSet(TOP_LEVEL_DECLARATION_FIRST, TokenSet.create(SEMICOLON))); diff --git a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.kt b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.kt index 47d92ce185f..cf1d2a3191f 100644 --- a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.kt +++ b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.kt @@ -2,4 +2,6 @@ typealias WithVariance<in X, T> = Int typealias WithBounds2Y, Y : X> = Int +typealias WithBounds3 where X : Any = Int + val x: WithVariance = 0 diff --git a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.txt b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.txt index 792f31eb984..88a6445fa46 100644 --- a/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.txt +++ b/compiler/testData/diagnostics/tests/typealias/parameterRestrictions.txt @@ -2,5 +2,6 @@ package public typealias WithBounds1 = kotlin.Int public typealias WithBounds2 = kotlin.Int +public typealias WithBounds3 = kotlin.Int public typealias WithVariance = kotlin.Int public val x: WithVariance [= kotlin.Int] = 0