[groovy] IDEA-278455: Fix parsing tests

GitOrigin-RevId: cf20544bc6452cc07b5d24e6abb0c76bc3b2dec2
This commit is contained in:
Konstantin Nisht
2021-10-14 19:07:54 +03:00
committed by intellij-monorepo-bot
parent a4df9c9821
commit 70e2b5be51
21 changed files with 257 additions and 13 deletions

View File

@@ -27,7 +27,7 @@ class GrUnnecessaryDefModifierInspection : GrUnnecessaryModifierInspection("def"
}
override fun isRedundant(element: PsiElement): Boolean {
val modifierList = element as? GrModifierList ?: return false
val modifierList = element.parent as? GrModifierList ?: return false
return isModifierUnnecessary(modifierList)
}

View File

@@ -82,7 +82,7 @@ private val forbidLambdaExpression: Key<Boolean> = Key.create("groovy.parse.defe
private val compactConstructors: Key<Boolean> = Key.create("groovy.parse.contracted.constructors")
fun classIdentifier(builder: PsiBuilder, level: Int): Boolean {
if (builder.tokenType === IDENTIFIER) {
if (builder.tokenType === IDENTIFIER || builder.tokenType === KW_RECORD) {
builder[currentClassNames]!!.push(builder.tokenText)
builder.advanceLexer()
return true

View File

@@ -0,0 +1,21 @@
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.groovy.lang.parser
class RecordParsingTest extends GroovyParsingTestCase {
@Override
String getBasePath() {
return super.basePath + "types/record"
}
void testRecord1() { doTest() }
void testRecord2() { doTest() }
void testRecord3() { doTest() }
void testRecord4() { doTest() }
void testRecord5() { doTest() }
void testRecord6() { doTest() }
}

View File

@@ -7,6 +7,7 @@ interface
package
protected
public
record
static
strictfp
switch

View File

@@ -16,6 +16,7 @@ interface
long
native
non-sealed
record
sealed
short
static

View File

@@ -19,6 +19,7 @@ non-sealed
private
protected
public
record
sealed
short
static

View File

@@ -7,4 +7,5 @@ class
default
enum
interface
record
trait

View File

@@ -29,6 +29,7 @@ package
private
protected
public
record
return
sealed
short

View File

@@ -26,6 +26,7 @@ package
private
protected
public
record
return
sealed
short

View File

@@ -22,6 +22,7 @@ non-sealed
private
protected
public
record
sealed
short
static

View File

@@ -35,6 +35,7 @@ package
private
protected
public
record
return
sealed
short

View File

@@ -29,6 +29,7 @@ non-sealed
private
protected
public
record
sealed
short
static

View File

@@ -36,6 +36,7 @@ null
private
protected
public
record
return
sealed
short

View File

@@ -28,6 +28,7 @@ non-sealed
private
protected
public
record
sealed
short
static

View File

@@ -0,0 +1,18 @@
record A() {}
-----
Groovy script
Class definition
Modifiers
<empty list>
PsiElement(record)('record')
PsiWhiteSpace(' ')
PsiElement(identifier)('A')
Parameter list
PsiElement(()('(')
PsiElement())(')')
Implements clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiElement(})('}')

View File

@@ -0,0 +1,39 @@
record A(int a, String b) implements C {}
-----
Groovy script
Class definition
Modifiers
<empty list>
PsiElement(record)('record')
PsiWhiteSpace(' ')
PsiElement(identifier)('A')
Parameter list
PsiElement(()('(')
Parameter
Modifiers
<empty list>
Built in type
PsiElement(int)('int')
PsiWhiteSpace(' ')
PsiElement(identifier)('a')
PsiElement(,)(',')
PsiWhiteSpace(' ')
Parameter
Modifiers
<empty list>
Type element
Reference element
PsiElement(identifier)('String')
PsiWhiteSpace(' ')
PsiElement(identifier)('b')
PsiElement())(')')
PsiWhiteSpace(' ')
Implements clause
PsiElement(implements)('implements')
PsiWhiteSpace(' ')
Reference element
PsiElement(identifier)('C')
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiElement(})('}')

View File

@@ -0,0 +1,21 @@
public final record A() {}
-----
Groovy script
Class definition
Modifiers
PsiElement(public)('public')
PsiWhiteSpace(' ')
PsiElement(final)('final')
PsiWhiteSpace(' ')
PsiElement(record)('record')
PsiWhiteSpace(' ')
PsiElement(identifier)('A')
Parameter list
PsiElement(()('(')
PsiElement())(')')
Implements clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiElement(})('}')

View File

@@ -0,0 +1,52 @@
class record {}
def record() {}
record record() {}
-----
Groovy script
Class definition
Modifiers
<empty list>
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(record)('record')
Extends clause
<empty list>
Implements clause
<empty list>
Permits clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiElement(})('}')
PsiElement(new line)('\n')
Method
Modifiers
PsiElement(def)('def')
PsiWhiteSpace(' ')
PsiElement(record)('record')
Parameter list
PsiElement(()('(')
PsiElement())(')')
Throw clause
<empty list>
PsiWhiteSpace(' ')
Open block
PsiElement({)('{')
PsiElement(})('}')
PsiElement(new line)('\n')
Class definition
Modifiers
<empty list>
PsiElement(record)('record')
PsiWhiteSpace(' ')
PsiElement(record)('record')
Parameter list
PsiElement(()('(')
PsiElement())(')')
Implements clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiElement(})('}')

