diff --git a/arduino-core/src/cc/arduino/contributions/DownloadableContribution.java b/arduino-core/src/cc/arduino/contributions/DownloadableContribution.java index 531ad5b3dc9..87ef9cee465 100644 --- a/arduino-core/src/cc/arduino/contributions/DownloadableContribution.java +++ b/arduino-core/src/cc/arduino/contributions/DownloadableContribution.java @@ -32,6 +32,7 @@ import com.github.zafarkhaja.semver.Version; import java.io.File; +import java.util.Optional; public abstract class DownloadableContribution { @@ -66,10 +67,10 @@ public void setDownloadedFile(File downloadedFile) { } public String getParsedVersion() { - Version version = VersionHelper.valueOf(getVersion()); - if (version == null) { - return null; + Optional version = VersionHelper.valueOf(getVersion()); + if (version.isPresent()) { + return version.get().toString(); } - return version.toString(); + return null; } } diff --git a/arduino-core/src/cc/arduino/contributions/VersionComparator.java b/arduino-core/src/cc/arduino/contributions/VersionComparator.java index ccdca994091..ba0ebb639c7 100644 --- a/arduino-core/src/cc/arduino/contributions/VersionComparator.java +++ b/arduino-core/src/cc/arduino/contributions/VersionComparator.java @@ -34,41 +34,32 @@ import cc.arduino.contributions.libraries.ContributedLibrary; import java.util.Comparator; +import java.util.Optional; public class VersionComparator implements Comparator { - @Override - public int compare(String a, String b) { - // null is always less than any other value - if (a == null && b == null) - return 0; - if (a == null) - return -1; - if (b == null) - return 1; - - Version versionA = VersionHelper.valueOf(a); - Version versionB = VersionHelper.valueOf(b); - - return versionA.compareTo(versionB); - } - - public static boolean greaterThan(String a, String b) { - // null is always less than any other value - if (a == null && b == null) { - return false; + public static int compareTo(String a, String b) { + Optional versionA = VersionHelper.valueOf(a); + Optional versionB = VersionHelper.valueOf(b); + if (versionA.isPresent() && versionB.isPresent()) { + return versionA.get().compareTo(versionB.get()); } - if (a == null) { - return false; + if (versionA.isPresent()) { + return 1; } - if (b == null) { - return true; + if (versionB.isPresent()) { + return -1; } + return 0; + } - Version versionA = VersionHelper.valueOf(a); - Version versionB = VersionHelper.valueOf(b); + @Override + public int compare(String a, String b) { + return compareTo(a, b); + } - return versionA.greaterThan(versionB); + public static boolean greaterThan(String a, String b) { + return compareTo(a, b) > 0; } public static String max(String a, String b) { @@ -79,8 +70,7 @@ public static ContributedLibrary max(ContributedLibrary a, ContributedLibrary b) return greaterThan(a, b) ? a : b; } - public static boolean greaterThan(ContributedLibrary a, - ContributedLibrary b) { + public static boolean greaterThan(ContributedLibrary a, ContributedLibrary b) { return greaterThan(a.getParsedVersion(), b.getParsedVersion()); } } diff --git a/arduino-core/src/cc/arduino/contributions/VersionHelper.java b/arduino-core/src/cc/arduino/contributions/VersionHelper.java index 0f108aed5a7..caf98c8f120 100644 --- a/arduino-core/src/cc/arduino/contributions/VersionHelper.java +++ b/arduino-core/src/cc/arduino/contributions/VersionHelper.java @@ -29,13 +29,15 @@ package cc.arduino.contributions; +import java.util.Optional; + import com.github.zafarkhaja.semver.Version; public class VersionHelper { - public static Version valueOf(String ver) { + public static Optional valueOf(String ver) { if (ver == null) { - return null; + return Optional.empty(); } try { // Allow x.y-something, assuming x.y.0-something @@ -49,7 +51,7 @@ public static Version valueOf(String ver) { } String[] parts = version.split("\\."); if (parts.length >= 3) { - return Version.valueOf(ver); + return Optional.of(Version.valueOf(ver)); } if (parts.length == 2) { version += ".0"; @@ -57,10 +59,9 @@ public static Version valueOf(String ver) { if (parts.length == 1) { version += ".0.0"; } - return Version.valueOf(version + extra); + return Optional.of(Version.valueOf(version + extra)); } catch (Exception e) { - System.err.println("Invalid version found: " + ver); - return null; + return Optional.empty(); } } diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index 4193b2ba088..8b7acae748c 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -54,6 +54,7 @@ import java.util.List; import java.util.Optional; +import static processing.app.I18n.format; import static processing.app.I18n.tr; public class LibrariesIndexer { @@ -203,7 +204,7 @@ private void scanLibrary(UserLibraryFolder folderDesc) throws IOException { LegacyUserLibrary lib = LegacyUserLibrary.create(folderDesc); String[] headers = BaseNoGui.headerListFromIncludePath(lib.getSrcFolder()); if (headers.length == 0) { - throw new IOException(lib.getSrcFolder().getAbsolutePath()); + throw new IOException(format(tr("no headers files (.h) found in {0}"), lib.getSrcFolder())); } addToInstalledLibraries(lib); return; @@ -213,7 +214,7 @@ private void scanLibrary(UserLibraryFolder folderDesc) throws IOException { UserLibrary lib = UserLibrary.create(folderDesc); String[] headers = BaseNoGui.headerListFromIncludePath(lib.getSrcFolder()); if (headers.length == 0) { - throw new IOException(lib.getSrcFolder().getAbsolutePath()); + throw new IOException(format(tr("no headers files (.h) found in {0}"), lib.getSrcFolder())); } addToInstalledLibraries(lib); diff --git a/arduino-core/src/processing/app/packages/UserLibrary.java b/arduino-core/src/processing/app/packages/UserLibrary.java index ee9c0bd031b..e22ae36eb29 100644 --- a/arduino-core/src/processing/app/packages/UserLibrary.java +++ b/arduino-core/src/processing/app/packages/UserLibrary.java @@ -28,11 +28,8 @@ */ package processing.app.packages; -import cc.arduino.Constants; -import cc.arduino.contributions.VersionHelper; -import cc.arduino.contributions.libraries.ContributedLibraryReference; -import processing.app.helpers.PreferencesMap; -import processing.app.packages.UserLibraryFolder.Location; +import static processing.app.I18n.format; +import static processing.app.I18n.tr; import java.io.File; import java.io.IOException; @@ -41,9 +38,16 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import com.github.zafarkhaja.semver.Version; +import cc.arduino.Constants; +import cc.arduino.contributions.VersionHelper; +import cc.arduino.contributions.libraries.ContributedLibraryReference; +import processing.app.helpers.PreferencesMap; +import processing.app.packages.UserLibraryFolder.Location; + public class UserLibrary { private String name; @@ -148,12 +152,16 @@ public static UserLibrary create(UserLibraryFolder libFolderDesc) throws IOExcep } String declaredVersion = properties.get("version").trim(); - Version version = VersionHelper.valueOf(declaredVersion); + Optional version = VersionHelper.valueOf(declaredVersion); + if (!version.isPresent()) { + System.out.println( + format(tr("Invalid version '{0}' for library in: {1}"), declaredVersion, libFolder.getAbsolutePath())); + } UserLibrary res = new UserLibrary(); res.installedFolder = libFolder; res.name = properties.get("name").trim(); - res.version = version.toString(); + res.version = version.isPresent() ? version.get().toString() : declaredVersion; res.author = properties.get("author").trim(); res.maintainer = properties.get("maintainer").trim(); res.sentence = properties.get("sentence").trim();