22 * KeY is licensed under the GNU General Public License Version 2
33 * SPDX-License-Identifier: GPL-2.0-only */
44
5- package de .uka .ilkd .key ;
6-
75import de .uka .ilkd .key .nparser .KeYLexer ;
86import de .uka .ilkd .key .nparser .ParsingFacade ;
97import de .uka .ilkd .key .settings .ProofSettings ;
@@ -107,7 +105,7 @@ private static void rewrite(Path file) throws IOException {
107105 settings .loadSettingsFromPropertyString (text .substring (1 , text .length () - 1 ));
108106 output .append (settings .settingsToString ());
109107
110- while (iterator .hasNext () && token .getType () != KeYLexer .SEMI ) {
108+ while (iterator .hasNext () && token .getType () != KeYLexer .RBRACE ) {
111109 token = iterator .next ();
112110 }
113111 } else {
@@ -122,11 +120,20 @@ private static void rewrite(Path file) throws IOException {
122120
123121 boolean write = true ;
124122 try {
123+ // Try to parse the new content.
125124 ParsingFacade .parseFile (CharStreams .fromString (output .toString ()));
126125 } catch (ParseCancellationException e ) {
127- write = false ;
128- LOGGER .error ("Error parsing after rewrite file {}: {}" , file , e .getMessage (), e );
129- System .err .println (output );
126+ try {
127+ // if failed, check if the old content is also not parseable.
128+ ParsingFacade .parseFile (CharStreams .fromString (output .toString ()));
129+
130+ // on success: do not write this file.
131+ write = false ;
132+ LOGGER .error ("Error parsing after rewrite file {}: {}" , file , e .getMessage (), e );
133+ Files .writeString (file .resolveSibling (file .getFileName () + "-rewritten.error" ), output .toString ());
134+ } catch (ParseCancellationException e2 ) {
135+ //on error write file.
136+ }
130137 }
131138
132139 if (write || ALWAYS_WRITE ) {
0 commit comments