From e88583d28727143bca56a9891f553eb39eef7357 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 30 Oct 2014 12:15:59 +0100 Subject: [PATCH] Use switch/case in 'IQ parse(XmlPullParser)' --- .../smack/util/PacketParserUtils.java | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java index 410a4fe26..e8ff5b52d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java @@ -599,6 +599,8 @@ public class PacketParserUtils { * @throws Exception if an exception occurs while parsing the packet. */ public static IQ parse(XmlPullParser parser, XMPPConnection connection) throws Exception { + ParserUtils.assertAtStartTag(parser); + final int initialDepth = parser.getDepth(); IQ iqPacket = null; XMPPError error = null; @@ -607,25 +609,30 @@ public class PacketParserUtils { final String from = parser.getAttributeValue("", "from"); final IQ.Type type = IQ.Type.fromString(parser.getAttributeValue("", "type")); - boolean done = false; - while (!done) { + outerloop: while (true) { int eventType = parser.next(); - if (eventType == XmlPullParser.START_TAG) { + switch (eventType) { + case XmlPullParser.START_TAG: String elementName = parser.getName(); String namespace = parser.getNamespace(); - if (elementName.equals("error")) { + switch(elementName) { + case "error": error = PacketParserUtils.parseError(parser); - } - else if (elementName.equals(RosterPacket.ELEMENT) && namespace.equals(RosterPacket.NAMESPACE)) { - iqPacket = parseRoster(parser); - } - else if (elementName.equals(Bind.ELEMENT) && namespace.equals(Bind.NAMESPACE)) { - iqPacket = parseResourceBinding(parser); - } + break; + case RosterPacket.ELEMENT: + if (namespace.equals(RosterPacket.NAMESPACE)) { + iqPacket = parseRoster(parser); + break; + } + case Bind.ELEMENT: + if (namespace.equals(Bind.NAMESPACE)) { + iqPacket = parseResourceBinding(parser); + break; + } // Otherwise, see if there is a registered provider for // this element name and namespace. - else { + default: IQProvider provider = ProviderManager.getIQProvider(elementName, namespace); if (provider != null) { iqPacket = provider.parse(parser); @@ -645,12 +652,14 @@ public class PacketParserUtils { iqPacket = new UnparsedResultIQ(parseElement(parser)); } } + break; } - } - else if (eventType == XmlPullParser.END_TAG) { - if (parser.getName().equals("iq")) { - done = true; + break; + case XmlPullParser.END_TAG: + if (parser.getDepth() == initialDepth) { + break outerloop; } + break; } } // Decide what to do when an IQ packet was not understood