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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists