From 61830e93f5661bc6bf564cadff0575e76bf94e26 Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Mon, 12 Dec 2022 22:45:48 +0100 Subject: [PATCH 1/2] add return statements to future after .complete() --- .../distribution/ArchDistribution.java | 43 ++++++++++--------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java index a6203b5..ea12519 100644 --- a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java @@ -107,6 +107,7 @@ public class ArchDistribution implements Distribution { // unknown package, probably an abstract dependency logger.fine("Completing callback INVALID for package %s (depth=%s)".formatted(packageName, depth)); futurePackage.complete(null); + return; } JSONObject resultJson = json.getJSONArray("results").getJSONObject(0); @@ -117,30 +118,30 @@ public class ArchDistribution implements Distribution { description = resultJson.getString("pkgdesc"); // if we're at the maximum depth, return the package without its dependencies - if(depth==0){ + if(depth==0) { logger.fine("Completing callback NODEP for package %s (depth=%s)".formatted(packageName, depth)); futurePackage.complete(new Package(name, version, repo, description, Collections.emptyList())); - } else { - // iterate for every package in the list - List> futureDeps = new ArrayList<>(); - for (Object depPackageNameObj : resultJson.getJSONArray("depends")) { - // convert object into String - String depPackageName = (String) depPackageNameObj; - // add package into Package List - futureDeps.add(getPackageTree(depPackageName, depth - 1)); - } - for(CompletableFuture future : futureDeps){ - try { - deps.add(future.get()); - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } - } - - // TODO this doesn't seem clean - logger.fine("Completing callback DEPS for package %s (depth=%s)".formatted(packageName, depth)); - futurePackage.complete(new Package(name, version, repo, description, deps)); + return; } + // iterate for every package in the list + List> futureDeps = new ArrayList<>(); + for (Object depPackageNameObj : resultJson.getJSONArray("depends")) { + // convert object into String + String depPackageName = (String) depPackageNameObj; + // add package into Package List + futureDeps.add(getPackageTree(depPackageName, depth - 1)); + } + for(CompletableFuture future : futureDeps){ + try { + deps.add(future.get()); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + + // TODO this doesn't seem clean + logger.fine("Completing callback DEPS for package %s (depth=%s)".formatted(packageName, depth)); + futurePackage.complete(new Package(name, version, repo, description, deps)); }).exceptionally((e2->{ logger.warning("Error while fetching package %s (depth=%s) from the API : \n%s".formatted(packageName, depth, e2)); e2.printStackTrace(); From a8f6901cc766fb293fb4c4d49364a50b827ccaca Mon Sep 17 00:00:00 2001 From: Thomas Rubini <74205383+ThomasRubini@users.noreply.github.com> Date: Mon, 12 Dec 2022 22:46:21 +0100 Subject: [PATCH 2/2] do not get JSONArray results twice --- .../java/fr/packageviewer/distribution/ArchDistribution.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java index ea12519..492f535 100644 --- a/src/main/java/fr/packageviewer/distribution/ArchDistribution.java +++ b/src/main/java/fr/packageviewer/distribution/ArchDistribution.java @@ -109,7 +109,7 @@ public class ArchDistribution implements Distribution { futurePackage.complete(null); return; } - JSONObject resultJson = json.getJSONArray("results").getJSONObject(0); + JSONObject resultJson = resultsArrayJson.getJSONObject(0); // get infos except dependencies name = resultJson.getString("pkgname");