Handle @property declarations in protocols. This was the root cause of the infinite recursion that Dominik addressed in 8be56d8149336ff82ea36d772fe4665cff64a660. In UIStateRestoration.h, the UIStateRestoring protocol has a property of type id<UIStateRestoring>, and the "<UIStateRestoring>" part of that was incorrectly parsed as a list of protocols that UIStateRestoring inherits from. As a result, UIStateRestoring was added to its own list of implemented protocols. It makes sense to also have Dominik's change as a defensive measure. Another possibility would be to have that method return a set instead of an array.