diff --git a/java/java-psi-impl/src/com/intellij/lang/java/parser/StatementParser.java b/java/java-psi-impl/src/com/intellij/lang/java/parser/StatementParser.java
index ead25c8c7369..7f94cf0682f7 100644
--- a/java/java-psi-impl/src/com/intellij/lang/java/parser/StatementParser.java
+++ b/java/java-psi-impl/src/com/intellij/lang/java/parser/StatementParser.java
@@ -265,47 +265,9 @@ public class StatementParser {
}
private static boolean isStmtYieldToken(@NotNull PsiBuilder builder, IElementType tokenType) {
- if (!(tokenType == JavaTokenType.IDENTIFIER &&
- PsiKeyword.YIELD.equals(builder.getTokenText()) &&
- getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_14))) {
- return false;
- }
- IElementType next = builder.lookAhead(1);
- if (YIELD_EXPR_INDICATOR_TOKENS.contains(next)) return false;
- // yield () -> 10; is valid
- // yield(); is not
- if (isSemiAfterBalancedParensNext(builder)) return false;
- return !JavaTokenType.PLUSPLUS.equals(next) && !JavaTokenType.MINUSMINUS.equals(next) ||
- !JavaTokenType.SEMICOLON.equals(builder.lookAhead(2));
- }
-
- private static boolean isSemiAfterBalancedParensNext(@NotNull PsiBuilder builder) {
- PsiBuilder.Marker maybeYieldCall = builder.mark();
- boolean result = isSemiAfterBalancedParensNextInternal(builder);
- maybeYieldCall.rollbackTo();
- return result;
- }
-
- private static boolean isSemiAfterBalancedParensNextInternal(@NotNull PsiBuilder builder) {
- builder.advanceLexer(); // skip yield ref
- if (!expect(builder, JavaTokenType.LPARENTH)) return false;
- int unbalancedLpars = 1;
- while (true) {
- final IElementType token = builder.getTokenType();
- if (token == null) return false;
- if (token == JavaTokenType.RPARENTH) {
- unbalancedLpars--;
- }
- if (token == JavaTokenType.LPARENTH) {
- unbalancedLpars++;
- }
- if (unbalancedLpars == 0) {
- break;
- }
- builder.advanceLexer();
- }
- builder.advanceLexer();
- return builder.getTokenType() == JavaTokenType.SEMICOLON;
+ return tokenType == JavaTokenType.IDENTIFIER &&
+ PsiKeyword.YIELD.equals(builder.getTokenText()) &&
+ getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_14);
}
private static void skipQualifiedName(PsiBuilder builder) {
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/switchExpressions/YieldStatements.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/switchExpressions/YieldStatements.java
index 7c382642b380..41c0c395c427 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/switchExpressions/YieldStatements.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/switchExpressions/YieldStatements.java
@@ -14,7 +14,7 @@ class YieldStatements {
case 1 -> { while (true) yield ref; }
case 2 -> { while (true) break wtf; }
case 3 -> { yield ref; }
- case 4 -> { yield (ref); }
+ case 4 -> { yield (ref); }
case 5 -> { break wtf; }
case 6 -> {
int a = 0;
diff --git a/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualified.txt b/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualified.txt
index 219da4746fc3..f7c9c0fe79aa 100644
--- a/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualified.txt
+++ b/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualified.txt
@@ -1,11 +1,9 @@
PsiJavaFile:YieldCallNonQualified.java
- PsiExpressionStatement
- PsiMethodCallExpression:yield()
- PsiReferenceExpression:yield
- PsiReferenceParameterList
-
- PsiIdentifier:yield('yield')
- PsiExpressionList
- PsiJavaToken:LPARENTH('(')
- PsiJavaToken:RPARENTH(')')
+ PsiYieldStatement
+ PsiKeyword:yield('yield')
+ PsiParenthesizedExpression:()
+ PsiJavaToken:LPARENTH('(')
+ PsiErrorElement:Expression expected
+
+ PsiJavaToken:RPARENTH(')')
PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualifiedWithLambda.txt b/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualifiedWithLambda.txt
index 720ae40b8175..c3fe2e981b31 100644
--- a/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualifiedWithLambda.txt
+++ b/java/java-tests/testData/psi/parser-partial/statements/YieldCallNonQualifiedWithLambda.txt
@@ -1,21 +1,17 @@
PsiJavaFile:YieldCallNonQualifiedWithLambda.java
- PsiExpressionStatement
- PsiMethodCallExpression:yield(() -> {})
- PsiReferenceExpression:yield
- PsiReferenceParameterList
-
- PsiIdentifier:yield('yield')
- PsiExpressionList
- PsiJavaToken:LPARENTH('(')
- PsiLambdaExpression
- PsiParameterList:()
- PsiJavaToken:LPARENTH('(')
- PsiJavaToken:RPARENTH(')')
- PsiWhiteSpace(' ')
- PsiJavaToken:ARROW('->')
- PsiWhiteSpace(' ')
- PsiCodeBlock
- PsiJavaToken:LBRACE('{')
- PsiJavaToken:RBRACE('}')
- PsiJavaToken:RPARENTH(')')
+ PsiYieldStatement
+ PsiKeyword:yield('yield')
+ PsiParenthesizedExpression:(() -> {})
+ PsiJavaToken:LPARENTH('(')
+ PsiLambdaExpression
+ PsiParameterList:()
+ PsiJavaToken:LPARENTH('(')
+ PsiJavaToken:RPARENTH(')')
+ PsiWhiteSpace(' ')
+ PsiJavaToken:ARROW('->')
+ PsiWhiteSpace(' ')
+ PsiCodeBlock
+ PsiJavaToken:LBRACE('{')
+ PsiJavaToken:RBRACE('}')
+ PsiJavaToken:RPARENTH(')')
PsiJavaToken:SEMICOLON(';')
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/psi/JavaPsiTest.groovy b/java/java-tests/testSrc/com/intellij/java/psi/JavaPsiTest.groovy
index ebe0455ceccb..f364765a280b 100644
--- a/java/java-tests/testSrc/com/intellij/java/psi/JavaPsiTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/java/psi/JavaPsiTest.groovy
@@ -112,16 +112,6 @@ class JavaPsiTest extends LightJavaCodeInsightFixtureTestCase {
PsiTestUtil.checkPsiMatchesTextIgnoringNonCode(file)
}
- void "test yield method is consistent"() {
- def file = configureFile("class A{ void m() { Thread.yield();}}")
- runCommand {
- def statement = file.classes.first().methods.first().getBody().statements.first() as PsiExpressionStatement
- def reference = statement.expression as PsiMethodCallExpression
- reference.methodExpression.qualifier.delete()
- }
- PsiTestUtil.checkPsiMatchesTextIgnoringNonCode(file)
- }
-
void testTextBlockLiteralValue() {
def file = configureFile("""
class C {
diff --git a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterSpaceTest.java b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterSpaceTest.java
index 74df93ca12c3..95181687b19c 100644
--- a/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterSpaceTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaFormatterSpaceTest.java
@@ -763,7 +763,7 @@ public class JavaFormatterSpaceTest extends AbstractJavaFormatterTest {
" case 4: yield ;\n" +
"}",
"String s = switch (i) {\n" +
- " case 0: yield(foo);\n" +
+ " case 0: yield (foo);\n" +
" case 1: yield 42;\n" +
" case 3: yield label;\n" +
" case 4: yield ;\n" +