refParser.parseReferenceList(builder, JavaTokenType.EXTENDS_KEYWORD, JavaElementType.EXTENDS_LIST, JavaTokenType.COMMA);
refParser.parseReferenceList(builder, JavaTokenType.IMPLEMENTS_KEYWORD, JavaElementType.IMPLEMENTS_LIST, JavaTokenType.COMMA);
+ //noinspection Duplicates
if (builder.getTokenType() != JavaTokenType.LBRACE) {
final PsiBuilder.Marker error = builder.mark();
while (BEFORE_LBRACE_ELEMENTS_SET.contains(builder.getTokenType())) {
emptyElement(builder, JavaElementType.TYPE_PARAMETER_LIST);
}
parseAnnotations(builder);
- builder.advanceLexer();
+
+ if (!expect(builder, JavaTokenType.IDENTIFIER)) {
+ PsiBuilder.Marker primitive = builder.mark();
+ builder.advanceLexer();
+ primitive.error(JavaErrorMessages.message("expected.identifier"));
+ }
if (builder.getTokenType() == JavaTokenType.LPARENTH) {
return parseMethodFromLeftParenth(builder, declaration, false, true);
--- /dev/null
+PsiJavaFile:MethodNameOmitted.java
+ PsiJavaToken:LBRACE('{')
+ PsiWhiteSpace(' ')
+ PsiMethod:<unnamed>
+ PsiModifierList:
+ <empty list>
+ PsiTypeParameterList
+ <empty list>
+ PsiErrorElement:Identifier expected
+ PsiKeyword:void('void')
+ PsiParameterList:()
+ PsiJavaToken:LPARENTH('(')
+ PsiJavaToken:RPARENTH(')')
+ PsiReferenceList
+ <empty list>
+ PsiJavaToken:SEMICOLON(';')
+ PsiWhiteSpace(' ')
+ PsiJavaToken:RBRACE('}')
\ No newline at end of file
public void testWildcardParsing() { doParserTest("{ List<? extends B> x(Collection<? super B> x); }"); }
public void testParameterAnnotation() { doParserTest("{ void foo (@Annotation(value=77) int param) {} }"); }
public void testParameterizedMethod() { doParserTest("{ @Nullable <T> T bar() {} }"); }
+ public void testMethodNameOmitted() { doParserTest("{ void(); }"); }
private void doParserTest(String text) {
doParserTest(text, false, false);