Improve error recovery when missing an .end array-data
diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g
index 9ac2087..ea3369d 100644
--- a/smalidea/src/main/antlr3/smalideaParser.g
+++ b/smalidea/src/main/antlr3/smalideaParser.g
@@ -1297,7 +1297,15 @@
 insn_array_data_directive
   : ARRAY_DATA_DIRECTIVE
     integer_literal
-    array_data_element* END_ARRAY_DATA_DIRECTIVE;
+    array_data_element* end_array_data_directive;
+
+end_array_data_directive
+  : END_ARRAY_DATA_DIRECTIVE;
+  catch [RecognitionException re] {
+    Marker errorMarker = mark();
+    recover(input, re);
+    reportError(errorMarker, re, false);
+  }
 
 array_data_element
   @init { Marker marker = mark(); }
diff --git a/smalidea/testData/InvalidInstruction.smalidea b/smalidea/testData/InvalidInstruction.smalidea
index 9ef110b..9855250 100644
--- a/smalidea/testData/InvalidInstruction.smalidea
+++ b/smalidea/testData/InvalidInstruction.smalidea
@@ -6,4 +6,11 @@
 .method blah2()V
 .registers 1
 invoke-virtual {v1, v2} .blah Lblah;->blah()V
+.end method
+
+.method blah3()V
+  .array-data 4
+    1
+    2
+  .blah
 .end method
\ No newline at end of file
diff --git a/smalidea/testData/InvalidInstruction.txt b/smalidea/testData/InvalidInstruction.txt
index 65fc8b7..197c68c 100644
--- a/smalidea/testData/InvalidInstruction.txt
+++ b/smalidea/testData/InvalidInstruction.txt
@@ -104,4 +104,40 @@
           PsiElement(VOID_TYPE)
             PsiElement(VOID_TYPE)('V')
       PsiWhiteSpace('\n')
+      PsiElement(END_METHOD_DIRECTIVE)('.end method')
+    PsiWhiteSpace('\n\n')
+    SmaliMethod(METHOD)
+      SmaliThrowsList(THROWS_LIST)
+        <empty list>
+      PsiElement(METHOD_DIRECTIVE)('.method')
+      PsiWhiteSpace(' ')
+      SmaliModifierList(MODIFIER_LIST)
+        <empty list>
+      PsiElement(MEMBER_NAME)
+        PsiElement(SIMPLE_NAME)('blah3')
+      SmaliMethodPrototype(METHOD_PROTOTYPE)
+        PsiElement(OPEN_PAREN)('(')
+        SmaliMethodParamList(METHOD_PARAM_LIST)
+          <empty list>
+        PsiElement(CLOSE_PAREN)(')')
+        PsiElement(VOID_TYPE)
+          PsiElement(VOID_TYPE)('V')
+      PsiWhiteSpace('\n  ')
+      PsiElement(INSTRUCTION)
+        PsiElement(ARRAY_DATA_DIRECTIVE)('.array-data')
+        PsiWhiteSpace(' ')
+        PsiElement(LITERAL)
+          PsiElement(POSITIVE_INTEGER_LITERAL)('4')
+        PsiWhiteSpace('\n    ')
+        PsiElement(ARRAY_DATA_ELEMENT)
+          PsiElement(LITERAL)
+            PsiElement(POSITIVE_INTEGER_LITERAL)('1')
+        PsiWhiteSpace('\n    ')
+        PsiElement(ARRAY_DATA_ELEMENT)
+          PsiElement(LITERAL)
+            PsiElement(POSITIVE_INTEGER_LITERAL)('2')
+        PsiWhiteSpace('\n  ')
+        PsiErrorElement:mismatched input '.blah' expecting END_ARRAY_DATA_DIRECTIVE
+          PsiElement(BAD_CHARACTER)('.blah')
+      PsiWhiteSpace('\n')
       PsiElement(END_METHOD_DIRECTIVE)('.end method')
\ No newline at end of file