This is an automated email from the ASF dual-hosted git repository. sdedic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push: new 9114b1069e Avoid ConcurrentMod exception, tolerate broken project dependencies (#5660) 9114b1069e is described below commit 9114b1069e0e0cf7cdf188ba368d0e68a3ba5511 Author: Svatopluk Dedic <svatopluk.de...@oracle.com> AuthorDate: Tue Mar 21 12:22:45 2023 +0100 Avoid ConcurrentMod exception, tolerate broken project dependencies (#5660) * Prevent NPE on broken dependencies with no artifacts. * Make copy of task list before iterating - task map can mutate. --- .../modules/cloud/oracle/adm/VulnerabilityWorker.java | 15 ++++++++++++--- .../modules/gradle/tooling/NbProjectInfoBuilder.java | 6 ++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java index dea435f0a1..8546d792f0 100644 --- a/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java +++ b/enterprise/cloud.oracle/src/org/netbeans/modules/cloud/oracle/adm/VulnerabilityWorker.java @@ -168,7 +168,7 @@ public class VulnerabilityWorker implements ErrorProvider{ private void buildDependecyMap(Dependency dependency, Map<String, Dependency> result) { String gav = createGAV(dependency.getArtifact()); - if (result.putIfAbsent(gav, dependency) == null) { + if (gav != null && result.putIfAbsent(gav, dependency) == null) { dependency.getChildren().forEach((childDependency) -> { buildDependecyMap(childDependency, result); }); @@ -557,6 +557,9 @@ public class VulnerabilityWorker implements ErrorProvider{ private int convert(Dependency dependency, Map<String, Integer> gavIndex, List<ApplicationDependency> result) { String gav = createGAV(dependency.getArtifact()); + if (gav == null) { + return -1; + } Integer n = gavIndex.get(gav); if (n != null) { return n; @@ -569,7 +572,9 @@ public class VulnerabilityWorker implements ErrorProvider{ List<String> childrenNodeIds = new ArrayList<>(dependency.getChildren().size()); for (Dependency childDependency : dependency.getChildren()) { int cid = convert(childDependency, gavIndex, result); - childrenNodeIds.add(Integer.toString(cid)); + if (cid != -1) { + childrenNodeIds.add(Integer.toString(cid)); + } } builder.applicationDependencyNodeIds(childrenNodeIds); result.add(builder.build()); @@ -577,7 +582,11 @@ public class VulnerabilityWorker implements ErrorProvider{ } private static String createGAV(ArtifactSpec artifact) { - StringBuffer sb = new StringBuffer(); + if (artifact == null) { + return null; + } + // use a random constant that could be sufficient to hold gav text (micronaut-core has max 86) + StringBuilder sb = new StringBuilder(120); sb.append(artifact.getGroupId()).append(':'); sb.append(artifact.getArtifactId()).append(':'); sb.append(artifact.getVersionSpec()); diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java index ae319060ae..193f4a3cee 100644 --- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java +++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java @@ -290,7 +290,8 @@ class NbProjectInfoBuilder { Map<String, Object> taskProperties = new HashMap<>(); Map<String, String> taskPropertyTypes = new HashMap<>(); - for (Task task : project.getTasks().getAsMap().values()) { + // make a copy of the task map; may mutate. + for (Task task : new ArrayList<>(project.getTasks().getAsMap().values())) { Class taskClass = task.getClass(); Class nonDecorated = findNonDecoratedClass(taskClass); @@ -305,7 +306,8 @@ class NbProjectInfoBuilder { private void detectTaskDependencies(NbProjectInfoModel model) { Map<String, Object> tasks = new HashMap<>(); - for (Task task : project.getTasks().getAsMap().values()) { + // make a copy of the task map; may mutate. + for (Task task : new ArrayList<>(project.getTasks().getAsMap().values())) { Map<String, String> taskInfo = new HashMap<>(); taskInfo.put("name", task.getPath()); // NOI18N taskInfo.put("enabled", Boolean.toString(task.getEnabled())); // NOI18N --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists