public static CObject parse(CLibrary parent, boolean protocol, Stream s) { String name = s.consumeID(); CObject obj = protocol ? parent.getInterface(name) : parent.getObject(name); Reporter.setObject(obj); // Remove categories if (s.peekChar() == '(') s.consumeBalanced('(', ')'); // Find superclass if (s.peekChar() == ':') { s.consumeChars(1); obj.setSuperclass(s.consumeID()); } // Find interfaces if (s.peekChar() == '<') { String interfs = s.consumeBalanced('<', '>'); interfs = interfs.substring(1, interfs.length() - 1).trim(); StringTokenizer tk = new StringTokenizer(interfs, ","); while (tk.hasMoreTokens()) obj.addInterface(tk.nextToken().trim()); } if (s.peekChar() == '{') s.consumeBalanced('{', '}'); if (s.peekChar() == ';') s.consumeChars(1); return obj; }