diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java index 8c15a95c9..b42a6afb7 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndex.java @@ -138,13 +138,20 @@ public abstract class LibrariesIndex { continue; } - // Pick the latest version among possible deps - ContributedLibrary last = possibleDeps.stream() - .reduce((a, b) -> b.isBefore(a) ? a : b).get(); + // Pick the installed version if available + ContributedLibrary selected; + Optional installed = possibleDeps.stream() + .filter(l -> l.getInstalledLibrary().isPresent()).findAny(); + if (installed.isPresent()) { + selected = installed.get(); + } else { + // otherwise pick the latest version + selected = possibleDeps.stream().reduce((a, b) -> b.isBefore(a) ? a : b).get(); + } - // Add dependecy to the solution and process recursively - solution.add(last); - if (!resolveDependeciesOf(solution, last)) { + // Add dependency to the solution and process recursively + solution.add(selected); + if (!resolveDependeciesOf(solution, selected)) { return false; } }