diff --git a/app/src/processing/app/Base.java b/app/src/processing/app/Base.java index 23a9a02d8..c149583a4 100644 --- a/app/src/processing/app/Base.java +++ b/app/src/processing/app/Base.java @@ -294,8 +294,6 @@ public class Base { System.out.println(_("No valid configured cores found! Exiting...")); System.exit(3); } - for (TargetPackage pack : packages.values()) - pack.resolveReferencedPlatforms(packages); // Setup board-dependent variables. onBoardOrPortChange(); @@ -1087,19 +1085,23 @@ public class Base { importMenu.add(addLibraryMenuItem); // Split between user supplied libraries and IDE libraries - TargetBoard board = getTargetBoard(); + TargetPlatform targetPlatform = getTargetPlatform(); - if (board != null) { + if (targetPlatform != null) { LibraryList ideLibs = getIDELibs(); LibraryList userLibs = getUserLibs(); try { // Find the current target. Get the platform, and then select the // correct name and core path. - PreferencesMap prefs = board.getMergedPlatformPreferences(); - String platformName = prefs.get("name"); - JMenuItem platformItem = new JMenuItem(_(platformName)); - platformItem.setEnabled(false); - importMenu.add(platformItem); + PreferencesMap prefs = targetPlatform.getPreferences(); + if (prefs != null) { + String platformName = prefs.get("name"); + if (platformName != null) { + JMenuItem platformItem = new JMenuItem(_(platformName)); + platformItem.setEnabled(false); + importMenu.add(platformItem); + } + } if (ideLibs.size() > 0) { importMenu.addSeparator(); addLibraries(importMenu, ideLibs); diff --git a/app/src/processing/app/debug/Compiler.java b/app/src/processing/app/debug/Compiler.java index 9d3e4992d..8f1b9a112 100644 --- a/app/src/processing/app/debug/Compiler.java +++ b/app/src/processing/app/debug/Compiler.java @@ -132,13 +132,30 @@ public class Compiler implements MessageConsumer { throw re; } - TargetBoard targetBoard = Base.getTargetBoard(); - TargetPlatform targetPlatform = targetBoard.getContainerPlatform(); + // Check if the board needs a platform from another package + TargetPlatform targetPlatform = Base.getTargetPlatform(); + TargetPlatform corePlatform = null; + PreferencesMap boardPreferences = Base.getBoardPreferences(); + String core = boardPreferences.get("build.core"); + if (core.contains(":")) { + String[] split = core.split(":"); + core = split[1]; + corePlatform = Base.getTargetPlatform(split[0], targetPlatform.getId()); + if (corePlatform == null) { + RunnerException re = new RunnerException(I18n + .format(_("Selected board depends on '{0}' core (not installed)."), + split[0])); + re.hideStackTrace(); + throw re; + } + } // Merge all the global preference configuration in order of priority PreferencesMap p = new PreferencesMap(); p.putAll(Preferences.getMap()); - p.putAll(targetBoard.getMergedPlatformPreferences()); + if (corePlatform != null) + p.putAll(corePlatform.getPreferences()); + p.putAll(targetPlatform.getPreferences()); p.putAll(Base.getBoardPreferences()); for (String k : p.keySet()) { if (p.get(k) == null) @@ -154,12 +171,12 @@ public class Compiler implements MessageConsumer { p.put("compiler.path", Base.getAvrBasePath()); // Core folder - TargetPlatform tp = targetBoard.getReferencedPlatform(); + TargetPlatform tp = corePlatform; if (tp == null) - tp = targetBoard.getContainerPlatform(); + tp = targetPlatform; File coreFolder = new File(tp.getFolder(), "cores"); - String core = p.get("build.core"); coreFolder = new File(coreFolder, core); + p.put("build.core", core); p.put("build.core.path", coreFolder.getAbsolutePath()); // System Folder @@ -175,8 +192,7 @@ public class Compiler implements MessageConsumer { t = targetPlatform; } else { String[] split = variant.split(":", 2); - t = Base - .getTargetPlatform(split[0], Preferences.get("target_platform")); + t = Base.getTargetPlatform(split[0], targetPlatform.getId()); variant = split[1]; } File variantFolder = new File(t.getFolder(), "variants"); diff --git a/app/src/processing/app/debug/TargetBoard.java b/app/src/processing/app/debug/TargetBoard.java index 6b791d66b..2a5f21dd4 100644 --- a/app/src/processing/app/debug/TargetBoard.java +++ b/app/src/processing/app/debug/TargetBoard.java @@ -1,8 +1,5 @@ package processing.app.debug; -import static processing.app.I18n._; -import static processing.app.I18n.format; - import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -16,10 +13,6 @@ public class TargetBoard { private Map menuOptions = new LinkedHashMap(); private TargetPlatform containerPlatform; - private String referencedPackageId; - private TargetPlatform referencedPlatform; - private TargetPackage referencedPackage; - /** * Create a TargetBoard based on preferences passed as argument. * @@ -35,14 +28,6 @@ public class TargetBoard { PreferencesMap menus = prefs.firstLevelMap().get("menu"); if (menus != null) menuOptions = menus.firstLevelMap(); - - // Setup referenced platform - String core = prefs.get("build.core"); - if (core.contains(":")) { - String[] split = core.split(":"); - referencedPackageId = split[0]; - prefs.put("build.core", split[1]); - } } /** @@ -63,15 +48,6 @@ public class TargetBoard { return id; } - /** - * Get the package this board refers to - * - * @return - */ - public String getReferencedPackageId() { - return referencedPackageId; - } - /** * Get the full preferences map of the board with a given identifier * @@ -138,38 +114,4 @@ public class TargetBoard { return containerPlatform; } - public void resolveReferencedPlatforms(Map packages) - throws Exception { - if (referencedPackageId == null) - return; - - if (!packages.containsKey(referencedPackageId)) - throw new Exception( - format(_("Can't find referenced package ({1}) for board {0}"), id, - referencedPackageId)); - referencedPackage = packages.get(referencedPackageId); - - Map platforms = referencedPackage.getPlatforms(); - - String ourPlatformId = getContainerPlatform().getId(); - if (!platforms.containsKey(ourPlatformId)) - throw new Exception( - format(_("Can't find referenced package ({1}) for board {0}"), id, - referencedPackageId)); - referencedPlatform = platforms.get(ourPlatformId); - } - - public TargetPlatform getReferencedPlatform() { - return referencedPlatform; - } - - public PreferencesMap getMergedPlatformPreferences() { - PreferencesMap res = new PreferencesMap(); - if (referencedPlatform != null) - res.putAll(referencedPlatform.getPreferences()); - if (containerPlatform.getPreferences() != null) - res.putAll(containerPlatform.getPreferences()); - return res; - } - } diff --git a/app/src/processing/app/debug/TargetPackage.java b/app/src/processing/app/debug/TargetPackage.java index 5c0d7bb8a..020cf89e3 100644 --- a/app/src/processing/app/debug/TargetPackage.java +++ b/app/src/processing/app/debug/TargetPackage.java @@ -64,12 +64,6 @@ public class TargetPackage { return platforms.get(platform); } - public void resolveReferencedPlatforms(Map packages) - throws Exception { - for (TargetPlatform platform : getPlatforms().values()) - platform.resolveReferencedPlatforms(packages); - } - public String getId() { return id; } diff --git a/app/src/processing/app/debug/TargetPlatform.java b/app/src/processing/app/debug/TargetPlatform.java index 9caf9cec1..2e9b88a39 100644 --- a/app/src/processing/app/debug/TargetPlatform.java +++ b/app/src/processing/app/debug/TargetPlatform.java @@ -163,12 +163,6 @@ public class TargetPlatform { return containerPackage; } - public void resolveReferencedPlatforms(Map packages) - throws Exception { - for (TargetBoard board : getBoards().values()) - board.resolveReferencedPlatforms(packages); - } - @Override public String toString() { String res = "TargetPlatform: name=" + id + " boards={\n";