mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-57673
This commit is contained in:
@@ -291,7 +291,7 @@ public class DeclarationParser {
|
||||
declaration.rollbackTo();
|
||||
return null;
|
||||
}
|
||||
return parseMethodFromLeftParenth(builder, declaration, false);
|
||||
return parseMethodFromLeftParenth(builder, declaration, false, true);
|
||||
}
|
||||
idPos.drop();
|
||||
}
|
||||
@@ -345,7 +345,7 @@ public class DeclarationParser {
|
||||
if (typeParams == null) {
|
||||
emptyElement(type, JavaElementType.TYPE_PARAMETER_LIST);
|
||||
}
|
||||
return parseMethodFromLeftParenth(builder, declaration, (context == Context.ANNOTATION_INTERFACE));
|
||||
return parseMethodFromLeftParenth(builder, declaration, (context == Context.ANNOTATION_INTERFACE), false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -396,10 +396,17 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
private static PsiBuilder.Marker parseMethodFromLeftParenth(final PsiBuilder builder, final PsiBuilder.Marker declaration,
|
||||
final boolean anno) {
|
||||
final boolean anno, final boolean constructor) {
|
||||
parseParameterList(builder);
|
||||
|
||||
eatBrackets(builder);
|
||||
if (constructor && builder.getTokenType() == JavaTokenType.LBRACKET) {
|
||||
final PsiBuilder.Marker marker = builder.mark();
|
||||
eatBrackets(builder, false);
|
||||
marker.error(JavaErrorMessages.message("expected.semicolon"));
|
||||
}
|
||||
else {
|
||||
eatBrackets(builder, true);
|
||||
}
|
||||
|
||||
if (areTypeAnnotationsSupported(builder)) {
|
||||
final PsiBuilder.Marker receiver = builder.mark();
|
||||
@@ -551,7 +558,7 @@ public class DeclarationParser {
|
||||
}
|
||||
|
||||
if (expect(builder, JavaTokenType.IDENTIFIER)) {
|
||||
eatBrackets(builder);
|
||||
eatBrackets(builder, true);
|
||||
done(param, JavaElementType.PARAMETER);
|
||||
return param;
|
||||
}
|
||||
@@ -586,7 +593,7 @@ public class DeclarationParser {
|
||||
while (true) {
|
||||
shouldRollback = true;
|
||||
|
||||
if (!eatBrackets(builder)) {
|
||||
if (!eatBrackets(builder, true)) {
|
||||
unclosed = true;
|
||||
}
|
||||
|
||||
@@ -648,10 +655,10 @@ public class DeclarationParser {
|
||||
return declaration;
|
||||
}
|
||||
|
||||
private static boolean eatBrackets(final PsiBuilder builder) {
|
||||
private static boolean eatBrackets(final PsiBuilder builder, final boolean withError) {
|
||||
while (expect(builder, JavaTokenType.LBRACKET)) {
|
||||
if (!expect(builder, JavaTokenType.RBRACKET)) {
|
||||
error(builder, JavaErrorMessages.message("expected.rbracket"));
|
||||
if (withError) error(builder, JavaErrorMessages.message("expected.rbracket"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
PsiJavaFile:ConstructorBrackets.java
|
||||
PsiJavaToken:LBRACE('{')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiMethod:A
|
||||
PsiModifierList:
|
||||
<empty list>
|
||||
PsiTypeParameterList
|
||||
<empty list>
|
||||
PsiIdentifier:A('A')
|
||||
PsiParameterList:()
|
||||
PsiJavaToken:LPARENTH('(')
|
||||
PsiJavaToken:RPARENTH(')')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiErrorElement:';' expected
|
||||
PsiJavaToken:LBRACKET('[')
|
||||
PsiJavaToken:RBRACKET(']')
|
||||
PsiReferenceList
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiCodeBlock
|
||||
PsiJavaToken:LBRACE('{')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiJavaToken:RBRACE('}')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiJavaToken:RBRACE('}')
|
||||
+2
@@ -89,6 +89,8 @@ public class DeclarationParserTest extends JavaParsingTestCase {
|
||||
public void testUnclosed3() { doParserTest("{ void f(int a }", false, false); }
|
||||
public void testUnclosed4() { doParserTest("{ void f(int a,, }", false, false); }
|
||||
public void testUnclosed5() { doParserTest("{ void f(int a,); }", false, false); }
|
||||
public void testConstructorBrackets() { doParserTest("{ A() [] { } }", false, false); }
|
||||
|
||||
public void testGenericMethod() { doParserTest("{ public static <E> test();\n" +
|
||||
" <E> void test1();\n" +
|
||||
" <E1 extends Integer, E2 extends Runnable> String test2(); }", false, false); }
|
||||
|
||||
Reference in New Issue
Block a user