48 49 boolean isEmptyOrComment() { 50 return emptyOrCommentPattern.matcher(text).matches(); 51 } 52 53 boolean isInfo() { 54 return infoPattern.matcher(text).matches(); 55 } 56 57 boolean hasContinuation() { 58 return (next != null) && text.endsWith("\\"); 59 } 60 61 Line insertAfter(String text) { 62 Line l = new Line(text); 63 insertAfter(l); 64 return l; 65 } 66 67 void insertAfter(Line l) { 68 assert prev == null && next == null; 69 l.prev = this; 70 l.next = next; 71 if (next == null) 72 lastLine = l; 73 else 74 next.prev = l; 75 next = l; 76 } 77 78 Line insertBefore(String text) { 79 Line l = new Line(text); 80 insertBefore(l); 81 return l; 82 } 83 84 void insertBefore(Line l) { 85 assert prev == null && next == null; 86 l.prev = prev; 87 l.next = this; 88 if (prev == null) 89 firstLine = l; 90 else 91 prev.next = l; 92 prev = l; 93 } 94 95 void remove() { 96 if (prev == null) 97 firstLine = next; 98 else 99 prev.next = next; 100 if (next == null) 101 lastLine = prev; 102 else 103 next.prev = prev; 104 prev = null; 105 next = null; 393 sb.append(sep); 394 sb.append(i++); 395 sb.append(": "); 396 sep = ""; 397 for (String s: f.values) { 398 sb.append(sep); 399 sb.append(s); 400 sep = " or "; 401 } 402 sep = ", "; 403 } 404 return sb.toString(); 405 } 406 } 407 408 Line firstLine; 409 Line lastLine; 410 Map<String, Message> messages = new TreeMap<String, Message>(); 411 412 MessageFile(File file) throws IOException { 413 Reader in = new FileReader(file); 414 try { 415 read(in); 416 } finally { 417 in.close(); 418 } 419 } 420 421 MessageFile(Reader in) throws IOException { 422 read(in); 423 } 424 425 final void read(Reader in) throws IOException { 426 BufferedReader br = (in instanceof BufferedReader) 427 ? (BufferedReader) in 428 : new BufferedReader(in); 429 String line; 430 while ((line = br.readLine()) != null) { 431 Line l; 432 if (firstLine == null) 433 l = firstLine = lastLine = new Line(line); 434 else 435 l = lastLine.insertAfter(line); 436 if (line.startsWith("compiler.")) { 437 int eq = line.indexOf("="); 438 if (eq > 0) 439 messages.put(line.substring(0, eq), new Message(l)); 440 } 441 } 442 } 443 444 void write(File file) throws IOException { 445 Writer out = new FileWriter(file); 446 try { 447 write(out); 448 } finally { 449 out.close(); 450 } 451 } 452 453 void write(Writer out) throws IOException { 454 BufferedWriter bw = (out instanceof BufferedWriter) 455 ? (BufferedWriter) out 456 : new BufferedWriter(out); 457 for (Line l = firstLine; l != null; l = l.next) { 458 bw.write(l.text); 459 bw.write("\n"); // always use Unix line endings 460 } 461 bw.flush(); 462 } 463 } | 48 49 boolean isEmptyOrComment() { 50 return emptyOrCommentPattern.matcher(text).matches(); 51 } 52 53 boolean isInfo() { 54 return infoPattern.matcher(text).matches(); 55 } 56 57 boolean hasContinuation() { 58 return (next != null) && text.endsWith("\\"); 59 } 60 61 Line insertAfter(String text) { 62 Line l = new Line(text); 63 insertAfter(l); 64 return l; 65 } 66 67 void insertAfter(Line l) { 68 l.prev = this; 69 l.next = next; 70 if (next == null) 71 lastLine = l; 72 else 73 next.prev = l; 74 next = l; 75 } 76 77 Line insertBefore(String text) { 78 Line l = new Line(text); 79 insertBefore(l); 80 return l; 81 } 82 83 void insertBefore(Line l) { 84 l.prev = prev; 85 l.next = this; 86 if (prev == null) 87 firstLine = l; 88 else 89 prev.next = l; 90 prev = l; 91 } 92 93 void remove() { 94 if (prev == null) 95 firstLine = next; 96 else 97 prev.next = next; 98 if (next == null) 99 lastLine = prev; 100 else 101 next.prev = prev; 102 prev = null; 103 next = null; 391 sb.append(sep); 392 sb.append(i++); 393 sb.append(": "); 394 sep = ""; 395 for (String s: f.values) { 396 sb.append(sep); 397 sb.append(s); 398 sep = " or "; 399 } 400 sep = ", "; 401 } 402 return sb.toString(); 403 } 404 } 405 406 Line firstLine; 407 Line lastLine; 408 Map<String, Message> messages = new TreeMap<String, Message>(); 409 410 MessageFile(File file) throws IOException { 411 try(Reader in = new FileReader(file)) { 412 read(in); 413 } 414 } 415 416 MessageFile(Reader in) throws IOException { 417 read(in); 418 } 419 420 final void read(Reader in) throws IOException { 421 BufferedReader br = (in instanceof BufferedReader) 422 ? (BufferedReader) in 423 : new BufferedReader(in); 424 String line; 425 while ((line = br.readLine()) != null) { 426 Line l; 427 if (firstLine == null) 428 l = firstLine = lastLine = new Line(line); 429 else 430 l = lastLine.insertAfter(line); 431 if (line.startsWith("compiler.")) { 432 int eq = line.indexOf("="); 433 if (eq > 0) 434 messages.put(line.substring(0, eq), new Message(l)); 435 } 436 } 437 } 438 439 void write(File file) throws IOException { 440 try(Writer out = new FileWriter(file)) { 441 write(out); 442 } 443 } 444 445 void write(Writer out) throws IOException { 446 BufferedWriter bw = (out instanceof BufferedWriter) 447 ? (BufferedWriter) out 448 : new BufferedWriter(out); 449 for (Line l = firstLine; l != null; l = l.next) { 450 bw.write(l.text); 451 bw.write("\n"); // always use Unix line endings 452 } 453 bw.flush(); 454 } 455 } |