package gw.rating.rtm.valueprovider uses java.util.LinkedList class Parser { var _cls : String as readonly ClassName var _args : String[] as readonly Arguments static public function parse(s : String) : Parser { var parser = new Parser(s != null ? s.trim() : s) return parser } override public function toString() : String { return (_cls ?: "") + "(" + _args.join(",") + "):" + _args.Count } private construct(s : String) { _cls = getClassName(s) _args = getArgs(s) } private function getClassName(s : String) : String { if (s == null) return null // get everythign before optional open bracket var m = s.match("^([^\\(]+).*$") if (m == null or m.Groups.Count < 1) return null var cls = m.get(0).trim() // verify that returned string consists only of word characters and periods return cls.matches("[\\w\\.]+") ? cls : null } private function getArgs(s : String) : String[] { if (s == null) return {} // get everything between open and close brackets var m = s.trim().match("^[^\\(]+\\(([^\\)]+)\\)$") if (m == null or m.Groups.Count < 1) return {} var res = new LinkedList() m.get(0).split(",").each(\ a -> res.add(a.trim())) return res.toTypedArray() } }