public void parseAllPatches() throws PatchSyntaxException { final ListIterator<String> iterator = myLines.listIterator(); if (!iterator.hasNext()) { myPatches = Collections.emptyList(); return; } String next; boolean containsAdditional = false; while (iterator.hasNext()) { next = iterator.next(); final boolean containsAdditionalNow = myAdditionalInfoParser.testIsStart(next); if (containsAdditionalNow && containsAdditional) { myAdditionalInfoParser.acceptError( new PatchSyntaxException( iterator.previousIndex(), "Contains additional information without patch itself")); } if (containsAdditionalNow) { containsAdditional = containsAdditionalNow; myAdditionalInfoParser.parse(next, iterator); if (!iterator.hasNext()) { myAdditionalInfoParser.acceptError( new PatchSyntaxException( iterator.previousIndex(), "Contains additional information without patch itself")); break; } next = iterator.next(); } if (myPatchContentParser.testIsStart(next)) { myPatchContentParser.parse(next, iterator); // iterator.previous(); // to correctly initialize next if (containsAdditional) { final String lastName = myPatchContentParser.getLastName(); if (lastName == null) { myAdditionalInfoParser.acceptError( new PatchSyntaxException( iterator.previousIndex(), "Contains additional information without patch itself")); } else { myAdditionalInfoParser.copyToResult(lastName); } } containsAdditional = false; } } myPatches = myPatchContentParser.getResult(); }