From b9a90f69d5161c27448dac788b9f81fdb03e8438 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Tue, 7 Apr 2015 12:05:05 +0200 Subject: [PATCH] Invalid versions don't cause IDE to crash and exit any more. They are reported and contributions are considered missing version. Fixes #2926 --- .../arduino/contributions/VersionHelper.java | 19 ++++++++++++------- .../libraries/ContributedLibrary.java | 2 +- .../libraries/LibrariesIndex.java | 3 +++ .../packages/ContributedPackage.java | 3 +++ 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/arduino-core/src/cc/arduino/contributions/VersionHelper.java b/arduino-core/src/cc/arduino/contributions/VersionHelper.java index 10d64af84..4e0a7b324 100644 --- a/arduino-core/src/cc/arduino/contributions/VersionHelper.java +++ b/arduino-core/src/cc/arduino/contributions/VersionHelper.java @@ -8,15 +8,20 @@ public class VersionHelper { if (ver == null) { return null; } - String[] verParts = ver.split("\\."); - if (verParts.length < 3) { - if (verParts.length == 2) { - return Version.forIntegers(Integer.valueOf(verParts[0]), Integer.valueOf(verParts[1])); + try { + String[] verParts = ver.split("\\."); + if (verParts.length < 3) { + if (verParts.length == 2) { + return Version.forIntegers(Integer.valueOf(verParts[0]), Integer.valueOf(verParts[1])); + } else { + return Version.forIntegers(Integer.valueOf(verParts[0])); + } } else { - return Version.forIntegers(Integer.valueOf(verParts[0])); + return Version.valueOf(ver); } - } else { - return Version.valueOf(ver); + } catch (Exception e) { + System.err.println("Invalid version found: " + ver); + return null; } } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java index 2dd604d4e..c368f7319 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/ContributedLibrary.java @@ -141,7 +141,7 @@ public abstract class ContributedLibrary extends DownloadableContribution { String thisVersion = getParsedVersion(); String otherVersion = ((ContributedLibrary) obj).getParsedVersion(); - boolean versionEquals = thisVersion == null || otherVersion == null || thisVersion.equals(otherVersion); + boolean versionEquals = thisVersion == otherVersion || (thisVersion != null && otherVersion != null && thisVersion.equals(otherVersion)); String thisName = getName(); String otherName = ((ContributedLibrary) obj).getName(); diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java index 12ae11fc5..ef9a362f0 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java @@ -48,6 +48,9 @@ public abstract class LibrariesIndex { } public ContributedLibrary find(String name, String version) { + if (name == null || version == null) { + return null; + } for (ContributedLibrary lib : find(name)) { if (version.equals(lib.getParsedVersion())) { return lib; diff --git a/arduino-core/src/cc/arduino/contributions/packages/ContributedPackage.java b/arduino-core/src/cc/arduino/contributions/packages/ContributedPackage.java index 9427864ea..4b9ed4b41 100644 --- a/arduino-core/src/cc/arduino/contributions/packages/ContributedPackage.java +++ b/arduino-core/src/cc/arduino/contributions/packages/ContributedPackage.java @@ -47,6 +47,9 @@ public abstract class ContributedPackage { public abstract List getTools(); public ContributedPlatform findPlatform(String architecture, String version) { + if (architecture == null || version == null) { + return null; + } for (ContributedPlatform platform : getPlatforms()) { if (platform.getArchitecture().equals(architecture) && version.equals(platform.getParsedVersion())) return platform;