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 4959d2302c Sync fixes: currentP can be seen as null by workers.
new 56c678f951 Merge pull request #3950 from sdedic/gradle/taskpanel_sync
4959d2302c is described below
commit 4959d2302c92fc6ceb12a7574167ca99e9e86546
Author: Svata Dedic <[email protected]>
AuthorDate: Sat Apr 9 19:45:14 2022 +0200
Sync fixes: currentP can be seen as null by workers.
---
.../gradle/execute/navigator/TasksPanel.java | 144 +++++++++++----------
1 file changed, 76 insertions(+), 68 deletions(-)
diff --git
a/extide/gradle/src/org/netbeans/modules/gradle/execute/navigator/TasksPanel.java
b/extide/gradle/src/org/netbeans/modules/gradle/execute/navigator/TasksPanel.java
index b2fbe31ae7..63eade1057 100644
---
a/extide/gradle/src/org/netbeans/modules/gradle/execute/navigator/TasksPanel.java
+++
b/extide/gradle/src/org/netbeans/modules/gradle/execute/navigator/TasksPanel.java
@@ -61,7 +61,7 @@ import org.openide.util.lookup.Lookups;
*
* @author Laszlo Kishalmi
*/
-public class TasksPanel extends javax.swing.JPanel implements
ExplorerManager.Provider, Runnable {
+public class TasksPanel extends javax.swing.JPanel implements
ExplorerManager.Provider {
@StaticResource
private static final String GRADLE_ICON =
"org/netbeans/modules/gradle/resources/gradle.png"; //NOI18
@@ -72,7 +72,7 @@ public class TasksPanel extends javax.swing.JPanel implements
ExplorerManager.Pr
private Project currentP;
private final PropertyChangeListener pchadapter = (PropertyChangeEvent
evt) -> {
if (NbGradleProject.PROP_PROJECT_INFO.equals(evt.getPropertyName())) {
- RequestProcessor.getDefault().post(TasksPanel.this);
+ RequestProcessor.getDefault().post(() -> update(currentP));
}
};
@@ -98,9 +98,6 @@ public class TasksPanel extends javax.swing.JPanel implements
ExplorerManager.Pr
}
void navigate(DataObject d) {
- if (current != null) {
- current.removePropertyChangeListener(pchadapter);
- }
NbGradleProject n = null;
FileObject f = d.getPrimaryFile();
@@ -117,75 +114,83 @@ public class TasksPanel extends javax.swing.JPanel
implements ExplorerManager.Pr
//Ignore we can't really do anything about this.
}
- if (n == null) {
- release();
- return;
+ synchronized (this) {
+ if (current != null) {
+ current.removePropertyChangeListener(pchadapter);
+ }
+ if (n == null) {
+ release();
+ return;
+ }
+ current = n;
+ currentP = p;
+ current.addPropertyChangeListener(pchadapter);
}
-
- current = n;
- currentP = p;
- current.addPropertyChangeListener(pchadapter);
- RequestProcessor.getDefault().post(this);
+ RequestProcessor.getDefault().post(() -> update(currentP));
}
- @Override
- public void run() {
- if (currentP != null) {
-
- GradleBaseProject prj = GradleBaseProject.get(currentP);
- if (prj != null) {
- final Children taskGroups = new Children.Array();
- ArrayList<String> glist = new ArrayList<>(prj.getTaskGroups());
- glist.remove(GradleBaseProject.PRIVATE_TASK_GROUP);
- Collections.sort(glist, String.CASE_INSENSITIVE_ORDER);
-
- for (String group : glist) {
- taskGroups.add(new Node[]{new TaskGroupNode(group, prj)});
- }
- taskGroups.add(new Node[]{new
TaskGroupNode(GradleBaseProject.PRIVATE_TASK_GROUP, prj)});
-
- AbstractNode tasksNode = new AbstractNode(taskGroups,
Lookups.singleton(currentP)) {
- @Override
- public Action[] getActions(boolean context) {
- return new Action[0];
- }
-
- };
- tasksNode.setName("tasks"); //NOI18N
-
tasksNode.setDisplayName(Bundle.LBL_Tasks(ProjectUtils.getInformation(currentP).getDisplayName()));
- tasksNode.setIconBaseWithExtension(GRADLE_ICON);
-
- AbstractNode favoritesNode = new AbstractNode(new
FavoritesChildren()) {
- @Override
- public Action[] getActions(boolean context) {
- return new Action[0];
- }
-
- };
- favoritesNode.setName("favorites"); //NOI18N
- favoritesNode.setDisplayName(Bundle.LBL_Favorites());
- favoritesNode.setIconBaseWithExtension(GRADLE_ICON);
-
- final Children rootKids = new Children.Array();
- rootKids.add(new Node[]{favoritesNode, tasksNode});
- SwingUtilities.invokeLater(() -> {
- treeView.setScrollsOnExpand(false);
- treeView.setRootVisible(false);
- manager.setRootContext(new AbstractNode(rootKids));
- treeView.expandAll();
- treeView.setScrollsOnExpand(true);
- });
+ public void update(Project updateP) {
+ synchronized (this) {
+ if (updateP != this.currentP) {
+ return;
+ }
+ if (updateP == null) {
return;
}
+ }
+ GradleBaseProject prj = GradleBaseProject.get(updateP);
+ if (prj != null) {
+ final Children taskGroups = new Children.Array();
+ ArrayList<String> glist = new ArrayList<>(prj.getTaskGroups());
+ glist.remove(GradleBaseProject.PRIVATE_TASK_GROUP);
+ Collections.sort(glist, String.CASE_INSENSITIVE_ORDER);
+
+ for (String group : glist) {
+ taskGroups.add(new Node[]{new TaskGroupNode(group, prj,
updateP)});
+ }
+ taskGroups.add(new Node[]{new
TaskGroupNode(GradleBaseProject.PRIVATE_TASK_GROUP, prj, updateP)});
+
+ AbstractNode tasksNode = new AbstractNode(taskGroups,
Lookups.singleton(updateP)) {
+ @Override
+ public Action[] getActions(boolean context) {
+ return new Action[0];
+ }
+
+ };
+ tasksNode.setName("tasks"); //NOI18N
+
tasksNode.setDisplayName(Bundle.LBL_Tasks(ProjectUtils.getInformation(updateP).getDisplayName()));
+ tasksNode.setIconBaseWithExtension(GRADLE_ICON);
+
+ AbstractNode favoritesNode = new AbstractNode(new
FavoritesChildren()) {
+ @Override
+ public Action[] getActions(boolean context) {
+ return new Action[0];
+ }
+ };
+ favoritesNode.setName("favorites"); //NOI18N
+ favoritesNode.setDisplayName(Bundle.LBL_Favorites());
+ favoritesNode.setIconBaseWithExtension(GRADLE_ICON);
+
+ final Children rootKids = new Children.Array();
+ rootKids.add(new Node[]{favoritesNode, tasksNode});
+ SwingUtilities.invokeLater(() -> {
+ treeView.setScrollsOnExpand(false);
+ treeView.setRootVisible(false);
+ manager.setRootContext(new AbstractNode(rootKids));
+ treeView.expandAll();
+ treeView.setScrollsOnExpand(true);
+ });
+ return;
}
+
SwingUtilities.invokeLater(() -> {
treeView.setRootVisible(false);
manager.setRootContext(createEmptyNode());
});
}
- void release() {
+ synchronized void release() {
if (current != null) {
current.removePropertyChangeListener(pchadapter);
}
@@ -202,13 +207,13 @@ public class TasksPanel extends javax.swing.JPanel
implements ExplorerManager.Pr
}
private class TaskGroupNode extends AbstractNode {
-
+
@Messages({
"LBL_PrivateTasks=Other Tasks"
})
@SuppressWarnings("OverridableMethodCallInConstructor")
- public TaskGroupNode(String group, GradleBaseProject project) {
- super(new TaskGroupChildren(group, project), Lookup.EMPTY);
+ public TaskGroupNode(String group, GradleBaseProject project, Project
genericProject) {
+ super(new TaskGroupChildren(group, project, genericProject),
Lookup.EMPTY);
setName(group);
String displayName =
GradleBaseProject.PRIVATE_TASK_GROUP.equals(group)
? LBL_PrivateTasks()
@@ -238,12 +243,15 @@ public class TasksPanel extends javax.swing.JPanel
implements ExplorerManager.Pr
}
private FavoriteTaskManager getFavoriteTaskManager() {
- return currentP != null ?
currentP.getLookup().lookup(FavoriteTaskManager.class) : null;
+ Project p = currentP;
+ return p != null ? p.getLookup().lookup(FavoriteTaskManager.class) :
null;
}
private class TaskGroupChildren extends Children.Keys<GradleTask> {
-
- public TaskGroupChildren(String group, GradleBaseProject project) {
+ final Project genericProject;
+
+ public TaskGroupChildren(String group, GradleBaseProject project,
Project genericProject) {
+ this.genericProject = genericProject;
ArrayList<GradleTask> keys = new
ArrayList<>(project.getTasks(group));
Collections.sort(keys, Comparator.comparing(GradleTask::getName,
String.CASE_INSENSITIVE_ORDER));
setKeys(keys);
@@ -251,7 +259,7 @@ public class TasksPanel extends javax.swing.JPanel
implements ExplorerManager.Pr
@Override
protected Node[] createNodes(GradleTask key) {
- return new Node[] {new TaskNode(currentP, key)};
+ return new Node[] {new TaskNode(genericProject, key)};
}
}
---------------------------------------------------------------------
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