Java parser: parse var.Foo like types: IDEA-245625

GitOrigin-RevId: 5578e851b72cbb0040597563681d59eaec4b3793
This commit is contained in:
Roman Ivanov
2020-07-22 16:38:08 +02:00
committed by intellij-monorepo-bot
parent 70bd695866
commit 587d13ea9e
7 changed files with 72 additions and 9 deletions

View File

@@ -90,6 +90,7 @@ public class ReferenceParser {
IElementType tokenType = builder.getTokenType();
if (tokenType == JavaTokenType.IDENTIFIER &&
isSet(flags, VAR_TYPE) &&
builder.lookAhead(1) != JavaTokenType.DOT &&
PsiKeyword.VAR.equals(builder.getTokenText()) &&
getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_10)) {
builder.remapCurrentToken(tokenType = JavaTokenType.VAR_KEYWORD);

View File

@@ -0,0 +1,5 @@
class Test {
{
var.Foo x = f();
}
}

View File

@@ -0,0 +1,56 @@
PsiJavaFile:VarPackage.java
PsiImportList
<empty list>
PsiClass:Test
PsiModifierList:
<empty list>
PsiKeyword:class('class')
PsiWhiteSpace(' ')
PsiIdentifier:Test('Test')
PsiTypeParameterList
<empty list>
PsiReferenceList
<empty list>
PsiReferenceList
<empty list>
PsiWhiteSpace(' ')
PsiJavaToken:LBRACE('{')
PsiWhiteSpace('\n ')
PsiClassInitializer
PsiModifierList:
<empty list>
PsiCodeBlock
PsiJavaToken:LBRACE('{')
PsiWhiteSpace('\n ')
PsiDeclarationStatement
PsiLocalVariable:x
PsiModifierList:
<empty list>
PsiTypeElement:var.Foo
PsiJavaCodeReferenceElement:var.Foo
PsiJavaCodeReferenceElement:var
PsiIdentifier:var('var')
PsiReferenceParameterList
<empty list>
PsiJavaToken:DOT('.')
PsiIdentifier:Foo('Foo')
PsiReferenceParameterList
<empty list>
PsiWhiteSpace(' ')
PsiIdentifier:x('x')
PsiWhiteSpace(' ')
PsiJavaToken:EQ('=')
PsiWhiteSpace(' ')
PsiMethodCallExpression:f()
PsiReferenceExpression:f
PsiReferenceParameterList
<empty list>
PsiIdentifier:f('f')
PsiExpressionList
PsiJavaToken:LPARENTH('(')
PsiJavaToken:RPARENTH(')')
PsiJavaToken:SEMICOLON(';')
PsiWhiteSpace('\n ')
PsiJavaToken:RBRACE('}')
PsiWhiteSpace('\n')
PsiJavaToken:RBRACE('}')

View File

@@ -0,0 +1,7 @@
import java.util.*;
class Test {
void test(var.X foo) {
var.X temp = foo;
test(temp);
}
}

View File

@@ -26,4 +26,5 @@ public class CommonJavaParsingTest extends JavaParsingTestCase{
public void testRefParamsAfterError() { doTest(true); }
public void testUnclosedComment() { doTest(true); }
public void testIncompleteFor() { doTest(true); }
public void testVarPackage() { doTest(true); }
}

View File

@@ -159,15 +159,8 @@ public class IntroduceVariableTest extends LightJavaCodeInsightTestCase {
doTestWithVarType(new MockIntroduceVariableHandler("temp", true, false, false, "java.util.ArrayList<java.lang.String>"));
}
public void testInvalidTypeContainingVarJava11() {
try {
doTest("temp", true, false, false, "var.X");
}
catch (Exception e) {
assertEquals("Error message:Cannot perform refactoring.\nUnknown expression type.", e.getMessage());
return;
}
fail("Should not be able to perform refactoring");
public void testTypeContainingVarJava11() {
doTest("temp", true, false, false, "var.X");
}
public void testDeclareTernary() { doTest("temp", true, false, false, JAVA_LANG_STRING); }