diff --git a/java/java-psi-impl/src/com/intellij/lang/java/parser/DeclarationParser.java b/java/java-psi-impl/src/com/intellij/lang/java/parser/DeclarationParser.java
index 0b1dcb4b6504..7810e3132937 100644
--- a/java/java-psi-impl/src/com/intellij/lang/java/parser/DeclarationParser.java
+++ b/java/java-psi-impl/src/com/intellij/lang/java/parser/DeclarationParser.java
@@ -4,6 +4,7 @@ package com.intellij.lang.java.parser;
import com.intellij.codeInsight.daemon.JavaErrorMessages;
import com.intellij.lang.PsiBuilder;
import com.intellij.openapi.util.Pair;
+import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.impl.source.tree.JavaElementType;
@@ -587,7 +588,9 @@ public class DeclarationParser {
@Nullable
public PsiBuilder.Marker parseLambdaParameter(PsiBuilder builder, boolean typed) {
- return parseListElement(builder, typed, ReferenceParser.ELLIPSIS, false);
+ int flags = ReferenceParser.ELLIPSIS;
+ if (getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_X)) flags |= ReferenceParser.VAR_TYPE;
+ return parseListElement(builder, typed, flags, false);
}
@Nullable
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/SimpleAvailability.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/SimpleAvailability.java
index bc0ebdf7e68f..ae255007e6eb 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/SimpleAvailability.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/SimpleAvailability.java
@@ -1,11 +1,12 @@
+import java.util.function.Function;
class Main {
private static void localVariableDeclaration() {
var a = 1;
var b = 2, c = 3.0;
var d[] = new int[4];
- var d1 = new int[] {4};
- var d2 = new int[4];
+ var d1 = new int[] {4};
+ var d2 = new int[4];
var e;
var f = { 6 };
var g = (g = 7);
@@ -30,9 +31,11 @@ class Main {
var m = Main::localVariableDeclaration;
var g = null;
var runnable = true ? () -> {} : () -> {};
+
+ Function f1 = (var var) -> var;
}
- private void forEachType(String[] strs, Iterable it, Iterable raw) {
+ private void forEachType(String[] strs, Iterable it, Iterable raw) {
for (var str : strs) {
String s = str;
}
@@ -56,6 +59,5 @@ class Main {
private void tryWithResources(AutoCloseable c) throws Exception {
try (var v = null) { }
try (var v = c; var v1 = c) { }
-
}
-}
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarInLambdaParameters.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarInLambdaParameters.java
new file mode 100644
index 000000000000..f2bcf7951f20
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/VarInLambdaParameters.java
@@ -0,0 +1,7 @@
+import java.util.function.Function;
+
+class C {
+ void m() {
+ Function f = (var var) -> var;
+ }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression24.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression24.txt
new file mode 100644
index 000000000000..e1fbe6cdd051
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression24.txt
@@ -0,0 +1,14 @@
+PsiJavaFile:LambdaExpression24.java
+ PsiLambdaExpression
+ PsiParameterList:var
+ PsiParameter:var
+ PsiModifierList:
+
+ PsiIdentifier:var('var')
+ PsiWhiteSpace(' ')
+ PsiJavaToken:ARROW('->')
+ PsiWhiteSpace(' ')
+ PsiReferenceExpression:var
+ PsiReferenceParameterList
+
+ PsiIdentifier:var('var')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression25.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression25.txt
new file mode 100644
index 000000000000..6ff11d2294ae
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression25.txt
@@ -0,0 +1,16 @@
+PsiJavaFile:LambdaExpression25.java
+ PsiLambdaExpression
+ PsiParameterList:(var)
+ PsiJavaToken:LPARENTH('(')
+ PsiParameter:var
+ PsiModifierList:
+
+ PsiIdentifier:var('var')
+ PsiJavaToken:RPARENTH(')')
+ PsiWhiteSpace(' ')
+ PsiJavaToken:ARROW('->')
+ PsiWhiteSpace(' ')
+ PsiReferenceExpression:var
+ PsiReferenceParameterList
+
+ PsiIdentifier:var('var')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression26.txt b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression26.txt
new file mode 100644
index 000000000000..03b77d51c3ca
--- /dev/null
+++ b/java/java-tests/testData/psi/parser-partial/expressions/LambdaExpression26.txt
@@ -0,0 +1,19 @@
+PsiJavaFile:LambdaExpression26.java
+ PsiLambdaExpression
+ PsiParameterList:(var var)
+ PsiJavaToken:LPARENTH('(')
+ PsiParameter:var
+ PsiModifierList:
+
+ PsiTypeElement:var
+ PsiKeyword:var('var')
+ PsiWhiteSpace(' ')
+ PsiIdentifier:var('var')
+ PsiJavaToken:RPARENTH(')')
+ PsiWhiteSpace(' ')
+ PsiJavaToken:ARROW('->')
+ PsiWhiteSpace(' ')
+ PsiReferenceExpression:var
+ PsiReferenceParameterList
+
+ PsiIdentifier:var('var')
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java
index ec43b93d3f0d..76dcc4fd6c7f 100644
--- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java
@@ -3,11 +3,14 @@ package com.intellij.java.codeInsight.daemon;
import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
import com.intellij.codeInspection.AnonymousCanBeLambdaInspection;
+import com.intellij.idea.Bombed;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.testFramework.IdeaTestUtil;
+import java.util.Calendar;
+
public class LightAdvLVTIHighlightingTest extends LightDaemonAnalyzerTestCase {
private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/advLVTI";
@@ -23,16 +26,24 @@ public class LightAdvLVTIHighlightingTest extends LightDaemonAnalyzerTestCase {
}
public void testSimpleAvailability() { doTest(); }
+
public void testDisabledInspections() {
enableInspectionTool(new AnonymousCanBeLambdaInspection());
doTest(BASE_PATH + "/" + getTestName(false) + ".java", true, false);
}
+
public void testVarClassNameConflicts() { doTest(); }
public void testStandaloneInVarContext() { doTest(); }
public void testUpwardProjection() { doTest(); }
+ @Bombed(user = "anna", day = 12, month = Calendar.MARCH)
+ public void testVarInLambdaParameters() {
+ setLanguageLevel(LanguageLevel.JDK_X);
+ doTest();
+ }
+
@Override
protected Sdk getProjectJDK() {
return IdeaTestUtil.getMockJdk9();
}
-}
+}
\ No newline at end of file
diff --git a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java
index c58997590aec..6ed647fe71c4 100644
--- a/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/parser/partial/ExpressionParserTest.java
@@ -1,18 +1,4 @@
-/*
- * Copyright 2000-2017 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.java.parser.partial;
import com.intellij.java.parser.JavaParsingTestCase;
@@ -153,6 +139,9 @@ public class ExpressionParserTest extends JavaParsingTestCase {
public void testLambdaExpression21() { doParserTest("(T @A() [] x) -> { }"); }
public void testLambdaExpression22() { doParserTest("(T x @A() []) -> { }"); }
public void testLambdaExpression23() { doParserTest("(T... t) -> t.length"); }
+ public void testLambdaExpression24() { doParserTest("var -> var"); }
+ public void testLambdaExpression25() { doParserTest("(var) -> var"); }
+ public void testLambdaExpression26() { doParserTest("(var var) -> var"); }
public void testAmbiguousLambdaExpression() { doParserTest("f( (x) < y , z > (w) -> v )"); }
private void doParserTest(String text) {