View File

@@ -0,0 +1,37 @@
record A() {
A {
}
}
-----
Groovy script
Class definition
Modifiers
<empty list>
PsiElement(record)('record')
PsiWhiteSpace(' ')
PsiElement(identifier)('A')
Parameter list
PsiElement(()('(')
PsiElement())(')')
Implements clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiWhiteSpace('\n ')
Constructor
Modifiers
<empty list>
PsiElement(identifier)('A')
PsiWhiteSpace(' ')
Parameter list
<empty list>
Throw clause
<empty list>
Open block
PsiElement({)('{')
PsiWhiteSpace('\n\n ')
PsiElement(})('}')
PsiElement(new line)('\n')
PsiElement(})('}')

View File

@@ -0,0 +1,42 @@
class A {
A {
}
}
-----
Groovy script
Class definition
Modifiers
<empty list>
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(identifier)('A')
Extends clause
<empty list>
Implements clause
<empty list>
Permits clause
<empty list>
PsiWhiteSpace(' ')
Type definition body
PsiElement({)('{')
PsiWhiteSpace('\n ')
Modifiers
<empty list>
PsiErrorElement:';', new line or '}' expected, got 'A'
<empty list>
Method call
Reference expression
PsiElement(identifier)('A')
PsiWhiteSpace(' ')
Arguments
<empty list>
Closable block
PsiElement({)('{')
PsiWhiteSpace('\n\n ')
Parameter list
<empty list>
PsiElement(})('}')
PsiElement(new line)('\n')
PsiErrorElement:';', <statement> or new line expected, got '}'
PsiElement(})('}')

View File

@@ -13,16 +13,19 @@ Groovy script
PsiErrorElement:'{' expected, got 'permits'
<empty list>
PsiWhiteSpace(' ')
PsiElement(permits)('permits')
PsiWhiteSpace(' ')
Method call
Call expression
Reference expression
PsiElement(identifier)('B')
PsiElement(permits)('permits')
PsiWhiteSpace(' ')
Arguments
<empty list>
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')
Command arguments
Method call
Reference expression
PsiElement(identifier)('B')
PsiWhiteSpace(' ')
Arguments
<empty list>
Closable block
PsiElement({)('{')
Parameter list
<empty list>
PsiElement(})('}')