diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g index c278ac23..d258f98b 100644 --- a/smalidea/src/main/antlr3/smalideaParser.g +++ b/smalidea/src/main/antlr3/smalideaParser.g @@ -526,6 +526,11 @@ nonvoid_type_descriptor : primitive_type | class_descriptor | array_descriptor; + catch [RecognitionException re] { + Marker marker = mark(); + recover(input, re); + reportError(marker, re, false); + } reference_type_descriptor : class_descriptor diff --git a/smalidea/src/test/java/org/jf/smalidea/ParserTest.java b/smalidea/src/test/java/org/jf/smalidea/ParserTest.java index 6a3dc8c6..46368ec5 100644 --- a/smalidea/src/test/java/org/jf/smalidea/ParserTest.java +++ b/smalidea/src/test/java/org/jf/smalidea/ParserTest.java @@ -49,6 +49,7 @@ public class ParserTest extends LightCodeInsightParsingTestCase { public void testInvalidField() throws Exception { doTest(true); } public void testInvalidField2() throws Exception { doTest(true); } public void testInvalidField3() throws Exception { doTest(true); } + public void testInvalidField4() throws Exception { doTest(true); } public void testParamListInvalidParameter() throws Exception { doTest(true); } public void testSuperClassInvalidSyntax() throws Exception { doTest(true); } public void testSuperClassInvalidSyntax2() throws Exception { doTest(true); } diff --git a/smalidea/testData/InvalidField4.smalidea b/smalidea/testData/InvalidField4.smalidea new file mode 100644 index 00000000..11a8cb20 --- /dev/null +++ b/smalidea/testData/InvalidField4.smalidea @@ -0,0 +1 @@ +.field public blah:.blah \ No newline at end of file diff --git a/smalidea/testData/InvalidField4.txt b/smalidea/testData/InvalidField4.txt new file mode 100644 index 00000000..4eedd931 --- /dev/null +++ b/smalidea/testData/InvalidField4.txt @@ -0,0 +1,17 @@ +smali.FILE + SmaliClass(CLASS) + SmaliExtendsList(EXTENDS_LIST) + + SmaliImplementsList(IMPLEMENTS_LIST) + + SmaliField(FIELD) + PsiElement(FIELD_DIRECTIVE)('.field') + PsiWhiteSpace(' ') + SmaliModifierList(MODIFIER_LIST) + PsiElement(ACCESS_SPEC)('public') + PsiWhiteSpace(' ') + PsiElement(MEMBER_NAME) + PsiElement(SIMPLE_NAME)('blah') + PsiElement(COLON)(':') + PsiErrorElement:no viable alternative at input '.blah' + PsiElement(BAD_CHARACTER)('.blah') \ No newline at end of file