Refactor Events: expose Event.ID via a getter
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 5023427..3e73909 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -7,6 +7,9 @@
     <body>
         <release version="1.26" date="in Mercurial" description="Maintenance">
             <action dev="asomov" type="update">
+                Refactor Events: expose Event.ID via a getter (2019-10-05)
+            </action>
+            <action dev="asomov" type="update">
                 Refactor ScalarAnalysis: make it immutable (2019-09-28)
             </action>
             <action dev="asomov" type="add" issue="454">
diff --git a/src/main/java/org/yaml/snakeyaml/events/AliasEvent.java b/src/main/java/org/yaml/snakeyaml/events/AliasEvent.java
index ebffb7d..80bf556 100644
--- a/src/main/java/org/yaml/snakeyaml/events/AliasEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/AliasEvent.java
@@ -27,7 +27,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.Alias == id;
+    public Event.ID getEventId() {
+        return ID.Alias;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/DocumentEndEvent.java b/src/main/java/org/yaml/snakeyaml/events/DocumentEndEvent.java
index 30fe439..cdbce17 100644
--- a/src/main/java/org/yaml/snakeyaml/events/DocumentEndEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/DocumentEndEvent.java
@@ -36,7 +36,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.DocumentEnd == id;
+    public Event.ID getEventId() {
+        return ID.DocumentEnd;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/DocumentStartEvent.java b/src/main/java/org/yaml/snakeyaml/events/DocumentStartEvent.java
index dfc139a..af70254 100644
--- a/src/main/java/org/yaml/snakeyaml/events/DocumentStartEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/DocumentStartEvent.java
@@ -66,7 +66,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.DocumentStart == id;
+    public Event.ID getEventId() {
+        return ID.DocumentStart;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/Event.java b/src/main/java/org/yaml/snakeyaml/events/Event.java
index b0157bf..7d12d3f 100644
--- a/src/main/java/org/yaml/snakeyaml/events/Event.java
+++ b/src/main/java/org/yaml/snakeyaml/events/Event.java
@@ -55,7 +55,20 @@
         return "";
     }
 
-    public abstract boolean is(Event.ID id);
+    /**
+     * Check if the Event is of the provided kind
+     * @param id - the Event.ID enum
+     * @return true then this Event of the provided type
+     */
+    public boolean is(Event.ID id) {
+        return getEventId() == id;
+    }
+
+    /**
+     * Get the type (kind) if this Event
+     * @return the ID of this Event
+     */
+    public abstract Event.ID getEventId();
 
     /*
      * for tests only
diff --git a/src/main/java/org/yaml/snakeyaml/events/MappingEndEvent.java b/src/main/java/org/yaml/snakeyaml/events/MappingEndEvent.java
index 618c916..a7d69e4 100644
--- a/src/main/java/org/yaml/snakeyaml/events/MappingEndEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/MappingEndEvent.java
@@ -29,7 +29,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.MappingEnd == id;
+    public Event.ID getEventId() {
+        return ID.MappingEnd;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/MappingStartEvent.java b/src/main/java/org/yaml/snakeyaml/events/MappingStartEvent.java
index ee0c620..6fe46f5 100644
--- a/src/main/java/org/yaml/snakeyaml/events/MappingStartEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/MappingStartEvent.java
@@ -50,7 +50,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.MappingStart == id;
+    public Event.ID getEventId() {
+        return ID.MappingStart;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/ScalarEvent.java b/src/main/java/org/yaml/snakeyaml/events/ScalarEvent.java
index c277b7c..6d5b270 100644
--- a/src/main/java/org/yaml/snakeyaml/events/ScalarEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/ScalarEvent.java
@@ -118,8 +118,8 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.Scalar == id;
+    public Event.ID getEventId() {
+        return ID.Scalar;
     }
 
     public boolean isPlain() {
diff --git a/src/main/java/org/yaml/snakeyaml/events/SequenceEndEvent.java b/src/main/java/org/yaml/snakeyaml/events/SequenceEndEvent.java
index a6a6127..204de47 100644
--- a/src/main/java/org/yaml/snakeyaml/events/SequenceEndEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/SequenceEndEvent.java
@@ -29,7 +29,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.SequenceEnd == id;
+    public Event.ID getEventId() {
+        return ID.SequenceEnd;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/SequenceStartEvent.java b/src/main/java/org/yaml/snakeyaml/events/SequenceStartEvent.java
index 4f157b3..68533f5 100644
--- a/src/main/java/org/yaml/snakeyaml/events/SequenceStartEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/SequenceStartEvent.java
@@ -45,7 +45,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.SequenceStart == id;
+    public Event.ID getEventId() {
+        return ID.SequenceStart;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/StreamEndEvent.java b/src/main/java/org/yaml/snakeyaml/events/StreamEndEvent.java
index 1389c6b..74d77ad 100644
--- a/src/main/java/org/yaml/snakeyaml/events/StreamEndEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/StreamEndEvent.java
@@ -34,7 +34,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.StreamEnd == id;
+    public Event.ID getEventId() {
+        return ID.StreamEnd;
     }
 }
diff --git a/src/main/java/org/yaml/snakeyaml/events/StreamStartEvent.java b/src/main/java/org/yaml/snakeyaml/events/StreamStartEvent.java
index 42e6c76..6973207 100644
--- a/src/main/java/org/yaml/snakeyaml/events/StreamStartEvent.java
+++ b/src/main/java/org/yaml/snakeyaml/events/StreamStartEvent.java
@@ -35,7 +35,7 @@
     }
 
     @Override
-    public boolean is(Event.ID id) {
-        return ID.StreamStart == id;
+    public Event.ID getEventId() {
+        return ID.StreamStart;
     }
 }
diff --git a/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java b/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
index 2c60151..9089767 100644
--- a/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
+++ b/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
@@ -15,10 +15,7 @@
  */
 package org.yaml.snakeyaml.parser;
 
-import java.util.LinkedList;
-
 import junit.framework.TestCase;
-
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.error.Mark;
 import org.yaml.snakeyaml.events.DocumentEndEvent;
@@ -34,17 +31,34 @@
 import org.yaml.snakeyaml.events.StreamStartEvent;
 import org.yaml.snakeyaml.reader.StreamReader;
 
+import java.util.LinkedList;
+
 public class ParserImplTest extends TestCase {
 
     private void check(LinkedList<Event> etalonEvents, Parser parser) {
-        while (parser.checkEvent(null)) {
+        for (Event etalonEvent : etalonEvents) {
+            parser.checkEvent(etalonEvent.getEventId());
             Event event = parser.getEvent();
-            if (etalonEvents.isEmpty()) {
-                fail("unexpected event: " + event);
+            if (event == null) {
+                fail("Missing event: " + etalonEvent);
             }
-            assertEquals(etalonEvents.removeFirst(), event);
+            assertEquals(etalonEvent, event);
         }
-        assertFalse("Must contain no more events: " + parser.getEvent(), parser.checkEvent(null));
+    }
+
+    public void testGetEventWithTag() {
+        String data = "! 12";
+        StreamReader reader = new StreamReader(data);
+        Parser parser = new ParserImpl(reader);
+        Mark dummyMark = new Mark("dummy", 0, 0, 0, "".toCharArray(), 0);
+        LinkedList<Event> etalonEvents = new LinkedList<Event>();
+        etalonEvents.add(new StreamStartEvent(dummyMark, dummyMark));
+        etalonEvents.add(new DocumentStartEvent(dummyMark, dummyMark, false, null, null));
+        etalonEvents.add(new ScalarEvent(null, "!", new ImplicitTuple(true, false), "12",
+                dummyMark, dummyMark, DumperOptions.ScalarStyle.PLAIN));
+        etalonEvents.add(new DocumentEndEvent(dummyMark, dummyMark, false));
+        etalonEvents.add(new StreamEndEvent(dummyMark, dummyMark));
+        check(etalonEvents, parser);
     }
 
     public void testGetEvent() {