From ab9ba6ad4b6e05d860226d5ee609a64ea0ba8e1a Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 20 Jul 2020 17:21:23 +0200 Subject: [PATCH] Use Optional<> for getting selected Board/Platform Optionals should make explicit the possibility to get empty results from BaseNoGui.getTargetBoard/Platform methods. --- app/src/processing/app/Base.java | 44 ++++++------ app/src/processing/app/Editor.java | 7 +- .../processing/app/syntax/PdeKeywords.java | 7 +- .../processing/app/DefaultTargetTest.java | 13 +++- .../app/debug/UploaderFactoryTest.java | 2 - arduino-core/src/cc/arduino/Compiler.java | 6 +- .../uploaders/GenericNetworkUploader.java | 15 +++- .../packages/uploaders/SSHUploader.java | 20 ++++-- .../packages/uploaders/SerialUploader.java | 55 +++++++++----- .../src/processing/app/BaseNoGui.java | 71 ++++++++++--------- .../app/helpers/CommandlineParser.java | 6 +- 11 files changed, 153 insertions(+), 93 deletions(-) diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 1e4819bba..096a5b5fe 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -285,9 +285,7 @@ public class Base { rebuildBoardsMenu(); rebuildProgrammerMenu(); } else { - TargetBoard lastSelectedBoard = BaseNoGui.getTargetBoard(); - if (lastSelectedBoard != null) - BaseNoGui.selectBoard(lastSelectedBoard); + BaseNoGui.getTargetBoard().ifPresent(board -> BaseNoGui.selectBoard(board)); } // Setup board-dependent variables. @@ -1132,9 +1130,7 @@ public class Base { importMenu.addSeparator(); // Split between user supplied libraries and IDE libraries - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); - - if (targetPlatform != null) { + if (BaseNoGui.getTargetPlatform().isPresent()) { LibraryList libs = getSortedLibraries(); String lastLibType = null; for (UserLibrary lib : libs) { @@ -1189,17 +1185,20 @@ public class Base { String boardId = null; String referencedPlatformName = null; String myArch = null; - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); - if (targetPlatform != null) { - myArch = targetPlatform.getId(); - boardId = BaseNoGui.getTargetBoard().getName(); + Optional targetPlatform = BaseNoGui.getTargetPlatform(); + if (targetPlatform.isPresent()) { + myArch = targetPlatform.get().getId(); + Optional board = BaseNoGui.getTargetBoard(); + if (board.isPresent()) { + boardId = board.get().getName(); + } String core = BaseNoGui.getBoardPreferences().get("build.core", "arduino"); if (core.contains(":")) { String refcore = core.split(":")[0]; - TargetPlatform referencedPlatform = BaseNoGui.getTargetPlatform(refcore, myArch); - if (referencedPlatform != null) { - referencedPlatformName = referencedPlatform.getPreferences().get("name"); - } + Optional referencedPlatform = BaseNoGui.getTargetPlatform(refcore, myArch); + if (referencedPlatform.isPresent()) { + referencedPlatformName = referencedPlatform.get().getPreferences().get("name"); + }; } } @@ -1346,9 +1345,9 @@ public class Base { BaseNoGui.onBoardOrPortChange(); // reload keywords when package/platform changes - TargetPlatform tp = BaseNoGui.getTargetPlatform(); - if (tp != null) { - String platformFolder = tp.getFolder().getAbsolutePath(); + Optional tp = BaseNoGui.getTargetPlatform(); + if (tp.isPresent()) { + String platformFolder = tp.get().getFolder().getAbsolutePath(); if (priorPlatformFolder == null || !priorPlatformFolder.equals(platformFolder) || newLibraryImported) { pdeKeywords = new PdeKeywords(); pdeKeywords.reload(); @@ -1701,9 +1700,11 @@ public class Base { programmerMenus = new LinkedList<>(); ButtonGroup group = new ButtonGroup(); - TargetBoard board = BaseNoGui.getTargetBoard(); + Optional mayBoard = BaseNoGui.getTargetBoard(); + if (!mayBoard.isPresent()) return; + TargetBoard board = mayBoard.get(); TargetPlatform boardPlatform = board.getContainerPlatform(); - TargetPlatform corePlatform = null; + Optional corePlatform = Optional.empty(); String core = board.getPreferences().get("build.core"); if (core != null && core.contains(":")) { @@ -1712,8 +1713,9 @@ public class Base { } addProgrammersForPlatform(boardPlatform, programmerMenus, group); - if (corePlatform != null) - addProgrammersForPlatform(corePlatform, programmerMenus, group); + if (corePlatform.isPresent()) { + addProgrammersForPlatform(corePlatform.get(), programmerMenus, group); + } if (programmerMenus.isEmpty()) { JMenuItem item = new JMenuItem(tr("No programmers available for this board")); diff --git a/app/src/processing/app/Editor.java b/app/src/processing/app/Editor.java index 2ec29c498..eccb822fe 100644 --- a/app/src/processing/app/Editor.java +++ b/app/src/processing/app/Editor.java @@ -57,6 +57,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Predicate; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -2587,9 +2588,9 @@ public class Editor extends JFrame implements RunnerListener { // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . protected void onBoardOrPortChange() { - TargetBoard board = BaseNoGui.getTargetBoard(); - if (board != null) - lineStatus.setBoardName(board.getName()); + Optional board = BaseNoGui.getTargetBoard(); + if (board.isPresent()) + lineStatus.setBoardName(board.get().getName()); else lineStatus.setBoardName("-"); lineStatus.setPort(PreferencesData.get("serial.port")); diff --git a/app/src/processing/app/syntax/PdeKeywords.java b/app/src/processing/app/syntax/PdeKeywords.java index 838800b3d..472a15354 100644 --- a/app/src/processing/app/syntax/PdeKeywords.java +++ b/app/src/processing/app/syntax/PdeKeywords.java @@ -38,6 +38,7 @@ import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.regex.Pattern; @@ -84,9 +85,9 @@ public class PdeKeywords { public void reload() { try { parseKeywordsTxt(new File(BaseNoGui.getContentFile("lib"), "keywords.txt")); - TargetPlatform tp = BaseNoGui.getTargetPlatform(); - if (tp != null) { - File platformKeywords = new File(tp.getFolder(), "keywords.txt"); + Optional tp = BaseNoGui.getTargetPlatform(); + if (tp.isPresent()) { + File platformKeywords = new File(tp.get().getFolder(), "keywords.txt"); if (platformKeywords.exists()) parseKeywordsTxt(platformKeywords); } for (UserLibrary lib : BaseNoGui.librariesIndexer.getInstalledLibraries()) { diff --git a/app/test/processing/app/DefaultTargetTest.java b/app/test/processing/app/DefaultTargetTest.java index 24767bee3..3454708f5 100644 --- a/app/test/processing/app/DefaultTargetTest.java +++ b/app/test/processing/app/DefaultTargetTest.java @@ -35,7 +35,12 @@ import org.junit.Before; import org.junit.Test; import processing.app.debug.TargetBoard; +import processing.app.debug.TargetPlatform; + import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Optional; public class DefaultTargetTest extends AbstractWithPreferencesTest { @@ -60,9 +65,11 @@ public class DefaultTargetTest extends AbstractWithPreferencesTest { createBase(); // skip test if no target platforms are available - Assume.assumeNotNull(BaseNoGui.getTargetPlatform()); + Optional targetPlatform = BaseNoGui.getTargetPlatform(); + Assume.assumeTrue(targetPlatform.isPresent()); - TargetBoard targetBoard = BaseNoGui.getTargetBoard(); - assertNotEquals("unreal_board", targetBoard.getId()); + Optional targetBoard = BaseNoGui.getTargetBoard(); + assertTrue(targetBoard.isPresent()); + assertNotEquals("unreal_board", targetBoard.get().getId()); } } diff --git a/app/test/processing/app/debug/UploaderFactoryTest.java b/app/test/processing/app/debug/UploaderFactoryTest.java index 1d197e6a5..a2f850cde 100644 --- a/app/test/processing/app/debug/UploaderFactoryTest.java +++ b/app/test/processing/app/debug/UploaderFactoryTest.java @@ -31,8 +31,6 @@ package processing.app.debug; import static org.junit.Assert.assertTrue; -import java.util.HashMap; - import org.junit.Test; import cc.arduino.packages.BoardPort; diff --git a/arduino-core/src/cc/arduino/Compiler.java b/arduino-core/src/cc/arduino/Compiler.java index c2c5b0ff6..c84ecf441 100644 --- a/arduino-core/src/cc/arduino/Compiler.java +++ b/arduino-core/src/cc/arduino/Compiler.java @@ -53,6 +53,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -163,11 +164,12 @@ public class Compiler implements MessageConsumer { this.buildPath = sketch.getBuildPath().getAbsolutePath(); this.buildCache = BaseNoGui.getCachePath(); - TargetBoard board = BaseNoGui.getTargetBoard(); - if (board == null) { + Optional mayBoard = BaseNoGui.getTargetBoard(); + if (!mayBoard.isPresent()) { throw new RunnerException("Board is not selected"); } + TargetBoard board = mayBoard.get(); TargetPlatform platform = board.getContainerPlatform(); TargetPackage aPackage = platform.getContainerPackage(); String vidpid = VIDPID(); diff --git a/arduino-core/src/cc/arduino/packages/uploaders/GenericNetworkUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/GenericNetworkUploader.java index 0cf2ba04b..a344e1937 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/GenericNetworkUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/GenericNetworkUploader.java @@ -37,6 +37,10 @@ import processing.app.helpers.StringReplacer; import java.io.File; import java.util.List; +import java.util.Optional; + +import static processing.app.I18n.format; +import static processing.app.I18n.tr; public class GenericNetworkUploader extends Uploader { @@ -58,19 +62,26 @@ public class GenericNetworkUploader extends Uploader { @Override public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List warningsAccumulator) throws Exception { - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); PreferencesMap prefs = PreferencesData.getMap(); PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences(); if (boardPreferences != null) { prefs.putAll(boardPreferences); } + + Optional targetPlatform = BaseNoGui.getTargetPlatform(); String tool = prefs.getOrExcept("upload.tool"); if (tool.contains(":")) { String[] split = tool.split(":", 2); targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0} from package {1}"), tool, split[0])); + } tool = split[1]; } - prefs.putAll(targetPlatform.getTool(tool)); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0}"), tool)); + } + prefs.putAll(targetPlatform.get().getTool(tool)); String password = ""; if(requiresAuthorization()){ diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java index fb0eb3ffb..d3c672ff1 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SSHUploader.java @@ -42,7 +42,6 @@ import processing.app.PreferencesData; import processing.app.debug.RunnerException; import processing.app.debug.TargetPlatform; import processing.app.helpers.PreferencesMap; -import processing.app.helpers.PreferencesMapException; import processing.app.helpers.StringReplacer; import java.io.File; @@ -51,10 +50,12 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import org.apache.commons.lang3.StringUtils; +import static processing.app.I18n.format; import static processing.app.I18n.tr; public class SSHUploader extends Uploader { @@ -79,31 +80,38 @@ public class SSHUploader extends Uploader { } @Override - public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List warningsAccumulator) throws RunnerException, PreferencesMapException { + public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List warningsAccumulator) throws Exception { if (usingProgrammer) { throw new RunnerException(tr("Network upload using programmer not supported")); } - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); PreferencesMap prefs = PreferencesData.getMap(); PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences(); if (boardPreferences != null) { prefs.putAll(boardPreferences); } + + Optional targetPlatform = BaseNoGui.getTargetPlatform(); String tool = prefs.getOrExcept("upload.tool"); if (tool.contains(":")) { String[] split = tool.split(":", 2); targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0} from package {1}"), tool, split[0])); + } tool = split[1]; } - prefs.putAll(targetPlatform.getTool(tool)); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0}"), tool)); + } + prefs.putAll(targetPlatform.get().getTool(tool)); - boolean coreMissesRemoteUploadTool = targetPlatform.getTool(tool + "_remote").isEmpty(); + boolean coreMissesRemoteUploadTool = targetPlatform.get().getTool(tool + "_remote").isEmpty(); if (coreMissesRemoteUploadTool) { prefs.put("upload.pattern", "/usr/bin/run-avrdude /tmp/sketch.hex"); } else { - prefs.putAll(targetPlatform.getTool(tool + "_remote")); + prefs.putAll(targetPlatform.get().getTool(tool + "_remote")); } prefs.put("build.path", buildPath); diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index 96ba383ac..bebf7c207 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -47,7 +47,9 @@ import processing.app.helpers.StringReplacer; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import static processing.app.I18n.format; import static processing.app.I18n.tr; public class SerialUploader extends Uploader { @@ -65,19 +67,26 @@ public class SerialUploader extends Uploader { @Override public boolean uploadUsingPreferences(File sourcePath, String buildPath, String className, boolean usingProgrammer, List warningsAccumulator) throws Exception { // FIXME: Preferences should be reorganized - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); PreferencesMap prefs = PreferencesData.getMap(); PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences(); if (boardPreferences != null) { prefs.putAll(boardPreferences); } + + Optional targetPlatform = BaseNoGui.getTargetPlatform(); String tool = prefs.getOrExcept("upload.tool"); if (tool.contains(":")) { String[] split = tool.split(":", 2); targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0} from package {1}"), tool, split[0])); + } tool = split[1]; } - prefs.putAll(targetPlatform.getTool(tool)); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0}"), tool)); + } + prefs.putAll(targetPlatform.get().getTool(tool)); if (programmerPid != null && programmerPid.isAlive()) { // kill the previous programmer @@ -279,24 +288,30 @@ public class SerialUploader extends Uploader { private boolean uploadUsingProgrammer(String buildPath, String className) throws Exception { - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); + Optional targetPlatform = BaseNoGui.getTargetPlatform(); String programmer = PreferencesData.get("programmer"); if (programmer.contains(":")) { String[] split = programmer.split(":", 2); targetPlatform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0} from package {1}"), programmer, split[0])); + } programmer = split[1]; } + if (!targetPlatform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0}"), programmer)); + } PreferencesMap prefs = PreferencesData.getMap(); PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences(); if (boardPreferences != null) { prefs.putAll(boardPreferences); } - PreferencesMap programmerPrefs = targetPlatform.getProgrammer(programmer); + PreferencesMap programmerPrefs = targetPlatform.get().getProgrammer(programmer); if (programmerPrefs == null) throw new RunnerException( tr("Please select a programmer from Tools->Programmer menu")); - prefs.putAll(targetPlatform.getTool(programmerPrefs.getOrExcept("program.tool"))); + prefs.putAll(targetPlatform.get().getTool(programmerPrefs.getOrExcept("program.tool"))); prefs.putAll(programmerPrefs); prefs.put("build.path", buildPath); @@ -317,22 +332,26 @@ public class SerialUploader extends Uploader { @Override public boolean burnBootloader() throws Exception { - TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform(); + TargetPlatform targetPlatform = BaseNoGui.getTargetPlatform() + .orElseThrow(() -> new RunnerException(tr("Please select a programmer from Tools->Programmer menu"))); // Find preferences for the selected programmer - PreferencesMap programmerPrefs; + PreferencesMap programmerPrefs = null; String programmer = PreferencesData.get("programmer"); if (programmer.contains(":")) { String[] split = programmer.split(":", 2); - TargetPlatform platform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + Optional platform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (!platform.isPresent()) { + throw new Exception(format(tr("Could not find tool {0} from package {1}"), programmer, split[0])); + } programmer = split[1]; - programmerPrefs = platform.getProgrammer(programmer); + programmerPrefs = platform.get().getProgrammer(programmer); } else { programmerPrefs = targetPlatform.getProgrammer(programmer); } - if (programmerPrefs == null) - throw new RunnerException( - tr("Please select a programmer from Tools->Programmer menu")); + if (programmerPrefs == null) { + throw new RunnerException(tr("Please select a programmer from Tools->Programmer menu")); + } // Build configuration for the current programmer PreferencesMap prefs = PreferencesData.getMap(); @@ -347,15 +366,19 @@ public class SerialUploader extends Uploader { String tool = prefs.getOrExcept("bootloader.tool"); if (tool.contains(":")) { String[] split = tool.split(":", 2); - TargetPlatform platform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); tool = split[1]; - toolPrefs.putAll(platform.getTool(tool)); - if (toolPrefs.size() == 0) + Optional platform = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (platform.isPresent()) { + toolPrefs.putAll(platform.get().getTool(tool)); + } + if (toolPrefs.size() == 0) { throw new RunnerException(I18n.format(tr("Could not find tool {0} from package {1}"), tool, split[0])); + } } toolPrefs.putAll(targetPlatform.getTool(tool)); - if (toolPrefs.size() == 0) + if (toolPrefs.size() == 0) { throw new RunnerException(I18n.format(tr("Could not find tool {0}"), tool)); + } // Merge tool with global configuration prefs.putAll(toolPrefs); diff --git a/arduino-core/src/processing/app/BaseNoGui.java b/arduino-core/src/processing/app/BaseNoGui.java index e9adb255b..438771b86 100644 --- a/arduino-core/src/processing/app/BaseNoGui.java +++ b/arduino-core/src/processing/app/BaseNoGui.java @@ -132,9 +132,10 @@ public class BaseNoGui { } static public PreferencesMap getBoardPreferences() { - TargetBoard board = getTargetBoard(); - if (board == null) + Optional mayBoard = getTargetBoard(); + if (!mayBoard.isPresent()) return null; + TargetBoard board = mayBoard.get(); String boardId = board.getId(); PreferencesMap prefs = new PreferencesMap(board.getPreferences()); @@ -161,19 +162,24 @@ public class BaseNoGui { List requiredTools = new ArrayList<>(); // Add all tools dependencies specified in package index - ContributedPlatform p = indexer.getContributedPlaform(getTargetPlatform()); - if (p != null) - requiredTools.addAll(p.getResolvedTools()); + Optional targetPlatform = getTargetPlatform(); + if (targetPlatform.isPresent()) { + ContributedPlatform p = indexer.getContributedPlaform(targetPlatform.get()); + if (p != null) { + requiredTools.addAll(p.getResolvedTools()); + } + } // Add all tools dependencies from the (possibily) referenced core String core = prefs.get("build.core"); if (core != null && core.contains(":")) { String split[] = core.split(":"); - TargetPlatform referenced = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); - if (referenced != null) { - ContributedPlatform referencedPlatform = indexer.getContributedPlaform(referenced); - if (referencedPlatform != null) + Optional referenced = BaseNoGui.getCurrentTargetPlatformFromPackage(split[0]); + if (referenced.isPresent()) { + ContributedPlatform referencedPlatform = indexer.getContributedPlaform(referenced.get()); + if (referencedPlatform != null) { requiredTools.addAll(referencedPlatform.getResolvedTools()); + } } else { String msg = tr("The current selected board needs the core '{0}' that is not installed."); System.out.println(I18n.format(msg, core)); @@ -204,7 +210,7 @@ public class BaseNoGui { return new File(installationFolder, name); } - static public TargetPlatform getCurrentTargetPlatformFromPackage(String pack) { + static public Optional getCurrentTargetPlatformFromPackage(String pack) { return getTargetPlatform(pack, PreferencesData.get("target_platform")); } @@ -371,12 +377,13 @@ public class BaseNoGui { return sketchbookPath; } - public static TargetBoard getTargetBoard() { - TargetPlatform targetPlatform = getTargetPlatform(); - if (targetPlatform == null) - return null; + public static Optional getTargetBoard() { + Optional targetPlatform = getTargetPlatform(); + if (!targetPlatform.isPresent()) { + return Optional.empty(); + } String boardId = PreferencesData.get("board"); - return targetPlatform.getBoard(boardId); + return Optional.ofNullable(targetPlatform.get().getBoard(boardId)); } /** @@ -385,8 +392,8 @@ public class BaseNoGui { * @param packageName * @return */ - static public TargetPackage getTargetPackage(String packageName) { - return packages.get(packageName); + static public Optional getTargetPackage(String packageName) { + return Optional.ofNullable(packages.get(packageName)); } /** @@ -394,7 +401,7 @@ public class BaseNoGui { * * @return */ - static public TargetPlatform getTargetPlatform() { + static public Optional getTargetPlatform() { String packageName = PreferencesData.get("target_package"); String platformName = PreferencesData.get("target_platform"); return getTargetPlatform(packageName, platformName); @@ -407,12 +414,12 @@ public class BaseNoGui { * @param platformName * @return */ - static public TargetPlatform getTargetPlatform(String packageName, - String platformName) { - TargetPackage p = packages.get(packageName); - if (p == null) - return null; - return p.get(platformName); + static public Optional getTargetPlatform(String packageName, String platformName) { + Optional p = getTargetPackage(packageName); + if (!p.isPresent()) { + return Optional.empty(); + } + return Optional.ofNullable(p.get().get(platformName)); } static public File getToolsFolder() { @@ -649,20 +656,20 @@ public class BaseNoGui { // Add IDE libraries folder librariesFolders.add(new UserLibraryFolder(getContentFile("libraries"), Location.IDE_BUILTIN)); - TargetPlatform targetPlatform = getTargetPlatform(); - if (targetPlatform != null) { + Optional targetPlatform = getTargetPlatform(); + if (targetPlatform.isPresent()) { String core = getBoardPreferences().get("build.core", "arduino"); if (core.contains(":")) { String referencedCore = core.split(":")[0]; - TargetPlatform referencedPlatform = getTargetPlatform(referencedCore, targetPlatform.getId()); - if (referencedPlatform != null) { - File referencedPlatformFolder = referencedPlatform.getFolder(); + Optional referencedPlatform = getTargetPlatform(referencedCore, targetPlatform.get().getId()); + if (referencedPlatform.isPresent()) { + File referencedPlatformFolder = referencedPlatform.get().getFolder(); // Add libraries folder for the referenced platform File folder = new File(referencedPlatformFolder, "libraries"); librariesFolders.add(new UserLibraryFolder(folder, Location.REFERENCED_CORE)); } } - File platformFolder = targetPlatform.getFolder(); + File platformFolder = targetPlatform.get().getFolder(); // Add libraries folder for the selected platform File folder = new File(platformFolder, "libraries"); librariesFolders.add(new UserLibraryFolder(folder, Location.CORE)); @@ -675,8 +682,8 @@ public class BaseNoGui { // Libraries located in the latest folders on the list can override // other libraries with the same name. librariesIndexer.setLibrariesFolders(librariesFolders); - if (getTargetPlatform() != null) { - librariesIndexer.setArchitecturePriority(getTargetPlatform().getId()); + if (targetPlatform.isPresent()) { + librariesIndexer.setArchitecturePriority(targetPlatform.get().getId()); } librariesIndexer.rescanLibraries(); diff --git a/arduino-core/src/processing/app/helpers/CommandlineParser.java b/arduino-core/src/processing/app/helpers/CommandlineParser.java index 4c8b3a241..714cd6f1c 100644 --- a/arduino-core/src/processing/app/helpers/CommandlineParser.java +++ b/arduino-core/src/processing/app/helpers/CommandlineParser.java @@ -232,13 +232,13 @@ public class CommandlineParser { BaseNoGui.showError(null, I18n.format(tr("{0}: Invalid board name, it should be of the form \"package:arch:board\" or \"package:arch:board:options\""), selectBoard), 3); } - TargetPackage targetPackage = BaseNoGui.getTargetPackage(split[0]); - if (targetPackage == null) { + Optional targetPackage = BaseNoGui.getTargetPackage(split[0]); + if (!targetPackage.isPresent()) { BaseNoGui.showError(null, I18n.format(tr("{0}: Unknown package"), split[0]), 3); return; } - TargetPlatform targetPlatform = targetPackage.get(split[1]); + TargetPlatform targetPlatform = targetPackage.get().get(split[1]); if (targetPlatform == null) { BaseNoGui.showError(null, I18n.format(tr("{0}: Unknown architecture"), split[1]), 3); return;