Refactor: use Event.ID instead of classes
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a04c2ca..e221af1 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -8,6 +8,9 @@
<body>
<release version="1.6-SNAPSHOT" date="in Mercurial" description="development">
<action dev="py4fun" type="update">
+ Refactor: use Event.ID instead of classes (2010-01-15)
+ </action>
+ <action dev="py4fun" type="update">
Refactor: use Token.ID instead of classes (2010-01-15)
</action>
<action dev="py4fun" type="update">
diff --git a/src/main/java/org/yaml/snakeyaml/composer/Composer.java b/src/main/java/org/yaml/snakeyaml/composer/Composer.java
index 5888a0d..c46ba6c 100644
--- a/src/main/java/org/yaml/snakeyaml/composer/Composer.java
+++ b/src/main/java/org/yaml/snakeyaml/composer/Composer.java
@@ -23,14 +23,10 @@
import org.yaml.snakeyaml.events.AliasEvent;
import org.yaml.snakeyaml.events.Event;
-import org.yaml.snakeyaml.events.MappingEndEvent;
import org.yaml.snakeyaml.events.MappingStartEvent;
import org.yaml.snakeyaml.events.NodeEvent;
import org.yaml.snakeyaml.events.ScalarEvent;
-import org.yaml.snakeyaml.events.SequenceEndEvent;
import org.yaml.snakeyaml.events.SequenceStartEvent;
-import org.yaml.snakeyaml.events.StreamEndEvent;
-import org.yaml.snakeyaml.events.StreamStartEvent;
import org.yaml.snakeyaml.nodes.MappingNode;
import org.yaml.snakeyaml.nodes.Node;
import org.yaml.snakeyaml.nodes.NodeId;
@@ -68,11 +64,11 @@
*/
public boolean checkNode() {
// Drop the STREAM-START event.
- if (parser.checkEvent(StreamStartEvent.class)) {
+ if (parser.checkEvent(Event.ID.StreamStart)) {
parser.getEvent();
}
// If there are more documents available?
- return !parser.checkEvent(StreamEndEvent.class);
+ return !parser.checkEvent(Event.ID.StreamEnd);
}
/**
@@ -83,7 +79,7 @@
*/
public Node getNode() {
// Get the root node of the next document.
- if (!parser.checkEvent(StreamEndEvent.class)) {
+ if (!parser.checkEvent(Event.ID.StreamEnd)) {
return composeDocument();
} else {
return (Node) null;
@@ -104,11 +100,11 @@
parser.getEvent();
// Compose a document if the stream is not empty.
Node document = null;
- if (!parser.checkEvent(StreamEndEvent.class)) {
+ if (!parser.checkEvent(Event.ID.StreamEnd)) {
document = composeDocument();
}
// Ensure that the stream contains no more documents.
- if (!parser.checkEvent(StreamEndEvent.class)) {
+ if (!parser.checkEvent(Event.ID.StreamEnd)) {
Event event = parser.getEvent();
throw new ComposerException("expected a single document in the stream", document
.getStartMark(), "but found another document", event.getStartMark());
@@ -132,7 +128,7 @@
private Node composeNode(Node parent, Object index) {
recursiveNodes.add(parent);
- if (parser.checkEvent(AliasEvent.class)) {
+ if (parser.checkEvent(Event.ID.Alias)) {
AliasEvent event = (AliasEvent) parser.getEvent();
String anchor = event.getAnchor();
if (!anchors.containsKey(anchor)) {
@@ -155,9 +151,9 @@
}
// resolver.descendResolver(parent, index);
Node node = null;
- if (parser.checkEvent(ScalarEvent.class)) {
+ if (parser.checkEvent(Event.ID.Scalar)) {
node = composeScalarNode(anchor);
- } else if (parser.checkEvent(SequenceStartEvent.class)) {
+ } else if (parser.checkEvent(Event.ID.SequenceStart)) {
node = composeSequenceNode(anchor);
} else {
node = composeMappingNode(anchor);
@@ -203,7 +199,7 @@
anchors.put(anchor, node);
}
int index = 0;
- while (!parser.checkEvent(SequenceEndEvent.class)) {
+ while (!parser.checkEvent(Event.ID.SequenceEnd)) {
(node.getValue()).add(composeNode(node, new Integer(index)));
index++;
}
@@ -228,7 +224,7 @@
if (anchor != null) {
anchors.put(anchor, node);
}
- while (!parser.checkEvent(MappingEndEvent.class)) {
+ while (!parser.checkEvent(Event.ID.MappingEnd)) {
Node itemKey = composeNode(node, null);
Node itemValue = composeNode(node, itemKey);
node.getValue().add(new NodeTuple(itemKey, itemValue));
diff --git a/src/main/java/org/yaml/snakeyaml/parser/Parser.java b/src/main/java/org/yaml/snakeyaml/parser/Parser.java
index 6bee3c6..e0f888d 100644
--- a/src/main/java/org/yaml/snakeyaml/parser/Parser.java
+++ b/src/main/java/org/yaml/snakeyaml/parser/Parser.java
@@ -15,8 +15,6 @@
*/
package org.yaml.snakeyaml.parser;
-import java.util.List;
-
import org.yaml.snakeyaml.events.Event;
/**
@@ -34,31 +32,15 @@
/**
* Check if the next event is one of the given types.
*
- * @param choices
- * List of event types.
+ * @param choice
+ * Event ID.
* @return <code>true</code> if the next event can be assigned to a variable
* of at least one of the given types. Returns <code>false</code> if
* no more events are available.
* @throws ParserException
* Thrown in case of malformed input.
*/
- public boolean checkEvent(List<Class<? extends Event>> choices);
-
- /**
- * Check if the next event is assignable to the given type.
- * <p>
- * This is a convenience method to avoid <code>List</code> creation if
- * calling {@link #checkEvent(List)} for a single type.
- * </p>
- *
- * @param choice
- * Event type.
- * @return True if the next event is an instance of <code>type</code>. False
- * if no more events are available.
- * @throws ParserException
- * Thrown in case of malformed input.
- */
- public boolean checkEvent(Class<? extends Event> choice);
+ public boolean checkEvent(Event.ID choices);
/**
* Return the next event, but do not delete it from the stream.
diff --git a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
index 224f525..253d662 100644
--- a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java
@@ -143,30 +143,16 @@
/**
* Check the type of the next event.
*/
- public boolean checkEvent(List<Class<? extends Event>> choices) {
+ public boolean checkEvent(Event.ID choices) {
peekEvent();
if (currentEvent != null) {
- if (choices.size() == 0) {
+ if (currentEvent.is(choices)) {
return true;
}
- for (Class<? extends Event> class1 : choices) {
- if (class1.isInstance(currentEvent)) {
- return true;
- }
- }
}
return false;
}
- /**
- * Check the type of the next event.
- */
- public boolean checkEvent(Class<? extends Event> cls) {
- List<Class<? extends Event>> list = new ArrayList<Class<? extends Event>>(1);
- list.add(cls);
- return checkEvent(list);
- }
-
/*
* Get the next event.
*/
diff --git a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
index 1d88f41..22632ab 100644
--- a/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
+++ b/src/main/java/org/yaml/snakeyaml/scanner/ScannerImpl.java
@@ -175,16 +175,16 @@
/**
* Check if the next token is one of the given types.
*/
- public boolean checkToken(Token.ID... ids) {
+ public boolean checkToken(Token.ID... choices) {
while (needMoreTokens()) {
fetchMoreTokens();
}
if (!this.tokens.isEmpty()) {
- if (ids.length == 0) {
+ if (choices.length == 0) {
return true;
}
Token first = this.tokens.get(0);
- for (Token.ID id : ids) {
+ for (Token.ID id : choices) {
if (first.getTokenId() == id) {
return true;
}
diff --git a/src/test/java/org/pyyaml/CanonicalParser.java b/src/test/java/org/pyyaml/CanonicalParser.java
index 55bdf2d..7896b4b 100644
--- a/src/test/java/org/pyyaml/CanonicalParser.java
+++ b/src/test/java/org/pyyaml/CanonicalParser.java
@@ -16,7 +16,6 @@
package org.pyyaml;
import java.util.ArrayList;
-import java.util.List;
import org.yaml.snakeyaml.events.AliasEvent;
import org.yaml.snakeyaml.events.DocumentEndEvent;
@@ -159,29 +158,18 @@
return events.remove(0);
}
- public boolean checkEvent(List<Class<? extends Event>> choices) {
+ public boolean checkEvent(Event.ID choice) {
if (!parsed) {
parse();
}
if (!events.isEmpty()) {
- if (choices.isEmpty()) {
+ if (events.get(0).is(choice)) {
return true;
}
- for (Class<? extends Event> class1 : choices) {
- if (class1.isInstance(events.get(0))) {
- return true;
- }
- }
}
return false;
}
- public boolean checkEvent(Class<? extends Event> choice) {
- List<Class<? extends Event>> list = new ArrayList<Class<? extends Event>>(1);
- list.add(choice);
- return checkEvent(list);
- }
-
public Event peekEvent() {
if (!parsed) {
parse();
diff --git a/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java b/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
index f18a6a3..8226d67 100644
--- a/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
+++ b/src/test/java/org/yaml/snakeyaml/parser/ParserImplTest.java
@@ -15,7 +15,6 @@
*/
package org.yaml.snakeyaml.parser;
-import java.util.ArrayList;
import java.util.LinkedList;
import junit.framework.TestCase;
@@ -53,15 +52,14 @@
etalonEvents.add(new MappingEndEvent(dummyMark, dummyMark));
etalonEvents.add(new DocumentEndEvent(dummyMark, dummyMark, false));
etalonEvents.add(new StreamEndEvent(dummyMark, dummyMark));
- while (parser.checkEvent(new ArrayList<Class<? extends Event>>())) {
+ while (parser.checkEvent(null)) {
Event event = parser.getEvent();
if (etalonEvents.isEmpty()) {
fail("unexpected event: " + event);
}
assertEquals(etalonEvents.removeFirst(), event);
}
- assertFalse("Must contain no more events: " + parser.getEvent(), parser
- .checkEvent(new ArrayList<Class<? extends Event>>()));
+ assertFalse("Must contain no more events: " + parser.getEvent(), parser.checkEvent(null));
}
public void testGetEvent2() {
@@ -84,14 +82,13 @@
etalonEvents.add(new MappingEndEvent(dummyMark, dummyMark));
etalonEvents.add(new DocumentEndEvent(dummyMark, dummyMark, false));
etalonEvents.add(new StreamEndEvent(dummyMark, dummyMark));
- while (parser.checkEvent(new ArrayList<Class<? extends Event>>())) {
+ while (parser.checkEvent(null)) {
Event event = parser.getEvent();
if (etalonEvents.isEmpty()) {
fail("unexpected event: " + event);
}
assertEquals(etalonEvents.removeFirst(), event);
}
- assertFalse("Must contain no more events: " + parser.getEvent(), parser
- .checkEvent(new ArrayList<Class<? extends Event>>()));
+ assertFalse("Must contain no more events: " + parser.getEvent(), parser.checkEvent(null));
}
}