From d5b748f4f58795920039b93ba7bf707dbc9b06cc Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Fri, 20 Feb 2015 19:04:44 -0800 Subject: [PATCH] Minor improvement to how the colon is parsed for a field declaration --- smalidea/src/main/antlr3/smalideaParser.g | 5 +++++ .../test/java/org/jf/smalidea/ParserTest.java | 1 + smalidea/testData/InvalidField2.smalidea | 1 + smalidea/testData/InvalidField2.txt | 17 +++++++++++++++++ 4 files changed, 24 insertions(+) create mode 100644 smalidea/testData/InvalidField2.smalidea create mode 100644 smalidea/testData/InvalidField2.txt diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g index 3bbac669..934291f0 100644 --- a/smalidea/src/main/antlr3/smalideaParser.g +++ b/smalidea/src/main/antlr3/smalideaParser.g @@ -298,6 +298,11 @@ field colon : COLON; + catch [RecognitionException re] { + Marker marker = mark(); + recover(input, re); + reportError(marker, re, false); + } end_field_directive : END_FIELD_DIRECTIVE; diff --git a/smalidea/src/test/java/org/jf/smalidea/ParserTest.java b/smalidea/src/test/java/org/jf/smalidea/ParserTest.java index 679b9984..0a2c20a6 100644 --- a/smalidea/src/test/java/org/jf/smalidea/ParserTest.java +++ b/smalidea/src/test/java/org/jf/smalidea/ParserTest.java @@ -46,6 +46,7 @@ public class ParserTest extends LightCodeInsightParsingTestCase { public void testInvalidClassDirective2() throws Exception { doTest(true); } public void testInvalidClassDirective3() throws Exception { doTest(true); } public void testInvalidField() throws Exception { doTest(true); } + public void testInvalidField2() 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/InvalidField2.smalidea b/smalidea/testData/InvalidField2.smalidea new file mode 100644 index 00000000..8de7a3a6 --- /dev/null +++ b/smalidea/testData/InvalidField2.smalidea @@ -0,0 +1 @@ +.field public blah .blah \ No newline at end of file diff --git a/smalidea/testData/InvalidField2.txt b/smalidea/testData/InvalidField2.txt new file mode 100644 index 00000000..b3e8227b --- /dev/null +++ b/smalidea/testData/InvalidField2.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') + PsiWhiteSpace(' ') + PsiErrorElement:mismatched input '.blah' expecting COLON + PsiElement(BAD_CHARACTER)('.blah') \ No newline at end of file