mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 09:45:39 +02:00
Patch for Victor Mozgin
Fix for PR 39476: Preference listeners for task tags do not work. Fix for PR 39477: Task tags options dialogs ask for project rebuilds.
This commit is contained in:
parent
91794dcff9
commit
4576601158
8 changed files with 132 additions and 11 deletions
|
@ -48,6 +48,7 @@ public interface IOpenable extends IBufferChangedListener{
|
||||||
* by updating the element's structure and properties as necessary.
|
* by updating the element's structure and properties as necessary.
|
||||||
*/
|
*/
|
||||||
void makeConsistent(IProgressMonitor progress) throws CModelException;
|
void makeConsistent(IProgressMonitor progress) throws CModelException;
|
||||||
|
void makeConsistent(IProgressMonitor progress, boolean forced) throws CModelException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens this element and all parent elements that are not already open.
|
* Opens this element and all parent elements that are not already open.
|
||||||
|
|
|
@ -216,7 +216,11 @@ public abstract class Openable extends Parent implements IOpenable, IBufferChang
|
||||||
* @see org.eclipse.cdt.core.model.IOpenable#makeConsistent(IProgressMonitor)
|
* @see org.eclipse.cdt.core.model.IOpenable#makeConsistent(IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
public void makeConsistent(IProgressMonitor pm) throws CModelException {
|
public void makeConsistent(IProgressMonitor pm) throws CModelException {
|
||||||
if (!isConsistent()) {
|
makeConsistent(pm, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void makeConsistent(IProgressMonitor pm, boolean forced) throws CModelException {
|
||||||
|
if (!isConsistent() || forced) {
|
||||||
buildStructure((OpenableInfo)getElementInfo(), pm);
|
buildStructure((OpenableInfo)getElementInfo(), pm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,7 +440,10 @@ public class TranslationUnit extends Openable implements ITranslationUnit {
|
||||||
* @see org.eclipse.cdt.core.model.IOpenable#makeConsistent(IProgressMonitor)
|
* @see org.eclipse.cdt.core.model.IOpenable#makeConsistent(IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
public void makeConsistent(IProgressMonitor pm) throws CModelException {
|
public void makeConsistent(IProgressMonitor pm) throws CModelException {
|
||||||
if (!isConsistent()) {
|
makeConsistent(pm, false);
|
||||||
|
}
|
||||||
|
public void makeConsistent(IProgressMonitor pm, boolean forced) throws CModelException {
|
||||||
|
if (!isConsistent() || forced) {
|
||||||
// create a new info and make it the current info
|
// create a new info and make it the current info
|
||||||
OpenableInfo info = (OpenableInfo) createElementInfo();
|
OpenableInfo info = (OpenableInfo) createElementInfo();
|
||||||
buildStructure(info, pm);
|
buildStructure(info, pm);
|
||||||
|
|
|
@ -4,6 +4,10 @@
|
||||||
the include and defined symbol information for a standard make project.
|
the include and defined symbol information for a standard make project.
|
||||||
* src/org/eclipse/cdt/ui/wizards/BuildPathInfoBlock.java
|
* src/org/eclipse/cdt/ui/wizards/BuildPathInfoBlock.java
|
||||||
|
|
||||||
|
2003-07-04 Victor Mozgin
|
||||||
|
Fix for PR 39476: Preference listeners for task tags do not work.
|
||||||
|
Fix for PR 39477: Task tags options dialogs ask for project rebuilds.
|
||||||
|
|
||||||
2003-06-27 Andrew Niefer
|
2003-06-27 Andrew Niefer
|
||||||
Changes for C/C++ Search:
|
Changes for C/C++ Search:
|
||||||
Added:
|
Added:
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
import org.eclipse.cdt.core.model.ISourceReference;
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
|
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.asm.AsmTextTools;
|
||||||
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
|
import org.eclipse.cdt.internal.ui.IContextMenuConstants;
|
||||||
import org.eclipse.cdt.internal.ui.text.CPairMatcher;
|
import org.eclipse.cdt.internal.ui.text.CPairMatcher;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
|
@ -836,6 +837,15 @@ public class CEditor extends TextEditor implements ISelectionChangedListener {
|
||||||
setKeyBindingScopes(new String [] { "org.eclipse.cdt.ui.cEditorScope" } );
|
setKeyBindingScopes(new String [] { "org.eclipse.cdt.ui.cEditorScope" } );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
|
||||||
|
*/
|
||||||
|
protected boolean affectsTextPresentation(PropertyChangeEvent event) {
|
||||||
|
CTextTools textTools = CUIPlugin.getDefault().getTextTools();
|
||||||
|
AsmTextTools asmTools = CUIPlugin.getDefault().getAsmTextTools();
|
||||||
|
return textTools.affectsBehavior(event) || asmTools.affectsBehavior(event);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles a property change event describing a change
|
* Handles a property change event describing a change
|
||||||
* of the C core's preferences and updates the preference
|
* of the C core's preferences and updates the preference
|
||||||
|
|
|
@ -17,6 +17,10 @@ import java.util.Map;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
import org.eclipse.core.resources.IncrementalProjectBuilder;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceProxy;
|
||||||
|
import org.eclipse.core.resources.IResourceProxyVisitor;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
|
@ -41,11 +45,17 @@ import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||||
import org.eclipse.jface.operation.IRunnableWithProgress;
|
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.ui.IEditorInput;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||||
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -314,26 +324,27 @@ public abstract class OptionsConfigurationBlock {
|
||||||
|
|
||||||
|
|
||||||
if (hasChanges) {
|
if (hasChanges) {
|
||||||
boolean doBuild= false;
|
boolean doReParse = false;
|
||||||
String[] strings= getFullBuildDialogStrings(fProject == null);
|
String[] strings = getFullReParseDialogStrings(fProject == null);
|
||||||
if (strings != null) {
|
if (strings != null) {
|
||||||
MessageDialog dialog = new MessageDialog(getShell(), strings[0], null, strings[1], MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 2);
|
MessageDialog dialog = new MessageDialog(getShell(), strings[0], null, strings[1], MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 2);
|
||||||
int res= dialog.open();
|
int res= dialog.open();
|
||||||
if (res == 0) {
|
if (res == 0) {
|
||||||
doBuild= true;
|
doReParse = true;
|
||||||
} else if (res != 1) {
|
} else if (res != 1) {
|
||||||
return false; // cancel pressed
|
return false; // cancel pressed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setOptions(actualOptions);
|
setOptions(actualOptions);
|
||||||
if (doBuild) {
|
if (doReParse) {
|
||||||
doFullBuild();
|
doFullReParse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract String[] getFullBuildDialogStrings(boolean workspaceSettings);
|
protected abstract String[] getFullBuildDialogStrings(boolean workspaceSettings);
|
||||||
|
protected abstract String[] getFullReParseDialogStrings(boolean workspaceSettings);
|
||||||
|
|
||||||
protected void doFullBuild() {
|
protected void doFullBuild() {
|
||||||
ProgressMonitorDialog dialog= new ProgressMonitorDialog(getShell());
|
ProgressMonitorDialog dialog= new ProgressMonitorDialog(getShell());
|
||||||
|
@ -365,6 +376,72 @@ public abstract class OptionsConfigurationBlock {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void doFullReParse() {
|
||||||
|
ProgressMonitorDialog dialog= new ProgressMonitorDialog(getShell());
|
||||||
|
try {
|
||||||
|
dialog.run(true, true, new IRunnableWithProgress() {
|
||||||
|
public void run(IProgressMonitor monitor) throws InvocationTargetException {
|
||||||
|
monitor.beginTask("", 1); //$NON-NLS-1$
|
||||||
|
|
||||||
|
if (fProject != null) {
|
||||||
|
monitor.setTaskName(PreferencesMessages.getFormattedString("OptionsConfigurationBlock.parseproject.taskname", fProject.getElementName())); //$NON-NLS-1$
|
||||||
|
reParseHierarchy(fProject.getResource(), monitor);
|
||||||
|
} else {
|
||||||
|
monitor.setTaskName(PreferencesMessages.getString("OptionsConfigurationBlock.parseall.taskname")); //$NON-NLS-1$
|
||||||
|
reParseHierarchy(CUIPlugin.getWorkspace().getRoot(), monitor);
|
||||||
|
}
|
||||||
|
|
||||||
|
monitor.done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// cancelled by user
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
String title= PreferencesMessages.getString("OptionsConfigurationBlock.parseerror.title"); //$NON-NLS-1$
|
||||||
|
String message= PreferencesMessages.getString("OptionsConfigurationBlock.parseerror.message"); //$NON-NLS-1$
|
||||||
|
ExceptionHandler.handle(e, getShell(), title, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void reParseHierarchy(IResource root, final IProgressMonitor monitor) {
|
||||||
|
try {
|
||||||
|
root.accept(
|
||||||
|
new IResourceProxyVisitor() {
|
||||||
|
public boolean visit(IResourceProxy proxy) {
|
||||||
|
switch(proxy.getType()) {
|
||||||
|
case IResource.FILE :
|
||||||
|
IFile file = (IFile)proxy.requestResource();
|
||||||
|
CoreModel cModel = CCorePlugin.getDefault().getCoreModel();
|
||||||
|
|
||||||
|
if (cModel.isTranslationUnit(file)) {
|
||||||
|
ITranslationUnit translationUnit = (ITranslationUnit)cModel.create(file);
|
||||||
|
|
||||||
|
try {
|
||||||
|
IEditorInput input = EditorUtility.getEditorInput(file);
|
||||||
|
if (input != null) {
|
||||||
|
ITranslationUnit workingCopy = CUIPlugin.getDefault().getWorkingCopyManager().getWorkingCopy(input);
|
||||||
|
if (workingCopy != null) {
|
||||||
|
// We have a copy in an editor - use it
|
||||||
|
translationUnit = workingCopy;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
translationUnit.makeConsistent(monitor, true /*forced*/);
|
||||||
|
} catch (CModelException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false; // Do not look into file's structure
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, IResource.NONE);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void performDefaults() {
|
public void performDefaults() {
|
||||||
fWorkingValues= getDefaultOptions();
|
fWorkingValues= getDefaultOptions();
|
||||||
updateControls();
|
updateControls();
|
||||||
|
|
|
@ -16,6 +16,13 @@ OptionsConfigurationBlock.buildall.taskname=Build all...
|
||||||
OptionsConfigurationBlock.buildproject.taskname=Build project ''{0}''...
|
OptionsConfigurationBlock.buildproject.taskname=Build project ''{0}''...
|
||||||
|
|
||||||
|
|
||||||
|
OptionsConfigurationBlock.parseerror.title=Preference Changes
|
||||||
|
OptionsConfigurationBlock.parseerror.message=Problem while parsing. Check log for details.
|
||||||
|
|
||||||
|
OptionsConfigurationBlock.parseall.taskname=Parse all...
|
||||||
|
OptionsConfigurationBlock.parseproject.taskname=Parse project ''{0}''...
|
||||||
|
|
||||||
|
|
||||||
TodoTaskPreferencePage.title=Task Tags
|
TodoTaskPreferencePage.title=Task Tags
|
||||||
|
|
||||||
TodoTaskPropertyPage.useworkspacesettings.label=Use &workspace settings
|
TodoTaskPropertyPage.useworkspacesettings.label=Use &workspace settings
|
||||||
|
@ -36,6 +43,10 @@ TodoTaskConfigurationBlock.needsbuild.title=Task Tags Settings Changed
|
||||||
TodoTaskConfigurationBlock.needsfullbuild.message=The task tags settings have changed. A full rebuild is required to make changes effective. Do the full build now?
|
TodoTaskConfigurationBlock.needsfullbuild.message=The task tags settings have changed. A full rebuild is required to make changes effective. Do the full build now?
|
||||||
TodoTaskConfigurationBlock.needsprojectbuild.message=The task tags settings have changed. A rebuild of the project is required to make changes effective. Do the project build now?
|
TodoTaskConfigurationBlock.needsprojectbuild.message=The task tags settings have changed. A rebuild of the project is required to make changes effective. Do the project build now?
|
||||||
|
|
||||||
|
TodoTaskConfigurationBlock.needsparse.title=Task Tags Settings Changed
|
||||||
|
TodoTaskConfigurationBlock.needsfullparse.message=The task tags settings have changed. A full re-parse is required to make changes effective. Do the full re-parse now?
|
||||||
|
TodoTaskConfigurationBlock.needsprojectparse.message=The task tags settings have changed. Re-parsing of the project is required to make changes effective. Do the project re-parse now?
|
||||||
|
|
||||||
TodoTaskInputDialog.new.title=New Task Tag
|
TodoTaskInputDialog.new.title=New Task Tag
|
||||||
TodoTaskInputDialog.edit.title=Edit Task Tag
|
TodoTaskInputDialog.edit.title=Edit Task Tag
|
||||||
TodoTaskInputDialog.name.label=T&ag:
|
TodoTaskInputDialog.name.label=T&ag:
|
||||||
|
|
|
@ -237,6 +237,17 @@ public class TodoTaskConfigurationBlock extends OptionsConfigurationBlock {
|
||||||
return new String[] { title, message };
|
return new String[] { title, message };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String[] getFullReParseDialogStrings(boolean workspaceSettings) {
|
||||||
|
String title= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsparse.title"); //$NON-NLS-1$
|
||||||
|
String message;
|
||||||
|
if (fProject == null) {
|
||||||
|
message= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsfullparse.message"); //$NON-NLS-1$
|
||||||
|
} else {
|
||||||
|
message= PreferencesMessages.getString("TodoTaskConfigurationBlock.needsprojectparse.message"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
return new String[] { title, message };
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
|
* @see org.eclipse.cdt.internal.ui.preferences.OptionsConfigurationBlock#updateControls()
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue