mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-57674 (parameterized explicit constructor call)
This commit is contained in:
@@ -59,6 +59,7 @@ public class ExpressionParser {
|
||||
private static final TokenSet ARGS_LIST_END = TokenSet.create(JavaTokenType.RPARENTH, JavaTokenType.RBRACE, JavaTokenType.RBRACKET);
|
||||
private static final TokenSet ARGS_LIST_CONTINUE = TokenSet.create(
|
||||
JavaTokenType.IDENTIFIER, TokenType.BAD_CHARACTER, JavaTokenType.COMMA, JavaTokenType.INTEGER_LITERAL, JavaTokenType.STRING_LITERAL);
|
||||
private static final TokenSet CONSTRUCTOR_CALL = TokenSet.create(JavaTokenType.THIS_KEYWORD, JavaTokenType.SUPER_KEYWORD);
|
||||
|
||||
private ExpressionParser() { }
|
||||
|
||||
@@ -553,18 +554,33 @@ public class ExpressionParser {
|
||||
beforeAnnotation.drop();
|
||||
}
|
||||
|
||||
if (tokenType == JavaTokenType.THIS_KEYWORD) {
|
||||
final PsiBuilder.Marker expr = builder.mark();
|
||||
builder.mark().done(JavaElementType.REFERENCE_PARAMETER_LIST);
|
||||
builder.advanceLexer();
|
||||
expr.done(builder.getTokenType() != JavaTokenType.LPARENTH ? JavaElementType.THIS_EXPRESSION : JavaElementType.REFERENCE_EXPRESSION);
|
||||
return expr;
|
||||
PsiBuilder.Marker expr = null;
|
||||
if (tokenType == JavaTokenType.LT) {
|
||||
expr = builder.mark();
|
||||
|
||||
if (!ReferenceParser.parseReferenceParameterList(builder, false, false)) {
|
||||
expr.rollbackTo();
|
||||
return null;
|
||||
}
|
||||
|
||||
tokenType = builder.getTokenType();
|
||||
if (!CONSTRUCTOR_CALL.contains(tokenType)) {
|
||||
expr.rollbackTo();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (tokenType == JavaTokenType.SUPER_KEYWORD) {
|
||||
final PsiBuilder.Marker expr = builder.mark();
|
||||
builder.mark().done(JavaElementType.REFERENCE_PARAMETER_LIST);
|
||||
|
||||
if (CONSTRUCTOR_CALL.contains(tokenType)) {
|
||||
if (expr == null) {
|
||||
expr = builder.mark();
|
||||
builder.mark().done(JavaElementType.REFERENCE_PARAMETER_LIST);
|
||||
}
|
||||
builder.advanceLexer();
|
||||
expr.done(builder.getTokenType() != JavaTokenType.LPARENTH ? JavaElementType.SUPER_EXPRESSION : JavaElementType.REFERENCE_EXPRESSION);
|
||||
expr.done(builder.getTokenType() == JavaTokenType.LPARENTH
|
||||
? JavaElementType.REFERENCE_EXPRESSION
|
||||
: tokenType == JavaTokenType.THIS_KEYWORD
|
||||
? JavaElementType.THIS_EXPRESSION
|
||||
: JavaElementType.SUPER_EXPRESSION);
|
||||
return expr;
|
||||
}
|
||||
if (tokenType == JavaTokenType.NEW_KEYWORD) {
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
PsiJavaFile:PinesInReferenceExpression2.java
|
||||
PsiMethodCallExpression:<String>super(null)
|
||||
PsiReferenceExpression:<String>super
|
||||
PsiReferenceParameterList
|
||||
PsiJavaToken:LT('<')
|
||||
PsiTypeElement:String
|
||||
PsiJavaCodeReferenceElement:String
|
||||
PsiIdentifier:String('String')
|
||||
PsiReferenceParameterList
|
||||
<empty list>
|
||||
PsiJavaToken:GT('>')
|
||||
PsiKeyword:super('super')
|
||||
PsiExpressionList
|
||||
PsiJavaToken:LPARENTH('(')
|
||||
PsiLiteralExpression:null
|
||||
PsiJavaToken:NULL_KEYWORD('null')
|
||||
PsiJavaToken:RPARENTH(')')
|
||||
+1
@@ -92,6 +92,7 @@ public class ExpressionParserTest extends JavaParsingTestCase {
|
||||
|
||||
public void testPinesInReferenceExpression0() { doParserTest("Collections.<String>sort(null)"); }
|
||||
public void testPinesInReferenceExpression1() { doParserTest("this.<String>sort(null)"); }
|
||||
public void testPinesInReferenceExpression2() { doParserTest("<String>super(null)"); }
|
||||
|
||||
public void testGE0() { doParserTest("x >>>= 8 >> 2"); }
|
||||
public void testGE1() { doParserTest("x >= 2"); }
|
||||
|
||||
Reference in New Issue
Block a user