From 0798e1cf6f7382d15180f67e0a0ec742a6733d54 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Tue, 8 Apr 2014 12:35:22 +0200 Subject: [PATCH] Pass around sketch File objects instead of filenames This saves a few conversions from File object to String and is generally cleaner. --- app/src/processing/app/Base.java | 45 ++++++++++--------- app/src/processing/app/Editor.java | 26 +++++------ app/src/processing/app/Sketch.java | 11 +++-- .../processing/app/macosx/ThinkDifferent.java | 4 +- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 23d72f0d3..5a948a24a 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -462,7 +462,7 @@ public class Base { } boolean showEditor = (action == ACTION.GUI); - if (handleOpen(path, nextEditorLocation(), showEditor) == null) { + if (handleOpen(new File(path), nextEditorLocation(), showEditor) == null) { String mess = I18n.format(_("Failed to open sketch: \"{0}\""), path); // Open failure is fatal in upload/verify mode if (action == ACTION.VERIFY || action == ACTION.UPLOAD) @@ -654,7 +654,7 @@ public class Base { location = nextEditorLocation(); } // If file did not exist, null will be returned for the Editor - if (handleOpen(path, location, true) != null) { + if (handleOpen(new File(path), location, true) != null) { opened++; } } @@ -812,7 +812,7 @@ public class Base { * @param shift whether shift is pressed, which will invert prompt setting * @param noPrompt disable prompt, no matter the setting */ - protected String createNewUntitled() throws IOException { + protected File createNewUntitled() throws IOException { File newbieDir = null; String newbieName = null; @@ -859,7 +859,7 @@ public class Base { throw new IOException(); } FileUtils.copyFile(new File(getContentFile("examples"), "01.Basics" + File.separator + "BareMinimum" + File.separator + "BareMinimum.ino"), newbieFile); - return newbieFile.getAbsolutePath(); + return newbieFile; } @@ -869,9 +869,9 @@ public class Base { */ public void handleNew() throws Exception { try { - String path = createNewUntitled(); - if (path != null) { - Editor editor = handleOpen(path); + File file = createNewUntitled(); + if (file != null) { + Editor editor = handleOpen(file); editor.untitled = true; } @@ -900,9 +900,9 @@ public class Base { protected void handleNewReplaceImpl() { try { - String path = createNewUntitled(); - if (path != null) { - activeEditor.handleOpenInternal(path); + File file = createNewUntitled(); + if (file != null) { + activeEditor.handleOpenInternal(file); activeEditor.untitled = true; } // return true; @@ -918,14 +918,14 @@ public class Base { * Open a sketch, replacing the sketch in the current window. * @param path Location of the primary pde file for the sketch. */ - public void handleOpenReplace(String path) { + public void handleOpenReplace(File file) { if (!activeEditor.checkModified()) { return; // sketch was modified, and user canceled } // Close the running window, avoid window boogers with multiple sketches activeEditor.internalCloseRunner(); - boolean loaded = activeEditor.handleOpenInternal(path); + boolean loaded = activeEditor.handleOpenInternal(file); if (!loaded) { // replace the document without checking if that's ok handleNewReplaceImpl(); @@ -956,30 +956,30 @@ public class Base { File inputFile = fd.getSelectedFile(); Preferences.set("last.folder", inputFile.getAbsolutePath()); - handleOpen(inputFile.getAbsolutePath()); + handleOpen(inputFile); } /** * Open a sketch in a new window. - * @param path Path to the pde file for the sketch in question + * @param file File to open * @return the Editor object, so that properties (like 'untitled') * can be set by the caller * @throws Exception */ - public Editor handleOpen(String path) throws Exception { - return handleOpen(path, nextEditorLocation(), true); + public Editor handleOpen(File file) throws Exception { + return handleOpen(file, nextEditorLocation(), true); } - protected Editor handleOpen(String path, int[] location, boolean showEditor) throws Exception { + protected Editor handleOpen(File file, int[] location, boolean showEditor) throws Exception { // System.err.println("entering handleOpen " + path); - File file = new File(path); if (!file.exists()) return null; // System.err.println(" editors: " + editors); // Cycle through open windows to make sure that it's not already open. + String path = file.getAbsolutePath(); for (Editor editor : editors) { if (editor.getSketch().getMainFilePath().equals(path)) { editor.toFront(); @@ -1003,7 +1003,7 @@ public class Base { // } // System.err.println(" creating new editor"); - Editor editor = new Editor(this, path, location); + Editor editor = new Editor(this, file, location); // Editor editor = null; // try { // editor = new Editor(this, path, location); @@ -1746,16 +1746,17 @@ public class Base { ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { String path = e.getActionCommand(); - if (new File(path).exists()) { + File file = new File(path); + if (file.exists()) { boolean replace = replaceExisting; if ((e.getModifiers() & ActionEvent.SHIFT_MASK) != 0) { replace = !replace; } if (replace) { - handleOpenReplace(path); + handleOpenReplace(file); } else { try { - handleOpen(path); + handleOpen(file); } catch (Exception e1) { e1.printStackTrace(); } diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 3f2f7c601..57785f167 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -155,7 +155,7 @@ public class Editor extends JFrame implements RunnerListener { Runnable exportAppHandler; - public Editor(Base ibase, String path, int[] location) throws Exception { + public Editor(Base ibase, File file, int[] location) throws Exception { super("Arduino"); this.base = ibase; @@ -310,7 +310,7 @@ public class Editor extends JFrame implements RunnerListener { // System.out.println("t4"); // Open the document that was passed in - boolean loaded = handleOpenInternal(path); + boolean loaded = handleOpenInternal(file); if (!loaded) sketch = null; // System.out.println("t5"); @@ -2093,10 +2093,10 @@ public class Editor extends JFrame implements RunnerListener { * Open a sketch from a particular path, but don't check to save changes. * Used by Sketch.saveAs() to re-open a sketch after the "Save As" */ - protected void handleOpenUnchecked(String path, int codeIndex, + protected void handleOpenUnchecked(File file, int codeIndex, int selStart, int selStop, int scrollPos) { internalCloseRunner(); - handleOpenInternal(path); + handleOpenInternal(file); // Replacing a document that may be untitled. If this is an actual // untitled document, then editor.untitled will be set by Base. untitled = false; @@ -2111,10 +2111,9 @@ public class Editor extends JFrame implements RunnerListener { * Second stage of open, occurs after having checked to see if the * modifications (if any) to the previous sketch need to be saved. */ - protected boolean handleOpenInternal(String path) { + protected boolean handleOpenInternal(File file) { // check to make sure that this .pde file is // in a folder of the same name - File file = new File(path); String fileName = file.getName(); File parent = file.getParentFile(); String parentName = parent.getName(); @@ -2128,10 +2127,10 @@ public class Editor extends JFrame implements RunnerListener { } else if (altPdeFile.exists()) { // user selected a .java from the same sketch, but open the .pde instead - path = altPdeFile.getAbsolutePath(); + file = altPdeFile; } else if (altInoFile.exists()) { - path = altInoFile.getAbsolutePath(); - } else if (!path.endsWith(".ino") && !path.endsWith(".pde")) { + file = altInoFile; + } else if (!fileName.endsWith(".ino") && !fileName.endsWith(".pde")) { Base.showWarning(_("Bad file selected"), _("Processing can only open its own sketches\n" + "and other files ending in .ino or .pde"), null); @@ -2180,19 +2179,18 @@ public class Editor extends JFrame implements RunnerListener { } // copy the sketch inside File properPdeFile = new File(properFolder, file.getName()); - File origPdeFile = new File(path); try { - Base.copyFile(origPdeFile, properPdeFile); + Base.copyFile(file, properPdeFile); } catch (IOException e) { Base.showWarning(_("Error"), _("Could not copy to a proper location."), e); return false; } // remove the original file, so user doesn't get confused - origPdeFile.delete(); + file.delete(); // update with the new path - path = properPdeFile.getAbsolutePath(); + file = properPdeFile; } else if (result == JOptionPane.NO_OPTION) { return false; @@ -2200,7 +2198,7 @@ public class Editor extends JFrame implements RunnerListener { } try { - sketch = new Sketch(this, path); + sketch = new Sketch(this, file); } catch (IOException e) { Base.showWarning(_("Error"), _("Could not create the sketch."), e); return false; diff --git a/app/src/processing/app/Sketch.java b/app/src/processing/app/Sketch.java index 8cd95d7c4..4b2c6b44b 100644 --- a/app/src/processing/app/Sketch.java +++ b/app/src/processing/app/Sketch.java @@ -106,10 +106,10 @@ public class Sketch { * path is location of the main .pde file, because this is also * simplest to use when opening the file from the finder/explorer. */ - public Sketch(Editor editor, String path) throws IOException { + public Sketch(Editor editor, File file) throws IOException { this.editor = editor; - primaryFile = new File(path); + primaryFile = file; // get the name of the sketch by chopping .pde or .java // off of the main file name @@ -136,7 +136,7 @@ public class Sketch { tempBuildFolder = Base.getBuildFolder(); //Base.addBuildFolderToClassPath(); - folder = new File(new File(path).getParent()); + folder = new File(file.getParent()); //System.out.println("sketch dir is " + folder); load(); @@ -516,12 +516,11 @@ public class Sketch { // if successful, set base properties for the sketch File newMainFile = new File(newFolder, newName + ".ino"); - String newMainFilePath = newMainFile.getAbsolutePath(); // having saved everything and renamed the folder and the main .pde, // use the editor to re-open the sketch to re-init state // (unfortunately this will kill positions for carets etc) - editor.handleOpenUnchecked(newMainFilePath, + editor.handleOpenUnchecked(newMainFile, currentIndex, editor.getSelectionStart(), editor.getSelectionStop(), @@ -915,7 +914,7 @@ public class Sketch { File newFile = new File(newFolder, newName + ".ino"); code[0].saveAs(newFile); - editor.handleOpenUnchecked(newFile.getPath(), + editor.handleOpenUnchecked(newFile, currentIndex, editor.getSelectionStart(), editor.getSelectionStop(), diff --git a/app/src/processing/app/macosx/ThinkDifferent.java b/app/src/processing/app/macosx/ThinkDifferent.java index 6448b1e9a..0f226dd71 100644 --- a/app/src/processing/app/macosx/ThinkDifferent.java +++ b/app/src/processing/app/macosx/ThinkDifferent.java @@ -26,6 +26,8 @@ import processing.app.Base; import com.apple.eawt.*; +import java.io.File; + /** * Deal with issues related to thinking different. This handles the basic @@ -97,7 +99,7 @@ public class ThinkDifferent implements ApplicationListener { // System.out.println("got open file event " + ae.getFilename()); String filename = ae.getFilename(); try { - base.handleOpen(filename); + base.handleOpen(new File(filename)); } catch (Exception e) { e.printStackTrace(); }