mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-completion] IDEA-369850 'int' is unexpectedly suggested in 'instanceof' position inside lambda
GitOrigin-RevId: f654be030cc13609bbe54ea2d1659a7dfadcfe4b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
4399d6449c
commit
082b86a84a
@@ -1238,12 +1238,12 @@ public class JavaKeywordCompletion {
|
||||
boolean declaration = isDeclarationStart(position);
|
||||
boolean expressionPosition = isExpressionPosition(position);
|
||||
boolean inGenerics = PsiTreeUtil.getParentOfType(position, PsiReferenceParameterList.class) != null;
|
||||
if (isVariableTypePosition(position) ||
|
||||
if ((isVariableTypePosition(position) ||
|
||||
inGenerics ||
|
||||
inCast ||
|
||||
declaration ||
|
||||
typeFragment ||
|
||||
expressionPosition) {
|
||||
expressionPosition) && primitivesAreExpected(position)) {
|
||||
for (String primitiveType : PRIMITIVE_TYPES) {
|
||||
if (!session.isKeywordAlreadyProcessed(primitiveType)) {
|
||||
result.consume(BasicExpressionCompletionContributor.createKeywordLookupItem(position, primitiveType));
|
||||
@@ -1262,6 +1262,22 @@ public class JavaKeywordCompletion {
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean primitivesAreExpected(@Nullable PsiElement position) {
|
||||
if (position == null) return false;
|
||||
PsiElement parent = position.getParent();
|
||||
//example: stream.map(i-> i <caret>)
|
||||
if (parent.getParent() instanceof PsiExpressionList) {
|
||||
PsiElement previous = PsiTreeUtil.prevVisibleLeaf(parent);
|
||||
if (previous != null) {
|
||||
PsiExpression expression = PsiTreeUtil.getParentOfType(previous, PsiExpression.class, true);
|
||||
if (expression != null && !PsiTreeUtil.isAncestor(expression, parent, true)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the given PsiElement is in a position where it occurs after a case keyword for a specific type.
|
||||
* <p>
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> i in<caret>)
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> (i in<caret>))
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> (i instanceof ))
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> i instanceof Integer && i in<caret>))
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> i instanceof Integer && i instanceof ))
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> call(null) && i in<caret>
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> call(null) && i instanceof <caret>
|
||||
}
|
||||
}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class AA {
|
||||
IntStream distinct2(Stream<Object> a) {
|
||||
return a.map(i-> i instanceof )
|
||||
}
|
||||
}
|
||||
+8
@@ -312,6 +312,14 @@ public class KeywordCompletionTest extends LightCompletionTestCase {
|
||||
assertNotContainItems("package");
|
||||
}
|
||||
|
||||
public void testNoPrimitivesAfterExpressions() { doTest(); }
|
||||
|
||||
public void testNoPrimitivesAfterExpressions2() { doTest(); }
|
||||
|
||||
public void testNoPrimitivesAfterExpressions3() { doTest(); }
|
||||
|
||||
public void testNoPrimitivesAfterExpressions4() { doTest(); }
|
||||
|
||||
private void doTest() {
|
||||
configureByTestName();
|
||||
checkResultByTestName();
|
||||
|
||||
Reference in New Issue
Block a user