|
40 | 40 | import java.beans.PropertyChangeListener; |
41 | 41 | import java.io.*; |
42 | 42 | import java.util.ArrayList; |
| 43 | +import java.util.HashSet; |
43 | 44 | import java.util.List; |
| 45 | +import java.util.Set; |
44 | 46 | import java.util.concurrent.atomic.AtomicBoolean; |
45 | 47 |
|
46 | 48 | import javax.swing.*; |
@@ -1497,29 +1499,36 @@ public void prepareBuild(File targetFolder) throws SketchException { |
1497 | 1499 | */ |
1498 | 1500 |
|
1499 | 1501 |
|
| 1502 | + private Set<File> existenceWarnings = new HashSet<>(); |
| 1503 | + |
1500 | 1504 | /** |
1501 | | - * Make sure the sketch hasn't been moved or deleted by some |
1502 | | - * nefarious user. If they did, try to re-create it and save. |
1503 | | - * Only checks to see if the main folder is still around, |
1504 | | - * but not its contents. |
| 1505 | + * Make sure the sketch hasn't been moved or deleted by a nefarious user. |
| 1506 | + * If they did, try to re-create it and save. Only checks whether the |
| 1507 | + * main folder is still around, but not its contents. |
1505 | 1508 | */ |
1506 | 1509 | public void ensureExistence() { |
1507 | 1510 | if (!folder.exists()) { |
1508 | | - // Disaster recovery, try to salvage what's there already. |
1509 | | - Messages.showWarning(Language.text("ensure_exist.messages.missing_sketch"), |
1510 | | - Language.text("ensure_exist.messages.missing_sketch.description")); |
1511 | | - try { |
1512 | | - folder.mkdirs(); |
1513 | | - modified = true; |
| 1511 | + // Avoid an infinite loop if we've already warned about this |
| 1512 | + // https://github.com/processing/processing/issues/4805 |
| 1513 | + if (!existenceWarnings.contains(folder)) { |
| 1514 | + existenceWarnings.add(folder); |
| 1515 | + |
| 1516 | + // Disaster recovery, try to salvage what's there already. |
| 1517 | + Messages.showWarning(Language.text("ensure_exist.messages.missing_sketch"), |
| 1518 | + Language.text("ensure_exist.messages.missing_sketch.description")); |
| 1519 | + try { |
| 1520 | + folder.mkdirs(); |
| 1521 | + modified = true; |
| 1522 | + |
| 1523 | + for (int i = 0; i < codeCount; i++) { |
| 1524 | + code[i].save(); // this will force a save |
| 1525 | + } |
| 1526 | + calcModified(); |
1514 | 1527 |
|
1515 | | - for (int i = 0; i < codeCount; i++) { |
1516 | | - code[i].save(); // this will force a save |
| 1528 | + } catch (Exception e) { |
| 1529 | + Messages.showWarning(Language.text("ensure_exist.messages.unrecoverable"), |
| 1530 | + Language.text("ensure_exist.messages.unrecoverable.description"), e); |
1517 | 1531 | } |
1518 | | - calcModified(); |
1519 | | - |
1520 | | - } catch (Exception e) { |
1521 | | - Messages.showWarning(Language.text("ensure_exist.messages.unrecoverable"), |
1522 | | - Language.text("ensure_exist.messages.unrecoverable.description"), e); |
1523 | 1532 | } |
1524 | 1533 | } |
1525 | 1534 | } |
|
0 commit comments