From 25bc7a395071e37fb81323eafea7cfb6992446f3 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 1 Dec 2015 16:10:46 -0500 Subject: [PATCH] Bug 480575 - Arduino install and upgrade by platform. Changes from a Board based install UI to a Platform based one which is more honestly what it does. Adds support for upgrading platforms. Also moves the hardware and tools under the platforms directory to match what the Arduino IDE does. Change-Id: I1ff4ad1178439dd1e51a7594870596e0cbe34afb --- .../arduino/core/tests/BoardManagerTests.java | 3 +- .../cdt/arduino/core/internal/Activator.java | 2 + .../cdt/arduino/core/internal/Messages.java | 5 + .../core/internal/board/ArduinoManager.java | 88 ++++++-- .../core/internal/board/ArduinoPackage.java | 70 ++----- .../core/internal/board/ArduinoPlatform.java | 51 ++++- .../core/internal/board/ArduinoTool.java | 22 +- .../core/internal/board/LibraryIndex.java | 2 +- .../build/ArduinoBuildConfiguration.java | 14 +- .../arduino/core/internal/messages.properties | 5 + .../remote/ArduinoRemoteConnection.java | 2 +- .../org.eclipse.cdt.arduino.ui/plugin.xml | 6 + .../cdt/arduino/ui/internal/Activator.java | 2 +- .../cdt/arduino/ui/internal/Messages.java | 20 ++ .../arduino/ui/internal/messages.properties | 27 ++- .../ArduinoBoardsPreferencePage.java | 192 ------------------ .../preferences/ArduinoPreferencePage.java | 3 +- .../preferences/PlatformDetailsDialog.java | 72 +++++++ .../project/LibrariesPropertyPage.java | 12 +- .../remote/ArduinoTargetPropertyPage.java | 2 +- .../internal/remote/BoardPropertyControl.java | 2 +- 21 files changed, 304 insertions(+), 298 deletions(-) create mode 100644 toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/PlatformDetailsDialog.java diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java index d9005b1c229..cdec38e808a 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java @@ -2,6 +2,7 @@ package org.eclipse.cdt.arduino.core.tests; import static org.junit.Assert.assertNotEquals; +import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; import org.junit.Test; @@ -9,7 +10,7 @@ public class BoardManagerTests { @Test public void loadPackagesTest() throws Exception { - assertNotEquals(0, ArduinoManager.instance.getPackageIndices().size()); + assertNotEquals(0, Activator.getService(ArduinoManager.class).getPackageIndices().size()); } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java index af57b6030c0..342e8b451cc 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; import org.eclipse.cdt.arduino.core.internal.console.ArduinoConsoleService; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IExtension; @@ -47,6 +48,7 @@ public class Activator extends Plugin { public void start(BundleContext bundleContext) throws Exception { plugin = this; + bundleContext.registerService(ArduinoManager.class, new ArduinoManager(), null); } public void stop(BundleContext bundleContext) throws Exception { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java index 78de895b78f..c80f87c6082 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java @@ -19,6 +19,11 @@ public class Messages extends NLS { public static String ArduinoLaunchConfigurationDelegate_0; public static String ArduinoLaunchConfigurationDelegate_1; public static String ArduinoLaunchConfigurationDelegate_2; + public static String ArduinoManager_0; + public static String ArduinoManager_1; + public static String ArduinoManager_2; + public static String ArduinoPlatform_0; + public static String ArduinoPlatform_1; public static String ArduinoProjectGenerator_0; static { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java index 10089e3df14..5fe77c47982 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoManager.java @@ -20,10 +20,13 @@ import java.io.Reader; import java.lang.reflect.Type; import java.net.URL; import java.net.URLConnection; +import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.SimpleFileVisitor; import java.nio.file.StandardCopyOption; +import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.PosixFilePermission; import java.util.ArrayList; import java.util.Collection; @@ -60,8 +63,6 @@ import com.google.gson.reflect.TypeToken; public class ArduinoManager { - public static final ArduinoManager instance = new ArduinoManager(); - // Build tool ids public static final String BOARD_OPTION_ID = "org.eclipse.cdt.arduino.option.board"; //$NON-NLS-1$ public static final String PLATFORM_OPTION_ID = "org.eclipse.cdt.arduino.option.platform"; //$NON-NLS-1$ @@ -168,23 +169,11 @@ public class ArduinoManager { return null; } - public List getBoards() throws CoreException { - List boards = new ArrayList<>(); - for (PackageIndex index : getPackageIndices()) { - for (ArduinoPackage pkg : index.getPackages()) { - for (ArduinoPlatform platform : pkg.getLatestPlatforms()) { - boards.addAll(platform.getBoards()); - } - } - } - return boards; - } - public List getInstalledBoards() throws CoreException { List boards = new ArrayList<>(); for (PackageIndex index : getPackageIndices()) { for (ArduinoPackage pkg : index.getPackages()) { - for (ArduinoPlatform platform : pkg.getInstalledPlatforms()) { + for (ArduinoPlatform platform : pkg.getInstalledPlatforms().values()) { boards.addAll(platform.getBoards()); } } @@ -227,7 +216,7 @@ public class ArduinoManager { Type stringSet = new TypeToken>() { }.getType(); Set libraryNames = new Gson().fromJson(librarySetting, stringSet); - LibraryIndex index = ArduinoManager.instance.getLibraryIndex(); + LibraryIndex index = Activator.getService(ArduinoManager.class).getLibraryIndex(); ArduinoPlatform platform = project.getActiveBuildConfig().getAdapter(ArduinoBuildConfiguration.class).getBoard() .getPlatform(); @@ -257,9 +246,9 @@ public class ArduinoManager { Activator.log(e); } - new Job("Install libraries") { + new Job(Messages.ArduinoManager_0) { protected IStatus run(IProgressMonitor monitor) { - MultiStatus mstatus = new MultiStatus(Activator.getId(), 0, "Installing libraries", null); + MultiStatus mstatus = new MultiStatus(Activator.getId(), 0, Messages.ArduinoManager_1, null); for (ArduinoLibrary library : libraries) { IStatus status = library.install(monitor); if (!status.isOK()) { @@ -373,7 +362,52 @@ public class ArduinoManager { } } // out of retries - return new Status(IStatus.ERROR, Activator.getId(), "Download failed, please try again.", error); + return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoManager_2, error); + } + + public static int compareVersions(String version1, String version2) { + if (version1 == null) { + return version2 == null ? 0 : -1; + } + + if (version2 == null) { + return 1; + } + + String[] v1 = version1.split("\\."); //$NON-NLS-1$ + String[] v2 = version2.split("\\."); //$NON-NLS-1$ + for (int i = 0; i < Math.max(v1.length, v2.length); ++i) { + if (v1.length <= i) { + return v2.length < i ? 0 : -1; + } + + if (v2.length <= i) { + return 1; + } + + try { + int vi1 = Integer.parseInt(v1[i]); + int vi2 = Integer.parseInt(v2[i]); + if (vi1 < vi2) { + return -1; + } + + if (vi1 > vi2) { + return 1; + } + } catch (NumberFormatException e) { + // not numbers, do string compares + int c = v1[i].compareTo(v2[i]); + if (c < 0) { + return -1; + } + if (c > 0) { + return 1; + } + } + } + + return 0; } private static Set toPerms(int mode) { @@ -408,4 +442,20 @@ public class ArduinoManager { return perms; } + public static void recursiveDelete(Path directory) throws IOException { + Files.walkFileTree(directory, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } + + }); + } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java index 39f8329ea98..1d18767598a 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPackage.java @@ -7,12 +7,15 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal.board; +import java.nio.file.Path; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; + public class ArduinoPackage { private String name; @@ -63,79 +66,34 @@ public class ArduinoPackage { return Collections.unmodifiableCollection(platforms); } + public Path getInstallPath() { + return ArduinoPreferences.getArduinoHome().resolve("packages").resolve(getName()); //$NON-NLS-1$ + } + /** * Only the latest versions of the platforms. * * @return latest platforms */ - public Collection getLatestPlatforms() { + public Map getAvailablePlatforms() { Map platformMap = new HashMap<>(); for (ArduinoPlatform platform : platforms) { ArduinoPlatform p = platformMap.get(platform.getName()); - if (p == null || compareVersions(platform.getVersion(), p.getVersion()) > 0) { + if (p == null || ArduinoManager.compareVersions(platform.getVersion(), p.getVersion()) > 0) { platformMap.put(platform.getName(), platform); } } - return Collections.unmodifiableCollection(platformMap.values()); + return platformMap; } - public Collection getInstalledPlatforms() { + public Map getInstalledPlatforms() { Map platformMap = new HashMap<>(); for (ArduinoPlatform platform : platforms) { if (platform.isInstalled()) { - ArduinoPlatform p = platformMap.get(platform.getName()); - if (p == null || compareVersions(platform.getVersion(), p.getVersion()) > 0) { - platformMap.put(platform.getName(), platform); - } + platformMap.put(platform.getName(), platform); } } - return Collections.unmodifiableCollection(platformMap.values()); - } - - // TODO move somewhere. - public static int compareVersions(String version1, String version2) { - if (version1 == null) { - return version2 == null ? 0 : -1; - } - - if (version2 == null) { - return 1; - } - - String[] v1 = version1.split("\\."); //$NON-NLS-1$ - String[] v2 = version2.split("\\."); //$NON-NLS-1$ - for (int i = 0; i < Math.max(v1.length, v2.length); ++i) { - if (v1.length <= i) { - return v2.length < i ? 0 : -1; - } - - if (v2.length <= i) { - return 1; - } - - try { - int vi1 = Integer.parseInt(v1[i]); - int vi2 = Integer.parseInt(v2[i]); - if (vi1 < vi2) { - return -1; - } - - if (vi1 > vi2) { - return 1; - } - } catch (NumberFormatException e) { - // not numbers, do string compares - int c = v1[i].compareTo(v2[i]); - if (c < 0) { - return -1; - } - if (c > 0) { - return 1; - } - } - } - - return 0; + return platformMap; } public ArduinoPlatform getPlatform(String name) { @@ -146,7 +104,7 @@ public class ArduinoPackage { foundPlatform = platform; } else { if (platform.isInstalled() - && compareVersions(platform.getVersion(), foundPlatform.getVersion()) > 0) { + && ArduinoManager.compareVersions(platform.getVersion(), foundPlatform.getVersion()) > 0) { foundPlatform = platform; } } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java index 4bc524fd00a..313d479fd38 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoPlatform.java @@ -30,6 +30,7 @@ import java.util.Properties; import org.eclipse.cdt.arduino.core.internal.Activator; import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; import org.eclipse.cdt.arduino.core.internal.HierarchicalProperties; +import org.eclipse.cdt.arduino.core.internal.Messages; import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuildConfiguration; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; @@ -102,15 +103,15 @@ public class ArduinoPlatform { return size; } - public List getBoards() throws CoreException { + public List getBoards() { if (isInstalled() && boardsProperties == null) { Properties boardProps = new Properties(); - - try (InputStream is = new FileInputStream(getInstallPath().resolve("boards.txt").toFile()); + + try (InputStream is = new FileInputStream(getInstallPath().resolve("boards.txt").toFile()); //$NON-NLS-1$ Reader reader = new InputStreamReader(is, "UTF-8")) { //$NON-NLS-1$ boardProps.load(reader); } catch (IOException e) { - throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), "Loading boards.txt", e)); //$NON-NLS-1$ + Activator.log(e); } boardsProperties = new HierarchicalProperties(boardProps); @@ -191,8 +192,27 @@ public class ArduinoPlatform { } public Path getInstallPath() { - return ArduinoPreferences.getArduinoHome().resolve("hardware").resolve(pkg.getName()).resolve(architecture) //$NON-NLS-1$ + // TODO remove migration in Neon + Path oldPath = ArduinoPreferences.getArduinoHome().resolve("hardware").resolve(pkg.getName()) //$NON-NLS-1$ + .resolve(architecture).resolve(version); + Path newPath = getPackage().getInstallPath().resolve("hardware").resolve(pkg.getName()).resolve(architecture) //$NON-NLS-1$ .resolve(version); + if (Files.exists(oldPath)) { + try { + Files.createDirectories(newPath.getParent()); + Files.move(oldPath, newPath); + for (Path parent = oldPath.getParent(); parent != null; parent = parent.getParent()) { + if (Files.newDirectoryStream(parent).iterator().hasNext()) { + break; + } else { + Files.delete(parent); + } + } + } catch (IOException e) { + Activator.log(e); + } + } + return newPath; } public List getIncludePath() { @@ -264,7 +284,12 @@ public class ArduinoPlatform { public IStatus install(IProgressMonitor monitor) { // Check if we're installed already if (isInstalled()) { - return Status.OK_STATUS; + try { + ArduinoManager.recursiveDelete(getInstallPath()); + } catch (IOException e) { + // just log it, shouldn't break the install + Activator.log(e); + } } // Install the tools @@ -278,7 +303,7 @@ public class ArduinoPlatform { // On Windows install make from bintray if (Platform.getOS().equals(Platform.OS_WIN32)) { try { - Path makePath = ArduinoPreferences.getArduinoHome().resolve("tools/make/make.exe"); //$NON-NLS-1$ + Path makePath = ArduinoPreferences.getArduinoHome().resolve("make.exe"); //$NON-NLS-1$ if (!makePath.toFile().exists()) { Files.createDirectories(makePath.getParent()); URL makeUrl = new URL("https://bintray.com/artifact/download/cdtdoug/tools/make.exe"); //$NON-NLS-1$ @@ -286,7 +311,7 @@ public class ArduinoPlatform { makePath.toFile().setExecutable(true, false); } } catch (IOException e) { - return new Status(IStatus.ERROR, Activator.getId(), "Download failed, please try again.", e); + return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoPlatform_0, e); } } @@ -299,6 +324,16 @@ public class ArduinoPlatform { return Status.OK_STATUS; } + public IStatus uninstall(IProgressMonitor monitor) { + try { + ArduinoManager.recursiveDelete(getInstallPath()); + // TODO delete tools that aren't needed any more + return Status.OK_STATUS; + } catch (IOException e) { + return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoPlatform_1, e); + } + } + @Override public int hashCode() { final int prime = 31; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java index cd3714c7f75..f39f030da42 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoTool.java @@ -7,6 +7,8 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.core.internal.board; +import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Properties; @@ -50,8 +52,26 @@ public class ArduinoTool { } public Path getInstallPath() { - return ArduinoPreferences.getArduinoHome().resolve("tools").resolve(pkg.getName()).resolve(name) //$NON-NLS-1$ + // TODO remove migration in Neon + Path oldPath = ArduinoPreferences.getArduinoHome().resolve("tools").resolve(pkg.getName()).resolve(name) //$NON-NLS-1$ .resolve(version); + Path newPath = getPackage().getInstallPath().resolve("tools").resolve(name).resolve(version); //$NON-NLS-1$ + if (Files.exists(oldPath)) { + try { + Files.createDirectories(newPath.getParent()); + Files.move(oldPath, newPath); + for (Path parent = oldPath.getParent(); parent != null; parent = parent.getParent()) { + if (Files.newDirectoryStream(parent).iterator().hasNext()) { + break; + } else { + Files.delete(parent); + } + } + } catch (IOException e) { + Activator.log(e); + } + } + return newPath; } public boolean isInstalled() { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/LibraryIndex.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/LibraryIndex.java index 75d1b69c9fc..4d83992f133 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/LibraryIndex.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/LibraryIndex.java @@ -38,7 +38,7 @@ public class LibraryIndex { ArduinoLibrary current = latestLibs.get(name); if (current != null) { - if (ArduinoPackage.compareVersions(library.getVersion(), current.getVersion()) > 0) { + if (ArduinoManager.compareVersions(library.getVersion(), current.getVersion()) > 0) { latestLibs.put(name, library); } } else { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java index 4c5aa153c31..56127083065 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java @@ -66,6 +66,8 @@ public class ArduinoBuildConfiguration { private final IBuildConfiguration config; + private static ArduinoManager manager = Activator.getService(ArduinoManager.class); + private ArduinoBoard board; private Properties properties; @@ -233,13 +235,13 @@ public class ArduinoBuildConfiguration { String packageName = settings.get(PACKAGE_NAME, ""); //$NON-NLS-1$ String platformName = settings.get(PLATFORM_NAME, ""); //$NON-NLS-1$ String boardName = settings.get(BOARD_NAME, ""); //$NON-NLS-1$ - board = ArduinoManager.instance.getBoard(boardName, platformName, packageName); + board = manager.getBoard(boardName, platformName, packageName); if (board == null) { // Default to Uno or first one we find - board = ArduinoManager.instance.getBoard("Arduino/Genuino Uno", "Arduino AVR Boards", "arduino"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + board = manager.getBoard("Arduino/Genuino Uno", "Arduino AVR Boards", "arduino"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ if (board == null) { - List boards = ArduinoManager.instance.getInstalledBoards(); + List boards = manager.getInstalledBoards(); if (!boards.isEmpty()) { board = boards.get(0); } @@ -355,7 +357,7 @@ public class ArduinoBuildConfiguration { // The list of library sources List librarySources = new ArrayList<>(); - for (ArduinoLibrary lib : ArduinoManager.instance.getLibraries(project)) { + for (ArduinoLibrary lib : manager.getLibraries(project)) { librarySources.addAll(lib.getSources()); } buildModel.put("libraries_srcs", librarySources); //$NON-NLS-1$ @@ -376,7 +378,7 @@ public class ArduinoBuildConfiguration { } includes += '"' + pathString(include) + '"'; } - for (ArduinoLibrary lib : ArduinoManager.instance.getLibraries(project)) { + for (ArduinoLibrary lib : manager.getLibraries(project)) { for (Path include : lib.getIncludePath()) { includes += " -I\"" + pathString(include) + '"'; //$NON-NLS-1$ } @@ -572,7 +574,7 @@ public class ArduinoBuildConfiguration { for (Path include : platform.getIncludePath()) { includes += " -I\"" + pathString(include) + '"'; //$NON-NLS-1$ } - Collection libs = ArduinoManager.instance.getLibraries(config.getProject()); + Collection libs = manager.getLibraries(config.getProject()); for (ArduinoLibrary lib : libs) { for (Path path : lib.getIncludePath()) { includes += " -I\"" + pathString(path) + '"'; //$NON-NLS-1$ diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties index a4ebc48b23a..17b3d4d5170 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties @@ -13,4 +13,9 @@ ArduinoLaunchConfigurationDelegate_1=No active Arduino remote connection. ################################################################################ ArduinoLaunchConfigurationDelegate_0=Arduino Launch ArduinoLaunchConfigurationDelegate_2=Target has not been selected for Launch Configuration +ArduinoManager_0=Install libraries +ArduinoManager_1=Installing libraries +ArduinoManager_2=Download failed, please try again. +ArduinoPlatform_0=Download failed, please try again. +ArduinoPlatform_1=Uninstall failed. ArduinoProjectGenerator_0=Write Arduino project file diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java index 685dd89acf1..f66344b7fef 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java @@ -95,7 +95,7 @@ public class ArduinoRemoteConnection } public ArduinoBoard getBoard() throws CoreException { - return ArduinoManager.instance.getBoard(remoteConnection.getAttribute(BOARD_NAME), + return Activator.getService(ArduinoManager.class).getBoard(remoteConnection.getAttribute(BOARD_NAME), remoteConnection.getAttribute(PLATFORM_NAME), remoteConnection.getAttribute(PACKAGE_NAME)); } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml index 724bd86a919..0290e808181 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/plugin.xml @@ -98,6 +98,12 @@ id="org.eclipse.cdt.arduino.preference.page.boards" name="Boards"> + + diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java index 11f84062e9f..968997a7455 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Activator.java @@ -37,7 +37,7 @@ public class Activator extends AbstractUIPlugin { super.start(context); plugin = this; // Load up the Arduino indices - ArduinoManager.instance.loadIndices(); + getService(ArduinoManager.class).loadIndices(); } public void stop(BundleContext context) throws Exception { diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java index 84d2fe5ea1b..4f1e9292ec7 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/Messages.java @@ -18,8 +18,28 @@ public class Messages extends NLS { public static String NewArduinoTargetWizardPage_4; public static String NewArduinoTargetWizardPage_5; public static String ArduinoBoardsPreferencePage_desc; + public static String LibrariesPropertyPage_0; + public static String LibrariesPropertyPage_1; public static String LibrariesPropertyPage_desc; + public static String ArduinoPlatformsPreferencePage_0; + public static String ArduinoPlatformsPreferencePage_1; + public static String ArduinoPlatformsPreferencePage_10; + public static String ArduinoPlatformsPreferencePage_11; + public static String ArduinoPlatformsPreferencePage_12; + public static String ArduinoPlatformsPreferencePage_13; + public static String ArduinoPlatformsPreferencePage_14; + public static String ArduinoPlatformsPreferencePage_15; + public static String ArduinoPlatformsPreferencePage_2; + public static String ArduinoPlatformsPreferencePage_3; + public static String ArduinoPlatformsPreferencePage_4; + public static String ArduinoPlatformsPreferencePage_5; + public static String ArduinoPlatformsPreferencePage_6; + public static String ArduinoPlatformsPreferencePage_7; + public static String ArduinoPlatformsPreferencePage_8; + public static String ArduinoPlatformsPreferencePage_9; public static String ArduinoPreferencePage_desc; + public static String PlatformDetailsDialog_0; + public static String PlatformDetailsDialog_1; static { // initialize resource bundle diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties index 8221059ad9a..61c2cba1496 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/messages.properties @@ -11,10 +11,29 @@ NewArduinoTargetWizardPage_2=Target name: NewArduinoTargetWizardPage_3= NewArduinoTargetWizardPage_4=Serial port: NewArduinoTargetWizardPage_5=Board type: -ArduinoBoardsPreferencePage_desc=Select a board you would like to install and click Install and then \ -OK or Apply to install the SDK and Tools for that board. By doing so you agree to the licenses of the \ -libraries and tools. For more information, see http://arduino.cc. +ArduinoBoardsPreferencePage_desc=NOTE: To install support for an Arduino board, please use the Arduino \ +Platforms preference page to install the platform support for that board. +LibrariesPropertyPage_0=Name +LibrariesPropertyPage_1=Description LibrariesPropertyPage_desc=Select libraries to use in your project and click OK or Apply. \ If necessary the library will be installed. By adding libraries you agree to the licenses of those \ libraries. For more information, see http://arduino.cc -ArduinoPreferencePage_desc=Enter URLs for package_index.json files one per line. \ No newline at end of file +ArduinoPlatformsPreferencePage_0=Select a platform then click a button to install, uninstall, or find more details about the platform. +ArduinoPlatformsPreferencePage_1=Platform +ArduinoPlatformsPreferencePage_10=Information on the licenses can be found at arduino.cc web site. +ArduinoPlatformsPreferencePage_11=Arduino License +ArduinoPlatformsPreferencePage_12=Accept +ArduinoPlatformsPreferencePage_13=Decline +ArduinoPlatformsPreferencePage_14=Installing Arduino Board Platforms +ArduinoPlatformsPreferencePage_15=Installing Arduino Board Platforms +ArduinoPlatformsPreferencePage_2=Installed +ArduinoPlatformsPreferencePage_3=Available +ArduinoPlatformsPreferencePage_4=Install +ArduinoPlatformsPreferencePage_5=Upgrade +ArduinoPlatformsPreferencePage_6=Details +ArduinoPlatformsPreferencePage_7=Install +ArduinoPlatformsPreferencePage_8=Uninstall +ArduinoPlatformsPreferencePage_9=Do you accept the licenses for the Arduino SDK and libraries? +ArduinoPreferencePage_desc=Enter URLs for package_index.json files one per line. +PlatformDetailsDialog_0=Platform: +PlatformDetailsDialog_1=Supports boards:\n diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java index f6ddb310bbd..488c7d032a7 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoBoardsPreferencePage.java @@ -7,50 +7,19 @@ *******************************************************************************/ package org.eclipse.cdt.arduino.ui.internal.preferences; -import java.io.File; -import java.io.IOException; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; -import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard; -import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; -import org.eclipse.cdt.arduino.core.internal.board.ArduinoPlatform; -import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; public class ArduinoBoardsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - private Table table; - private Button installButton; - private Set toInstall = new HashSet<>(); - @Override public void init(IWorkbench workbench) { } @@ -67,168 +36,7 @@ public class ArduinoBoardsPreferencePage extends PreferencePage implements IWork desc.setBackground(parent.getBackground()); desc.setText(Messages.ArduinoBoardsPreferencePage_desc); - Composite comp = new Composite(control, SWT.NONE); - GridLayout layout = new GridLayout(2, false); - layout.marginWidth = 0; - comp.setLayout(layout); - comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - Composite tableComp = new Composite(comp, SWT.NONE); - tableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - table = new Table(tableComp, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.FULL_SELECTION); - table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - table.setHeaderVisible(true); - table.setLinesVisible(true); - - TableColumn packageColumn = new TableColumn(table, SWT.LEAD); - packageColumn.setText("Board"); - - TableColumn platformColumn = new TableColumn(table, SWT.LEAD); - platformColumn.setText("Platform"); - - TableColumn installedColumn = new TableColumn(table, SWT.LEAD); - installedColumn.setText("Installed"); - - TableColumnLayout tableLayout = new TableColumnLayout(); - tableLayout.setColumnData(packageColumn, new ColumnWeightData(5, 150, true)); - tableLayout.setColumnData(platformColumn, new ColumnWeightData(5, 150, true)); - tableLayout.setColumnData(installedColumn, new ColumnWeightData(2, 75, true)); - tableComp.setLayout(tableLayout); - - table.addListener(SWT.Selection, new Listener() { - @Override - public void handleEvent(Event event) { - updateButtons(); - } - }); - - Composite buttonComp = new Composite(comp, SWT.NONE); - buttonComp.setLayout(new GridLayout()); - buttonComp.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false)); - - installButton = new Button(buttonComp, SWT.PUSH); - installButton.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false)); - installButton.setText("Install"); - installButton.addListener(SWT.Selection, new Listener() { - @Override - public void handleEvent(Event event) { - for (TableItem item : table.getSelection()) { - ArduinoBoard board = (ArduinoBoard) item.getData(); - toInstall.add(board); - item.setText(2, "selected"); - updateButtons(); - } - } - }); - - updateTable(); - updateButtons(); - return control; } - private void updateTable() { - if (table == null || table.isDisposed()) { - return; - } - - table.removeAll(); - - try { - List boards = ArduinoManager.instance.getBoards(); - Collections.sort(boards, new Comparator() { - public int compare(ArduinoBoard o1, ArduinoBoard o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - - for (ArduinoBoard board : boards) { - TableItem item = new TableItem(table, SWT.NONE); - item.setData(board); - item.setText(0, board.getName()); - item.setText(1, board.getPlatform().getName()); - String msg; - if (toInstall.contains(board)) { - msg = "selected"; - } else { - msg = board.getPlatform().isInstalled() ? "yes" : "no"; - } - item.setText(2, msg); - } - } catch (CoreException e) { - Activator.log(e); - } - } - - private void updateButtons() { - if (table == null || table.isDisposed()) { - return; - } - - boolean enable = false; - for (TableItem item : table.getSelection()) { - ArduinoBoard board = (ArduinoBoard) item.getData(); - if (toInstall.contains(board)) { - continue; - } - ArduinoPlatform platform = board.getPlatform(); - if (!platform.isInstalled()) { - enable = true; - } - } - installButton.setEnabled(enable); - } - - @Override - public boolean performOk() { - File acceptedFile = ArduinoPreferences.getArduinoHome().resolve(".accepted").toFile(); //$NON-NLS-1$ - if (!acceptedFile.exists()) { - String message = "Do you accept the licenses for the Arduino SDK and libraries? " - + "Information on the licenses can be found at arduino.cc web site."; - MessageDialog dialog = new MessageDialog(getShell(), "Arduino License", null, message, - MessageDialog.QUESTION, new String[] { "Accept", "Decline" }, 0); - int rc = dialog.open(); - if (rc == 0) { - try { - acceptedFile.createNewFile(); - } catch (IOException e) { - Activator.log(e); - } - } else { - return false; - } - } - - new Job("Installing Arduino Board Platforms") { - @Override - protected IStatus run(IProgressMonitor monitor) { - Set platforms = new HashSet<>(); - for (ArduinoBoard board : toInstall) { - platforms.add(board.getPlatform()); - } - - MultiStatus status = new MultiStatus(Activator.PLUGIN_ID, 0, "Installing Arduino Board Platforms", - null); - for (ArduinoPlatform platform : platforms) { - status.add(platform.install(monitor)); - } - - toInstall.clear(); - - if (table != null && !table.isDisposed()) { - table.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - updateTable(); - } - }); - } - - return status; - } - }.schedule(); - return true; - } - } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java index 5e321aed985..8aaaf4b7450 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/ArduinoPreferencePage.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.arduino.ui.internal.preferences; import org.eclipse.cdt.arduino.core.internal.ArduinoPreferences; import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager; +import org.eclipse.cdt.arduino.ui.internal.Activator; import org.eclipse.cdt.arduino.ui.internal.Messages; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; @@ -53,7 +54,7 @@ public class ArduinoPreferencePage extends PreferencePage implements IWorkbenchP @Override public boolean performOk() { ArduinoPreferences.setBoardUrls(urlsText.getText()); - ArduinoManager.instance.loadIndices(); + Activator.getService(ArduinoManager.class).loadIndices(); return true; } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/PlatformDetailsDialog.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/PlatformDetailsDialog.java new file mode 100644 index 00000000000..20037f4333c --- /dev/null +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/preferences/PlatformDetailsDialog.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2015 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ +package org.eclipse.cdt.arduino.ui.internal.preferences; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard; +import org.eclipse.cdt.arduino.core.internal.board.ArduinoPlatform; +import org.eclipse.cdt.arduino.ui.internal.Messages; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +public class PlatformDetailsDialog extends Dialog { + + private final ArduinoPlatform platform; + + protected PlatformDetailsDialog(Shell parentShell, ArduinoPlatform platform) { + super(parentShell); + setShellStyle(getShellStyle() | SWT.RESIZE); + this.platform = platform; + } + + @Override + protected Control createDialogArea(Composite parent) { + Composite control = (Composite) super.createDialogArea(parent); + + Text text = new Text(control, SWT.BORDER | SWT.READ_ONLY | SWT.MULTI | SWT.V_SCROLL); + text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + StringBuilder str = new StringBuilder(); + + str.append(Messages.PlatformDetailsDialog_0); + str.append(platform.getName()); + str.append('\n'); + + str.append(Messages.PlatformDetailsDialog_1); + List boards = platform.getBoards(); + Collections.sort(boards, new Comparator() { + @Override + public int compare(ArduinoBoard o1, ArduinoBoard o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + for (ArduinoBoard board : platform.getBoards()) { + str.append(" "); //$NON-NLS-1$ + str.append(board.getName()); + str.append('\n'); + } + + text.setText(str.toString()); + return control; + } + + @Override + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); + } + +} diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/LibrariesPropertyPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/LibrariesPropertyPage.java index b98a4e25b36..efb08aefbed 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/LibrariesPropertyPage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/project/LibrariesPropertyPage.java @@ -37,6 +37,8 @@ import org.eclipse.ui.dialogs.PropertyPage; public class LibrariesPropertyPage extends PropertyPage { + private static ArduinoManager manager = Activator.getService(ArduinoManager.class); + private class ContentProvider implements ITreeContentProvider { private LibraryIndex index; @@ -187,20 +189,20 @@ public class LibrariesPropertyPage extends PropertyPage { Tree tree = viewer.getTree(); tree.setHeaderVisible(true); TreeColumn column1 = new TreeColumn(tree, SWT.LEFT); - column1.setText("Name"); + column1.setText(Messages.LibrariesPropertyPage_0); column1.setWidth(200); TreeColumn column2 = new TreeColumn(tree, SWT.LEFT); - column2.setText("Description"); + column2.setText(Messages.LibrariesPropertyPage_1); column2.setWidth(200); viewer.setContentProvider(new ContentProvider()); viewer.setLabelProvider(new LabelProvider()); try { - viewer.setInput(ArduinoManager.instance.getLibraryIndex()); + viewer.setInput(manager.getLibraryIndex()); // Set the check states for currently selected libraries IProject project = getElement().getAdapter(IProject.class); - Collection libraries = ArduinoManager.instance.getLibraries(project); + Collection libraries = manager.getLibraries(project); for (ArduinoLibrary lib : libraries) { viewer.setChecked(lib, true); } @@ -231,7 +233,7 @@ public class LibrariesPropertyPage extends PropertyPage { } } try { - ArduinoManager.instance.setLibraries(getProject(), libs); + manager.setLibraries(getProject(), libs); } catch (CoreException e) { Activator.log(e); } diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java index ca7f611fd79..c614af52350 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java @@ -76,7 +76,7 @@ public class ArduinoTargetPropertyPage extends PropertyPage implements IWorkbenc try { ArduinoBoard currentBoard = arduinoRemote.getBoard(); - Collection boardList = ArduinoManager.instance.getBoards(); + Collection boardList = Activator.getService(ArduinoManager.class).getInstalledBoards(); boards = new ArduinoBoard[boardList.size()]; i = 0; int boardSel = 0; diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/BoardPropertyControl.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/BoardPropertyControl.java index 5787ca23a1f..506e01287eb 100644 --- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/BoardPropertyControl.java +++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/BoardPropertyControl.java @@ -80,7 +80,7 @@ public class BoardPropertyControl extends Composite { boardCombo = new Combo(this, SWT.READ_ONLY); boardCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); try { - List boardList = ArduinoManager.instance.getInstalledBoards(); + List boardList = Activator.getService(ArduinoManager.class).getInstalledBoards(); Collections.sort(boardList, new Comparator() { @Override public int compare(ArduinoBoard o1, ArduinoBoard o2) {