From da4d8a8c9046659433bf2bce1840ff13ec2f2589 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Fri, 5 Apr 2019 15:44:10 +0300 Subject: [PATCH] Parser invalid error advancing for postfix type parameters list #KT-30835 Fixed --- .../psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java | 4 ++-- compiler/testData/psi/Functions_ERR.txt | 5 ++--- idea/testData/checker/FunctionOnlyOneTypeParametersList.kt | 1 + .../jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java | 5 +++++ 4 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 idea/testData/checker/FunctionOnlyOneTypeParametersList.kt diff --git a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java index 1e1a020a354..a9e5edff957 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java +++ b/compiler/psi/src/org/jetbrains/kotlin/parsing/KotlinParsing.java @@ -1576,10 +1576,10 @@ public class KotlinParsing extends AbstractKotlinParsing { PsiBuilder.Marker error = mark(); parseTypeParameterList(TokenSet.orSet(TokenSet.create(LPAR), valueParametersFollow)); if (typeParameterListOccurred) { - int offset = myBuilder.getCurrentOffset(); + int finishIndex = myBuilder.rawTokenIndex(); error.rollbackTo(); error = mark(); - advance(offset - myBuilder.getCurrentOffset()); + advance(finishIndex - myBuilder.rawTokenIndex()); error.error("Only one type parameter list is allowed for a function"); } else { diff --git a/compiler/testData/psi/Functions_ERR.txt b/compiler/testData/psi/Functions_ERR.txt index cbbae0b6dc0..5b05fc3ccf6 100644 --- a/compiler/testData/psi/Functions_ERR.txt +++ b/compiler/testData/psi/Functions_ERR.txt @@ -370,7 +370,6 @@ KtFile: Functions_ERR.kt PsiErrorElement:Only one type parameter list is allowed for a function PsiElement(LT)('<') PsiElement(IDENTIFIER)('foo') + VALUE_PARAMETER_LIST PsiElement(LPAR)('(') - PsiElement(RPAR)(')') - PsiErrorElement:Expecting '(' - \ No newline at end of file + PsiElement(RPAR)(')') \ No newline at end of file diff --git a/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt b/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt new file mode 100644 index 00000000000..82237028c54 --- /dev/null +++ b/idea/testData/checker/FunctionOnlyOneTypeParametersList.kt @@ -0,0 +1 @@ +fun foo () {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java index 6ceabff1cd8..f3e06c5e2c5 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/checkers/PsiCheckerTestGenerated.java @@ -126,6 +126,11 @@ public class PsiCheckerTestGenerated extends AbstractPsiCheckerTest { runTest("idea/testData/checker/ForRangeConventions.kt"); } + @TestMetadata("FunctionOnlyOneTypeParametersList.kt") + public void testFunctionOnlyOneTypeParametersList() throws Exception { + runTest("idea/testData/checker/FunctionOnlyOneTypeParametersList.kt"); + } + @TestMetadata("FunctionReturnTypes.kt") public void testFunctionReturnTypes() throws Exception { runTest("idea/testData/checker/FunctionReturnTypes.kt");