From e3e2d54b828dbf0c3aa3755e3264280b88d4eec2 Mon Sep 17 00:00:00 2001 From: Chris Wiebe Date: Wed, 22 Sep 2004 20:38:30 +0000 Subject: [PATCH] 2004-09-22 Chris Wiebe add lock for safety * src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java * src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties --- core/org.eclipse.cdt.ui/ChangeLog | 6 +++ .../wizards/AbstractWizardDropDownAction.java | 52 ++++++++++--------- .../NewFileWizardMessages.properties | 8 ++- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index a0aff9d71be..23c5a546ebb 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,9 @@ +2004-09-22 Chris Wiebe + + add lock for safety + * src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java + * src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties + 2004-09-22 Chris Wiebe new file wizards diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java index e3f2c3c12c7..a5c7aae2ec7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/AbstractWizardDropDownAction.java @@ -29,6 +29,7 @@ public abstract class AbstractWizardDropDownAction extends Action implements IMe private Menu fMenu; private IAction[] fActions; private IRegistryChangeListener fListener; + private Object fLock = new Object(); public AbstractWizardDropDownAction() { fMenu= null; @@ -46,11 +47,14 @@ public abstract class AbstractWizardDropDownAction extends Action implements IMe public void refreshActions() { // force menu and actions to be created again - fActions = null; - if (fMenu != null) { - fMenu.dispose(); - fMenu = null; + Menu oldMenu = null; + synchronized(fLock) { + oldMenu = fMenu; + fActions = null; + fMenu = null; } + if (oldMenu != null) + oldMenu.dispose(); } public void dispose() { @@ -58,11 +62,7 @@ public abstract class AbstractWizardDropDownAction extends Action implements IMe Platform.getExtensionRegistry().removeRegistryChangeListener(fListener); fListener= null; } - if (fMenu != null) { - fMenu.dispose(); - fMenu= null; - } - fActions= null; + refreshActions(); } public Menu getMenu(Menu parent) { @@ -70,15 +70,17 @@ public abstract class AbstractWizardDropDownAction extends Action implements IMe } public Menu getMenu(Control parent) { - if (fMenu == null) { - fMenu= new Menu(parent); - IAction[] actions= getActions(); - for (int i= 0; i < actions.length; i++) { - ActionContributionItem item= new ActionContributionItem(actions[i]); - item.fill(fMenu, -1); + synchronized(fLock) { + if (fMenu == null) { + fMenu= new Menu(parent); + IAction[] actions= getActions(); + for (int i= 0; i < actions.length; i++) { + ActionContributionItem item= new ActionContributionItem(actions[i]); + item.fill(fMenu, -1); + } } + return fMenu; } - return fMenu; } public void run() { @@ -106,14 +108,16 @@ public abstract class AbstractWizardDropDownAction extends Action implements IMe } private IAction[] getActions() { - if (fActions == null) { - fActions = getWizardActions(); - if (fActions == null) - fActions = NO_ACTIONS; - - //TODO provide a way to sort the actions - } - return fActions; + synchronized(fLock) { + if (fActions == null) { + fActions = getWizardActions(); + if (fActions == null) + fActions = NO_ACTIONS; + + //TODO provide a way to sort the actions + } + return fActions; + } } protected abstract IAction[] getWizardActions(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties index 45d6d501a6b..a4f01be46ae 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/filewizard/NewFileWizardMessages.properties @@ -25,13 +25,9 @@ AbstractFileCreationWizardPage.error.EnterSourceFolderName=Source folder name is AbstractFileCreationWizardPage.error.NotAFolder=''{0}'' is not a project or folder. AbstractFileCreationWizardPage.error.NotASourceFolder=Folder ''{0}'' is not a source folder. AbstractFileCreationWizardPage.error.ProjectClosed=Project ''{0}'' must be accessible. -NewHeaderFileCreationWizardPagewarning.NotACProject=Folder is not a C/C++ project. +AbstractFileCreationWizardPagewarning.NotACProject=Folder is not a C/C++ project. AbstractFileCreationWizardPage.warning.NotInACProject=Folder is not in a C/C++ project. -AbstractFileCreationWizardPage.error.NotAFile=''{0}'' is not a file. -AbstractFileCreationWizardPage.error.FolderDoesNotExist=Folder ''{0}'' does not exist. -AbstractFileCreationWizardPage.error.SourceFolderRequired=The source folder is required. - # ------- NewHeaderFileCreationWizard ------- NewHeaderFileCreationWizard.title= New Header File @@ -47,6 +43,7 @@ NewHeaderFileCreationWizardPage.error.FileNotInSourceFolder=File must be inside NewHeaderFileCreationWizardPage.error.FileExists=File already exists. NewHeaderFileCreationWizardPage.error.MatchingFolderExists=A folder with the same name already exists. NewHeaderFileCreationWizardPage.error.MatchingResourceExists=A resource with the same name already exists. +NewHeaderFileCreationWizardPage.error.FolderDoesNotExist=Folder ''{0}'' does not exist. NewHeaderFileCreationWizardPage.warning.FileNameDiscouraged=File name is discouraged. {0}. NewHeaderFileCreationWizardPage.error.InvalidFileName=File name is not valid. {0}. @@ -59,6 +56,7 @@ NewSourceFileCreationWizardPage.error.FileNotInSourceFolder=File must be inside NewSourceFileCreationWizardPage.error.FileExists=File already exists. NewSourceFileCreationWizardPage.error.MatchingFolderExists=A folder with the same name already exists. NewSourceFileCreationWizardPage.error.MatchingResourceExists=A resource with the same name already exists. +NewSourceFileCreationWizardPage.error.FolderDoesNotExist=Folder ''{0}'' does not exist. NewSourceFileCreationWizardPage.warning.FileNameDiscouraged=File name is discouraged. {0}. NewSourceFileCreationWizardPage.error.InvalidFileName=File name is not valid. {0}.